使用Terraform配置CloudWatch磁盘使用率告警遇数据不足问题
CloudWatch磁盘使用率告警显示“数据不足”问题排查与修复
核心排查方向
1. 确认CloudWatch Agent是否成功上报指标
- 登录CloudWatch控制台,进入Metrics > All metrics,找到自定义命名空间
CloudWatchCustomMetrics,查看disk_used_percent指标是否存在对应InstanceId和path维度的有效数据点。如果没有数据,问题出在指标收集环节,而非告警配置:- 检查EC2实例上的CloudWatch Agent配置文件(通常是
/opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json),确认disk模块的resources字段包含目标路径,且metrics_collection_interval设置合理(比如60秒):"metrics": { "namespace": "CloudWatchCustomMetrics", "metrics_collected": { "disk": { "resources": ["/", "/data"], "measurement": ["used_percent"], "metrics_collection_interval": 60 } } } - 验证EC2实例的IAM角色是否附加了
CloudWatchAgentServerPolicy权限,确保Agent有权限将指标上报到CloudWatch。
- 检查EC2实例上的CloudWatch Agent配置文件(通常是
2. 确保告警维度与上报指标的维度完全匹配
- 检查InstanceId维度格式:你的配置中
InstanceId = var.instance_ids,如果var.instance_ids是列表类型(比如["i-123456", "i-7890ab"]),直接赋值会导致维度值为列表字符串,与Agent上报的单个实例ID不匹配。需改为单个实例ID,若要为多个实例配置告警,需使用嵌套for_each遍历实例和路径:# 假设var.instance_ids是实例ID列表,local.disk_space_path是路径列表 resource "aws_cloudwatch_metric_alarm" "ec2_disk_space" { for_each = { for inst_id, path in setproduct(var.instance_ids, local.disk_space_path) : "${inst_id}-${path}" => { inst_id = inst_id, path = path } } alarm_name = "ec2_disk_space_${each.value.inst_id}_${each.value.path}" comparison_operator = "GreaterThanOrEqualToThreshold" metric_name = "disk_used_percent" namespace = "CloudWatchCustomMetrics" period = 600 evaluation_periods = 1 statistic = "Average" threshold = 90 alarm_description = "实例${each.value.inst_id}的路径${each.value.path}磁盘使用率近10分钟平均超过90%" actions_enabled = true treat_missing_data = "ignore" alarm_actions = [aws_sns_topic.aws-notification-terraform.arn] ok_actions = [aws_sns_topic.aws-notification-terraform.arn] dimensions = { InstanceId = each.value.inst_id path = each.value.path } } - 维度值严格匹配:检查Agent上报的
path值与告警中each.key的格式是否完全一致(比如路径末尾的/、大小写),CloudWatch维度是大小写敏感的,细微差异都会导致匹配失败。
3. 核对告警周期与指标上报间隔
- 你的告警
period设置为600秒(10分钟),需确保CloudWatch Agent的metrics_collection_interval小于等于600秒,且在告警周期内有至少一个数据点上报。如果Agent上报间隔大于600秒(比如15分钟),告警会因无法获取足够数据显示“数据不足”。
4. 确认命名空间无拼写错误
- 检查Agent配置中的
namespace与告警配置的namespace是否完全一致(比如CloudWatchCustomMetrics的大小写、单词拼写),命名空间不匹配会导致告警找不到对应指标。
额外注意事项
treat_missing_data = "ignore"仅作用于已有数据但临时缺失的情况,如果从未收到过指标数据,告警仍会显示“数据不足”。- 若修改Agent配置后,需重启CloudWatch Agent服务生效:
sudo systemctl restart amazon-cloudwatch-agent(Linux系统)。
内容的提问来源于stack exchange,提问作者Bamb4Boy
相关产品推荐
相关产品推荐

