夜莺-Nightingale
夜莺V6
项目介绍 架构介绍
快速开始
黄埔营
安装部署
升级
采集器
使用手册
API
数据库表结构
FAQ
开源生态
Prometheus
版权声明
第1章:天降奇兵
第2章:探索PromQL
第3章:Prometheus告警处理
第4章:Exporter详解
第5章:数据与可视化
第6章:集群与高可用
第7章:Prometheus服务发现
第8章:监控Kubernetes
第9章:Prometheus Operator
参考资料

自定义通知模板

自定义全局通知模板

夜莺已经内置了挺多通知媒介,每个通知媒介都对应有自己的通知模板,这些通知模板是可以自定义的,菜单入口:告警通知 - 通知模板。这些模板有些是 Markdown 格式,有些是 HTML 格式,修改的时候要注意。

  • mm: Mattermost 通知模板
  • telegram: Telegram 机器人模板
  • wecom: 企微机器人模板
  • dingtalk: 钉钉机器人模板
  • email: 邮件内容模板
  • feishu: 飞书机器人模板
  • feishucard: 飞书卡片模板
  • mailsubject: 邮件标题模板

这些模板都遵从 go template 语法(如果不懂请自行 Google),模板渲染的时候,夜莺会把告警事件作为模板变量传入,比如 {{.Severity}} 就是引用告警事件的严重级别,{{.RuleName}} 就是引用告警规则的标题。当然,还有哪些变量可以用呢,实际上 alert_cur_event 的所有属性都可以用。

自定义单个告警规则通知模板

需求:全局的通知模板中,有些字段特别长,比如 监控指标: {{.TagsJSON}},有的时候不想展示,想自定义一下。比如某个内存告警规则,只想展示 instance 标签,某个磁盘告警规则,只想展示 instance 和 device 标签。

从功能列表来看,开源版夜莺不支持针对告警规则颗粒度自定义通知模板。但实际上,可以通过一些小技巧来实现。下面以内存利用率告警规则为例,给大家演示一下整个流程。原本的告警事件详情如下:

20240227121711

里边有三个事件标签,企微通知如下:

20240227121759

标签太长了,不好看,其他字段倒是都合适,应该展示,下面我就来自定义一下这个事件标签的展示内容。

1.修改全局通知模板

我以企微通知为例,修改 wecom 的通知模板,改成如下内容:

**级别状态**: {{if .IsRecovered}}<font color="info">S{{.Severity}} Recovered</font>{{else}}<font color="warning">S{{.Severity}} Triggered</font>{{end}}   
**规则标题**: {{.RuleName}}{{if .RuleNote}}   
**备注**: {{.RuleNote}}{{end}}{{if .TargetIdent}}   
**监控对象**: {{.TargetIdent}}{{end}}   
{{- if ne .AnnotationsJSON.Note "1"}}
**监控指标**: {{.TagsJSON}}
{{- end}}
{{- if not .IsRecovered}}   
**触发时值**: {{.TriggerValue}}
{{- end}}   
{{if .IsRecovered}}**恢复时间**: {{timeformat .LastEvalTime}}{{else}}**首次触发时间**: {{timeformat .FirstTriggerTime}}{{end}}   
{{$time_duration := sub now.Unix .FirstTriggerTime }}{{if .IsRecovered}}{{$time_duration = sub .LastEvalTime .FirstTriggerTime }}{{end}}**距离首次告警**: {{humanizeDurationInterface $time_duration}}
**发送时间**: {{timestamp}}

最核心的改动是:

{{- if ne .AnnotationsJSON.Note "1"}}
**监控指标**: {{.TagsJSON}}
{{- end}}

这个意思是:只有当附加信息的 Note 字段不等于 1 的时候,才展示 TagsJSON 字段。这个 Note 字段是我自己定义的,后面会讲到。换句话说,如果自定义的 Note 字段为 1,就表示用户自定义了备注信息,就不需要展示 TagsJSON 字段了。

2.创建一个内存利用率告警规则

自定义告警规则,注意备注部分和自定义字段部分,告警规则的备注是可以引用事件变量的,比如 {{ $labels.ident }} 这样的格式。从上面的事件详情中可以看到机器的信息在 ident 标签中,所以我把这个标签引用到备注中,如下:

20240227122104

然后配置规则其他字段,在附加信息那里,增加一个 Note 字段,值设置为 1。

20240227131304

可以了,保存规则。稍等片刻,就能看到企微通知了:

20240227131504

后面哪个规则还想自定义标签展示内容,就在自定义字段那里增加一个 Note 字段,然后在备注里写自定义的内容即可。

开源版
Flashcat
Flashduty