Prometheusnode_exporter计算CPU利用率的标准公式应该是哪一个
- IT业界
- 2025-07-21 19:05:38

有关CPU利用率计算的两个公式
使用PromQL计算CPU利用率,目前网上有两种说法。第一种(rate和irate均可,一个反映区间值,一个反映瞬时值,新版本指标名为node_cpu_seconds_total),计算单核:
1 - rate(node_cpu{mode="idle"}[5m])计算节点,取各核平均值:
avg(1 - rate(node_cpu{mode="idle"}[5m])) by (instance)第二种,计算单核:
1 - sum(increase(node_cpu{mode="idle"}[1m])) by (cpu,instance) / sum(increase(node_cpu[1m])) by (cpu,instance)计算节点:
1 - sum(increase(node_cpu{mode="idle"}[1m])) by (instance) / sum(increase(node_cpu[1m])) by (instance) 为什么使用irate/rate计算CPU利用率结果是不准确/错误的在实际使用中我们会发现,当节点的CPU实际利用率较低时,使用第一种公式计算出的CPU利用率与实际相差较大,这是因为该公式存在逻辑上的错误。以1 - rate(node_cpu{mode="idle"}[5m]),该公式计算逻辑为1 - 5分钟内CPU idle时间/CPU总运行时间5分钟,即假定CPU 5分钟内处于各状态的时间之和为5m。
我们使用一台4核空闲机器进行测试,top显示节点与单核CPU利用率约在1%左右,此时计算sum(increase(node_cpu[5m])) by (cpu),可见5分钟内各状态时间之和约为50-60s: 使用chaosd加压(chaosd attack stress cpu -l 50 -w 4),top显示节点与单核CPU利用率约在75-85%左右,此时计算sum(increase(node_cpu[5m])) by (cpu),可见5分钟内各状态时间之和约为180-190s: 继续加压(chaosd attack stress cpu -l 90 -w 4),top显示节点与单核CPU利用率约在92-93%左右,此时计算sum(increase(node_cpu[5m])) by (cpu),可见5分钟内各状态时间之和约为280-290s: 由此可见,只有在CPU利用率较高时,CPU各状态之和才近似等于节点运行时间。
结论使用irate/rate计算CPU利用率是不准确的,且CPU利用率越低计算结果越不准确。
因此在使用node_exporter计算CPU利用率时,因采用第二种方法。
Prometheusnode_exporter计算CPU利用率的标准公式应该是哪一个由讯客互联IT业界栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“Prometheusnode_exporter计算CPU利用率的标准公式应该是哪一个”
上一篇
C++哈希表的实现