Skip to content

Commit 552641e

Browse files
committed
refactor notify-rules
1 parent cb67ae6 commit 552641e

1 file changed

Lines changed: 33 additions & 13 deletions

File tree

content/zh/docs/usage/notify-rules.md

Lines changed: 33 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ toc: true
1616

1717
## 设计初衷
1818

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

2121
- 告警规则中启用抑制之后,通知媒介仍然只能写死的问题。之前版本的告警规则中如果启用了抑制规则,通常意味着,不同的阈值想要使用不同的级别,进而使用不同的通知媒介发送告警,比如 Critical 级别的告警使用电话、短信,Info 级别的告警使用 Email。但是之前版本的告警规则中,通知媒介是写死的,无法做到不同的级别不同的媒介。
2222
- 接入电话、短信等通知方式不方便。这次我们提供了通用的 HTTP、脚本发送方式,HTTP 的参数、Header、Body 都可以自定义,这样一来,可以更方便接入不同通知媒介了。
@@ -29,36 +29,58 @@ toc: true
2929

3030
<img src="/img/usage/notify-rules/01.png" alt="通知规则和告警规则的联动逻辑"/>
3131

32-
之前的版本,是在告警规则里直接配置通知媒介+告警接收人,耦合严重。新版本是在告警规则里关联通知规则,具体如何发送是在通知规则里定义的,这样一来,告警规则和通知规则解耦,多个告警规则可以关联一个通知规则,如果想要改动通知方式,只需要改动通知规则即可。
32+
- **告警规则** 负责产生告警事件,**通知规则** 负责对事件做后续处理、通知
33+
- **告警规则** 的配置中,选择关联的 **通知规则**
3334

34-
## 配置说明
35+
## 配置原理
36+
37+
> 这部分讲解了通知规则的原理逻辑,建议您阅读。如果您着急,也可以先阅读[具体配置举例](#具体配置举例),实操之后再回来阅读原理。
3538
3639
通知规则可以支持不同的通知媒介,而且可以定义不同的媒介适用的范围,比如电话这个通知媒介,只适用于 Critical 的告警,而 Email 则适用于 Critical、Warning、Info 所有告警。下面是一个通知规则配置样例:
3740

3841
<img src="/img/usage/notify-rules/02.png" alt="通知规则配置样例"/>
3942

40-
对于通知媒介,我们会内置一些,方便大家开箱即用:
43+
夜莺内置了几十种通知媒介,方便大家开箱即用:
4144

4245
<img src="/img/usage/notify-rules/03.png" alt="内置媒介列表"/>
4346

44-
打开通知媒介的配置,其中有个「变量配置」不太好理解。我说个场景:比如 DBA 团队和 BigData 团队都想使用企微这个通知媒介发告警,但是他们想使用不同的企微机器人,即 Webhook 地址基本相同,但是 URL 参数中的 Key 不同(不同的 Key 代表不同的机器人)。此时应该怎么做?
47+
打开通知媒介的配置,其中有个「变量配置」稍难理解。可以把通知媒介看做一个 function,把「变量配置」看做是在定义这个 function 的参数。
48+
49+
**需求场景一**
50+
51+
比如 DBA 团队和 BigData 团队都想使用企微这个通知媒介发告警,但是他们想使用不同的企微机器人(即机器人的 Webhook 中的 Key 不同)。此时应该怎么做?
52+
53+
**使用变量传入企微机器人的 Key**
54+
55+
DBA 和 BigData 两个团队各自在配置通知规则时,都选用企微通知媒介,但是传入不同的机器人 Key 作为参数。
56+
57+
**具体配置方法**
4558

46-
在夜莺的设计里,不希望创建两个不同的通知媒介。还是希望只有企微一个通知媒介,但是这个通知媒介支持传参,DBA 同学在配置告警通知规则的时候,选择企微这个通知媒介的同时,要填写自己的机器人的 Key,BigData 同学也是一样,也是配置企微通知媒介 + BigData 的企微机器人 Key。这样一来,一个通知媒介就可以支持多个机器人了。
59+
内置的企微媒介支持两个参数(在「变量配置」定义,相当于在定义 function 的参数):
4760

48-
如何让通知媒介支持参数呢?就是在媒介的变量配置中进行创建。内置的企微通知媒介就是创建了两个参数,一个 Key(表示企微机器人Key),一个 Bot Name(机器人名称,自定义的,纯粹是为了方便记忆,类似备注的效果)。进而,在企微媒介的 HTTP 配置中,就可以引用这个参数,比如:
61+
- key:表示企微机器人 Key
62+
- bot_name:自定义机器人名称,相当于备注
63+
64+
企微的 「HTTP 配置」可以看做 function 的实现,在实现里可以引用参数。
4965

5066
<img src="/img/usage/notify-rules/04.png" alt="通知媒介变量定义"/>
5167

52-
这个场景相对简单,媒介通知的时候,获取用户填写的 Key 即可。还有更复杂的场景。比如发短信,此时媒介参数如何定义?如果直接定义成 Phone,然后让用户在通知规则中手写手机号,那就有点费劲了。而且用户的联系方式如果发生变化,除了要到个人中心修改自己的手机号,还要到通知规则里改,太过麻烦。而手机号已经在个人的联系方式中了,那直接把二者贯通即可。
68+
之后,在通知规则中即可使用“企微通知媒介”(类似于在通知规则中做 function 的最终调用,调用时传入 key 和 bot_name 参数的值)。
69+
70+
**需求场景二**
71+
72+
短信发送场景下,需要给「短信媒介」传入手机号才可以,但如果在通知规则中写具体的手机号就不够灵活,比如用户的联系方式发生变化,就要修改所有的通知规则。
73+
74+
实际上,用户的个人联系方式中,已经包含手机号信息了,在通知规则中调用某个“通知媒介”的时候,直接选择用户、团队作为接收者,无需填写具体的手机号。
5375

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

5678
<img src="/img/usage/notify-rules/05.png" alt="通知媒介管理用户 Profile"/>
5779

58-
媒介变量这里,联系方式选择 Phone,然后就会有一系列的魔法,魔法效果是
80+
媒介变量这里,联系方式选择 Phone,运行机制为
5981

60-
- 通知规则那里,系统根据媒介里的 Phone 联系方式,知道用户想发通知给某些人,通知规则那里就可以选择联系人或团队了,而不是手写手机号
61-
- 在 HTTP 的 request body 或 query string 中,可以引用一个魔法变量`{{ $sendto }}`,表示被通知对象的手机号。这样一来,通知媒介就可以根据这个变量,把告警通知发给正确的人了。`{{ $sendto }}` 这个设计是从 Zabbix 学的,如果你用过 Zabbix,应该会很熟悉
82+
- 通知规则那里,自动出现用户、团队的选择框,您可以在此选择告警接收人
83+
- 在 HTTP 的 request body 或 query string 中,可以引用一个变量`{{ $sendto }}`,表示被通知对象的手机号。这样一来,通知媒介就可以根据这个变量,把告警通知发给正确的人了。`{{ $sendto }}` 这个设计和 Zabbix 是一样的
6284

6385
## 具体配置举例
6486

@@ -69,8 +91,6 @@ toc: true
6991
- [对接钉钉、飞书、企微通知](https://flashcat.cloud/blog/n9e-v8-notify-practice/)
7092
- [对接阿里云短信](https://flashcat.cloud/docs/content/flashcat-monitor/nightingale-v7/usage/notification/ali-sms/)
7193

72-
另外,在微信视频号:SRETALK 上也放置了一个视频教程,演示如何接入飞书告警,您可以自行搜索查看。
73-
7494
## 邮件告警配置
7595

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

0 commit comments

Comments
 (0)