Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

408 timeouts on my Amazon ELB

We are seeing a lot of 408 timeouts on our ELB access logs. Have come across this thread https://serverfault.com/questions/485063/getting-408-errors-on-our-logs-with-no-request-or-user-agent

and also https://forums.aws.amazon.com/thread.jspa?messageID=307846

These are just two sample threads I found but others suggest the same solutions with no joy.

Have set web server timeout to be < ELB idle timeout, to be = to it and to be > than it, same result, our logs are polluted with these 408s. A bigger problem though it that they also throw off the average latency response time of our ELB which is what we trigger our auto scaler with.

We use Tomcat on our back end instances. No logs appear on tomcat to indicate a request was recieved but the ELB still shows as if requests had timed out. On our ELB access logs there is no back end IP given for the 408s so in my opinon the requests never got to an instance at all but Amazon disagree :(. Any one had this problem and got a reliable solution for it?

like image 467
MayoMan Avatar asked Nov 10 '22 19:11

MayoMan


1 Answers

Following the suggestion of milsonspt in the linked thread, I added a virtual host to my server that monitors a different thread instead of 80 so all health checks will be executed on that host (replace CUSTOM_PORT with any port you want to be used for ELB health check).

Listen CUSTOM_PORT

<VirtualHost *:CUSTOM_PORT>
    CustomLog "|/usr/sbin/rotatelogs /var/log/httpd/access_log_elb_health_check_rotated_%Y-%m-%d-%H_%M_%S 10M" combined
</VirtualHost>   

Make sure that the ELB does NOT have a listener on that port.

That configuration removed the 408 errors and logs all health check in a separate log so you get an uncluttered log for your regular access log, and a dedicated log for health check.

like image 169
Muzikant Avatar answered Nov 14 '22 22:11

Muzikant