【发布时间】:2020-09-01 18:24:47
【问题描述】:
我正在使用 EKS 部署服务,入口运行在 alb-ingress-controller 之上。
总而言之,我有大约 10 个单个 pod 的副本,其中有一个 NodePort 类型的服务将流量转发给它们。副本在 10 个节点上运行,使用 eksctl 建立,分布在 3 个可用区。
我看到的问题很奇怪 - 在集群内部,所有日志都显示请求在不到 1 秒的时间内得到处理,大部分时间约为 20-50 毫秒。我知道这一点是因为我使用 linkerd 来显示请求延迟的百分位数,以及应用程序日志本身。但是,ALB 日志/监控讲述了一个非常不同的故事。我看到一个相对较高的请求延迟(通常接近 20 秒或更长),并且通常还从 ELB 返回 504 错误(有时每 5 分钟 2-3 个)。
在尝试读取 ALB 的访问日志时,我注意到 504 行如下所示:
https 2019-12-10T14:56:54.514487Z app/1d061b91-XXXXX-3e15/19297d73543adb87 52.207.101.56:41266 192.168.32.189:30246 0.000 -1 -1 504 - 747 308 "GET XXXXXXXX" "-" ECDHE-RSA-AES128-GCM-SHA256 TLSv1.2 arn:aws:elasticloadbalancing:eu-west-1:750977848747:targetgroup/1d061b91-358e2837024de757a3d/e59bbbdb58407de3 "Root=1-5defb1fa-cbcdd248dd043b5bf1221ad8" "XXXX" "XXXX" 1 2019-12-10T14:55:54.514000Z "forward" "-" "-" "192.168.32.189:30246" "-"
其中请求处理时间为0,目标处理时间为-1,表示请求从未到达后端,立即返回响应。
我尝试使用后端 HTTP keepalive 超时(当前为 75 秒)和 ALB 空闲时间(当前为 60 秒),但这种行为似乎没有太大变化。
如果有人能指出如何继续和调查此问题,或者原因可能是什么,我将不胜感激。
【问题讨论】:
-
“立即返回响应。” 再次检查。两个时间戳之间有约 1 分钟的延迟。
-
你是对的。有一分钟的差异 - 抱歉我错过了。但是,这似乎对应于 ALB 的空闲超时。无论我设置多高 - 那些间歇性的 504 都遵循相同的超时。当我将空闲时间设置为 5 分钟时,访问日志中的差异变为 5 分钟......所以看起来 ALB 无论经过多少时间都没有达到目标......
标签: amazon-web-services amazon-elb amazon-eks