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

巴辉特 2024-06-14 00:08:08

夜莺之前的版本也支持钉钉、企微、飞书通知,不过整体逻辑设计的比较绕,这个版本提供了一个更直观的配置方式,顺带优化了 at 人的功能,当然,夜莺未来会重构整个告警通知逻辑,引入 pipeline 的能力,届时会提供更好的通知配置方式,现阶段的话,算是一个过渡的优化版本。

升级方法

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

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

配置方式

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

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

这里我没有配置通知媒介,也没有配置告警接收组,但是配置了回调地址,这个回调地址就是钉钉机器人(使用关键字认证方式,关键字写的 20)的回调地址,除了 access_token 参数之外,还手工加了一个 ats 的参数,表示我要 at 的人,钉钉 at 人就直接写人的手机号就可以了,如果是 at 多个人,就用逗号分隔多个手机号。

如果是老版本,既然没有配置通知媒介和接收组,肯定就不会发告警通知了。但是新版本会自动识别回调地址,发现回调地址是钉钉、企微、飞书的地址,就会自动发通知,比如我的钉钉提醒如下:

夜莺 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 人。

后续计划

近期夜莺还计划做的事情如下:

  • 仪表盘:支持内嵌 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/

快猫星云 联系方式 快猫星云 联系方式
快猫星云 联系方式
快猫星云 联系方式
快猫星云 联系方式
快猫星云
OpenSource
开源版
Flashcat
Flashcat
FlashDuty
Flashduty