alertmanager的配置文件
global:
smtp_smarthost: 'localhost:25'
smtp_from: 'alertmanager@example.org' #用于邮件通知的P发件人
route: #每个输入警报进入根路由
receiver: 'team-X-mails' #根路由不得包含任何匹配项,因为它是所有警报的入口点
group_by: ['alertname', 'cluster'] #将传入警报分组的标签。默认以告警名进行分组,就是rule文件的alert值进行分组
group_wait: 30s #当传入的警报创建了一组新的警报时,请至少等待多少秒发送初始通知
group_interval: 5m #发送第一个通知时,请等待多少分钟发送一批已开始为该组触发的新警报
repeat_interval: 3h #如果警报已成功发送,请等待多少小时以重新发送警报
routes: #子路由,父路由的所有属性都会被子路由继承
- match:
severity: critical
receiver: team-X-pager
#如果另一个警报正在触发,则禁止规则允许将一组警报静音,如果同一警报已经严重,我们将使用此选项禁用任何警告级别的通知
inhibit_rules:
- source_match:
severity: 'critical'
target_match:
severity: 'warning'
equal: ['alertname']
#如果警报名称相同,则应用抑制,如果源警报和目标警报中均缺少“equal”中列出的所有标签名称,则将应用禁止规则!
receivers:
- name: 'team-X-mails'
email_configs:
- to: 'team-X+alerts@example.org, team-Y+alerts@example.org'
- name: 'team-X-pager'
email_configs:
- to: 'team-X+alerts-critical@example.org'
pagerduty_configs:
- routing_key: <team-X-key>
实际配置
global:
smtp_smarthost: 'smtp.qq.com:465' #发件人对应邮件提供商的smtp地址
smtp_from: '327721596@qq.com' #发件人邮箱地址
smtp_auth_username: '327721596@qq.com' #发件人的登陆用户名,默认和发件人地址一致
smtp_auth_password: 'fjvfdgmpcbbd' #发件人的授权码
smtp_require_tls: false
templates:
- '/usr/local/alertmanager/template/*.tmpl'
route:
group_by: ['alertname','cluster','service']
group_wait: 5s
group_interval: 5s
repeat_interval: 2m
receiver: 'default-receiver'
receivers:
- name: 'default-receiver'
email_configs:
- to: 'ylwang3@i163..com'
html: '{{ template "email.to.html" . }}' # 设定邮箱的内容模板
邮件模板
{{ define "email.to.html" }}
{{ range .Alerts }}
=========start==========<br>
告警程序: prometheus_alert<br>
告警级别: {{ .Labels.severity }} 级<br>
告警类型: {{ .Labels.alertname }}<br>
故障主机: {{ .Labels.instance }}<br>
告警主题: {{ .Annotations.summary }}<br>
触发时间: {{ .StartsAt.Format "2020-01-02 15:04:05"}} <br>
=========end==========<br>
{{ end }}
{{ end }}
重启altermanager服务后,查看受到的信息如下所示:
{{ define "email2.to.html" }}
{{ range .Alerts }}
<html>
<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"> </haed>
<body style="margin: 0; padding: 0;">
<div align="left">
<table border="1" style="border:5px solid #F2F2F2;" cellspacing="4" cellpadding="3" width="650" style="table-layout:fixed">
<tr>
<th align="left"><b>告警项</b></marquee></th>
<th align="left"><b>内容信息</b></marquee></th>
</tr>
<tr>
<td align="left" style="font-family:微软雅黑; width: 15%" style="WORD-WRAP:break-word">告警标题</td>
<td align="left" bgcolor="ff0000" style="font-family:微软雅黑; width: 60%" style="WORD-WRAP:break-word">{{ .Annotations.summary }}</td>
</tr>
<tr>
<td align="left" style="font-family:微软雅黑; size=5;width: 20%" style="WORD-WRAP:break-word">告警描述</td>
<td align="left" bgcolor="ff0000" style="font-family:微软雅黑;width: 80%" style="WORD-WRAP:break-word">{{ .Annotations.summary }}</td>
</tr>
<tr>
<td align="left" style="font-family:微软雅黑;width: 20%" style="WORD-WRAP:break-word">告警等级</td>
<td align="left" style="font-family:微软雅黑;width: 80%" style="padding-left: 15px;color: red;font-weight: bold;">{{ .Labels.severity }}</td>
</tr>
<tr>
<td align="left" style="font-family:微软雅黑;width: 20%" style="WORD-WRAP:break-word">告警时间</td>
<td align="left" style="font-family:微软雅黑;width: 80%" style="WORD-WRAP:break-word">{{ .StartsAt.Format "2006-01-02 15:04:05" }}</td>
</tr>
<tr>
<td align="left" style="font-family:微软雅黑;width: 20%" style="WORD-WRAP:break-word">告警主机</td>
<td align="left" style="font-family:微软雅黑;width: 80%" style="WORD-WRAP:break-word">{{ .Labels.instance }}</td>
</tr>
</table>
</body>
</html>
{{ end }}
{{ end }}