如何为CloudWatch Agent输出的指标附加EC2实例自定义标签
给CloudWatch Agent指标附加EC2自定义标签操作指南
先给你补个最基础的概念:CloudWatch里的维度(dimensions) 就是指标的附加分类字段,你现在配置里自动附加的InstanceId就是维度,你要加的Name这类EC2自定义标签,本质就是给所有上报的指标多追加一个维度字段。
注意:CloudWatch Agent默认不会自动拉取EC2自定义标签,需要按下面3步操作才能实现你要的效果。
操作步骤
- 第一步:给EC2实例绑定的IAM角色加权限
找到运行CloudWatch Agent的EC2实例绑定的IAM角色,给角色附加以下权限,允许Agent读取实例自身的标签信息:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:DescribeTags", "Resource": "*" } ] }
这个权限仅用于查询当前实例的标签,没有过度授权风险。
- 第二步:修改CloudWatch Agent配置
你现有的配置里append_dimensions只加了InstanceId,自定义EC2标签的引用格式是${aws:tag:你的标签键名},比如要附加Name标签,就把append_dimensions部分改成下面这样:
"append_dimensions": { "InstanceId": "${aws:InstanceId}", "Name": "${aws:tag:Name}" // 需要附加其他自定义标签就按同样格式追加即可,比如加环境标签就写 "Env": "${aws:tag:Env}" },
注意:标签键的大小写必须和EC2控制台里设置的完全一致,比如标签键是Name就写Name,如果是小写name就对应写name,否则会拉取不到值。
- 第三步:重启Agent加载新配置
从你当前采集的指标(LogicalDisk、% Processor Utility)判断你用的是Windows实例,在管理员权限的PowerShell里执行以下命令重载配置即可:
& $env:ProgramFiles\Amazon\AmazonCloudWatchAgent\amazon-cloudwatch-agent-ctl.ps1 -a fetch-config -m ec2 -s -c file:"$env:ProgramFiles\Amazon\AmazonCloudWatchAgent\config.json"
如果你用的是Linux实例,执行以下命令:
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -s -c file:/opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json
效果验证
配置生效后等1分钟左右,你再看上报的指标数据,dimensions字段里就会带上你配置的自定义标签,和你预期的效果一致,样例如下:
{"metric_stream_name":"QuickPartial-607uQD","account_id":"***","region":"us-east-1","namespace":"Testing2","metric_name":"LogicalDisk Free Megabytes","dimensions":{"InstanceId":"i-***","Name":"Cloudwatch-testing","instance":"D:","objectname":"LogicalDisk"},"timestamp":1657211580000,"value":{"max":10196.0,"min":10196.0,"sum":10196.0,"count":1.0},"unit":"None"}
注意事项
- 如果配置后标签没有出现,按顺序排查:IAM权限是否正确附加、标签键大小写是否匹配、Agent是否成功重载配置
- CloudWatch单个指标最多支持10个维度,你当前默认上报的维度有InstanceId、instance、objectname共3个,最多还能加7个自定义标签,足够日常使用
- 后续如果修改EC2实例的标签值,不需要重启Agent,Agent会自动定期拉取最新标签值生效
内容的提问来源于stack exchange,提问作者Pa3k.m
相关产品推荐
相关产品推荐

