通知模板
告警通知使用的是默认模版,因为它已经编译到二进制包了,所以我们不需要额外配置。如果我们想自定义模版,这又该如何配置呢?
Alertmanager 默认使用的通知模板可以从alertmanager/default.tmpl at main · prometheus/alertmanager · GitHub
获取,Alertmanager 的通知模板是基于Golang 的模板系统,当然也支持用户自定义和使用自己的模板。
第一种方式是基于模板字符串,直接在 Alertmanager 的配置文件中使用模板字符串,如下所示:
receivers: - name: "slack-notifications" slack_configs: - channel: "#alerts" text: "https://internal.myorg.net/wiki/alerts/{ { .GroupLabels.app }}/{ { .GroupLabels.alertname }}"
直接在配置文件中可以使用一些模板字符串,比如获取{ { .GroupLabels }}下面的一些属性。
另外一种方法就是直接修改官方默认的模板,此外也可以自定义可复用的模板文件,比如针对 email 的模板,我们可以创建一个名为template_email.tmpl的自定义模板文件,如下所示:
apiVersion: v1kind: ConfigMapmetadata: name: alert-config namespace: kube-mondata: config.yml: |- global: # 全局配置 ...... route: # 路由 ...... templates: # 增加 templates 配置,指定模板文件 - '/etc/alertmanager/template_email.tmpl' receivers: # 接收器 - name: 'email' email_configs: - to: '[emailprotected]' send_resolved: true html: '{ { template "email.html" . }}' # 此处通过 html 指定模板文件中定义的 email.html 模板 # 下面定义 email.html 必须和上面指定的一致,注释不能写进模板文件中 template_email.tmpl: |- { { define "email.html" }} { {- if gt (len .Alerts.Firing) 0 -}}{ { range .Alerts }} @报警 实例: { { .Labels.instance }} 概述: { { .Annotations.summary }} 详情: { { .Annotations.description }} 时间: { { (.StartsAt.Add 28800e9).Format "2006-01-02 15:04:05" }} { { end }}{ { end -}} { {- if gt (len .Alerts.Resolved) 0 -}}{ { range .Alerts }} @恢复 实例: { { .Labels.instance }} 信息: { { .Annotations.summary }} 恢复: { { (.StartsAt.Add 28800e9).Format "2006-01-02 15:04:05" }} { { end }}{ { end -}} { {- end }}
在 Alertmanager 配置中通过templates属性来指定我们自定义的模板路径,这里我们定义的template_email.tmpl模板会通过 Configmap 挂载到/etc/alertmanager路径下,模板中通过{ { define "email.html" }}定义了一个名为email.html的命名模板,然后在 email 的接收器中通过email_configs.html来指定定义的命名模板即可。更新上面 Alertmanager 的配置对象,重启 Alertmanager 服务,然后等待告警发出,即可看到我们如下所示自定义的模板信息: