prometheus使用 (十四) 告警模板配置

前面我们虽然可以简单的收到告警信息,但是得到的邮件消息并不明确

为了我们能够友好的查看到告警的信息,我们需要给告警的信息添加一个模板文件

前景提要

我这里是按照上一章延续的,如果需要看prometheus的配置文件可以翻翻前面的配置都有写

一. 设置alertmanager开启模板

#我这里直接覆盖之前的文件了,下面有说明要改什么
#3台主机都相同
cat > /etc/alertmanager/alertmanager.yml <<EOF
global:
  resolve_timeout: 5m
  smtp_from: '2665483426@qq.com'
  smtp_smarthost: 'smtp.qq.com:465'
  smtp_auth_username: '2665483426@qq.com'
  smtp_auth_password: 'vxehxwuwnwlreaih'
  smtp_require_tls: false
  smtp_hello: 'qq.com'


templates: #添加模板
  - '/etc/alertmanager/template/email.tmpl'   #指定路径

route:
  group_by: ['alertname']
  group_wait: 5s
  group_interval: 5s
  repeat_interval: 5m
  receiver: 'email'
receivers:
- name: 'email'
  email_configs:
  - to: '2665483426@qq.com'
    html: '{{ template "test.html" . }}'   #添加,指定template中的test.html页面(与模板中的define对应)
    send_resolved: true
EOF


#添加模板目录
mkdir /etc/alertmanager/template/

二. 设置基础模板文件

#注意这里的时间不要更改,这个是固定格式的
#3台主机都相同
cat > /etc/alertmanager/template/email.tmpl <<EOF
{{ define "test.html" }}   <!-- 文件名称test.html-->
{{ range .Alerts }}
=========start==========<br>
告警程序: {{ .Labels.job }} <br>
告警级别: {{ .Labels.severity }} 级 <br>
告警类型: {{ .Labels.alertname }} <br>
故障主机: {{ .Labels.instance }} <br>
告警主题: {{ .Annotations.summary }} <br>
触发时间: {{ .StartsAt.Format "2006-01-02 15:04:05" }} <br>
=========end==========<br>
{{ end }}
{{ end }}
EOF

重载配置

systemctl restart alertmanager

测试

#这里手动停止node-exporter服务
systemctl stop node-exporter

 

三. 配置说明

{{ define "test.html" }}   <!-- 文件名称test.html-->
{{ range .Alerts }}
=========start==========<br>
告警程序: {{ .Labels.job }} <br>
告警级别: {{ .Labels.severity }} 级 <br>
告警类型: {{ .Labels.alertname }} <br>
故障主机: {{ .Labels.instance }} <br>
告警主题: {{ .Annotations.summary }} <br>
触发时间: {{ .StartsAt.Format "2006-01-02 15:04:05" }} <br>
=========end==========<br>
{{ end }}
{{ end }}

配置说明

#第一部分
{{ define "test.html" }}   #定义一个test.html的模板外部调用,使用的就是这个名称
{{ range .Alerts }}{{- end}}  #我不懂go语言,不过这里感觉类似于html的那个"桶"

#第二部分
告警程序: {{ .Labels.alertname }} <br>
告警级别: {{ .Labels.severity }} 级 <br>
告警类型: {{ .Labels.alertname }} <br>
故障主机: {{ .Labels.instance }} <br>
#像这种label开头的配置都是直接调用标签的,如下图

我们可以看到通过labels是直接以标签来获取数据的格式 .Labels.标签

#第三部分
告警主题: {{ .Annotations.summary }} <br>

#同标签类似,我们可以在prometheus的告警规则中设置来获取变量

 

#第4部分
触发时间: {{ .StartsAt.Format "2006-01-02 15:04:05" }} <br>
#设置告警的触发时间,后面的"2006-01-02 15:04:05"的特定格式,不是指定时间


#细心的小伙伴估计发现了,下图中
#我们的时间和我们现在的时间是不同的,他这边走的是UTC的标准时间
#如果需要则添加Add 28800e9 ,这就是从UTC时间转换到北京东八区时间。(下面有案例)

除了以上的基本调用,我们还可以在这里做一些逻辑运算、条件判断等

(不知道该怎么过渡了>﹏< 直接放整好的吧,GO语言不会)

 

四. 最终效果

cat > /etc/alertmanager/template/email.tmpl <<EOF
{{ define "test.html" }}
{{- if gt (len .Alerts.Firing) 0 -}}
{{- range \$index, \$alert := .Alerts -}}
========= ERROR ==========<br>
告警名称:{{ .Labels.alertname }}<br>
告警级别:{{ .Labels.severity }}<br>
告警机器:{{ .Labels.instance }} {{ .Labels.device }}<br>
告警详情:{{ .Annotations.summary }}<br>
告警时间:{{ (.StartsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}<br>
========= END ==========<br>
{{- end }}
{{- end }}
{{- if gt (len .Alerts.Resolved) 0 -}}
{{- range \$index, \$alert := .Alerts -}}
========= INFO ==========<br>
告警名称:{{ .Labels.alertname }}<br>
告警级别:{{ .Labels.severity }}<br>
告警机器:{{ .Labels.instance }}<br>
告警详情:{{ .Annotations.summary }}<br>
告警时间:{{ (.StartsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}<br>
恢复时间:{{ (.EndsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}<br>
========= END ==========<br>
{{- end }}
{{- end }}
{{- end }}
EOF

重载配置(3台)

systemctl restart alertmanager

测试

1. 告警邮件

#启动服务
systemctl start node-exporter

2. 恢复邮件

  • 6
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值