Имеется ALB, на который постоянно срабатывает Alertmanager с ошибкой 502:
В CloudWatch видно, что ошибка возникает спорадически, и только один раз:
При этом в логах NGINX никаких ошибок нет
Первым делом – включаем логи ALB:
Не то что бы они чем-то реально помогли – но по крайне мере теперь можно увидеть ошибку “вживую” :
52.***.***.142 – – [07/Aug/2018:11:18:21 +0300] “GET /site/login HTTP/1.1” 301 178 “-” “Go-http-client/1.1”
52.***.***.142 – – [07/Aug/2018:11:18:21 +0300] “GET /site/login HTTP/1.1” 200 1120 “http://admin.domain.com/site/login” “Go-http-client/1.1”
52.***.***.142 – – [07/Aug/2018:11:18:36 +0300] “GET / HTTP/1.1” 302 5 “-” “Go-http-client/1.1”
52.***.***.142 – – [07/Aug/2018:11:18:36 +0300] “GET /site/login HTTP/1.1” 301 178 “-” “Go-http-client/1.1”
52.***.***.142 – – [07/Aug/2018:11:18:36 +0300] “GET /site/login HTTP/1.1” 200 1124 “http://admin.domain.com/site/login” “Go-http-client/1.1”
52.***.***.142 – – [07/Aug/2018:11:18:51 +0300] “GET / HTTP/1.1” 302 5 “-” “Go-http-client/1.1”
52.***.***.142 – – [07/Aug/2018:11:18:51 +0300] “GET /site/login HTTP/1.1” 301 178 “-” “Go-http-client/1.1”
Потом нагугливаем документацию по траблшутингу ALB, и там находим упоминание о KeepAlive
:
The target closed the connection with a TCP RST or a TCP FIN while the load balancer had an outstanding request to the target. Check whether the keep-alive duration of the target is shorter than the idle timeout value of the load balancer.
Значение по умолчанию на ALB – 50 секунд, как видно на скрипшоте выше, а у NGINX (см. документацию):
Default: |
keepalive_timeout 75s; |
---|
Добавим keep_alive
в NGINX со значением в 30 секунд – для нашего приложения этого будет достаточно:
server { charset utf-8; listen 80; server_name admin.domain.com; if ($http_x_forwarded_proto = 'http') { return 301 https://admin.domain.com$request_uri; } set $root_path /data/projects/domain/backend/web; root $root_path; index index.php; error_log /var/log/nginx/admin.domain.com-error.log; access_log /var/log/nginx/admin.domain.com-access.log; keepalive_timeout 30; ...
И ждём результата.
P.S. Таки да – ошибка пропала.