Prometheus 告警组件 Alertmanager 安装与自定义模板实践
Alertmanager作为Prometheus的告警处理组件,提供了告警去重、分组、抑制及多渠道通知功能。本文详细介绍了Alertmanager的部署流程,包括Docker镜像拉取、配置文件(alertmanager.yml)参数说明,以及如何与Prometheus对接。重点讲解了自定义HTML告警模板的创建方法,通过email.tmpl模板实现品牌化告警邮件展示,并演示了在告警规则中添加阈值变
·
目录
一、Alertmanager 概述
Prometheus 自身提供了强大的监控与指标收集能力,但告警需要交由 Alertmanager 处理。
Alertmanager 主要功能:
- 接收来自 Prometheus 的告警;
- 去重、分组、抑制告警;
- 多种通知方式(邮件、钉钉、企业微信、Slack…);
- 支持自定义模板,让告警内容更清晰直观。
二、Alertmanager 部署
1、拉取镜像
docker pull prom/alertmanager:v0.27.0
docker run -d \
--network host \
--restart always \
--name alertmanager \
prom/alertmanager:v0.27.0
2、配置文件 alertmanager.yml
global:
resolve_timeout: 5m
smtp_from: '1909529369@qq.com'
smtp_smarthost: 'smtp.qq.com:465'
smtp_auth_username: '1909529369@qq.com'
smtp_auth_password: 'ysillwzfsynr' # QQ 邮箱授权码
smtp_require_tls: false
smtp_hello: 'qq.com'
route:
group_by: ['alertname']
group_wait: 5s
group_interval: 5s
repeat_interval: 5m
receiver: 'email'
receivers:
- name: 'email'
email_configs:
- to: '1909529369@qq.com'
send_resolved: true
inhibit_rules:
- source_match:
severity: 'critical'
target_match:
severity: 'warning'
equal: ['alertname', 'dev', 'instance']
📌 核心参数说明:
相关参数说明:
global:
resolve_timeout:
解析超时时间。
smtp_from:
发件人邮箱地址。
smtp_smarthost:
邮箱的服务器的地址及端口,例如: 'smtp.qq.com:465'。
smtp_auth_username:
发送人的邮箱用户名。
smtp_auth_password:
发送人的邮箱密码。
smtp_require_tls:
是否基于tls加密。
smtp_hello:
邮箱服务器,例如: 'qq.com'。
route:
group_by: ['alertname']
group_wait: 5s
group_interval: 5s
repeat_interval:
重复报警的间隔时间,如果没有解即报警问题,则会间隔指定时间一直触发报警,比如:5m。
receiver:
采用什么方式接收报警,例如'email'。
receivers:
- name:
定义接收者的名称,注意这里的name要和上面的route对应,例如: 'email'
email_configs:
- to:
邮箱发给谁。
send_resolved: true
inhibit_rules:
- source_match:
severity:
匹配报警级别,例如: 'critical'。
target_match:
severity: 'warning'
equal: ['alertname', 'dev', 'instance']
3、启动 Alertmanager
docker restart alertmanager
访问 WebUI:
👉 http://192.168.121.140:9093/#/alerts
三、Prometheus 对接 Alertmanager
1、修改 prometheus.yml
alerting:
alertmanagers:
- static_configs:
- targets:
- 192.168.121.140:9093 # Alertmanager 节点
rule_files:
- "/etc/prometheus/rules/hadoop102.yml"
2、新建告警规则
/etc/prometheus/rules/hadoop102.yml 创建到prometheus容器里
groups:
- name: donglin-hadoop102-container-runtime
rules:
- alert: donglin-container-103节点挂掉啦
expr: up{instance="192.168.121.141:9100"} == 0
for: 15s
labels:
school: donglin
class: hadoop102
annotations:
summary: "{{ $labels.instance }} 已停止运行超过 15s!"
四、自定义告警模板
1、创建模板目录
mkdir tmpl
2、编写模板 email.tmpl
{{ define "donglin.html" }}
<h1 style='color: red;'>欢迎您: https://www.baidu.com/</h1>
<table border="1">
<tr>
<th>报警项</th><th>实例</th><th>报警阀值</th><th>开始时间</th>
</tr>
{{ range $i, $alert := .Alerts }}
<tr>
<td>{{ index $alert.Labels "alertname" }}</td>
<td>{{ index $alert.Labels "instance" }}</td>
<td>{{ index $alert.Annotations "value" }}</td>
<td>{{ $alert.StartsAt }}</td>
</tr>
{{ end }}
</table>
<img src="https://www.baidu.com">
{{ end }}
3、修改 alertmanager.yml 引用模板
templates:
- './tmpl/*.tmpl'
receivers:
- name: 'donglin_email'
email_configs:
- to: "1909529369@qq.com"
send_resolved: true
headers: { Subject: "[WARN] 报警邮件" }
html: '{{ template "donglin.html" . }}'
五、规则中添加阈值变量
修改 hadoop102.yml
,添加 value
字段:
annotations:
summary: "{{ $labels.instance }} 已停止运行超过 15s!"
value: "{{ $value }}"
重新加载配置后,邮件中即可显示阈值。
六、效果验证
-
在 Prometheus WebUI 查看告警触发情况
👉 http://192.168.121.140:9090/alerts -
在 Alertmanager WebUI 查看告警状态
👉 http://192.168.121.140:9093/#/alerts -
检查邮箱是否收到带 HTML 模板的告警邮件
七、总结
- Alertmanager 是 Prometheus 告警体系的核心;
- 通过 配置邮箱 + 自定义模板 可以让告警信息更直观;
- 实际生产中,可以扩展到企业微信、钉钉、飞书等渠道;
- 模板可结合公司 logo、业务关键信息,实现 品牌化告警通知。
更多推荐
所有评论(0)