通知模板是什么
Alertmanager 的通知文案由 Go 模板渲染:模板文件里用 define 定义命名块,receiver 的 title/text 引用这些块;渲染时遍历 .Alerts 输出明细,用 .CommonLabels 提供公共维度。它与告警规则里 annotations 的模板是两层不同机制——后者生成描述文本,前者决定通知如何排版。
基本信息
| 模板语言 | Go template |
|---|---|
| 引用方式 | 模板文件 define 块 + receiver 的 title/text |
| 加载位置 | alertmanager.yml 的 templates 字段 |
| 常用对象 | .Status / .Alerts / .GroupLabels / .CommonLabels |
| 常用函数 | join、toUpper、reReplaceAll、humanizeTimestamp |
| 生效方式 | 重载或重启 Alertmanager |
典型使用场景
- 在通知里列出受影响实例清单,值班无需再点看板
- 按 severity 渲染不同前缀,一眼区分严重级别
- 把恢复通知与触发通知用 .Status 区分文案
- 附带跳转链接(ExternalURL 与看板地址),缩短定位路径
- 对多告警聚合成组后输出数量与摘要,避免消息过长
- 统一各通道(IM、邮件、电话)文案风格,降低误读
模板文件与引用
模板文件与引用
# alertmanager.yml
templates:
- /etc/alertmanager/templates/*.tmpl
receivers:
- name: im
webhook_configs:
- url: http://127.0.0.1:8060/relay
send_resolved: true
# templates/msg.tmpl
{{ define "im.title" }}[{{ .Status | toUpper }}] {{ .CommonLabels.alertname }}{{ end }}
{{ define "im.text" }}{{ range .Alerts -}}
- {{ .Labels.instance }} 当前值 {{ .Annotations.summary }}
{{ end }}共 {{ .Alerts | len }} 条{{ end }}常用对象与函数
| 名称 | 类型 | 用途 |
|---|---|---|
| .Status | 对象属性 | 触发或恢复 |
| .Alerts | 数组 | 遍历输出每条告警 |
| .CommonLabels | 映射 | 聚合后的公共标签 |
| .GroupLabels | 映射 | 分组标签 |
| join / toUpper | 函数 | 拼接与大小写 |
| humanizeTimestamp | 函数 | 时间可读化 |
改完模板需重载或重启 Alertmanager 才生效;块名被引用成不存在的名字时,通知会渲染为空而不会报错。
通知模板只负责排版:阈值、标签与状态都来自告警规则,文案不对先回去查规则生成的标签,而不是改模板。
模板文件在容器里会随镜像重建被覆盖,必须挂载到持久路径,否则重新部署即丢失。
模板渲染出错时会向通道发送一条简短的错误提示,收到这类提示说明模板语法或字段引用有问题。
模板里的换行与空格会原样输出:多行文本用 {{- 与 -}} 裁剪空白,否则通知里会夹杂大量空行。