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,同样也能接收到服务恢复的消息通知。