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

升级方法

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

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

配置方式

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

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

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

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

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

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

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

我这个钉钉的通知模板,用的是下面的模板,大家可以参考一下:

#### {{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 发版,优化钉钉、企微、飞书通知插图3

钉钉的 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 发版,优化钉钉、企微、飞书通知插图4

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

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

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

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

  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/

免责声明:本文系转载,版权归原作者所有;旨在传递信息,不代表一休教程网的观点和立场。