如何计算Prometheus中CPU使用率高于x%的时间占比
PromQL统计CPU使用率超阈值时间占比实现方法
核心逻辑和你举例的计数求占比逻辑一致:对统计窗口内的每个CPU使用率采样点做布尔判断,使用率超过阈值记为1、未超过记为0,再对窗口内所有0/1值求平均值,得到的结果就是超阈值的时间占比。
可直接使用的查询语句
以阈值80%、统计最近1小时的占比为例,查询语句如下:
avg_over_time( ( avg without (mode,cpu) ( 1 - rate(node_cpu_seconds_total{mode="idle", job="openwrt"}[1m]) ) * 100 > 80 )[1h:1m] ) * 100
返回结果就是百分比形式的超阈值时间占比,和你举例的10个样本3个超标返回30的计算结果完全匹配。
语句各部分说明
- 内层
avg without (mode,cpu) (1 - rate(node_cpu_seconds_total{mode="idle", job="openwrt"}[1m])) * 100是你原本获取百分比CPU使用率的逻辑,末尾追加的> 80是PromQL布尔判断逻辑:CPU使用率大于80的采样点返回1,否则返回0 [1h:1m]是子查询配置:表示统计最近1小时的时间范围,按照1分钟步长采样,步长和你rate函数使用的1分钟计算窗口对齐,能保证采样准确性,避免统计偏差- 最外层
avg_over_time()会对时间窗口内所有采样得到的0/1值求平均,末尾乘100是把0~1的平均结果转成常用的百分比数值
参数调整说明
- 要修改统计的时间范围,直接调整子查询里的第一个时间参数即可,比如统计最近24小时的占比就改成
[24h:1m] - 要修改判定阈值,直接调整布尔判断后的数值即可,比如统计CPU超过90%的时间占比就把
> 80改成> 90 - 如果你修改了
rate的计算窗口,记得同步调整子查询的步长,保持两者一致即可保证统计结果准确。
内容的提问来源于stack exchange,提问作者Anonymous Mouse
相关产品推荐
相关产品推荐

