如何计算Prometheus中当前告警与1分钟前告警的数量差值
原有查询问题说明
你之前使用的count_over_time函数的作用是统计指定时间区间内的样本总数量,而非统计某一时刻的告警活跃条数,两个不同区间的count_over_time结果相减自然无法得到两个时间点的告警数量差值。
正确实现方案
使用PromQL的offset偏移修饰符即可实现需求,基础查询语句如下:
count(ALERTS{job="m60"}) OR vector(0) - (count(ALERTS{job="m60"} offset 1m) OR vector(0))
语句说明:
count(ALERTS{job="m60"}):统计当前时刻的活跃告警总条数,每一个触发中的告警对应一条独立的ALERTS时序,count求和后就是当前告警总数offset 1m:指定查询1分钟前的时序数据,用来获取1分钟前的告警总条数OR vector(0):处理空值场景,当某一时刻没有活跃告警时,count结果会返回空值,用OR vector(0)可以将空值替换为0,避免相减后得到无效的空结果
如果需要仅统计firing状态的告警(排除pending状态),可以额外添加alertstate标签过滤:
count(ALERTS{job="m60", alertstate="firing"}) OR vector(0) - (count(ALERTS{job="m60", alertstate="firing"} offset 1m) OR vector(0))
上述查询返回的结果完全匹配你的需求:结果为正代表当前告警比1分钟前增多,结果为负代表告警减少,直接配置到Grafana的面板中即可正常展示。
内容的提问来源于stack exchange,提问作者andreynone
相关产品推荐
相关产品推荐

