夜莺 v7.beta11 发版,优化钉钉、企微、飞书通知

夜莺 v7.beta11 优化钉钉、企微、飞书机器人通知配置,支持在告警规则回调地址中直接识别 webhook,并改进钉钉和飞书 at 人方式。

作者 巴辉特

夜莺之前的版本已经支持钉钉、企微、飞书通知,但配置逻辑相对绕。v7.beta11 提供了更直观的方式:在告警规则里配置机器人 webhook 回调地址,夜莺自动识别钉钉、企微、飞书地址并发送通知,同时优化 at 人能力。

需要说明的是,夜莺未来还会重构整个告警通知逻辑,引入 pipeline 能力;v7.beta11 属于过渡阶段的通知配置优化。

核心要点

  • 告警规则中可直接配置钉钉、企微、飞书机器人的 webhook 地址。
  • 新版本会自动识别回调地址类型,并发送对应平台通知。
  • 钉钉 at 人可以通过 ats 参数传手机号,多个手机号用逗号分隔。
  • 飞书支持普通消息和消息卡片,URL 后增加 card=1 可使用卡片方式。
  • 企微机器人 webhook 可直接配置在回调地址中,但原文说明暂不支持 at 人。

升级方法

从 v6 版本开始,程序自动创建表结构,所以 v6、v7 的各个小版本之间升级,相对容易,整体逻辑是:

  1. 备份数据库、二进制、配置文件、integrations 目录,以防万一。
  2. 下载新版本并解压,修改配置文件中的数据库连接地址、Redis 连接地址、时序库连接地址等个性化信息。
  3. 停掉老版本,启动新版本。建议新老版本使用不同安装目录,都保留不删,并用软链指向当前使用的版本。

配置方式

新版本可以直接在告警规则里配置企微、钉钉、飞书等机器人的 webhook 地址,从而实现告警通知效果。样例如下:

夜莺 v7.beta11 发版,优化钉钉、企微、飞书通知 - 配置方式

这里没有配置通知媒介,也没有配置告警接收组,只配置了回调地址。这个回调地址是钉钉机器人地址,使用关键字认证方式,关键字写的是 20

除了 access_token 参数之外,还手工加了一个 ats 参数,用来表示要 at 的人。钉钉 at 人可以直接写手机号;如果要 at 多个人,就用逗号分隔多个手机号。

如果是老版本,没有配置通知媒介和接收组就不会发送告警通知。v7.beta11 会自动识别回调地址,如果发现是钉钉、企微、飞书地址,就会自动发送通知。下面是钉钉提醒示例:

夜莺 v7.beta11 发版,优化钉钉、企微、飞书通知 - 钉钉提醒

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

夜莺 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 参数即可。

夜莺 v7.beta11 发版,优化钉钉、企微、飞书通知 - 配置飞书

钉钉的 API 在 at 人的时候,直接通过手机号就可以了,飞书没法通过手机号 at 人,需要使用用户的 user_id 或 open_id,飞书 API 文档参考。那么待 At 用户在飞书上的 user_id 或 open_id 如何获取呢?

要获取用户的 User ID 或 Open ID,你可以按照以下的步骤操作:

  1. 创建飞书应用
  • a. 访问飞书开发者平台:打开 飞书开放平台.
  • b. 登录 -> 创建应用 -> 应用管理 -> 应用发布
  1. 如果使用飞书的调试工具,可直接进入 调试控制台 点击获取 tenant_access_token

夜莺 v7.beta11 发版,优化钉钉、企微、飞书通知 - 飞书 token

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

夜莺 v7.beta11 发版,优化钉钉、企微、飞书通知 - 接口

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

夜莺 v7.beta11 发版,优化钉钉、企微、飞书通知 - 接口权限

  1. 修改请求体参数,点击开始调试,即可获取到用户的 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_idopen_id,并提供了飞书 API 文档和获取步骤。

Q3:企微机器人通知支持 at 人吗?

A:原文说明企微方式暂不支持 at 人。

联系我们交流

延伸路径

继续看解决方案和产品对比

如果你正在做监控、可观测性或故障定位相关选型,建议从解决方案和产品对比继续往下看。

快猫星云 联系方式 快猫星云 联系方式
快猫星云 联系方式
快猫星云 联系方式
快猫星云 联系方式
快猫星云