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

如何在Prometheus中创建特定条件的UPS状态告警规则?

解决UPS电池供电告警误报的Prometheus规则配置

最终告警规则

groups:
- name: ups_alerts
  rules:
  - alert: UPSOnBatteryPower
    expr: upsBasicOutputStatus != 2 and count_over_time(upsBasicOutputStatus == 4[1m]) == 0
    labels:
      severity: critical
    annotations:
      summary: "UPS {{ $labels.instance }} 已切换至电池供电"
      description: "UPS {{ $labels.instance }} 当前输出状态为 {{ $value }},且过去1分钟内未执行自检,确认是真实电池供电状态。"

规则逻辑拆解

  • upsBasicOutputStatus != 2:直接匹配UPS当前非市电供电的状态(对应电池供电场景,这是告警的核心触发条件,保证真实告警无延迟)
  • count_over_time(upsBasicOutputStatus == 4[1m]) == 0:统计过去1分钟内UPS处于自检状态(值为4)的数据点数量,等于0说明这段时间内没有自检行为,彻底排除自检导致的误报;同时,当自检结束后如果UPS确实停留在电池供电状态,只要自检结束超过1分钟,该条件就会满足,不会漏报真实告警。

为什么不用unless_over_time

unless_over_time(upsBasicOutputStatus == 4[1m])的逻辑是“当前表达式成立,且时间范围内没有匹配到指定条件”,但Prometheus的时间序列数据可能存在采集偏移,导致偶尔的时间窗口不匹配,反而触发误告警。而count_over_time是精确统计时间窗口内的匹配次数,稳定性更高,能避免数据偏移带来的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 22:58:11