夜莺之前的版本已经支持钉钉、企微、飞书通知,但配置逻辑相对绕。v7.beta11 提供了更直观的方式:在告警规则里配置机器人 webhook 回调地址,夜莺自动识别钉钉、企微、飞书地址并发送通知,同时优化 at 人能力。
需要说明的是,夜莺未来还会重构整个告警通知逻辑,引入 pipeline 能力;v7.beta11 属于过渡阶段的通知配置优化。
核心要点
- 告警规则中可直接配置钉钉、企微、飞书机器人的 webhook 地址。
- 新版本会自动识别回调地址类型,并发送对应平台通知。
- 钉钉 at 人可以通过
ats参数传手机号,多个手机号用逗号分隔。 - 飞书支持普通消息和消息卡片,URL 后增加
card=1可使用卡片方式。 - 企微机器人 webhook 可直接配置在回调地址中,但原文说明暂不支持 at 人。
升级方法
从 v6 版本开始,程序自动创建表结构,所以 v6、v7 的各个小版本之间升级,相对容易,整体逻辑是:
- 备份数据库、二进制、配置文件、integrations 目录,以防万一。
- 下载新版本并解压,修改配置文件中的数据库连接地址、Redis 连接地址、时序库连接地址等个性化信息。
- 停掉老版本,启动新版本。建议新老版本使用不同安装目录,都保留不删,并用软链指向当前使用的版本。
配置方式
新版本可以直接在告警规则里配置企微、钉钉、飞书等机器人的 webhook 地址,从而实现告警通知效果。样例如下:

这里没有配置通知媒介,也没有配置告警接收组,只配置了回调地址。这个回调地址是钉钉机器人地址,使用关键字认证方式,关键字写的是 20。
除了 access_token 参数之外,还手工加了一个 ats 参数,用来表示要 at 的人。钉钉 at 人可以直接写手机号;如果要 at 多个人,就用逗号分隔多个手机号。
如果是老版本,没有配置通知媒介和接收组就不会发送告警通知。v7.beta11 会自动识别回调地址,如果发现是钉钉、企微、飞书地址,就会自动发送通知。下面是钉钉提醒示例:

点开消息之后,具体通知的内容如下:

我这个钉钉的通知模板,用的是下面的模板,大家可以参考一下:
#### {{if .IsRecovered}}<font color="#008800">💚{{.RuleName}}</font>{{else}}<font color="#FF0000">💔{{.RuleName}}</font>{{end}}
---
{{$time_duration := sub now.Unix .FirstTriggerTime }}{{if .IsRecovered}}{{$time_duration = sub .LastEvalTime .FirstTriggerTime }}{{end}}
- **告警级别**: {{.Severity}}级
{{- if .RuleNote}}
- **规则备注**: {{.RuleNote}}
{{- end}}
{{- if not .IsRecovered}}
- **当次触发时值**: {{.TriggerValue}}
- **当次触发时间**: {{timeformat .TriggerTime}}
- **告警持续时长**: {{humanizeDurationInterface $time_duration}}
{{- else}}
{{- if .AnnotationsJSON.recovery_value}}
- **恢复时值**: {{formatDecimal .AnnotationsJSON.recovery_value 4}}
{{- end}}
- **恢复时间**: {{timeformat .LastEvalTime}}
- **告警持续时长**: {{humanizeDurationInterface $time_duration}}
{{- end}}
- **告警事件标签**:
{{- range $key, $val := .TagsMap}}
{{- if ne $key "rulename" }}
- `{{$key}}`: `{{$val}}`
{{- end}}
{{- end}}
飞书方式
飞书有两种通知方式:普通消息和消息卡片。两种方式的回调地址相同,默认发送普通消息;如果想用卡片方式发送,在 webhook URL 后面增加 card=1 参数即可。

钉钉的 API 在 at 人的时候,直接通过手机号就可以了,飞书没法通过手机号 at 人,需要使用用户的 user_id 或 open_id,飞书 API 文档参考。那么待 At 用户在飞书上的 user_id 或 open_id 如何获取呢?
要获取用户的 User ID 或 Open ID,你可以按照以下的步骤操作:
- 创建飞书应用
- a. 访问飞书开发者平台:打开 飞书开放平台.
- b. 登录 -> 创建应用 -> 应用管理 -> 应用发布
- 如果使用飞书的调试工具,可直接进入 调试控制台 点击获取
tenant_access_token

- 找到 “通过手机号或邮箱获取用户 ID 接口”

- 需要为这个应用,添加这个权限。

- 修改请求体参数,点击开始调试,即可获取到用户的 open id 或者 user id(可通过查询参数选择查询的 id 类型)
企微方式
企微机器人的 webhook 也可以直接配置在告警规则的回调地址里实现通知效果,不过企微的方式暂不支持 at 人。
通知配置差异对比
| 平台 | webhook 配置位置 | at 人方式 | 备注 |
|---|---|---|---|
| 钉钉 | 告警规则回调地址 | ats 参数写手机号,多个手机号用逗号分隔 |
原文示例使用关键字认证 |
| 飞书 | 告警规则回调地址 | 需要 user_id 或 open_id | card=1 可发送消息卡片 |
| 企微 | 告警规则回调地址 | 原文说明暂不支持 at 人 | 可直接通过 webhook 发送通知 |
后续计划
近期夜莺还计划做的事情如下:
- 仪表盘:支持内嵌 Grafana,不习惯夜莺的仪表盘的用户,可以直接在夜莺里内嵌 Grafana 的仪表盘
- 告警规则:通知时支持配置过滤标签,避免告警事件中一堆不重要的标签
- 机器管理:标签拆成 user_tags 和 host_tags,host_tags 直接使用 categraf global tags 覆盖
- 机器管理:机器支持角色字段,即无头标签,用于描述混部场景
- 机器管理:把业务组的 busigroup 标签迁移到机器的属性里,让机器支持挂到多个业务组
- 告警规则:增加 Host Metrics 类别,支持按照业务组、角色、标签等筛选机器,规则 promql 支持变量,支持在机器颗粒度配置变量值
- 告警通知:重构整个通知逻辑,引入事件处理的 pipeline,支持对告警事件做自定义处理和灵活分派
v7 正式版何时发版?
现在虽然是 beta 版本,实际也是稳定的,可以上生产的。由于运营的诉求,正式版会放在每年 7 月底发布,每个大版本会持续支持 2 年。这也意味着,届时 v5 以前(含)版本将不再提供社区支持,建议 v5 版本的用户尽快升级到 v7 版本。升级方案可以查阅如下链接:
https://flashcat.cloud/docs/content/flashcat-monitor/nightingale-v7/install/upgrade/
常见问题
Q1:没有配置通知媒介和接收组,还会发通知吗?
A:在 v7.beta11 中,如果告警规则回调地址是钉钉、企微、飞书机器人地址,夜莺会自动识别并发送通知。
Q2:飞书为什么不能像钉钉一样用手机号 at 人?
A:原文说明飞书 at 人需要使用用户的 user_id 或 open_id,并提供了飞书 API 文档和获取步骤。
Q3:企微机器人通知支持 at 人吗?
A:原文说明企微方式暂不支持 at 人。
