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

AWS ASG实例删除后CloudWatch Agent指标分组异常的解决咨询

背景

我正在为AWS自动扩缩容组(ASG)创建监控告警。用Namespace: "AWS/EC2"和MetricName: "CPUUtilization"创建的CPU利用率告警基于内置指标,运行正常。但内存利用率监控是通过启动模板在EC2实例上安装CloudWatch Agent实现的,使用Namespace: "CWAgent"和MetricName: "mem_used_percent"。

问题

ASG终止实例后,CloudWatch Agent采集的指标仍会留在CloudWatch中。由于告警是基于自动扩缩容组维度分组的,告警会尝试包含已删除实例的指标,导致无法获取有效数据。我知道CloudWatch指标无法删除,想问有没有办法让告警仅对当前运行的实例指标分组?或者其他可行的解决方案?


CloudWatch Agent指标

CloudWatch Agent指标

内存告警

内存告警

CPU利用率告警

CPU利用率告警

amazon-cloudwatch-agent.json配置文件

{
  "metrics": {
    "aggregation_dimensions": {
      "AutoScalingGroupName": "\${aws:AutoScalingGroupName}"
    },
    "metrics_collected": {
        "disk":{  
        "resources":[  
          "/"
        ],
        "measurement":[  
          "used"
        ],
        "metrics_collection_interval": 60
      },
      "mem": {
        "measurement": [
          "mem_used_percent"
        ],
        "metrics_collection_interval": 60
      }
    }
  },
  "logs": {
    "logs_collected": {
      "files": {
        "collect_list": [
          {
            "file_path": "/var/log/messages",
            "log_group_name": "$log_group_name",
            "log_stream_name": "$log_stream_name",
            "timezone": "UTC"
          },
          {
            "file_path": "/var/www/logs/app.log",
            "log_group_name": "$app_log_group_name",
            "log_stream_name": "$app_log_stream_name",
            "timezone": "UTC"
          }
        ]
      }
    },
    "log_stream_name": "cloudwatch-agent",
    "force_flush_interval": 5
  }
}

解决方案

1. 用动态过滤筛选运行中实例

创建告警时,选择CWAgent下的mem_used_percent指标,添加AutoScalingGroupName维度指定目标ASG,再开启动态过滤:设置维度为InstanceId,过滤条件为InstanceState:running。这样CloudWatch会自动忽略已终止实例的指标,只基于运行中的实例做聚合计算。

2. 修改Agent聚合配置保留实例维度

调整CloudWatch Agent的aggregation_dimensions配置,同时保留实例ID和ASG组维度:

"aggregation_dimensions": [
  ["AutoScalingGroupName", "InstanceId"],
  ["AutoScalingGroupName"]
]

配置后,Agent会同时上报单实例的内存指标(带InstanceId)和ASG级别的聚合指标。后续告警直接基于ASG级别的聚合指标即可——实例终止后停止上报数据,ASG聚合会自动排除这些实例。

3. 用Metric Math过滤指标

如果不想修改Agent配置,可通过CloudWatch Metric Math手动筛选运行中实例的数据,再做聚合:

AVG(FILTER(METRICS("CWAgent", "mem_used_percent", "AutoScalingGroupName", "你的ASG名称"), "State", "running"))

将这个表达式作为告警的指标来源,就能仅计算运行中实例的内存利用率。

4. 生命周期钩子辅助(可选)

通过ASG生命周期钩子,在实例终止前触发脚本让CloudWatch Agent停止上报,不过这个方法只能处理即将终止的实例,无法消除已终止实例的历史指标影响,优先级低于前三种方案。

内容的提问来源于stack exchange,提问作者Ali Mohsan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 12:18:24