如何通过Prometheus的process_cpu_seconds_total指标计算主机CPU利用率?
如何用process_cpu_seconds_total计算主机CPU利用率百分比
当然可以!其实用process_cpu_seconds_total指标完全能算出主机的CPU利用率百分比,我给你拆解清楚逻辑和具体操作:
首先得搞懂这个指标的本质:process_cpu_seconds_total是进程累计消耗的CPU时间(单位是秒),属于单调递增的计数器。用irate或者rate计算后,得到的是进程每秒消耗的CPU时间——这个数值其实就对应着进程使用的CPU核心数(比如结果是1.5,就表示进程当前用了1.5个核心的算力)。
要转换成百分比,只需要把这个值除以主机的总CPU核心数,再乘以100就行。这里推荐用动态方式获取总核心数(比手动写固定值灵活),可以借助node_cpu_seconds_total指标来计算:
具体查询语句
如果用irate(适合查看瞬时CPU波动):
100 * (irate(process_cpu_seconds_total[1m]) / count(count(node_cpu_seconds_total{mode="idle"}) by (cpu)))
如果想看长期趋势,把irate换成rate就行:
100 * (rate(process_cpu_seconds_total[5m]) / count(count(node_cpu_seconds_total{mode="idle"}) by (cpu)))
语句拆解
irate(process_cpu_seconds_total[1m]):计算目标进程在最近1分钟内每秒消耗的CPU时间,反应瞬时的CPU使用强度count(count(node_cpu_seconds_total{mode="idle"}) by (cpu)):先按cpu标签分组统计每个核心的空闲记录,再统计总数量,得到主机的总CPU核心数- 乘以100是把核心数占比转换成百分比形式
注意事项
- 要确保你的Prometheus能获取到目标主机的
node_exporter指标(也就是能拿到node_cpu_seconds_total),如果没有的话,也可以直接把分母换成主机的固定核心数(比如4核就写4) - 如果要监控特定进程,记得给
process_cpu_seconds_total加上标签过滤,比如process_cpu_seconds_total{job="your-app-job"},避免统计错进程 irate对短时间内的CPU突变更敏感,rate会平滑掉波动,根据你的监控场景选就行
内容的提问来源于stack exchange,提问作者Arnav Bose
相关产品推荐
相关产品推荐

