

# 控制台中的 Amazon ECS 事件捕获
<a name="task-lifecycle-events"></a>

Amazon ECS 控制台提供事件捕获功能，可通过 EventBridge 将 Amazon ECS 生成的事件（例如服务操作和任务状态更改）存储到 Amazon CloudWatch Logs。此功能包括一个带有筛选功能的查询接口，用于监控和故障排除。

事件提供有关服务部署、服务、任务和实例如何运行的详细信息。您可以使用此信息来排查任务或服务部署失败。

开启事件捕获后，您可以访问在您选择的保留期内 Amazon ECS 生成的所有事件，其超出了最近 100 个未经筛选的事件或仅在 1 小时内可见的已停止任务的原生限制。

## 工作原理
<a name="task-lifecycle-events-overview"></a>

事件捕获使用 EventBridge 将事件存储在预定义的 Amazon CloudWatch Logs 日志组中。Amazon ECS 控制台提供预构建的查询和筛选选项，并将事件关联起来，以直观的格式提供任务生命周期。

您可以查询和检索以下类型的事件：
+ **服务操作事件** – 帮助识别预置或资源分配问题
+ **任务生命周期事件** – 帮助确定任务或容器启动失败或停止运行的原因

Amazon ECS 控制台允许您一键设置事件捕获，并提供常用查询和筛选功能，而无需您学习查询语言或在多个控制台之间导航。

## 事件类型
<a name="task-lifecycle-events-types"></a>

事件捕获会将所有 Amazon ECS 生成的事件按以下类别存储：

任务状态更改事件  
容器停止和其他终止事件，您可以利用这些事件进行故障排除或监控任务生命周期时间线。

服务操作  
诸如达到稳定状态、任务放置失败或资源限制等事件。

服务部署状态更改  
由断路器和回滚设置触发的事件（例如，正在进行中、已完成或失败的部署），用于监控服务部署的状态。

容器实例状态更改  
对于 EC2 和 Amazon ECS 托管实例上的工作负载，事件会显示已连接和已断开连接状态。

## 日志组配置
<a name="task-lifecycle-events-log-group"></a>

启用事件捕获后，Amazon ECS 会自动创建以下资源：
+ 名为 `/aws/events/ecs/containerinsights/${clusterName}/performance` 的 Amazon CloudWatch Logs 日志组
+ 一条 EventBridge 规则，用于从 `aws.ecs` 源摄取所有事件并将其转发到日志组

您可以为日志组指定保留期，1 天到 10 年不等。默认保留期为 7 天。

## 注意事项
<a name="task-lifecycle-events-limitations"></a>

使用事件捕获时，请考虑以下事项：
+ 为了简单起见，事件捕获会存储所有事件。您无法在 Amazon ECS 控制台中配置规则以仅捕获特定事件。
+ Amazon ECS 控制台提供预定义的查询条件。对于高级查询，请使用 Amazon CloudWatch Logs Logs Insights 直接查询日志组。
+ Amazon ECS 控制台不提供 Live Tail 功能。直接将 Amazon CloudWatch Logs 用于 Live Tail。
+ 禁用事件捕获时，EventBridge 规则将被删除。
+ 事件捕获会对 EventBridge 数据摄取、Amazon CloudWatch Logs 存储和查询执行产生额外费用。

  有关 EventBridge 定价的信息，请参阅 [EventBridge 定价](https://aws.amazon.com/eventbridge/pricing/)。

  有关 CloudWatch 定价的信息，请参阅 [CloudWatch 定价](https://aws.amazon.com/cloudwatch/pricing/)。

## 基于事件的故障排除
<a name="task-lifecycle-events-troubleshooting"></a>

使用 Amazon ECS 生成的事件来解答常见的故障排除问题。

### 任务失败分析
<a name="task-lifecycle-events-task-failures"></a>

您可以查看 `STOPPED` 任务状态更改事件、停止代码和容器退出代码，以确定任务启动失败或运行失败的原因。

您可以查看服务操作事件中的放置失败和资源约束信息，以确定任务因资源约束而放置失败的原因

### 常见任务失败场景
<a name="task-lifecycle-events-common-issues"></a>

最常见的异常任务失败与下面的问题有关：
+ CI/CD 服务部署失败
+ 自动扩缩失败
+ 任务重新平衡失败
+ 异常容器退出，例如内存不足（OOM）错误

异常任务失败会产生带有 `EssentialContainerExited` 或 `TaskFailedToStart` 停止代码的 `STOPPED` 任务状态更改事件。您可以按这些停止代码进行筛选，以检查容器执行和停止行为。

# 为现有 Amazon ECS 集群开启事件捕获
<a name="turn-on-event-capture-existing-cluster"></a>

您可以在现有的 Amazon ECS 集群上启用事件捕获，通过 EventBridge 将 Amazon ECS 生成的事件存储到 Amazon CloudWatch Logs 中。此功能可帮助您监控和排查任务失败、服务部署和其他集群活动。

启用事件捕获后，Amazon ECS 会创建以下资源：
+ 名为 `/aws/events/ecs/containerinsights/${clusterName}/performance` 的 Amazon CloudWatch Logs 日志组
+ 一条 EventBridge 规则，用于捕获来自 `aws.ecs` 源的所有事件

集群视图中会显示**历史记录**选项卡，您可以在其中查询任务生命周期事件和服务操作。事件捕获会立即开始，并根据您指定的保留期存储所有 Amazon ECS 生成的事件。

## 先决条件
<a name="turn-on-event-capture-prerequisites"></a>
+ 现有的 Amazon ECS 集群
+ 修改集群设置和创建 Amazon CloudWatch Logs 资源所需的适当 IAM 权限

## 使用控制台开启事件捕获
<a name="turn-on-event-capture-procedure"></a>

1. 在 [https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2) 打开控制台。

1. 在导航窗格中，选择**集群**。

1. 选择要启用事件捕获的集群。

   此时将显示集群详细信息页面。

1. 选择**配置**。

1. 在 **ECS 事件**部分中，选择**开启事件捕获**。

   此时将显示**开启事件捕获**对话框。

1. 对于**过期事件**，选择 Amazon CloudWatch Logs 日志组的保留期。默认值为 7 天。

1. 选择**打开**。

# 查看 Amazon ECS 服务和任务状态更改事件
<a name="viewing-state-events"></a>

Amazon ECS 控制台提供事件捕获功能，可通过 EventBridge 将 Amazon ECS 生成的事件（例如服务操作和任务状态更改）存储到 Amazon CloudWatch Logs。此功能包括一个带有筛选功能的查询接口，用于增强监控和故障排除。

事件提供有关服务部署、服务、任务和实例如何运行的详细信息。您可以使用此信息来排查任务或服务部署失败。

您可以使用以下任何条件来筛选事件：
+  部署 ID（这仅在服务详细信息页面上可用） 
+ 开始时间
+ 结束时间 
+ 服务名称（仅适用于集群详细信息页面、服务详细信息页面，这默认为当前服务） 
+ 任务 ID 
+ 任务上次状态 
+ 任务定义系列 
+ 任务定义修订 

## 在集群级别查看事件
<a name="view-cluster-procedure"></a>

1. 在 [https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2) 打开控制台。

1. 选择**集群**。

   此时将显示集群列表页面。

1. 选择 集群。

   此时将显示集群详细信息页面。

1. 在**历史记录**下，确定要查看的事件。

   1. 要查看服务操作事件，请选择**服务操作事件**。

   1. 要查看任务状态更改事件，请选择**任务状态更改事件**。

   1. （可选）在**查询条件**中，输入要查看的事件的筛选条件。

1. 选择**运行查询**。

   事件以列表形式显示。

1. 要查看事件的完整详细信息，请选择事件。

## 在服务级别查看
<a name="tasks-procedure"></a>

1. 在 [https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2) 打开控制台。

1. 在 **Clusters**（集群）页面上，选择集群。

1. 在“集群详细信息”页面，找到**服务**部分，然后选择服务。

   此时将显示服务详细信息页面。

1. 在**历史记录**下，确定要查看的事件。

   1. 要查看服务操作事件，请选择**服务操作事件**。

   1. 要查看任务状态更改事件，请选择**任务状态更改事件**。

   1. （可选）在**查询条件**中，输入要查看的事件的筛选条件。

1. 选择**运行查询**。

   事件以列表形式显示。

1. 要查看事件的完整详细信息，请选择事件。