如何监控AWS实例的所有CPU核心使用率(含单核最值/均值)
获取AWS 8核EC2实例单CPU核心使用率的解决方案
方案1:通过CloudWatch自定义指标持久化收集单核心数据
AWS默认CloudWatch的CPU使用率是实例层面的平均值,要获取单核心数据,需借助CloudWatch Agent采集自定义指标:
- 在EC2实例上安装CloudWatch Agent(Amazon Linux或Ubuntu可通过包管理器直接安装)
- 创建自定义配置文件(如
/opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json),配置采集/proc/stat中的CPU核心数据,核心是通过维度区分不同CPU核心,示例配置片段:
(需配合脚本解析{ "metrics": { "metrics_collected": { "procstat": [ { "measurement": ["cpu_usage"], "metrics_collection_interval": 60, "dimensions": [{"Name": "CoreId", "Value": "${core_id}"}] } ] } } }/proc/stat的单核心数据,将核心ID映射到CoreId维度) - 启动CloudWatch Agent后,在CloudWatch控制台的自定义命名空间下,找到带
CoreId维度的CPU使用率指标,即可查看每个核心的实时数据,通过CloudWatch的统计功能(Max、Average)获取指定时间范围内的最大和平均使用率。
方案2:实例内直接采集(临时/实时需求)
如果只是临时查看或统计,可使用Linux系统自带工具:
- 实时查看所有核心使用率:执行
mpstat -P ALL 5 10,其中5是采样间隔(秒),10是采样次数,输出会列出每个核心的%usr、%sys等使用率数据 - 统计最大/平均使用率:编写简单bash脚本批量处理采样数据,示例:
该脚本每秒采样1次,共采样60次,计算每个核心的平均和最大CPU使用率(用户态+系统态)mpstat -P ALL 1 60 | grep -v 'all' | awk '{ core[$2]++; sum[$2] += $3 + $4; if (($3 + $4) > max[$2]) max[$2] = $3 + $4 } END { for (c in core) { print "核心" c ": 平均使用率=" sum[c]/core[c] "%, 最大使用率=" max[c] "%" } }'
方案3:通过Systems Manager批量执行脚本(多实例场景)
如果有多台同配置实例需要采集,可使用AWS Systems Manager的Run Command功能:
- 创建包含上述采样脚本的文档
- 选择目标实例执行脚本,执行结果会返回每个实例的单核心使用率统计数据,无需登录实例即可批量获取
内容的提问来源于stack exchange,提问作者user2071089
相关产品推荐
相关产品推荐

