说明

​alertmanager​​能够设置多种通知规则,这篇文章介绍如何配置邮件通知

简单设置

如下修改​​receivers​​-​​email_configs​​-​​html​​后,收到的邮件内容是:测试 http://ming:9093​​ 。​​html​​表示的是邮件内容。

receivers:
- name: 'mengyuan'
email_configs:
- to: 'xxxx@xxx.com'
html: '测试 {{ .ExternalURL }}'

模版变量

邮件模版使用​​go template​​​编写,两对大括号中的​​.ExternalURL​​即表示变量的​​ExternalURL​​字段,​​Data​​结构如下,源码在​​​这里​​。请自行google go template的使用方法。

// Data is the data passed to notification templates and webhook pushes.
//
// End-users should not be exposed to Go's type system, as this will confuse them and prevent
// simple things like simple equality checks to fail. Map everything to float64/string.
type Data struct {
Receiver string `json:"receiver"`
Status string `json:"status"`
Alerts Alerts `json:"alerts"`

GroupLabels KV `json:"groupLabels"`
CommonLabels KV `json:"commonLabels"`
CommonAnnotations KV `json:"commonAnnotations"`

ExternalURL string `json:"externalURL"`
}
// Alert holds one alert for notification templates.
type Alert struct {
Status string `json:"status"`
Labels KV `json:"labels"`
Annotations KV `json:"annotations"`
StartsAt time.Time `json:"startsAt"`
EndsAt time.Time `json:"endsAt"`
GeneratorURL string `json:"generatorURL"`
}
// Alerts is a list of Alert objects.
type Alerts []Alert
// KV is a set of key/value string pairs.
type KV map[string]string

<!--more-->

邮件模版文件

上面例子将​​html​​的值写为邮件模版,但实际情况一般需要我们在其他文件中定义好模版,在​​html​​中引用模版名字,go tempate的子模版功能可以满足我们的要求。

在​​templates​​下填写模版文件路径,​​html​​下引用定义好的子模版

# Files from which custom notification template definitions are read.
# The last component may use a wildcard matcher, e.g. 'templates/*.tmpl'.
templates:
[ - <filepath> ... ]
receivers:
- name: 'mengyuan'
email_configs:
- to: 'xxx@xxx.com'
html: '{{ template "email.mengyuan.html" . }}'
headers: { Subject: "[WARN] 报警邮件test"

模版文件​​mengyuan.tmpl​

{{ define "email.mengyuan.html" }}<table>
<tr><td>报警名</td><td>开始时间</td></tr>{{ range<tr><td>{{ index $alert.Labels "alertname" }}</td><td>{{ $alert.StartsAt }}</td></tr>{{ end }}</table>{{ end }}

测试时发现子模版名称有数字时(如email.mengyuan1.html)不会收到通知alermanager也不报错,可能是BUG。

配置好后,收到的邮件内容如下

alertmanager邮件模版_模版