我有一个带有单个目标组的 ALB(这是一个 istio-ingress 网关),我想捕获路由到该目标组的任何请求都返回 5XX 代码的场景。
根据文档:
HTTPCode_ELB_5XX_Count:
源自负载均衡器的 HTTP 5XX 服务器错误代码的数量。此计数不包括目标生成的任何响应代码。
HTTPCode_Target_5XX_Count:
目标生成的 HTTP 响应代码的数量。这不包括负载均衡器生成的任何响应代码。
我认为,既然这是一个单一的目标组,它们应该是相同的,但显然它们不是,因为在特定的时间范围内,我看到了一些 HTTP 4XX 的数据,但没有看到 ELB 4XX 的数据。有什么区别?我应该使用哪一个?
我认为图表有助于解释差异。用户向您的后端发送请求后,您的后端将执行以下操作将响应发送回用户:
Targets (e.g. EC2) -(1)-> ALB -(2)-> user
HTTPCode_Target_5XX_Count
测量仅由目标生成的 5XX 响应的数量
HTTPCode_ELB_5XX_Count
测量 5XX 响应的数量仅源自负载均衡器
HTTPCode_ELB_5XX_Count
不包括目标生成的任何响应代码,并且
HTTPCode_Target_5XX_Count
不包括源自负载均衡器的响应代码。 [来源]
注意:由于 ALB 将错误转发给客户端,因此 Target_5XX
始终包含在
ELB_5XX
中。您可以在
ELB_5XX
(不是
Target_5XX
此处)找到更多详细信息。感谢 Omar Kacimi 的更正!
https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-cloudwatch-metrics.html。这些指标是相互排斥的。即 HTTPCode_ELB_4XX_Count 是来自负载均衡器的仅 4xx 响应代码的计数,而不是目标的计数,例如在负载均衡器也不知道将请求转发到哪里的情况下。同样,HTTPCode_Target_4XX_Count 仅表示来自目标组而不是负载均衡器的 4xx 响应的计数。
第一个选项 (
HTTPCode_ELB_5XX_Count
) 返回当您触摸 ELB 本身时产生的错误。当由于某种原因无法将您的流量重定向到目标组时。我相信这意味着 AWS 问题或配置问题。在第二种情况下,它会从目标组中的服务返回错误。
我相信这两部作品都值得一看。但我想你会更关心第二种5xx错误。