prometheus/alertmanager
运维与部署接收 Prometheus 等客户端发来的告警,去重、分组并按路由发送到邮件、PagerDuty、Webhook 等接收端,同时支持静默和抑制。
项目介绍
Alertmanager 是 Prometheus 体系中的告警处理组件。Prometheus 等客户端把告警发给它,它负责去重、分组,再按 YAML 配置的路由树把通知投递到邮件、PagerDuty、OpsGenie、通用 Webhook 等接收端 L5-L7。它还提供静默和抑制规则,例如同一条告警已有 critical 级别时,可以抑制对应的 warning 通知。
它适合运行 Prometheus 的运维和平台团队,用来集中决定哪类告警通知谁、以什么频率通知。随附的命令行工具 amtool 通过 API 查看告警、管理静默、渲染模板和测试路由。
快速使用
最快的试用方式是官方容器镜像 L23-L27:
docker run --name alertmanager -d -p 127.0.0.1:9093:9093 quay.io/prometheus/alertmanager
启动后访问 http://localhost:9093/。默认配置没有有用的接收端,正式使用需要编写 YAML 配置,并以 --config.file=<你的配置文件> 启动二进制。
最小配置需要 global(若用邮件通知则含 SMTP 设置)、带 receiver 的根 route,以及 receivers 列表。根路由不能带 matchers,且必须指定接收端,未匹配到任何子路由的告警会落到这里。路由、分组和抑制通过嵌套的 routes、group_by、group_wait、group_interval、repeat_interval 和 inhibit_rules 配置 L52-L177,README 中有一份覆盖常见场景的完整示例 L48-L178。
从源码构建需要 Go 和带 npm 的 Node.js L31-L41:
git clone https://github.com/prometheus/alertmanager.git
cd alertmanager
make build
./alertmanager --config.file=<你的配置文件>
amtool 随发布包提供,也可以用 go install github.com/prometheus/alertmanager/cmd/amtool@latest 安装。在配置文件中设置 alertmanager.url: "http://localhost:9093" 后,可用 amtool alert 列出告警、amtool silence add alertname=Test_Alert 创建静默 L204-L257。
配置与 API
配置使用 YAML,完整参考在 Prometheus 文档中 L48-L51。HTTP API 为 v2,挂载在 /api/v2 下,OpenAPI 规范在仓库中,可用于为各主流语言生成客户端 L179-L199。APIv1 在 0.16.0 弃用,0.27.0 起移除。若设置 --web.route-prefix,API 路由也带该前缀。实验性的 ConnectRPC API 在 /api/ 下提供 Connect 和 gRPC-Web,并在服务器根路径提供原生 gRPC、health 和 reflection。
amtool 还能渲染通知模板和测试路由:amtool config routes test --config.file=doc/examples/simple.yml --tree --verify.receivers=team-X-pager service=database owner=team-X 会打印匹配的接收端,不匹配时返回非零退出码 L326-L340。
高可用
Alertmanager 默认启用集群模式。集群需要在聚类端口(默认 9094)上同时放通 UDP 和 TCP;使用防火墙或容器时两种协议都要处理。成员通过 --cluster.peer 配置,监听地址由 --cluster.listen-address 指定,设为空字符串即关闭 HA L342-L399。
启用 HA 时,应让 Prometheus 直接指向所有 Alertmanager 实例,而不是在中间做负载均衡,因为实现要求每条告警发送到所有实例。本地起三节点集群可用仓库内 Procfile 配合 goreman。设置 --cluster.listen-address= 可关闭 HA L400-L403。
使用约束
- 从源码构建需要 Go 和 Node.js/npm;使用预编译二进制或容器镜像不需要这些依赖。
- HA 集群需要聚类端口同时开放 UDP 和 TCP,只放通 TCP 会导致 gossip 无法工作。
- 实验性 ConnectRPC 的明文 h2c 监听既无加密也无对端认证,只应放在可信网络或 TLS 终止代理之后 L179-L199。
- 实例没有带默认路由的 RFC 6890 地址时,必须设置
cluster.advertise-addressL342-L399。 - 许可证为 Apache-2.0 L419-L425。
HotRepo 点评
这是一个始于 2013 年的老牌基础设施项目,现有 8,698 Star、2,505 Fork。HotRepo 在 2026-11-12 的 Go 语言周榜快照中记录到新增 19 Star、当日该 Go 语言榜最好名次第 12;没有全语言日榜记录,因此这个周榜名次不宜解读为跨语言的整体热度。它的价值更偏结构性:大多数 Prometheus 部署最终都需要这一层告警路由,README 也体现了成熟度——有 HA 集群参数、OpenAPI 规范和随附的 amtool。
本文由 AI 根据项目 README 生成,更新于 ,以项目官方文档为准。