Prometheus系列Alertmanager通过Email发送告警信息
创建告警模板
[root@prometheus alertmanager]# cat alert.tmp
{{ define "email.from" }}me@xp.sb{{ end }}
{{ define "email.to" }}me@xp.sb{{ end }}
{{ define "email.to.html" }}
{{- if gt (len .Alerts.Firing) 0 -}}{{ range .Alerts }}
<h2>@告警通知</h2>
告警程序: prometheus_alert <br>
告警级别: {{ .Labels.severity }} 级 <br>
告警类型: {{ .Labels.alertname }} <br>
故障主机: {{ .Labels.instance }} <br>
告警主题: {{ .Annotations.summary }} <br>
告警详情: {{ .Annotations.description }} <br>
触发时间: {{ .StartsAt.Local.Format "2006-01-02 15:04:05" }} <br>
{{ end }}{{ end -}}
{{- if gt (len .Alerts.Resolved) 0 -}}{{ range .Alerts }}
<h2>@告警恢复</h2>
告警程序: prometheus_alert <br>
故障主机: {{ .Labels.instance }}<br>
故障主题: {{ .Annotations.summary }}<br>
告警详情: {{ .Annotations.description }}<br>
告警时间: {{ .StartsAt.Local.Format "2006-01-02 15:04:05" }}<br>
恢复时间: {{ .EndsAt.Local.Format "2006-01-02 15:04:05" }}<br>
{{ end }}{{ end -}}
{{- end }}
配置 Alertmanager
编辑 Alertmanager 的配置文件 alertmanager.yml,添加 Email 接收器。以下是一个基本的配置示例:
global:
resolve_timeout: 1m
smtp_smarthost: '<SMTP_ADDRESS>:465' # 这里为邮箱SMTP服务地址,端口为465或587,同时要设置开启POP3/SMTP服
务。
smtp_from: '<Email Addr>'
smtp_auth_username: '<Login Email Account>' # 登录邮箱的帐号
smtp_auth_password: '<Login Email Passwd>' # 登录邮箱的帐号密码,第三方登录,例如QQ邮箱的授权码,非QQ账户登录密码,否则会报错,获取方式在 QQ 邮箱服务端设置开启 POP3/SMTP 服务时会提示。
smtp_require_tls: false # 是否使用 tls,根据环境不同,来选择开启和关闭。如果提示报错 email.loginAuth failed: 530 Must issue a STARTTLS command first,那么就需要设置为 true。着重说明一下,如果开启了 tls,提示报错 starttls failed: x509: certificate signed by unknown authority,需要在 email_configs 下配置 insecure_skip_verify: true 来跳过 tls 验证。
templates: # # 模板
- '/usr/local/alertmanager/alert.tmp'
route:
group_by: ['alertname']
group_wait: 30s
group_interval: 1m
repeat_interval: 1m
receiver: 'email' # 配置告警消息接收者,与下面配置的对应。例如常用的 email、wechat、slack、webhook 等消息通知方式。
receivers:
- name: 'email'
email_configs:
- to: '{{ template "email.to"}}'
html: '{{ template "email.to.html" .}}'
send_resolved: true
重启 Alertmanager
保存配置文件后,重启 Alertmanager 以使更改生效。
[root@prometheus alertmanager]# systemctl restart alertmanager
测试
我们同样使用kill 掉nginx进程的方法,模拟web down,来触发告警。
pkill -9 nginx
检查MailBox已经接收到告警信息通知了,随后我们起动nginx,同样也能接收到服务恢复的消息通知。
