调查容器故障 - III

健康检查失败

零售商店 UI 服务正在经历不稳定状况。任务每隔几分钟就会重启一次,部署似乎陷入停滞——始终无法达到稳定状态。

我们的任务是使用 AWS DevOps Agent 调查任务被持续替换的原因,并找出健康检查的错误配置。

注入问题

在 Cloud IDE 终端中执行以下命令:

ecs-lab3-start

这将修改 UI 服务的task defination,使用错误的健康检查端点(/wrong-health-endpoint 而非 /actuator/health)。容器启动成功,但健康检查失败,导致 ECS 将任务标记为不健康并进行替换。

这模拟了以下场景:

  • 应用程序更新后健康检查路径配置错误
  • 健康检查端点发生变化但任务定义未更新
  • 健康检查参数(间隔、超时、重试次数)设置过于激进

观察症状

打开 Amazon ECS 控制台 ,选择 devops-agent-workshop-ecs-cluster,然后点击 Services 选项卡并选择 ui 服务。

注入问题后,我们将注意到:

  • UI 服务任务持续重启 - 任务在 RUNNING → STOPPING → STOPPED 之间循环
  • 服务始终无法达到稳定状态 - 运行中的任务数量波动不定
  • 服务事件显示"unhealthy"消息 - 健康检查失败已被记录
  • 新任务不断启动 - ECS 自动替换不健康的任务

image-20260315144534324

使用 DevOps Agent 进行故障排查

提示词如下:

为什么 devops-agent-workshop-ecs-cluster 中的 UI 服务会不断重启任务? 调查 devops-agent-workshop-ecs-cluster 中 UI 服务任务被替换的原因。检查健康检查配置和服务事件,查找不健康的任务失败情况。

image-20260315144647103

等待几分钟后,排查到问题所在:

image-20260315145327967

回退到正常服务:

ecs-lab3-fix

附 :健康检查配置最佳实践

参数 建议
startPeriod 设置足够高以满足应用程序初始化需求(Java 应用建议 60-120 秒)
interval 通常为 10-30 秒
timeout 应小于间隔时间
retries 2-3 次重试可防止误报