跳至内容

如何对我的 Amazon ECS 任务的目标注销问题进行故障排除?

2 分钟阅读
0

我的 Amazon Elastic Container Service (Amazon ECS) 任务已从目标组中注销。

解决方案

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

如果您的 Amazon ECS 任务从目标组中注销,请检查该任务中是否存在错误消息。或者,运行以下 AWS CLI 命令 describe-tasks

aws ecs describe-tasks \
    --cluster cluster-name \
    --tasks task-ARN

**注意:**请将 cluster-name 替换为集群名称,将 task-ARN 替换为您的任务 ARN。已停止任务的详细信息仅在任务停止后的 1 小时内可用。

检查命令输出中的 exitCodereasonstopCodestoppedReason,然后对已停止任务进行故障排除

检查任务中的基本容器是否已退出

所有任务必须至少有一个基本容器。如果基本容器发生故障或停止,则 Amazon ECS 会停止任务中的所有容器。要进一步调查,请查看您的应用程序日志。

如果您的任务使用 awslogs 日志驱动程序,请运行以下 get-log-events 命令,以在 Amazon CloudWatch 中查看您的应用程序日志:

aws logs get-log-events \
--log-group-name awslogs-group \
--log-stream-name awslogs-stream-prefix/container-name/task-id

**注意:**请将 awslogs-group 替换为日志组名称,将 awslogs-stream-prefix 替换为日志流的名称,将 container-name 替换为容器名称,并将 task-id 替换为任务 ID。

有关将日志发送到 CloudWatch 的任务定义示例,请参阅 Amazon ECS 任务定义示例: 将日志路由到 CloudWatch

检查是否存在 OutofMemory 问题

如果容器的进程消耗的内存超过您在任务定义中分配的内存量,则任务容器将退出。

要解决此问题,请为容器分配更多内存。最佳做法是在非生产环境中进行负载测试,并对内存参数进行微调。逐步增加内存,然后监控性能也是一种最佳做法。例如,将 256 MB 增加到 512 MB。更新任务内存时,请同时查看您的 CPU 分配。有关详细信息,请参阅 Amazon ECS 任务大小的最佳实践

要更新内存,请检查您是在容器中还是在任务定义中定义了内存。更新任务定义,然后更新服务,以使用新的任务定义修订版。监控该服务,以确保使用新的内存设置成功部署任务定义。

有关详细的故障排除步骤,请参阅如何解决 Amazon ECS 中的 OutOfMemory 错误?

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

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

当任务未通过弹性负载平衡 (ELB) 运行状况检查时,可能会出现注销错误,且您会收到以下错误之一

  • “(服务 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:us-east-1:111111111111:targetgroup/aws-targetgroup/123456789) 中未通过 ELB 运行状况检查”

要解决此问题,请确保您在目标组运行状况检查中配置的端点准确无误。

如果 Amazon ECS 任务对运行状况检查的响应速度很慢,则最佳做法是增加 healthCheckGracePeriodSeconds 参数的值。此外,请使用慢启动模式,以允许目标在负载均衡器向其发送运行状况检查请求之前进行预热。

检查您的任务和服务配置

检查您的服务的 CPU 和内存指标。资源使用率过高会导致您的应用程序无响应并导致 5xx 错误。要解决使用 Fargate 和 Amazon EC2 启动类型的任务出现的这些问题,请参阅如何监控 Fargate 上 Amazon ECS 任务的高内存利用率?

验证任务的弹性网络接口或容器实例安全组是否允许来自负载均衡器的流量通过网络模式对应的所需端口:

  • 对于 awsvpc 网络模式,允许流量通过您在任务定义中定义为 containerPort 的端口。
  • 对于 bridge 网络模式,允许流量通过临时端口 (32768-60999)。

相关信息

Amazon ECS 已停止任务错误消息

为 Amazon ECS 使用应用程序负载均衡器

Amazon Elastic Container Service 中的日志记录和监控

AWS 官方已更新 8 个月前