夜莺监控 v8.0 新版通知规则 | 对接飞书告警

介绍夜莺监控 v8 新版通知规则如何对接飞书告警,覆盖普通 text 消息、飞书卡片、FeishuCard 模板 domain 配置、告警详情字段和模板优化示例。

作者 Product Team @快猫星云

夜莺监控 v8 从 beta7 版本开始引入新版通知规则。本文不再重复新版通知规则的背景,直接说明如何使用通知规则对接飞书告警。

如果你还没有看过相关基础文章,建议先读:

开源夜莺和飞书的对接支持 text 和飞书卡片两种方式,不支持飞书应用。Flashduty 和飞书应用的对接非常丝滑,感兴趣的小伙伴可以试试 Flashduty

核心要点

  • 夜莺飞书通知可以使用普通 text 消息,也可以使用飞书卡片消息。
  • 实际告警通知更推荐飞书卡片,因为告警和恢复的展示区分更清楚。
  • 通知媒介保持默认即可工作,重点是修改 feishufeishucard 消息模板里的 domain 变量。
  • 如果卡片消息缺少告警标签详情,可以在 feishucard 模板中补充 $event.TagsJSON 或基于 $event.TagsMap 自定义展示。

通知规则如何配置

夜莺通知规则

通知规则中可以同时对接多个媒介。上例中同时对接了普通飞书 text 消息和飞书卡片消息,并复用了同一个机器人 Token。

理论上,每次告警触发时会同时发送两条消息:

  1. 一条普通 text 格式的飞书消息。
  2. 一条飞书卡片格式的消息。

如果生产环境只想保留一种方式,建议优先保留卡片消息。卡片在告警、恢复等状态上更容易区分,阅读体验也更好。

消息模板需要修改什么

找到 feishufeishucard 两个消息模板,修改其中的 domain 变量:

{{$domain := "http://10.211.55.3:17000" }}

把这个地址改成你自己的夜莺访问地址。这个变量用于生成告警通知中的操作入口,例如“事件详情”“屏蔽 1 小时”“查询曲线”等。

如果 domain 没有改,飞书消息可能仍然能收到,但按钮会跳到错误地址,值班人员无法直接进入夜莺处理事件。

最终效果

通知媒介不用改,保持默认即可工作。最终效果如下:

夜莺飞书告警

上图里有 4 条消息:前两条是告警消息,后两条是恢复消息。对于飞书卡片类型,告警消息和恢复消息的卡片颜色有区别,识别起来更直接。

v8.0.0-beta7 中需要注意的问题

原文测试的 v8.0.0-beta7 版本还不是特别完善,测试时发现两个问题:

  1. text 类型消息中,“屏蔽 1 小时”按钮没有把事件相关字段带到屏蔽规则中,推测是 & 符号转义问题,需要后续版本完善。
  2. 卡片消息模板中缺少 {{$event.TagsJSON}},也就是告警事件的标签信息。如果需要展示标签,可以自行添加。

如果你使用的是这个版本,建议优先测试飞书卡片方式,并检查按钮链接和告警详情字段。

如何在飞书卡片中展示告警详情

可以把 feishucard 模板改成下面的内容,重点是添加 **告警详情:** {{$event.TagsJSON}}

{{ if $event.IsRecovered }}
{{- if ne $event.Cate "host"}}
**告警集群:** {{$event.Cluster}}{{end}}
**级别状态:** S{{$event.Severity}} Recovered
**告警名称:** {{$event.RuleName}}
**告警详情:** {{$event.TagsJSON}}
**恢复时间:** {{timeformat $event.LastEvalTime}}
**告警描述:** **服务已恢复**
{{- else }}
{{- if ne $event.Cate "host"}}
**告警集群:** {{$event.Cluster}}{{end}}
**级别状态:** S{{$event.Severity}} Triggered
**告警名称:** {{$event.RuleName}}
**告警详情:** {{$event.TagsJSON}}
**触发时间:** {{timeformat $event.TriggerTime}}
**发送时间:** {{timestamp}}
**触发时值:** {{$event.TriggerValue}}
{{if $event.RuleNote }}**告警描述:** **{{$event.RuleNote}}**{{end}}
{{- end -}}
{{$domain := "http://10.211.55.3:17000" }}
[事件详情]({{$domain}}/alert-his-events/{{$event.Id}})|[屏蔽1小时]({{$domain}}/alert-mutes/add?busiGroup={{$event.GroupId}}&cate={{$event.Cate}}&datasource_ids={{$event.DatasourceId}}&prod={{$event.RuleProd}}{{range $key, $value := $event.TagsMap}}&tags={{$key}}%3D{{$value}}{{end}})|[查看曲线]({{$domain}}/metric/explorer?data_source_id={{$event.DatasourceId}}&data_source_name=prometheus&mode=graph&prom_ql={{$event.PromQl|escape}})

添加之后,生成的告警事件如下:

如何避免告警名称和标签重复展示

如果你发现告警名称和告警详情字段中的 rulename 重复,可以把:

**告警详情:** {{$event.TagsJSON}}

改成:

**告警详情:** [{{range $key, $value := $event.TagsMap}}{{if ne $key "rulename"}}{{$key}}={{$value}} {{end}}{{end}}]

这样会遍历 TagsMap,并排除 rulename 标签。最终 feishucard 消息模板可以写成:

{{ if $event.IsRecovered }}
{{- if ne $event.Cate "host"}}
**告警集群:** {{$event.Cluster}}{{end}}
**级别状态:** S{{$event.Severity}} Recovered
**告警名称:** {{$event.RuleName}}
**告警详情:** [{{range $key, $value := $event.TagsMap}}{{if ne $key "rulename"}}{{$key}}={{$value}} {{end}}{{end}}]
**恢复时间:** {{timeformat $event.LastEvalTime}}
**告警描述:** **服务已恢复**
{{- else }}
{{- if ne $event.Cate "host"}}
**告警集群:** {{$event.Cluster}}{{end}}
**级别状态:** S{{$event.Severity}} Triggered
**告警名称:** {{$event.RuleName}}
**告警详情:** [{{range $key, $value := $event.TagsMap}}{{if ne $key "rulename"}}{{$key}}={{$value}} {{end}}{{end}}]
**触发时间:** {{timeformat $event.TriggerTime}}
**发送时间:** {{timestamp}}
**触发时值:** {{$event.TriggerValue}}
{{if $event.RuleNote }}**告警描述:** **{{$event.RuleNote}}**{{end}}
{{- end -}}
{{$domain := "http://10.211.55.3:17000" }}
[事件详情]({{$domain}}/alert-his-events/{{$event.Id}})|[屏蔽1小时]({{$domain}}/alert-mutes/add?busiGroup={{$event.GroupId}}&cate={{$event.Cate}}&datasource_ids={{$event.DatasourceId}}&prod={{$event.RuleProd}}{{range $key, $value := $event.TagsMap}}&tags={{$key}}%3D{{$value}}{{end}})|[查看曲线]({{$domain}}/metric/explorer?data_source_id={{$event.DatasourceId}}&data_source_name=prometheus&mode=graph&prom_ql={{$event.PromQl|escape}})

配置检查清单

飞书告警配置完成后,建议检查:

  1. 通知规则中是否添加了飞书或飞书卡片通知媒介。
  2. 机器人 Token 是否来自正确的飞书机器人。
  3. feishufeishucard 模板中的 domain 是否是自己的夜莺访问地址。
  4. 告警消息和恢复消息是否能正确区分。
  5. “事件详情”“屏蔽 1 小时”“查看曲线”等链接是否能正常打开。
  6. 卡片消息是否展示了值班人员需要的标签信息。

总结

夜莺 v8 对接飞书告警的重点不在通知媒介本身,而在消息模板。通知媒介保持默认即可工作,但 feishufeishucard 模板中的 domain 必须改成真实夜莺地址。实际使用时,优先选择飞书卡片方式,并根据团队排障习惯补充告警标签详情。

延伸路径

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

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

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