自定义通知模板

自定义全局通知模板

夜莺已经内置了挺多通知媒介,每个通知媒介都对应有自己的通知模板,这些通知模板是可以自定义的,菜单入口:告警通知 - 通知模板。这些模板有些是 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 的通知模板,改成如下内容:

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

最核心的改动是:

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

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

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

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

20240227122104

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

20240227131304

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

20240227131504

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