如何监控ECS集群磁盘使用率?含P90指标需求及AWS方案咨询
AWS ECS实例磁盘使用率监控方案
一、AWS内置指标支持情况
- EC2实例层面:CloudWatch默认提供
DiskSpaceUtilization指标,但仅针对EBS卷,且需要确保EC2实例上的CloudWatch Agent已配置(默认未启用)。该指标可直接统计磁盘使用率,且支持在CloudWatch图表中选择P90作为统计维度,追踪极端使用情况。 - ECS服务/任务层面:AWS无直接内置的任务级磁盘使用率指标,需结合EC2实例指标或自定义方案实现精细化监控。
二、自定义解决方案(精细化监控场景)
若需监控容器级而非整台EC2实例的磁盘使用,可采用以下方式:
- 启用ECS容器洞察:开启后会自动收集任务级磁盘指标(如
ContainerFileSystemUsage),这些指标可在CloudWatch中查看并计算P90分位数。 - 自定义指标收集:通过ECS任务附加侧车容器,或在EC2实例上运行脚本,收集磁盘使用数据并推送到CloudWatch自定义指标。
三、Terraform配置示例
1. 配置CloudWatch Agent收集EC2磁盘指标
# 创建CloudWatch日志组存储Agent日志 resource "aws_cloudwatch_log_group" "cw_agent_logs" { name = "/aws/ecs/containerinsights/${var.cluster_name}/cloudwatch-agent" retention_in_days = 30 } # 存储CloudWatch Agent配置的SSM参数 resource "aws_ssm_parameter" "cw_agent_config" { name = "/aws/ecs/containerinsights/${var.cluster_name}/cloudwatch-agent-config" type = "String" value = jsonencode({ logs = { logs_collected = { files = { collect_list = [ { file_path = "/var/log/cloudwatch-agent.log" log_group_name = aws_cloudwatch_log_group.cw_agent_logs.name log_stream_name = "{instance_id}" } ] } } }, metrics = { metrics_collected = { disk = { measurement = ["used_percent"] resources = ["*"] collection_interval = 60 } } } }) } # 为ECS集群启用容器洞察 resource "aws_ecs_cluster" "cluster" { name = var.cluster_name setting { name = "containerInsights" value = "enabled" } }
2. 创建CloudWatch仪表盘展示P90磁盘使用率
resource "aws_cloudwatch_dashboard" "ecs_disk_dashboard" { dashboard_name = "ECS-Disk-Usage-Dashboard" dashboard_body = jsonencode({ widgets = [ { type = "metric" x = 0 y = 0 width = 12 height = 6 properties = { metrics = [ ["AWS/EC2", "DiskSpaceUtilization", "InstanceId", "*"] ] stat = "p90" period = 300 title = "EC2 Instance Disk Usage P90" yAxis = { left = { min = 0 max = 100 label = "Disk Usage %" } } } } ] }) }
四、关键注意事项
- 确保EC2实例拥有
CloudWatchAgentServerPolicy权限,允许推送指标到CloudWatch。 - 容器洞察需在ECS集群创建时启用,或通过Terraform更新集群配置(如上示例)。
- P90指标的准确性依赖足够的数据样本,建议设置60秒以内的指标收集间隔。
内容的提问来源于stack exchange,提问作者digit plumber
相关产品推荐
相关产品推荐

