通知模板
告警通知使用的是默认模版,因为它已经编译到二进制包了,所以我们不需要额外配置。如果我们想自定义模版,这又该如何配置呢?
Alertmanager 默认使用的通知模板可以从 alertmanager/default.tmpl at main · prometheus/alertmanager · GitHub
获取,Alertmanager 的通知模板是基于 Golang 的模板系统,当然也支持用户自定义和使用自己的模板。
第一种方式是基于模板字符串,直接在 Alertmanager 的配置文件中使用模板字符串,如下所示:
receivers:
- name: "slack-notifications"
slack_configs:
- channel: "#alerts"
text: "https://internal.myorg.net/wiki/alerts/{
{ .GroupLabels.app }}/{
{ .GroupLabels.alertname }}"
直接在配置文件中可以使用一些模板字符串,比如获取 {
{ .GroupLabels }}
下面的一些属性。
另外一种方法就是直接修改官方默认的模板,此外也可以自定义可复用的模板文件,比如针对 email 的模板,我们可以创建一个名为 template_email.tmpl
的自定义模板文件,如下所示:
apiVersion: v1
kind: ConfigMap
metadata:
name: alert-config
namespace: kube-mon
data:
config.yml: |-
global: # 全局配置
......
route: # 路由
......
templates: # 增加 templates 配置,指定模板文件
- '/etc/alertmanager/template_email.tmpl'
receivers: # 接收器
- name: 'email'
email_configs:
- to: '[email protected]'
send_resolved: true
html: '{
{ template "email.html" . }}' # 此处通过 html 指定模板文件中定义的 email.html 模板
# 下面定义 email.html 必须和上面指定的一致,注释不能写进模板文件中
template_email.tmpl: |-
{
{ define "email.html" }}
{
{- if gt (len .Alerts.Firing) 0 -}}{
{ range .Alerts }}
@报警<br>
<strong>实例:</strong> {
{ .Labels.instance }}<br>
<strong>概述:</strong> {
{ .Annotations.summary }}<br>
<strong>详情:</strong> {
{ .Annotations.description }}<br>
<strong>时间:</strong> {
{ (.StartsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}<br>
{
{ end }}{
{ end -}}<br>
{
{- if gt (len .Alerts.Resolved) 0 -}}{
{ range .Alerts }}<br>
@恢复<br>
<strong>实例:</strong> {
{ .Labels.instance }}<br>
<strong>信息:</strong> {
{ .Annotations.summary }}<br>
<strong>恢复:</strong> {
{ (.StartsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}<br>
{
{ end }}{
{ end -}}
{
{- end }}
在 Alertmanager 配置中通过 templates
属性来指定我们自定义的模板路径,这里我们定义的 template_email.tmpl
模板会通过 Configmap 挂载到 /etc/alertmanager
路径下,模板中通过 {
{ define "email.html" }}
定义了一个名为 email.html
的命名模板,然后在 email 的接收器中通过 email_configs.html
来指定定义的命名模板即可。更新上面 Alertmanager 的配置对象,重启 Alertmanager 服务,然后等待告警发出,即可看到我们如下所示自定义的模板信息: