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

Prometheus能否像Zabbix按条件发告警恢复消息?规则配置验证

Prometheus告警配置相关问题解答

一、Prometheus是否支持类似Zabbix的告警恢复规则?

是的,Prometheus完全支持阈值触发告警+满足恢复条件并持续指定时长后发送恢复通知的功能:

  • 告警触发:通过PromQL定义告警规则,当指标超过设定阈值(如CPU使用率>95%)且持续指定时长(如1分钟)时触发告警。
  • 恢复通知:当指标回落至恢复阈值(如CPU使用率<70%)且持续指定时长(如15分钟)时,AlertManager会自动发送恢复消息——只要告警规则的触发条件不再满足且持续足够时间,就会触发恢复流程,无需额外配置。

二、现有AlertManager规则的问题分析与修正

核心需求

当host_tracker_down指标值≥1,且对应zone维度过去1小时内未触发过相同告警时发送告警,需按zone维度分别告警。

现有查询语句的问题

  1. 第一个查询逻辑错误:count_over_time(...) <=1包含了“过去1小时内触发过1次告警”的情况,不符合“未触发”的需求。
  2. 第二个查询写法有误:absent_over_time(...) >=1无法正确完成zone维度的关联匹配,不能准确过滤出对应zone无历史告警的场景。

修正后的查询语句

要实现按zone维度过滤,确保某个zone下过去1小时内无对应触发告警,同时当前host_tracker_down处于down状态,正确的PromQL如下:

(host_tracker_down{job="donodeexporter", state="down"} >= 1) 
and on(zone) 
absent_over_time(ALERTS{job="donodeexporter", state="down", alertstate="firing", receiver="emailhosttracker", alertname="HostTrackerSiteDown"}[1h])
  • 逻辑说明:absent_over_time会为每个zone返回结果——若该zone在1小时内无对应firing告警,返回1;若有则无结果。通过on(zone)做维度匹配,仅当当前host_tracker_down触发且对应zone无历史告警时,才会生成新告警。

替代方案(更直观的统计写法)

如果需要更严谨的“过去1小时内从未触发”逻辑,也可以用count_over_time统计次数为0,注意确保ALERTS指标的zone标签与host_tracker_down完全匹配:

(host_tracker_down{job="donodeexporter", state="down"} >= 1) 
and on(zone) 
count_over_time(ALERTS{job="donodeexporter", state="down", alertstate="firing", receiver="emailhosttracker", alertname="HostTrackerSiteDown"}[1h]) == 0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 00:20:34