如何为EC2实例的CloudWatch添加自定义指标并通过SSM自动化配置
CloudWatch Agent 配置文件全量路径梳理
不管是Linux还是Windows实例,CloudWatch Agent的配置文件分布在几个固定路径,除了你提到的主配置和.d目录,还有这些可能的位置:
Linux 系统
- 主配置文件:
/opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json(部分环境也可能是/etc/amazon-cloudwatch-agent/config.json) - 扩展配置目录:
/opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.d/下所有.json文件,Agent会自动合并此处的所有配置 - 临时运行时配置:
/opt/aws/amazon-cloudwatch-agent/tmp/amazon-cloudwatch-agent.tmp.json,这是通过SSM Parameter Store加载配置时生成的临时文件,不建议直接修改 - 旧版本兼容路径:早期部署的Agent可能使用
/var/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json
Windows 系统
- 主配置文件:
C:\Program Files\Amazon\AmazonCloudWatchAgent\config.json - 扩展配置目录:
C:\Program Files\Amazon\AmazonCloudWatchAgent\config.d\下所有.json文件 - 临时运行时配置:
C:\Program Files\Amazon\AmazonCloudWatchAgent\tmp\amazon-cloudwatch-agent.tmp.json
确认实例正在使用的配置文件
要避免盲目修改,先确认当前生效的配置来源:
- 查看Agent日志:Linux看
/var/log/amazon/amazon-cloudwatch-agent/amazon-cloudwatch-agent.log,Windows看C:\Program Files\Amazon\AmazonCloudWatchAgent\Logs\amazon-cloudwatch-agent.log,日志里会明确打印加载的配置路径,比如Loading config file path: /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json - 执行状态命令:Linux运行
/opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -m ec2 -a status,Windows运行& "C:\Program Files\Amazon\AmazonCloudWatchAgent\amazon-cloudwatch-agent-ctl.exe" -m ec2 -a status,输出的config status部分会显示配置加载的来源和状态
追加自定义指标的最优方案
优先选择在扩展配置目录新增独立文件,因为Agent会自动合并所有.d目录下的配置,不会破坏原有主配置:
- 在对应系统的
.d目录创建新JSON文件(比如custom-metrics.json),内容只包含需要追加的指标配置,示例如下:
{ "metrics": { "append_dimensions": { "InstanceId": "${aws:InstanceId}" }, "metrics_collected": { "procstat": [ { "measurement": ["cpu_usage"], "metrics_collection_interval": 60, "pid_file": "/var/run/httpd.pid" } ] } } }
- 如果必须修改主配置文件,先备份再用
jq(Linux)或PowerShell JSON工具(Windows)编辑,避免手动出错:
Linux备份并追加命令示例:
cp /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json.bak jq '.metrics.metrics_collected += {"procstat": [{"measurement": ["cpu_usage"], "metrics_collection_interval": 60}]}' /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json.bak > /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json
- 修改后重启Agent生效:
- Linux:
/opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -m ec2 -a stop && /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -m ec2 -a start - Windows:
& "C:\Program Files\Amazon\AmazonCloudWatchAgent\amazon-cloudwatch-agent-ctl.exe" -m ec2 -a stop; & "C:\Program Files\Amazon\AmazonCloudWatchAgent\amazon-cloudwatch-agent-ctl.exe" -m ec2 -a start
用SSM实现批量自动化操作
通过SSM Run Command可以批量完成所有实例的配置更新,步骤如下:
- 确保目标EC2实例已安装SSM Agent,且关联的IAM角色拥有
AmazonSSMManagedInstanceCore权限 - 选择SSM的预定义文档:Linux用
AWS-RunShellScript,Windows用AWS-RunPowerShellScript,或者自定义文档 - 编写对应系统的执行脚本:
Linux 自动化脚本
#!/bin/bash # 自定义指标配置内容,按需修改 CUSTOM_CONFIG='{ "metrics": { "append_dimensions": { "InstanceId": "${aws:InstanceId}" }, "metrics_collected": { "procstat": [ { "measurement": ["cpu_usage"], "metrics_collection_interval": 60, "pid_file": "/var/run/httpd.pid" } ] } } }' # 创建扩展配置目录(如果不存在) mkdir -p /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.d/ # 写入自定义配置文件 echo "$CUSTOM_CONFIG" > /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.d/custom-metrics.json # 重启CloudWatch Agent /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -m ec2 -a stop && /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -m ec2 -a start # 输出状态验证 /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -m ec2 -a status
Windows 自动化脚本
# 自定义指标配置内容,按需修改 $customConfig = @" { "metrics": { "append_dimensions": { "InstanceId": "${aws:InstanceId}" }, "metrics_collected": { "procstat": [ { "measurement": ["cpu_usage"], "metrics_collection_interval": 60, "pid_file": "C:\\Windows\\System32\\inetsrv\\w3wp.pid" } ] } } } "@ # 创建扩展配置目录(如果不存在) $configDir = "C:\Program Files\Amazon\AmazonCloudWatchAgent\config.d\" if (-not (Test-Path $configDir)) { New-Item -ItemType Directory -Path $configDir | Out-Null } # 写入自定义配置文件 $configPath = Join-Path $configDir "custom-metrics.json" $customConfig | Out-File -FilePath $configPath -Encoding utf8 # 重启CloudWatch Agent & "C:\Program Files\Amazon\AmazonCloudWatchAgent\amazon-cloudwatch-agent-ctl.exe" -m ec2 -a stop & "C:\Program Files\Amazon\AmazonCloudWatchAgent\amazon-cloudwatch-agent-ctl.exe" -m ec2 -a start # 输出状态验证 & "C:\Program Files\Amazon\AmazonCloudWatchAgent\amazon-cloudwatch-agent-ctl.exe" -m ec2 -a status
- 在SSM控制台选择目标实例(可通过标签筛选),执行脚本即可批量完成配置追加和Agent重启
内容的提问来源于stack exchange,提问作者tantan69
相关产品推荐
相关产品推荐

