如何对 Fargate 上 Amazon ECS 任务的运行状况检查失败进行故障排除?

2 分钟阅读
0

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

简短描述

Fargate 上 Amazon ECS 任务的运行状况检查失败可能是由于以下原因造成的:

  • 容器运行状况检查错误
  • 目标位于负载均衡器已停用的可用区中
  • CPU 或内存的资源限制
  • 运行状况检查设置配置不正确
  • 网络连接问题

如果任务未通过负载均衡器运行状况检查,您会在 Amazon ECS 服务事件消息中收到以下错误消息之一:

  • “(服务 AWS-Service)(端口 8080)在 (target-group arn:aws:elasticloadbalancing:us-east-1:111111111111:targetgroup/aws-targetgroup/123456789) 中的运行状况不佳,(原因在于这些代码的运行状况检查失败:[5xx]/[4xx]/[3xx])或(请求超时)。”
  • “(服务 AWS-Service)(任务 eaa3ec9e9f104070b461490987654321)容器运行状况检查失败。”
  • “(服务 AWS-Service)(实例 10.122.144.145)(端口 8080)在 (target-group arn:aws:elasticloadbalancing:ap-south-1:120987654321:targetgroup/AWS-Service-TG/159c835dc9d8cf84) 中的运行状况不佳,(原因在于目标位于未启用负载均衡器的可用区)。”

在 Amazon ECS 任务控制台上,您也可能收到错误:“任务在 (target-group arn:aws:elasticloadbalancing:ap-south-1:111111111111:targetgroup/aws-targetgroup/123456789) 中 ELB 运行状况检查失败。”

解决方法

**注意:**如果您在运行 AWS 命令行界面 (AWS CLI) 命令时收到错误,请参阅 AWS CLI 错误故障排除。此外,请确保您使用的是最新版本的 AWS CLI

对 HTTP [5xx]/[4xx]/[3xx] 或(请求超时)错误进行故障排除

检查您的负载均衡器的运行状况检查配置

当弹性负载均衡 (ELB) 负载均衡器应该收到 HTTP 代码 200,但却收到 3xx、4xx 或 5xx 错误代码时,您会收到这些错误。因此,负载均衡器会停止任务并将其标记为 Unhealthy(运行状况不佳)。要解决此问题,请配置正确的运行状况检查路径或修改运行状况检查设置

有关应用程序负载均衡器中的 HTTP 错误的信息,请参阅负载均衡器生成 HTTP 错误

如果 Amazon ECS 任务未在超时时间内响应负载均衡器运行状况检查,则您会收到 Request timed out(请求超时)错误。

验证负载均衡器是否可以执行运行状况检查

确认以下配置:

  • 与您的负载均衡器关联的安全组允许出站流量通过注册容器端口流向 Amazon ECS 任务弹性网络接口。
  • Amazon ECS 安全组允许来自与您的负载均衡器关联的安全组的所有入站流量通过注册容器端口。

配置超时参数

如果 Amazon ECS 任务对运行状况检查的响应速度很慢,则最佳做法是增加 HealthCheckGracePeriod 参数的值。

如果您的应用程序通常需要很长时间才能响应运行状况检查,则您也可以增加目标组的运行状况检查超时值。此参数定义 Amazon ECS 任务必须响应运行状况检查的时间。

检查您的资源使用情况

如果您的应用程序需要与数据库建立后端连接,请检查数据库级别的资源使用率是否过高。资源使用率过高可能会导致应用程序初始化过程中出现问题,并导致负载均衡器运行状况检查期间出现错误。

对响应缓慢进行故障排除

使用 ECS Exec 检查应用程序在运行状况检查路径和端口上的响应情况。要验证后端是否在无延迟的情况下立即成功响应,请运行以下命令:

curl -iv localhost:container-port/path

**注意:**请将 container-port 替换为您的容器使用的端口,将 path 替换为运行状况检查路径。

检查您的运行状况检查配置

首先,确保文件位于您在目标组运行状况检查中配置的路径中。

如果您的文件位于正确的位置,但运行状况检查仍失败,请完成以下步骤:

  1. 打开 Amazon Elastic Compute Cloud (Amazon EC2) 控制台
  2. 在导航窗格中的 Load balancing(负载均衡)下,选择 Target groups(目标组)。
  3. 选择目标组。
  4. 选择 Health checks(运行状况检查)选项卡,然后选择 Edit(编辑)。
  5. Edit target group(编辑目标组)页面上,在 Success code(成功代码)中输入错误消息中的 HTTP 代码。例如,输入 404
  6. 选择 Save(保存)。

**重要事项:**确保将目标组协议设置为应用程序支持的 HTTP 协议

检查 Amazon ECS 中是否存在资源限制

检查 Amazon ECS 服务指标,以了解 CPU 和内存利用率。如果 CpuUtilizationMemoryUtilization 始终很高,则您会遇到性能问题,从而可能导致运行状况检查失败。

要降低资源使用率,请执行以下操作:

  • 在任务定义中分配更多 CPU 和内存资源
  • 要横向扩展您的配置,请增加正在运行的任务数量,以便将工作负载平均分配到多个实例,并在突然激增期间提供更好的性能。
  • 定期评估系统在不同负载条件下的性能,以确定潜在瓶颈并改善资源分配。
  • 监控应用程序的网络使用情况、连接模式和响应时间,以确定潜在的瓶颈并优化低效的网络使用模式。

最佳做法是经常监控系统的行为并根据需要调整配置。

对容器运行状况检查失败错误进行故障排除

如果任务中的 ECS 容器实例使用您的服务无法通过的运行状况检查,则您会收到 failed container health checks(容器运行状况检查失败)错误。要解决此问题,请参阅如何解决 Amazon ECS 任务的容器运行状况检查失败问题?

对目标 Amazon ECS 任务的可用区问题进行故障排除

如果您在未激活的可用区中注册目标,则注册的目标不会接收流量。有关详细信息,请参阅可用区和负载均衡器节点

例如,您的 Amazon ECS 子网属于 us-east-1xus-east-1y 可用区。如果负载均衡器激活了 us-east-1pus-east-1q 可用区,则您会收到错误。

要更新 Amazon ECS 以使用负载均衡器可用区的子网,请运行 AWS CLI 命令 update-service

aws ecs update-service --cluster cluster-name --service service-name --region region-code --network-configuration '{"awsvpcConfiguration": {"subnets": ["subnet-1","subnet-2"],"securityGroups": ["sg-abcdxyz"]}}'

**注意:**请将 cluster-name 替换为您的集群名称,将 service-name 替换为您的服务名称,将 region-code 替换为您的 AWS 区域。此外,请将 subnet-1subnet-2 替换为您的子网,将 sg-abcdxyz 替换为您的安全组。

相关信息

容器定义

自动扩展 Amazon ECS 服务

Amazon ECS 最佳实践

监控 Amazon ECS

AWS 官方
AWS 官方已更新 5 个月前