You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何检测指定时段内单调递增的Prometheus Gauge指标

针对Gauge指标持续单调递增的检测方案

完全可以通过PromQL原生函数实现该检测能力,无需额外部署组件,可直接对接Grafana告警,识别空调停机这类温度持续上涨的异常场景。

核心判定逻辑

不需要追求数学定义上的绝对严格单调,工程落地只要满足三个条件即可覆盖绝大多数真实场景,同时压低误报率:

  • 指定时间窗口内,指标没有出现超过传感器误差范围的下跌
  • 窗口整体涨幅超过日常正常波动阈值,避免平值、浮点计算误差误报
  • 窗口内最小值出现在窗口前期、最大值出现在窗口后期,排除先涨后跌、V型波动的非单调场景

不同时间窗口的PromQL实现

短窗口场景(数分钟级,比如5分钟检测)

用idelta函数逐点计算相邻采样点的差值,精准识别每一次下跌,适合短时间快速告警的场景,示例配置(以温度指标room_temperature_celsius为例,判定5分钟内持续上涨):

(
  # 统计5分钟窗口内,温度出现超过0.1℃下跌的采样点数量,结果为0代表无有效下跌
  count_over_time(idelta(room_temperature_celsius[1m]) < -0.1[5m:]) == 0
)
and
(
  # 校验5分钟内累计涨幅超过0.5℃,过滤无实际变化的平值场景
  room_temperature_celsius - room_temperature_celsius offset 5m > 0.5
)

参数调整说明:

  • idelta后的[1m]需要根据实际抓取间隔调整,保证覆盖至少2个采样周期即可,比如抓取间隔是30s就设为1m,抓取间隔是1m就设为2m
  • 下跌判定阈值-0.1、累计涨幅阈值0.5可以根据传感器精度、日常温度波动范围调整,比如工业级传感器精度高可以把下跌阈值设为-0.05

长窗口场景(数小时级,比如2小时检测)

逐点计算差值会增加Prometheus查询负载,长窗口场景可以结合线性回归斜率、最值位置判断,性能更好,示例配置:

(
  # 2小时窗口内温度线性回归斜率大于0.1℃/小时,代表整体呈明确上涨趋势
  deriv(room_temperature_celsius[2h]) > 0.1/3600
)
and
(
  # 2小时内最低温度出现在窗口最初10分钟,排除中途下跌的场景
  min_over_time(room_temperature_celsius[2h]) == min_over_time(room_temperature_celsius[10m] offset 1h50m)
)
and
(
  # 2小时内最高温度出现在窗口最后10分钟,排除中途涨完回落的场景
  max_over_time(room_temperature_celsius[2h]) == max_over_time(room_temperature_celsius[10m])
)
and
(
  # 2小时累计涨幅超过2℃,过滤微小波动
  room_temperature_celsius - room_temperature_celsius offset 2h > 2
)

Grafana告警配置注意事项

  • 直接将上述调试好的PromQL填入告警查询面板,触发条件设置为查询结果>0即可
  • 建议给告警规则加1-2分钟的for等待时长,过滤单次采样异常导致的误报
  • 如果部署了多台温度传感器,可以在指标后加对应聚合逻辑,比如按机房维度avg by (room_id)统计平均温度,避免单传感器故障误报

内容的提问来源于stack exchange,提问作者Vlad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 09:36:37