我们在 ECS 中运行了许多服务。它们都设置为至少运行两个实例。对于某些服务,我注意到其中一个实例会不定期地被取消注册。日志中没有错误,健康检查也从未失败。所以我想知道为什么 ECS 决定取消注册一个看似运行良好的 ECS 任务实例?有没有办法找出原因?
这将使我们更容易决定需要做什么来稳定它。
答案1
有几种方法可以调试这个问题:
- 显然,日志有助于发现实例不健康的原因。如果您使用带有健康检查的 ELB,则需要检查访问日志以查看健康检查端点是否返回了错误响应。您说您在日志中没有看到任何内容,但我想我会向将来看到此答案的任何人提及这一点,以防它对他们的情况有所帮助。
- 检查服务页面上的“事件”选项卡实例已死亡 - 当任务注册或注销时,ECS 会将该事件记录到事件列表中。但是,您需要确保在事件发生后尽快检查,因为事件列表只会显示最近的事件。
- 如果您在任务终止前打开了该任务的信息页面,容器定义区域可能会在退出原因部分列出信息。与事件页面类似,注销的任务最终会在一段时间后被删除,因此在任务被删除后尽快检查会有所帮助。
- 如果以上方法均无效,可以尝试创建 CloudWatch 仪表板。使用HTTPCode_ELB_5XX_Count 统计信息对于位于服务前端的 ALB/ELB - 通常这些是 504 错误,表示超时(为 ELB 启用 S3 日志记录会肯定地告诉你),如果在健康检查期间某个任务由于超时而终止,你可能会发现 5XX 响应率会升高,所以这可能会为你指明正确的方向 - 但是,请注意,这样的事件肯定也会记录到服务的事件列表中。