Skip to content

Commit 5d80e5f

Browse files
committed
code refactor
1 parent 0b389a9 commit 5d80e5f

6 files changed

Lines changed: 77 additions & 0 deletions

File tree

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
---
2+
title: "通知规则"
3+
description: "夜莺监控(Nightingale)支持通知规则,可以配置通知方式、接收人等信息。当告警事件触发时,夜莺会根据通知规则发送通知。比如高级别的告警打电话、发短信、发钉钉,低级别的告警发邮件等。"
4+
date: 2025-06-01T18:12:58+08:00
5+
lastmod: 2025-06-01T18:12:58+08:00
6+
draft: false
7+
images: []
8+
menu:
9+
docs:
10+
parent: "usage"
11+
weight: 1400
12+
toc: true
13+
---
14+
15+
告警规则负责产生告警事件,通知规则负责把告警发送出去,不同的告警可以选择不同的通知媒介,比如高级别的告警打电话、发短信、发钉钉,低级别的告警发邮件等。再进行通知之前,还可以引入事件处理器,对告警事件做额外的处理,开源版本支持 Relabel、Callback、Event Update、Event Drop 四类处理器,不同的处理器可以组成一个 Pipeline,对告警事件做一些很灵活的处理。场景比如:
16+
17+
- 跟内部的 CMDB 打通,附加一些更丰富的信息到告警事件上
18+
- 调用 DeepSeek 的接口,对告警事件做一些智能分析,然后把分析结果附加到告警事件上
19+
- 把所有告警事件发送到自己的系统,相当于镜像一份,做后续的分析处理
20+
- 一些特定的告警事件可以 Drop 掉,比如一些恢复事件不想发送通知
21+
22+
事件处理 Pipeline 是个相对高级的功能,普通用户用不上,本文主要介绍基础通知规则的配置。
23+
24+
## 设计初衷
25+
26+
老版本的夜莺没有通知规则的概念,是在告警规则里直接配置通知媒介和通知接收人,虽然直观,但是不够灵活,有如下问题:
27+
28+
- 告警规则中启用抑制之后,通知媒介仍然只能写死的问题。之前版本的告警规则中如果启用了抑制规则,通常意味着,不同的阈值想要使用不同的级别,进而使用不同的通知媒介发送告警,比如 Critical 级别的告警使用电话、短信,Info 级别的告警使用 Email。但是之前版本的告警规则中,通知媒介是写死的,无法做到不同的级别不同的媒介。
29+
- 接入电话、短信等通知方式不方便。这次我们提供了通用的 HTTP、脚本发送方式,HTTP 的参数、Header、Body 都可以自定义,这样一来,可以更方便接入不同通知媒介了。
30+
- 之前的通知方式和告警规则强耦合,不方便改动。新版本抽象了「通知规则」的概念,告警规则直接关联的是通知规则,通知规则中可以定义灵活的发送方式。每个小研发团队通常只需要定义一个通知规则,然后所有的告警规则都关联这个通知规则即可。后面改动通知规则也是非常方便的,改一个地方即可影响所有告警规则。
31+
- 之前版本消息模板比较死板,每个类型的通知媒介只能固定使用一个消息模板。新版本支持消息模板自定义,而且每个通知媒介可以关联不同的消息模板,比如 DBA 团队和 大数据 团队都要使用钉钉机器人发告警,但是希望使用不同的消息模板,现在就可以做到了。
32+
33+
## 逻辑示意
34+
35+
新版本的告警事件发送逻辑,整体流程变成如下这个样子:
36+
37+
<img src="/img/usage/notify-rules/01.png" alt="通知规则和告警规则的联动逻辑"/>
38+
39+
之前的版本,是在告警规则里直接配置通知媒介+告警接收人,耦合严重。新版本是在告警规则里关联通知规则,具体如何发送是在通知规则里定义的,这样一来,告警规则和通知规则解耦,多个告警规则可以关联一个通知规则,如果想要改动通知方式,只需要改动通知规则即可。
40+
41+
## 配置说明
42+
43+
通知规则可以支持不同的通知媒介,而且可以定义不同的媒介适用的范围,比如电话这个通知媒介,只适用于 Critical 的告警,而 Email 则适用于 Critical、Warning、Info 所有告警。下面是一个通知规则配置样例:
44+
45+
<img src="/img/usage/notify-rules/02.png" alt="通知规则配置样例"/>
46+
47+
对于通知媒介,我们会内置一些,方便大家开箱即用:
48+
49+
<img src="/img/usage/notify-rules/03.png" alt="内置媒介列表"/>
50+
51+
打开通知媒介的配置,其中有个「变量配置」不太好理解。我说个场景:比如 DBA 团队和 BigData 团队都想使用企微这个通知媒介发告警,但是他们想使用不同的企微机器人,即 Webhook 地址基本相同,但是 URL 参数中的 Key 不同(不同的 Key 代表不同的机器人)。此时应该怎么做?
52+
53+
在夜莺的设计里,不希望创建两个不同的通知媒介。还是希望只有企微一个通知媒介,但是这个通知媒介支持传参,DBA 同学在配置告警通知规则的时候,选择企微这个通知媒介的同时,要填写自己的机器人的 Key,BigData 同学也是一样,也是配置企微通知媒介 + BigData 的企微机器人 Key。这样一来,一个通知媒介就可以支持多个机器人了。
54+
55+
如何让通知媒介支持参数呢?就是在媒介的变量配置中进行创建。内置的企微通知媒介就是创建了两个参数,一个 Key(表示企微机器人Key),一个 Bot Name(机器人名称,自定义的,纯粹是为了方便记忆,类似备注的效果)。进而,在企微媒介的 HTTP 配置中,就可以引用这个参数,比如:
56+
57+
<img src="/img/usage/notify-rules/04.png" alt="通知媒介变量定义"/>
58+
59+
这个场景相对简单,媒介通知的时候,获取用户填写的 Key 即可。还有更复杂的场景。比如发短信,此时媒介参数如何定义?如果直接定义成 Phone,然后让用户在通知规则中手写手机号,那就有点费劲了。而且用户的联系方式如果发生变化,除了要到个人中心修改自己的手机号,还要到通知规则里改,太过麻烦。而手机号已经在个人的联系方式中了,那直接把二者贯通即可。
60+
61+
对于这类场景,可以概括为:媒介需要的参数来自用户的 Profile 信息。这个时候,就需要在媒介的变量配置中,引用用户的 Profile 信息。比如:
62+
63+
<img src="/img/usage/notify-rules/05.png" alt="通知媒介管理用户 Profile"/>
64+
65+
媒介变量这里,联系方式选择 Phone,然后就会有一系列的魔法,魔法效果是:
66+
67+
- 通知规则那里,系统根据媒介里的 Phone 联系方式,知道用户想发通知给某些人,通知规则那里就可以选择联系人或团队了,而不是手写手机号。
68+
- 在 HTTP 的 request body 或 query string 中,可以引用一个魔法变量:`{{ $sendto }}`,表示被通知对象的手机号。这样一来,通知媒介就可以根据这个变量,把告警通知发给正确的人了。`{{ $sendto }}` 这个设计是从 Zabbix 学的,如果你用过 Zabbix,应该会很熟悉。
69+
70+
## 具体配置举例
71+
72+
- [对接钉钉告警](https://flashcat.cloud/blog/n9e-v8-notify-dingtalk/)
73+
- [对接企微告警](https://flashcat.cloud/blog/n9e-v8-notify-wecom/)
74+
- [对接飞书告警](https://flashcat.cloud/blog/n9e-v8-notify-feishu/)
75+
- [对接钉钉告警,如何配置 at 人](https://flashcat.cloud/blog/n9e-v8-notify-dingtalk-ats/)
76+
- [对接钉钉、飞书、企微通知](https://flashcat.cloud/blog/n9e-v8-notify-practice/)
77+
- [对接阿里云短信](https://flashcat.cloud/docs/content/flashcat-monitor/nightingale-v7/usage/notification/ali-sms/)
81.8 KB
Loading
232 KB
Loading
234 KB
Loading
225 KB
Loading
48.1 KB
Loading

0 commit comments

Comments
 (0)