Я нашел несколько странных записей в журналах ELB, которые не могу объяснить. Все они выглядят так (в формате JSON):
{
"backend": "-",
"backend_processing_time": "-1",
"backend_status_code": 0,
"client_ip": "XXX.XXX.XXX.XXX",
"client_port": "52084",
"elb": "ELB1-PROD",
"elb_status_code": 504,
"http_method": "POST",
"http_version": "HTTP/1.1",
"received_bytes": 16051,
"request_processing_time": "-1",
"request_uri": "https://example.com:443/example/",
"response_processing_time": "-1",
"sent_bytes": 0,
"ssl_cipher": "ECDHE-RSA-AES128-GCM-SHA256",
"ssl_protocol": "TLSv1.2",
"timestamp": "2015-10-29T04:41:47.251500Z",
"user_agent": "client/4.0"
}
например "backend_processing_time": "-1"
или "backend_status_code": 0
кажутся действительно странными.
Есть идеи, что это могло значить? Я подозревал, что внутренние серверы были перегружены, но мы не испытали более высокой нагрузки, чем обычно, когда произошли эти ошибки, и все ошибки были вызваны одним и тем же IP-адресом клиента.
Когда ELB возвращает таймаут шлюза 504, это указывает на то, что балансировщик нагрузки закрыл соединение, потому что запрос не был завершен в течение периода тайм-аута простоя (согласно документам).
Таким образом, ELB не получил ответа в пределах лимита времени простоя, в результате чего соединение было прервано и клиенту был возвращен ответ 504. Зная, что внутренний запрос никогда не завершался, на самом деле имеет смысл backend_status_code
является 0
и что backend_processing_time
является -1
. ELB не может ответить на то, чего не знает!