夜莺 v7.beta11 发版,优化钉钉、企微、飞书通知
夜莺之前的版本也支持钉钉、企微、飞书通知,不过整体逻辑设计的比较绕,这个版本提供了一个更直观的配置方式,顺带优化了 at 人的功能,当然,夜莺未来会重构整个告警通知逻辑,引入 pipeline 的能力,届时会提供更好的通知配置方式,现阶段的话,算是一个过渡的优化版本。
升级方法
从 v6 版本开始,程序自动创建表结构,所以 v6、v7 的各个小版本之间升级,相对容易,整体逻辑是:
- 1.备份,包括数据库、二进制、配置文件、integrations目录,以防万一
- 2.下载新版本解压,修改配置文件中的数据库连接地址、redis连接地址、时序库连接地址等个性化信息
- 3.停掉老版本,启动新版本(建议新老版本使用不同的安装目录,都保留不删,建个软链指向当前使用的版本)
配置方式
新版本可以直接在告警规则里配置企微、钉钉、飞书等机器人的 webhook 地址,进而直接实现告警通知效果,样例如下:
这里我没有配置通知媒介,也没有配置告警接收组,但是配置了回调地址,这个回调地址就是钉钉机器人(使用关键字认证方式,关键字写的 20)的回调地址,除了 access_token 参数之外,还手工加了一个 ats 的参数,表示我要 at 的人,钉钉 at 人就直接写人的手机号就可以了,如果是 at 多个人,就用逗号分隔多个手机号。
如果是老版本,既然没有配置通知媒介和接收组,肯定就不会发告警通知了。但是新版本会自动识别回调地址,发现回调地址是钉钉、企微、飞书的地址,就会自动发通知,比如我的钉钉提醒如下:
点开消息之后,具体通知的内容如下:
我这个钉钉的通知模板,用的是下面的模板,大家可以参考一下:
#### {{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 人。
后续计划
近期夜莺还计划做的事情如下:
- 仪表盘:支持内嵌 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/