服务事件消息 - Amazon Elastic Container Service
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

服务事件消息

如果您正在解决与服务相关的问题,首先应查看服务事件日志中的诊断信息。

在 Amazon ECS 控制台中查看服务事件消息时,将忽略重复的服务事件消息,直至解决了问题根源或者过了六个小时。如果未解决问题根源,您将在六个小时后收到另一个服务事件消息。

在 Amazon ECS 控制台中查看服务事件日志

  1. https://console.amazonaws.cn/ecs/ 上打开 Amazon ECS 控制台。

  2. Clusters (集群) 页面上,选择服务所在的集群。

  3. Cluster : clustername (集群: <集群名称>) 页面上,选择要检查的服务。

  4. 服务:servicename 页面上,选择事件

    
                    服务事件消息
  5. 检查 Message 列是否存在错误或其他有用信息。

服务事件消息

以下是您可能会在控制台中看到的服务事件消息的示例:

service (service-name) has reached a steady state.

当服务正常运行且任务数量为期望值,从而达到稳定状态时,服务计划程序将发送 service service-name) has reached a steady state. 服务事件。

service (service-name) was unable to place a task because no container instance met all of its requirements.

当服务计划程序找不到添加其他任务的可用资源时,它将发送此事件消息。导致出现此情况的可能原因是:

未在您的集群中找到任何容器实例

如果未向您尝试在其中运行任务的集群注册任何容器实例,您将收到此错误。您应向集群添加容器实例。有关更多信息,请参阅 启动 Amazon ECS 容器实例

端口不足

如果您的任务使用固定主机端口映射(例如,您的任务对 Web 服务器使用主机上的端口 80),则每个任务必须至少有一个容器实例,因为一次仅一个容器可以使用一个主机端口。您应向集群添加容器实例,或减少所需的任务数。

注册的端口过多

用于任务放置的最密切匹配的容器实例不能超过允许的最大保留端口限制,即每个容器实例 100 个主机端口。使用动态主机端口映射可能会修复此问题。

内存不足

如果您的任务定义指定 1000 MiB 的内存,并且集群中的每个容器实例均具有 1024 MiB 的内存,则只能为每个容器实例运行此任务的一个副本。您可以在任务定义中尝试更少的内存,以便为每个容器实例启动多个任务,或者在集群中启动更多容器实例。

注意

如果您尝试通过为任务提供尽可能多的用于特定实例类型的内存来最大程度地利用资源,请参阅容器实例内存管理

CPU 不足

一个容器实例中,每个 CPU 核心有 1,024 个 CPU 单元。如果您的任务定义指定 1,000 个 CPU 单元,并且集群中的每个容器实例均具有 1,024 个 CPU 单元,则只能为每个容器实例运行此任务的一个副本。您可以在任务定义中尝试更少的 CPU 单元,以便为每个容器实例启动多个任务,或者在集群中启动更多容器实例。

没有足够的可用 ENI 附加点

每个使用 awsvpc 网络模式的任务都会收到自己的弹性网络接口 (ENI),该接口将附加到托管它的容器实例。Amazon EC2 实例对可附加到它们的 ENI 的数量有限制,并且集群中没有带可用 ENI 容量的容器实例。

单个容器实例的 ENI 限制取决于以下条件:

  • 如果您尚未选择使用 awsvpcTrunking 账户设置,则每个容器实例的 ENI 限制取决于实例类型。有关更多信息,请参阅 Amazon EC2 用户指南(适用于 Linux 实例) 中的每个实例类型的每个网络接口的 IP 地址

  • 如果您选择使用 awsvpcTrunking 账户设置,但您在选择使用后启动使用支持的实例类型的新容器实例,则每个容器实例的 ENI 限制仍将为默认值。有关更多信息,请参阅 Amazon EC2 用户指南(适用于 Linux 实例) 中的每个实例类型的每个网络接口的 IP 地址

  • 如果您选择使用 awsvpcTrunking 账户设置,并且您在选择使用后启动使用支持的实例类型的新容器实例,则其他 ENI 将可用。有关更多信息,请参阅 支持的 Amazon EC2 实例类型

有关选择使用 awsvpcTrunking 账户设置的更多信息,请参阅 弹性网络接口中继

您可以将容器实例添加到您的集群以提供更多可用的网络适配器。

容器实例缺少必需属性

一些任务定义参数需要在容器实例上安装特定的 Docker 远程 API 版本。其他任务定义(例如,日志记录驱动程序选项)需要容器实例使用 ECS_AVAILABLE_LOGGING_DRIVERS 代理配置变量注册这些日志记录驱动程序。如果您的任务定义包含一个需要特定容器实例属性的参数,并且您没有可满足此要求的任何可用容器实例,则无法放置任务。

造成此错误的常见原因是,您的服务正在使用的任务使用的是 awsvpc 网络模式和 EC2 启动类型,并且您指定的集群中没有在服务创建时在 awsvpcConfiguration 中指定的同一子网中注册的容器实例。

有关特定任务定义参数和代理配置变量所需的属性的更多信息,请参阅任务定义参数Amazon ECS 容器代理配置

service (service-name) was unable to place a task because no container instance met all of its requirements.最接近的匹配容器实例 container-instance-id 没有足够的 CPU 单位可用。

用于放置任务的最接近的匹配容器实例不会容纳足够的 CPU 单位来满足任务定义中的要求。查看任务定义的任务大小和容器定义参数中的 CPU 要求。

service (service-name) was unable to place a task because no container instance met all of its requirements.The closest matching container-instance container-instance-id encountered error "AGENT".

用于任务放置的最近匹配容器实例上的 Amazon ECS 容器代理已断开连接。如果您可以通过 SSH 连接到容器实例,则可以查看代理日志;有关更多信息,请参阅 Amazon ECS 容器代理日志。您还应验证代理是否正在该实例上运行。如果您使用的是Amazon ECS-optimized AMI,则可以尝试通过以下命令停止并重新启动代理:

  • 对于Amazon ECS-optimized Amazon Linux 2 AMI:

    sudo systemctl restart ecs
  • 对于Amazon ECS-optimized Amazon Linux AMI:

    sudo stop ecs && sudo start ecs

service (service-name) (instance instance-id) is unhealthy in (elb elb-name) due to (reason Instance has failed at least the UnhealthyThreshold number of health checks consecutively.)

此服务已注册到一个负载均衡器,并且未通过负载均衡器运行状况检查。有关更多信息,请参阅 服务负载均衡器问题排查

service (service-name) is unable to consistently start tasks successfully.

此服务包含在连续多次尝试之后仍无法启动的任务。此时,服务计划程序开始逐渐增加重试间隔的时间。您应该排查任务无法启动的原因。有关更多信息,请参阅 服务限制逻辑

服务更新后,例如,通过更新的任务定义更新后,服务计划程序恢复正常行为。