如何编写PromQL查询统计7天内CPU使用率超80%的次数?
解决PromQL统计7天内CPU超80%次数的问题
首先得明确你要的是「原始样本中CPU超80%的总次数」,还是「CPU超80%的时间段(比如按固定间隔统计)的次数」,两种场景的写法不一样:
场景1:统计所有原始样本中超80%的次数
PromQL里直接用比较运算符会过滤掉不满足条件的样本,要得到布尔值(满足为1,不满足为0)需要加bool修饰符,再用count_over_time统计过去7天内值为1的样本数:
count_over_time((cpu_percent{name="abc", cluster="def"} bool > 80)[7d:])
bool > 80:把每个样本转换成1(CPU超80%)或0(未超)[7d:]:指定统计过去7天的所有原始数据count_over_time:统计其中值为1的样本总数
场景2:按固定时间间隔统计超80%的时间段次数
如果想统计「每X分钟内CPU最高值超过80%的区间数量」(比如避免短时间内连续重复计数),可以先按区间取最大值,再判断是否超阈值,最后统计符合条件的区间数:
count_over_time((max_over_time(cpu_percent{name="abc", cluster="def"}[5m]) > 80)[7d:5m])
max_over_time(...):每5分钟取一次CPU使用率的最大值>80:过滤出最大值超80%的区间[7d:5m]:过去7天,按5分钟为步长划分区间count_over_time:统计符合条件的区间总数
你之前用count_over_time和max_over_time没得到期望结果,大概率是没加bool修饰符(导致只返回满足条件的原始值,而非布尔值),或者步长/时间范围的写法不对。
内容的提问来源于stack exchange,提问作者aknmz
相关产品推荐
相关产品推荐

