通知规则

告警规则负责产生告警事件,通知规则负责把告警发送出去,不同的告警可以选择不同的通知媒介,比如高级别的告警打电话、发短信、发钉钉,低级别的告警发邮件等。

设计初衷

老版本的夜莺没有通知规则的概念,是在告警规则里直接配置通知媒介和通知接收人,虽然直观,但是不够灵活,有如下问题(如果是新用户,可以跳过下面的问题背景):

  • 告警规则中启用抑制之后,通知媒介仍然只能写死的问题。之前版本的告警规则中如果启用了抑制规则,通常意味着,不同的阈值想要使用不同的级别,进而使用不同的通知媒介发送告警,比如 Critical 级别的告警使用电话、短信,Info 级别的告警使用 Email。但是之前版本的告警规则中,通知媒介是写死的,无法做到不同的级别不同的媒介。
  • 接入电话、短信等通知方式不方便。这次我们提供了通用的 HTTP、脚本发送方式,HTTP 的参数、Header、Body 都可以自定义,这样一来,可以更方便接入不同通知媒介了。
  • 之前的通知方式和告警规则强耦合,不方便改动。新版本抽象了「通知规则」的概念,告警规则直接关联的是通知规则,通知规则中可以定义灵活的发送方式。每个小研发团队通常只需要定义一个通知规则,然后所有的告警规则都关联这个通知规则即可。后面改动通知规则也是非常方便的,改一个地方即可影响所有告警规则。
  • 之前版本消息模板比较死板,每个类型的通知媒介只能固定使用一个消息模板。新版本支持消息模板自定义,而且每个通知媒介可以关联不同的消息模板,比如 DBA 团队和 大数据 团队都要使用钉钉机器人发告警,但是希望使用不同的消息模板,现在就可以做到了。

逻辑示意

新版本的告警事件发送逻辑,整体流程变成如下这个样子:

通知规则和告警规则的联动逻辑
  • 告警规则 负责产生告警事件,通知规则 负责对事件做后续处理、通知
  • 告警规则 的配置中,选择关联的 通知规则

配置原理

这部分讲解了通知规则的原理逻辑,建议您阅读。如果您着急,也可以先阅读具体配置举例,实操之后再回来阅读原理。

通知规则可以支持不同的通知媒介,而且可以定义不同的媒介适用的范围,比如电话这个通知媒介,只适用于 Critical 的告警,而 Email 则适用于 Critical、Warning、Info 所有告警。下面是一个通知规则配置样例:

通知规则配置样例

夜莺内置了几十种通知媒介,方便大家开箱即用:

内置媒介列表

打开通知媒介的配置,其中有个「变量配置」稍难理解。可以把通知媒介看做一个 function,把「变量配置」看做是在定义这个 function 的参数。

需求场景一

比如 DBA 团队和 BigData 团队都想使用企微这个通知媒介发告警,但是他们想使用不同的企微机器人(即机器人的 Webhook 中的 Key 不同)。此时应该怎么做?

使用变量传入企微机器人的 Key

DBA 和 BigData 两个团队各自在配置通知规则时,都选用企微通知媒介,但是传入不同的机器人 Key 作为参数。

具体配置方法

内置的企微媒介支持两个参数(在「变量配置」定义,相当于在定义 function 的参数):

  • key:表示企微机器人 Key
  • bot_name:自定义机器人名称,相当于备注

企微的 「HTTP 配置」可以看做 function 的实现,在实现里可以引用参数。

通知媒介变量定义

之后,在通知规则中即可使用“企微通知媒介”(类似于在通知规则中做 function 的最终调用,调用时传入 key 和 bot_name 参数的值)。

需求场景二

短信发送场景下,需要给「短信媒介」传入手机号才可以,但如果在通知规则中写具体的手机号就不够灵活,比如用户的联系方式发生变化,就要修改所有的通知规则。

实际上,用户的个人联系方式中,已经包含手机号信息了,在通知规则中调用某个“通知媒介”的时候,直接选择用户、团队作为接收者,无需填写具体的手机号。

对于这类场景,可以概括为:媒介需要的参数来自用户的 Profile 信息。这个时候,就需要在媒介的变量配置中,引用用户的 Profile 信息。比如:

通知媒介管理用户 Profile

媒介变量这里,联系方式选择 Phone,运行机制为:

  • 通知规则那里,自动出现用户、团队的选择框,您可以在此选择告警接收人。
  • 在 HTTP 的 request body 或 query string 中,可以引用一个变量:{{ $sendto }},表示被通知对象的手机号。这样一来,通知媒介就可以根据这个变量,把告警通知发给正确的人了。{{ $sendto }} 这个设计和 Zabbix 是一样的。

具体配置举例

邮件告警配置

上面给的文档链接讲解了常用的 IM 告警媒介,这里再补充一个邮件告警的配置说明。要想发送告警邮件,核心有三个地方需要注意:

  1. SMTP 发信服务器的配置
  2. 告警接收人得配置个人收件箱
  3. 邮件通知的消息模板

1. SMTP 发信服务器的配置

进入 通知媒介 菜单,找到内置的 Email 通知媒介,进去编辑,填写 SMTP 发信服务器的相关信息,比如我是这么配置的:

邮件通知媒介配置

2. 用户在个人中心配置自己的收件邮箱地址

点击右上角的头像,进入个人信息配置页面,填写自己的收件邮箱地址即可。

3. 配置通知规则

为了测试方便,我这里创建了一个全新的通知规则(你也可以在既有的通知规则上改动,增加邮件媒介),生效到所有级别的告警事件,即任一告警事件产生,都要走邮件通知给我。配置如下:

邮件通知规则配置

我上面配置的是发给我个人,你也可以发给某个团队。然后点击通知测试,选择一个历史告警事件,就可以测试邮件通知了。最后,把通知规则配置到告警规则里就可以了。

4. 邮件通知的消息模板

消息模板 菜单下,找到 Email 消息模板,里边有两个变量:

  • content:邮件正文内容
  • subject:邮件主题

这俩字段都使用 go template 语法,您可以根据自己的需求调整邮件内容和主题。

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