前面我们虽然可以简单的收到告警信息,但是得到的邮件消息并不明确
为了我们能够友好的查看到告警的信息,我们需要给告警的信息添加一个模板文件
前景提要
我这里是按照上一章延续的,如果需要看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. 恢复邮件