TargetConnectionErrorCount metrics của AWS load balancer là sao?

Trong thực tế khi vận hành hệ thống trên AWS, bạn sẽ phải làm việc với nhiều metrics, TargetConnectionErrorCount là một trong số đó. Bài viết này sẽ giúp bạn giải thích ý nghĩa của metrics này, phân tích một số nguyên nhân thường gặp gây ra lỗi, cũng như cách để tìm ra nguyên nhân gây lỗi.

Nguyên nhân

TargetConnectionErrorCount được định nghĩa là số các kết nối không được thiết lập thành công giữa load balancer và các targets.

Một số nguyên nhân phổ biến dẫn đến tình trạng này:

  • ALB không thể thiết lập 1 kết nối TCP tới target

  • RST từ Target trong khi TCP 3-Way Handshake

  • Configure sai Network ACL ở subnet của target

  • Không có app nào đang lắng nghe ở destination port của target

  • OS firewall của target chặn kết nối tới destination port

  • Target không được register đúng cách (vd: terminated instances, IP address is no longer valid)

  • Target quá tải, từ chối kết nối

ALB báo TargetConnectionErrorCount alarm thì làm gì?

1. Hỏi các bên liên quan

  • Team infra có động vào không?

  • Team app có động vào không?

  • AWS có lỗi thời gian đó không

Sau khi chắc chắn 3 thứ trên bình thường thì tiếp tục kiểm tra.

2. Các giả thiết

Tham khảo:

CLB/ALB の障害調査依頼を受けた時に確認していること (https://dev.classmethod.jp/articles/elb-trouble-shooting/)

AWS ELB Backend Errors (https://www.bluematador.com/docs/troubleshooting/elb-backend-errors)

Thì thấy có 2 nguyên nhân phổ biến dẫn đến lỗi này:

  1. The primary cause for connection errors is that the instance is overloaded and rejecting new connections. If the increased connection errors coincides with an increase in the request rate, then this is the likely culprit. → Check xem network in với instance, Check request count tới ALB, Check tiếp xem thời điểm đó có thằng nào fail healthcheck

  2. Another common cause for connection errors is that traffic is being routed to a port specified in the load balancer’s listener that an instance is not listening to. This can happen if the process listening on the expected port dies unexpectedly, or if a firewall or security group is not allowing access on the port. If the health check port is different than the listener port, it is possible for this to occur even when the health checks succeed. → Kiểm tra các configure xem đúng chưa, health check đã setting đúng chưa?

3. Bắt đầu kiểm tra

  • RequestCount tới ALB tương quan với thời điểm xảy ra lỗi → Lên AWS CloudWatch để graph metrics!

  • NetworkIn của các instance web (là target của alb) tương quan với thời điểm xảy ra lỗi → Lên AWS CloudWatch để graph metrics!

  • StatusCheckFail của các instance tương quan với thời điểm xảy ra lỗi → Lên AWS CloudWatch để graph metrics!

  • Kiểm tra CPUUtilization của các instance web (là target của alb) tương quan với thời điểm xảy ra lỗi→ Lên AWS CloudWatch để graph metrics!

  • Kiểm tra xem trong số các target gắn vào có bị stop/start hoặc reboot không → Vào CloudTrail kiểm tra xem có event nào với Event name là RebootInstance(s), StopInstance(s), StartInstance(s) không

  • Check log ALB xem có vấn đề gì không (thử grep các HTTP 5xx) trước, trong, và sau thời điểm lỗi

  • Kiểm tra lại code define alarm, xem configure ra sao, threshold,.. đã chuẩn chưa → vào thư mục code terraform và tìm file define alarm.

  • Kiểm tra các configure về health check, firewall,… xem có bất thường gì không? (chú ý xem healthcheck path của app với alb, health check port có đúng chưa?)

  • Kiểm tra log app xem có gì bất thường không, log tới static file có bị 500 hay error gì không?

4. Phán đoán lỗi

Kiểm tra, đối chiếu những bất thường nếu có tìm được ở bước 3, so sánh với giả thiết bên trên xem sao.

Nếu network in cao, CPU cao thì khả năng cao là do instance quá tải, từ chối connect dẫn đến lỗi này.

Một số câu hỏi thường gặp

  1. Target group fail thì có xuất hiện metrics này không?

-> A target failing health checks will generate TargetConnectionErrorCount, HTTPCode_ELB_5XX_Count and UnhealthyHostCount.

Tài liệu tham khảo

[1] Troubleshoot your Application Load Balancershttps://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-troubleshooting.
[2] CloudWatch metrics for your Application Load Balancerhttps://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-cloudwatch-metrics.html