开启超线程时如何在Grafana中显示不超过100%的CPU聚合使用率
问题解决方法
问题根源
你之前的查询使用sum直接加总所有逻辑CPU的使用率,开启超线程后逻辑核心数大于1,总和自然会超过100%。Grafana的坐标轴限值仅修改显示范围,不会修改查询返回的原始数值,因此曲线峰值仍会超出显示边界。
你之前尝试的avg版本逻辑错误:该avg是对所有CPU模式的计算结果取平均,而非对CPU核心数取平均,因此无法得到归一化的使用率结果。
正确查询语句
基础版
自动根据逻辑CPU数量做归一化,最大值自然为100%:
sum(irate(node_cpu_seconds_total{instance="localhost",job="node", mode!="idle"}[5m])) / count(count by (cpu) (node_cpu_seconds_total{instance="localhost",job="node"})) * 100
强制限幅版
额外使用clamp函数强制将数值限制在0-100区间,避免极端统计误差导致的数值异常:
clamp( sum(irate(node_cpu_seconds_total{instance="localhost",job="node", mode!="idle"}[5m])) / count(count by (cpu) (node_cpu_seconds_total{instance="localhost",job="node"})) * 100, 0, 100 )
语句逻辑说明
- 分母部分
count(count by (cpu) (node_cpu_seconds_total{instance="localhost",job="node"}))用于统计当前实例的逻辑CPU总数量 - 所有核心的非空闲时间增长率总和除以核心数,得到单核心平均使用率,归一化到0-1区间后乘以100得到百分比,最大值不会超过100%
clamp函数为额外保险层,即使出现数据采集误差也不会返回超出0-100范围的数值
内容的提问来源于stack exchange,提问作者majid asad
相关产品推荐
相关产品推荐

