📖 本文约 2100+ 字 | 阅读约需 9 分钟 你将了解到:
在上一篇实战中,我们成功打通了:
Prometheus → Alertmanager → Email
部分读者可能会疑问:
👉 这些问题,只有理解了 Alertmanager 的架构才能彻底明白。

很多初学者以为 Alertmanager 的配置是写在 Pod 里的,其实不是。
部署方式 | 配置形式 | 优点 |
|---|---|---|
二进制 / 裸机 | 直接写 alertmanager.yml | 简单直观 |
原生 Kubernetes | Secret 挂载 | 符合 K8s 规范,可版本管理 |
kube-prometheus-stack(Helm) | values.yaml → 自动生成 Secret | 统一管理,支持热加载 |
执行的命令:
kubectl create secret generic alertmanager-monitoring-kube-prometheus-alertmanager \
--from-file=alertmanager.yaml -n monitoring \
--dry-run=client -o yaml | kubectl apply -f -
实际上就是在做:
文件 alertmanager.yaml (SMTP配置)
↓
K8s Secret (data.alertmanager.yaml)
↓
Alertmanager Pod 挂载 /etc/alertmanager/config
↓
Alertmanager 进程读取并生效
验证方法:
kubectl get secret alertmanager-kube-prometheus-alertmanager -n monitoring -o jsonpath='{.data.alertmanager\.yaml}' | base64 -d
你会看到你写的原始 YAML 内容。

这是本文最核心的部分。

/api/v2/alerts--alertmanager.url将告警 POST 过来👉 你之前收不到邮件?检查是否创建了匹配的静默规则。

配置示例:
inhibit_rules:
- source_match:
severity: 'critical'
target_match:
severity: 'warning'
equal: ['instance']
意思是:如果同一个 instance上出现了 critical告警,则抑制所有 warning告警。
group_by:按哪些标签分组(如 alertname、cluster)group_wait:等待第一批告警的时间(默认 30s)group_interval:同一组告警发送新通知的最小间隔(默认 5m)repeat_interval:无新告警时重复发送的间隔(默认 4h)为什么要分组?如果没有分组,一个大规模故障可能瞬间产生几百条告警,你的邮箱会被炸掉。
👉 在上一篇实战中配置了:
group_by: ["alertname"]
group_wait: 10s
group_interval: 30s
repeat_interval: 1m
所以 AlwaysFiring告警会每 1 分钟发一次邮件。
示例:
route:
receiver:'default'
group_by:['alertname']
routes:
-match:
severity:critical
receiver:'pager'
-match:
team:'platform'
receiver:'email-platform'


在生产环境中,你不会只跑一个 Alertmanager Pod,而是会跑 2~3 个副本。
因为静默(Silence)是用户通过 UI 或 API 动态创建的,如果只存在某一个实例的内存里,其他实例不知道,就会导致:
解决方案:Gossip 协议
Prometheus
/ \
/ \
Alertmanager-1 ←──→ Alertmanager-2 (Gossip 同步)
\ /
\ /
共享存储 (可选)
--alertmanager.url=a1,a2,a3)kubectl get pod -n monitoring
如果你看到多个 alertmanager-xxxPod,说明已经开启了高可用。

在上一篇做了这些事:
现在回头看:
group_wait: 10s你等了 30 秒才收到邮件?因为还要加上 Prometheus 的 for: 30s和评估周期repeat_interval: 1m控制重复频率Alertmanager = 告警的“邮局”
1. 收件 (API)
2. 处理 (静默 → 抑制 → 分组 → 路由)
3. 派送 (Email/Webhook/...)
高可用 = 多个邮局之间用 Gossip 互相通知“谁被退信了”
在理解了 Alertmanager 架构后,可继续深入:
Alertmanager 的本质并不复杂:配置由 YAML 定义(K8s 中通过 Secret 挂载),处理流程是“接收 → 抑制 → 分组 → 路由 → 通知”,高可用靠 Gossip 协议同步状态。理解了这个脉络,你就能轻松驾驭它。
如果你觉得这篇文章帮你理清了 Alertmanager 的脉络,欢迎点个 👍 或分享给需要的朋友。