在prometheus利用公式:100 - (avg by (instance) (irate(node_cpu{instance="xxx", mode="idle"}[5m])) * 100) 计算cpu使用率,如果cpu低负载,且多核(我的是32核)的情况下,会出现负数。
原因:cpu的使用数据都是测算值来的(CPU处于空闲状态时间比例。一般而言,idel + user + nice 约等于100%)。当cpu处于多核、低负载的情况下,值的差异会被放大,从而导致出现负数的情况。
解决方法:
换成公式:avg by (ip)(irate(node_cpu_seconds_total{mode=~"sytem|user|iowait|irq|softirq|nice|steal|guest"}[5m])) * 100