alertmanager邮件模版
转载
说明
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。
配置好后,收到的邮件内容如下