# 屏蔽告警通知

## 抑制规则

抑制是指当警报发出后，停止重复发送由此警报引发其他错误的警报的机制。比如说，当主机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"按钮即可：

![](https://735702182-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M69DxRoC8HFhJcA2bUu%2Fsync%2Fea7250d0d2020740e6ba1a02a63226aca18e8ad0.png?generation=1592397055518899\&alt=media)

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

![](https://735702182-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M69DxRoC8HFhJcA2bUu%2Fsync%2Fd9dfbd9e719bd9a8825f4b03ccd5ce3bbad87285.png?generation=1592397054892549\&alt=media)

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

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

![](https://735702182-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M69DxRoC8HFhJcA2bUu%2Fsync%2F9b8ea8e605c3bb60b5238f6a5880c6edad6dab4a.png?generation=1592397055177766\&alt=media)

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

![](https://735702182-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M69DxRoC8HFhJcA2bUu%2Fsync%2F118b761939084e35910381fbe0a3e5a6d6f600be.png?generation=1592397055336731\&alt=media)

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

![](https://735702182-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M69DxRoC8HFhJcA2bUu%2Fsync%2F64dc84fb8345ef1d85b6ac3e12e3e8b9e9a797f7.png?generation=1592397057282371\&alt=media)

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

![](https://735702182-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M69DxRoC8HFhJcA2bUu%2Fsync%2F2de1c48557e684062f89082205f9e03731cb4d94.png?generation=1592397055707844\&alt=media)
