主题
Alertmanager 告警管理
Alertmanager 是 Prometheus 生态的告警管理组件,负责接收 Prometheus Server 推送的告警,并完成去重、分组、路由,最终通过邮件、Webhook 等渠道通知到人。它不产生告警(告警规则在 Prometheus 侧定义),只负责告警的「分发与收敛」。
一句话定位:Prometheus 负责「发现异常」,Alertmanager 负责「把异常正确地告诉对的人」。三者分工:Prometheus 采集与告警判断,Alertmanager 收敛与通知,Grafana 可视化。
一、核心概念
| 概念 | 说明 |
|---|---|
| Grouping(分组) | 把同一时间触发的同类告警合并为一条通知,避免告警风暴 |
| Inhibition(抑制) | 某告警触发时抑制关联告警(如主机宕机时抑制该主机上的服务告警) |
| Silences(静默) | 在指定时间窗口内忽略匹配的告警(如计划内维护) |
| Routing(路由) | 按标签把告警分发到不同接收者(如按 severity 分渠道) |
完整告警链路:
Prometheus 评估告警规则 → 推送 Alertmanager → 分组/抑制/静默 → 路由 → 邮件/Webhook/企业微信二、Docker 安装
方式一:docker run
先准备配置文件 alertmanager.yml(见下文),再运行:
bash
docker run -d \
--name alertmanager \
-p 9093:9093 \
-v "$(pwd)/alertmanager.yml:/etc/alertmanager/alertmanager.yml" \
prom/alertmanager:latest方式二:docker-compose(推荐)
yaml
version: '3.8'
services:
alertmanager:
image: prom/alertmanager:latest
container_name: alertmanager
ports:
- "9093:9093"
volumes:
- ./alertmanager.yml:/etc/alertmanager/alertmanager.yml
command:
- '--config.file=/etc/alertmanager/alertmanager.yml'
restart: unless-stopped启动后访问 http://localhost:9093 可进入 Alertmanager 的 Web UI(查看告警、创建静默)。
三、配置 Prometheus 对接
在 Prometheus 的 prometheus.yml 中声明告警管理器地址与告警规则文件:
yaml
alerting:
alertmanagers:
- static_configs:
- targets: ["alertmanager:9093"] # 容器网络内用服务名
rule_files:
- "/etc/prometheus/rules/*.yml" # 告警规则目录四、配置文件 alertmanager.yml
一个含邮件与 Webhook 两个接收器的基础配置:
yaml
global:
resolve_timeout: 5m # 告警恢复后的等待时间
route:
group_by: ['alertname', 'cluster'] # 按哪些标签分组
group_wait: 30s # 首次告警等待时间(收集同类告警)
group_interval: 5m # 组内后续告警发送间隔
repeat_interval: 4h # 未恢复告警的重复通知间隔
receiver: 'default' # 默认接收器
receivers:
- name: 'default'
email_configs:
- to: 'admin@example.com'
from: 'alertmanager@example.com'
smarthost: 'smtp.example.com:587'
auth_username: 'alertmanager@example.com'
auth_password: 'password'
webhook_configs:
- url: 'http://webhook.example.com/alert'关键字段:
- route:定义路由树,可用
routes:子路由按标签匹配分流。 - receivers:通知接收器,支持
email_configs、webhook_configs、slack_configs、pagerduty_configs等。
五、告警规则(Prometheus 侧)
告警规则写在 Prometheus 的 rule_files 目录,例如主机宕机告警 node-alerts.yml:
yaml
groups:
- name: node-alerts
rules:
- alert: InstanceDown
expr: up == 0
for: 1m
labels:
severity: critical
annotations:
summary: "实例 {{ $labels.instance }} 宕机"
description: "实例 {{ $labels.instance }} 已停止上报超过 1 分钟"字段说明:
expr:PromQL 表达式,为真则告警。for:持续时长,避免瞬时抖动误报。labels:附加标签,可用于路由与抑制。annotations:告警描述,支持 Go 模板变量(如{{ $labels.instance }})。
六、通知渠道
1. 原生渠道
Alertmanager 原生支持邮件、Slack、PagerDuty、Webhook 等,直接在 receivers 中配置即可。
2. 钉钉 / 企业微信
Alertmanager 不原生支持钉钉/企业微信,需通过 Webhook 中转。常见做法是部署 prometheus-webhook-dingtalk 中转服务,再在 receivers 中配置 webhook_configs 指向它:
yaml
receivers:
- name: 'dingtalk'
webhook_configs:
- url: 'http://dingtalk-webhook:8060/dingtalk/webhook1/send'七、注意事项
- 分组是防告警风暴的关键:合理设置
group_by与group_interval,避免一次故障刷屏。 - 抑制降噪:配置
inhibit_rules,让「主机宕机」抑制「该主机上的服务异常」等派生告警。 - 静默用于计划维护:Web UI 的 Silence 页面可临时屏蔽维护窗口内的告警。
- 配置热加载:修改
alertmanager.yml后执行docker exec alertmanager kill -HUP 1重载。