You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 10:05:21