如何解决 Fargate 上 Amazon ECS 任务的运行状况检查失败问题?

上次更新时间:2021 年 1 月 8 日

AWS Fargate 上的 Amazon Elastic Container Service (Amazon ECS) 任务出现运行状况检查失败问题。

解决方法

对最常见的负载均衡器错误进行故障排除

如果您收到以下错误之一:

  • (service AWS-service) (port 8080) is unhealthy in (target-grouparn:uxyztargetgroup/aws-targetgroup/123456789) due to (reason Health checks failed with these codes: [502]) or [request timeout]
  • (service AWS-Service) (port 8080) is unhealthy in target-group tf-20190411170 due to (reason Health checks failed)

请尝试以下故障排除步骤:

  • 如果容器映射到端口 80,请确认容器安全组允许负载均衡器在端口 80 上的入站流量。
  • 确认已正确配置负载均衡器运行状况的 ping 端口值。如果此端口配置不正确,则负载均衡器可能会从自身撤销容器的注册。
  • 定义最低运行状况检查宽限期。这样,服务计划程序就会在任务实例化后,在预先定义的时间段内忽略 Elastic Load Balancing 运行状况检查。
  • 监控服务的 CPU 和内存指标。例如,CPU 较高可能会使应用程序无响应并导致 502 错误。
  • 检查应用程序日志中的应用程序错误。
  • 检查 ping 端口和运行状况检查路径是否配置正确。
  • 确保您的后端数据库已成功连接。这里假设您的应用程序作为 Amazon Elastic Container Service (Amazon ECS) 在 Amazon Elastic Compute Cloud (Amazon EC2) 实例上启动的一组任务运行。同时假设您的应用程序无法与 Amazon Relational Database Service (Amazon RDS) 数据库通信。

排除 504 错误

您可能会由于以下任意原因收到 504 错误:

  • 负载均衡器未能在连接超时到期(10 秒)之前建立与目标的连接。
  • 负载均衡器建立了与目标的连接,但是目标没有在达到空闲超时期限之前作出响应。
  • 子网的网络访问控制列表不允许将流量从目标传送到临时端口 (1024-65535) 上的负载均衡器节点

如果您收到 504 错误,示例如下:

  • (service AWS-Service) (port 8080) is unhealthy in target-group due to (reason Health checks failed with these codes:[504]

请尝试以下故障排除步骤:

  • 确认后端立即成功响应。
  • 正确设置响应超时值。
    注意:响应超时是您的容器必须返回对运行状况检查 ping 的响应的一段时间。如果此值低于响应所需的时间,则运行状况检查会失败。
  • 有关错误的更多信息,请查看负载均衡器的访问日志

排除失败的容器运行状况检查问题

如果您收到以下错误,则表明您的服务未与负载均衡器集成,但是任务中的容器正在使用服务无法传递的运行状况检查

  • (service AWS-Service) (task ff3e71a4-d7e5-428b-9232-2345657889) failed container health checks

请尝试以下问题排除步骤:

  • 确认传递给容器的命令正确无误且语法正确。
  • 如果任务已运行一段时间,请检查您的应用程序日志和 Amazon CloudWatch logs。

注意:由于 Fargate 由 AWS 管理,您无法访问底层主机。要进一步排除问题,请在 Amazon EC2 中启动 Amazon ECS 任务。然后,使用 SSH 连接到您的 EC2 实例