屏蔽规则

夜莺监控(Nightingale)中的屏蔽规则(菜单入口:告警-规则管理-屏蔽规则TAB)通常用于下面的场景:

  • 提前屏蔽掉预期内的告警,典型的就是做一些维护动作,比如某个机器要重启,提前屏蔽这个机器相关的告警
  • 有些问题急忙修复不了,已经知悉,持续告警通知也没意义,就先临时屏蔽掉

原理

告警事件经由告警引擎产生后,在持久化到 DB 之前,会先经过屏蔽规则的判断,如果匹配了屏蔽规则,就不会持久化到 DB,更无法通知用户。工作时机如下图:

夜莺屏蔽规则工作时机

屏蔽规则,本质上就是配置了一堆过滤条件,用于过滤想要屏蔽的告警事件。如何过滤呢,显然,就是根据告警事件的属性和标签来过滤。比如:

  • 事件是哪个数据源产生的
  • 事件的级别
  • 事件的标签

比如下面的例子:

夜莺屏蔽规则配置示例
  • 数据源类型:Prometheus,只有数据源类型是 Prometheus 的告警事件,才会被屏蔽
  • 数据源:没配,表示不做限制
  • 事件等级:三个级别都勾选了,表示所有级别的告警事件都要被屏蔽
  • 事件标签:配置了两个标签,相当于:ident in ("10,1.2.3", "10.1.2.4") and rulename =~ "宕机"

上面所有的过滤条件,整体是and 的关系,即所有的条件都命中了某个事件,那个事件才会被屏蔽。

FAQ

1. 我已经配置了屏蔽规则,相关告警事件为啥还是可以看到?

通常是因为:事件先产生了,才去配置的屏蔽规则。屏蔽规则是事后补救的,不能对已经产生的事件起作用。

2. 事件标签里的多个条件也是 and 关系,但是用户没有理解

如下图,用户在事件标签过滤那里,配置了两个条目,标签 key 都是 ident:

夜莺屏蔽规则事件标签配置错误示例

用户的本意是 10.1.2.11310.1.2.114 这俩机器任意一台都要被屏蔽,但是事与愿违,这里是 and 的关系,相当于是:ident = "10.1.2.113" and ident = "10.1.2.114",显然,这个条件永远不会命中任何事件。实际上,用户应该使用 in 操作符,如下所示:

夜莺屏蔽规则事件标签配置正确示例

3. 屏蔽规则的生效范围,仅限当前业务组

这个其实在页面上有提示。为了避免误操作,屏蔽规则的生效范围仅限当前业务组。也就是说,屏蔽规则只能屏蔽当前业务组下的告警事件,其他业务组下的告警事件不会受影响。

即:屏蔽规则和告警规则如果在不同业务组下,屏蔽规则不会对其生效。

如果屏蔽规则是全局生效的,就会比较危险,比如某个用户随便配置了一个告警规则,过滤条件可以匹配所有告警事件,那么公司所有的告警事件都会被屏蔽。

🎯 由于读者水平参差不齐,重口难调,社区小伙伴一直在持续更新优化文档内容,如果您觉得本页文档内容有误或不够完善,欢迎您参与到文档的编写中来,点击下方的 Edit this page on GitHub 即可编辑 👇