如何降低AWS CloudWatch Agent的CPU占用率
降低CloudWatch Agent CPU占用的配置方案
通用优化方式(优先推荐,不影响指标连续性)
- 调整采集采样间隔:在CloudWatch Agent配置文件中修改
metrics_collection_interval参数,默认值通常为10秒,可根据需求调整为30秒、60秒甚至更高,全局生效或针对单个指标单独配置均可,该参数调整后CPU占用会出现明显下降。 - 精简采集指标范围:关闭不需要采集的指标项,例如默认开启的全量进程指标、磁盘所有挂载点指标、多余的自定义维度等,减少不必要的采集开销。
- 优化日志采集配置:如果开启了日志采集功能,可适当调大
force_flush_interval参数的数值,同时配置日志过滤规则丢弃无需上报的日志行,降低日志解析开销。
5分钟间歇运行的PowerShell实现方案
如果通用优化后CPU占用仍不符合预期,可采用间歇运行的方案,无需保留Agent常驻进程,实现步骤如下:
- 先卸载原有常驻Agent服务,执行以下PowerShell命令:
# 停止当前运行的Agent服务 & "C:\Program Files\Amazon\AmazonCloudWatchAgent\amazon-cloudwatch-agent-ctl.ps1" -a stop # 移除Agent系统服务 & "C:\Program Files\Amazon\AmazonCloudWatchAgent\amazon-cloudwatch-agent-ctl.ps1" -a remove
- 编写单次上报脚本,命名为
CloudWatch_OneShot_Report.ps1,内容如下:
# 启动Agent并加载指定配置文件,注意替换为你的实际配置文件路径 & "C:\Program Files\Amazon\AmazonCloudWatchAgent\amazon-cloudwatch-agent-ctl.ps1" -a start -c file://C:\your_config_path\cloudwatch-agent.json -s # 等待足够时间完成采集上报,可根据你的采集量调整等待时长,建议不低于60秒 Start-Sleep -Seconds 120 # 上报完成后停止Agent进程 & "C:\Program Files\Amazon\AmazonCloudWatchAgent\amazon-cloudwatch-agent-ctl.ps1" -a stop
- 创建Windows计划任务实现每5分钟触发一次脚本,可直接执行以下PowerShell命令创建:
# 定义触发规则:每5分钟触发一次,永久生效 $trigger = New-ScheduledTaskTrigger -Once -At (Get-Date) -RepetitionInterval (New-TimeSpan -Minutes 5) -RepetitionDuration ([timespan]::MaxValue) # 定义操作:执行PowerShell脚本,注意替换为你的脚本实际路径 $action = New-ScheduledTaskAction -Execute "powershell.exe" -Argument "-ExecutionPolicy Bypass -File C:\your_script_path\CloudWatch_OneShot_Report.ps1" # 配置运行权限:使用系统账号后台运行,无需用户登录 $settings = New-ScheduledTaskSettingsSet -RunOnlyIfNetworkAvailable -StartWhenAvailable -DontStopOnIdleEnd # 注册计划任务 Register-ScheduledTask -TaskName "CloudWatch_Periodic_Report" -Trigger $trigger -Action $action -Settings $settings -User "SYSTEM" -RunLevel Highest
注意事项
- 间歇运行方案会丢失两次上报间隔内的细粒度指标数据,若对指标连续性有要求优先采用通用优化方案。
- 脚本中的等待时长可根据实际采集指标数量调整,需确保Agent完成采集上报后再执行停止操作,避免数据丢失。
内容的提问来源于stack exchange,提问作者Matt W
相关产品推荐
相关产品推荐

