屏蔽告警通知

抑制规则

抑制是指当警报发出后,停止重复发送由此警报引发其他错误的警报的机制。比如说,当主机Down掉后会导致该主机上的其他服务也Down掉;那么当AlertManager发送了一个“主机Down掉”的告警通知后,再接收到该主机上其他服务Down的告警,应该不再为这些告警发送通知。

在Alertmanager配置文件中,使用inhibit_rules定义一组告警的抑制规则:

inhibit_rules:
  [ - <inhibit_rule> ... ]

每一条抑制规则的具体配置如下:

target_match:
  [ <labelname>: <labelvalue>, ... ]
target_match_re:
  [ <labelname>: <regex>, ... ]

source_match:
  [ <labelname>: <labelvalue>, ... ]
source_match_re:
  [ <labelname>: <regex>, ... ]

[ equal: '[' <labelname>, ... ']' ]

比如定义如下的抑制规则:

- source_match:
    alertname: NodeDown
  target_match_reg:
    severity: ~"middle|low"
  equal:
    - node

如果接收到以下的“主机Down”告警,并且为该告警发送了一个通知

{alertname="NodeDown",node="x.x.x.x",...} time annotation

那么alertmanager就会创建一条抑制规则实例:

{node="x.x.x.x",serverity=~"middle|low"}

当接收到以下一条告警,该告警的标签匹配上了上面的抑制规则实例,那么该告警就会被抑制

{alertname="MysqlDown",node="x.x.x.x",serverity="middle",...} time annotation

疑问:如果主机x.x.x.x一段时间后又起来了,那么alertmanager如何对其抑制的告警恢复发送呢?

临时静默

除了基于抑制机制可以控制告警通知的行为以外,用户或者管理员还可以直接通过Alertmanager的UI临时屏蔽特定的告警通知。通过定义标签的匹配规则(字符串或者正则表达式),如果新的告警通知满足静默规则的设置,则停止向receiver发送通知。

进入Alertmanager UI,点击"New Silence"显示如下内容,用户可以通过该UI定义新的静默规则的开始时间以及持续时间,通过Matchers部分可以设置多条匹配规则(字符串匹配或者正则匹配)。填写当前静默规则的创建者以及创建原因后,点击"Create"按钮即可:

静默规则创建成功后,Alertmanager会开始加载该规则并且设置状态为Pending,不过很快规则就会变成Active状态,我们可以通过页面查看:

上面的规则设置了两小时的持久时间,过了两个小时后,该规则就会变成Expired状态。

接着,我们拉搞主机的CPU使用率,触发告警,然后我们在prometheus里看到告警已经firing了

但是我们在alertmanager的alert页面却看不到有alert

我们点击进入这个静默规则的详情里面,可以看到它“影响”到的告警

如果我们想让这条静默规则失效,手动点击“Expire”即可:

Last updated