如何监控不属于ECS服务的一次性Fargate任务的CPU与内存使用情况?
监控Fargate一次性任务的CPU和内存使用率
嘿,这个问题我之前踩过坑!Fargate的一次性(One-Shot)任务因为不属于任何ECS服务,确实没法直接在默认的服务维度指标里找到,但其实有几个靠谱的监控方式:
1. 利用CloudWatch的任务级维度指标
CloudWatch的ECS指标其实支持任务级别的维度筛选,只是默认界面可能没直接展示。你可以手动创建自定义仪表盘来查看:
- 打开CloudWatch控制台,进入「仪表盘」页面,创建新仪表盘
- 添加指标小部件,选择「ECS」指标分类
- 展开后先选择你的集群名称(
ClusterName),然后可以选择以下维度来定位任务:TaskDefinitionFamily:按任务定义家族筛选,适合查看同一类一次性任务的聚合/单任务指标TaskId:直接指定单个任务的ID,精准查看某一次运行的任务数据
- 选中对应的
CPUUtilization和MemoryUtilization指标,就能看到该任务的资源使用情况了
2. 嵌入CloudWatch Agent获取更细粒度数据
如果需要监控容器内部的进程级指标,或者自定义监控项,可以在任务定义里加入CloudWatch Agent容器:
- 给你的任务执行角色添加
CloudWatchAgentServerPolicy权限,确保Agent能发送数据到CloudWatch - 在任务定义中新增一个容器,使用
amazon/cloudwatch-agent镜像,配置Agent的配置文件(可以通过环境变量或者挂载配置文件),指定收集任务的CPU、内存等指标 - 配置完成后,Agent会把数据发送到CloudWatch的自定义指标中,你可以在CloudWatch里查看这些自定义指标
3. 临时排查:用ECS Exec实时查看
如果只是临时需要排查任务的运行状态,可以用ECS Exec进入容器实时查看:
- 确保你的任务定义已经开启了ECS Exec支持(在任务定义的
executionRoleArn中添加AmazonECSExecuteCommandRolePolicy权限,并且网络模式为awsvpc) - 执行命令:
aws ecs execute-command --cluster <你的集群名> --task <任务ID> --container <容器名> --interactive --command "/bin/sh" - 进入容器后,用
top或者htop命令实时查看CPU和内存使用率
注意事项
- 一次性任务结束后,对应的CloudWatch指标会保留一段时间(遵循CloudWatch的指标保留策略),任务完成后依然可以查看历史数据
- 如果任务使用awsvpc网络模式,要确保安全组允许任务访问CloudWatch的端点(默认情况下是允许的,除非有严格的出站限制)
内容的提问来源于stack exchange,提问作者Stuart Moore
相关产品推荐
相关产品推荐

