AWS ECS Fargate任务停止次数统计:CloudWatch查询及最佳实践
ECS Fargate任务停止统计方案
关于STOPPED任务日志的说明
ECS Container Insights的/aws/ecs/containerinsights/{my-cluster-name}/performance日志组不会持续保留STOPPED状态任务的日志,该日志组仅采集运行中(RUNNING/PENDING)任务的性能指标与状态快照。任务转为STOPPED后,不会再向此日志组写入数据,这是你之前查询无结果的原因。
CloudWatch Logs Insights 查询示例
若要统计停止任务,需结合EventBridge捕获的任务停止事件(写入专属日志组)或容器应用日志,以下是基于EventBridge事件日志的查询示例:
1. 统计任务停止次数
假设已将ECS STOPPED事件写入日志组/aws/events/ecs-task-stopped,使用以下查询:
fields detail.taskArn, detail.stopCode, detail.stoppedReason, @timestamp | filter detail.group = "service:my-first-service" and detail.lastStatus = "STOPPED" | stats count() as stopCount by detail.taskArn | sort stopCount desc
2. 统计任务内每个容器停止/崩溃次数
若任务包含多个容器,可展开容器列表统计:
fields detail.taskArn, container.name, detail.stopCode, @timestamp | filter detail.group = "service:my-first-service" and detail.lastStatus = "STOPPED" | mv-expand detail.containers as container | stats count() as containerStopCount by detail.taskArn, container.name | sort containerStopCount desc
注:若需仅统计容器崩溃导致的停止,可添加
filter detail.stopCode = "EssentialContainerExited"条件。
EventBridge实现任务停止监控的最佳实践
创建EventBridge规则
- 规则类型选「事件模式」,事件源选
ECS,事件类型选ECS Task State Change - 设置事件模式匹配条件(仅捕获目标服务的Fargate任务停止事件):
{ "source": ["aws.ecs"], "detail-type": ["ECS Task State Change"], "detail": { "lastStatus": ["STOPPED"], "group": ["service:my-first-service"], "launchType": ["FARGATE"] } }
- 规则类型选「事件模式」,事件源选
绑定CloudWatch日志组目标
- 选择「CloudWatch日志组」,新建或指定现有日志组(如
/aws/events/ecs-task-stopped),所有符合条件的停止事件会自动写入该日志组,供后续查询统计。
- 选择「CloudWatch日志组」,新建或指定现有日志组(如
精准过滤停止原因
- 若仅关注容器崩溃导致的任务停止,可在事件模式中添加
"stopCode": ["EssentialContainerExited"],排除用户主动停止(UserInitiated)等非异常场景。
- 若仅关注容器崩溃导致的任务停止,可在事件模式中添加
配置告警(可选)
- 基于CloudWatch日志指标过滤器,对停止次数设置阈值告警(如5分钟内停止次数超过3次触发告警),及时感知异常。
内容的提问来源于stack exchange,提问作者devok
相关产品推荐
相关产品推荐

