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

如何在Prometheus Alertmanager中实现站点宕机时抑制节点告警?

Prometheus Alertmanager实现站点全宕机时抑制节点告警的方案

你的需求完全可以实现,之前的问题出在站点宕机的告警表达式错误,以及对Alertmanager抑制规则的误解(抑制规则不要求告警名称相同)。以下是具体解决步骤:

一、修正告警规则表达式(snmp.rules)

首先要确保站点全宕机的告警能准确触发,同时给所有节点告警和站点告警带上统一的site_code标签,用于后续抑制匹配。

1. 节点告警规则(每个设备单独配置)

给每个节点告警添加site_code标签,确保标签值和所属站点一致:

groups:
- name: snmp_node_alerts
  rules:
  - alert: RouterDown
    expr: probe_success{job="snmp_icmp", instance="cis004a01"} == 0
    labels:
      severity: critical
      site_code: "004"
      device_type: router
    annotations:
      summary: "路由器 {{ $labels.instance }} 宕机"
  - alert: WirelessDeviceDown
    expr: probe_success{job="snmp_icmp", instance="cis004a02"} == 0
    labels:
      severity: critical
      site_code: "004"
      device_type: wireless
    annotations:
      summary: "无线设备 {{ $labels.instance }} 宕机"
  - alert: SwitchDown
    expr: probe_success{job="snmp_icmp", instance="cis004a03"} == 0
    labels:
      severity: critical
      site_code: "004"
      device_type: switch
    annotations:
      summary: "交换机 {{ $labels.instance }} 宕机"
  # 其他站点的节点告警同理,替换site_code和instance值

2. 站点全宕机告警规则

使用count函数统计站点内所有正常实例的数量,当数量为0时触发告警(表示全站点宕机):

- name: snmp_site_alerts
  rules:
  - alert: SiteFullDown
    expr: count by (site_code) (probe_success{job="snmp_icmp", site_code=~".+"} == 1) == 0
    labels:
      severity: critical
    annotations:
      summary: "站点 {{ $labels.site_code }} 所有设备已宕机"

这个表达式的逻辑是:统计当前site_code下,probe_success为1(正常)的实例数量,若数量为0,说明该站点所有设备都宕机了。

二、配置Alertmanager抑制规则

Alertmanager的抑制规则不要求告警名称相同,只要源告警(站点全宕机)和目标告警(节点宕机)的指定标签匹配,就能实现抑制。

在Alertmanager配置文件中添加以下抑制规则:

inhibit_rules:
- source_match:
    alertname: SiteFullDown
    severity: critical
  target_match_re:
    # 用正则匹配所有节点类的告警名称
    alertname: "^(RouterDown|WirelessDeviceDown|SwitchDown)$"
  equal: ["site_code"]

规则说明:

  • source_match:指定触发抑制的源告警条件(站点全宕机告警)
  • target_match_re:用正则匹配需要被抑制的目标告警(所有节点类告警)
  • equal:指定匹配的标签,当源告警和目标告警的site_code标签值相同时,触发抑制

三、验证逻辑

  • 当站点仅部分节点宕机时:SiteFullDown告警不会触发,节点宕机告警正常发送到对应Slack频道
  • 当站点所有节点都宕机时:SiteFullDown告警触发,同site_code下的所有节点告警都会被抑制,不会发送到Slack

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 22:33:26