文章目录
- 5.1 配置邮件告警(alertmanager.yml)

1. Alertmanager 简介
Alertmanager 是 Prometheus 生态中的告警管理与通知路由组件,负责接收来自 Prometheus 服务器等客户端发送的告警,并完成去重、分组与通知投递。它诞生于 Prometheus 项目——Prometheus 2012 年起源于 SoundCloud,用 Go 语言编写,2016 年加入云原生计算基金会(CNCF),是 Kubernetes 之外最核心的云原生可观测性组件之一,而 Alertmanager 正是这套体系里处理"告警"这一环的官方组件。如今 Alertmanager 在 GitHub 上拥有约 8.5 千颗星标、2400 余个分支(fork),累计 360 余位贡献者,采用 Apache 2.0 开源许可。
Alertmanager 要解决的,是"告警风暴"与"通知错乱"的问题:当监控系统发现大量问题时,如果每条告警都直接推送,运维会被刷屏、重复打扰。Alertmanager 在中间做一层缓冲与编排——对相同告警去重,把相关告警按标签分组后合并成一次通知,再按路由规则投递到正确的接收方,并支持按需静默与抑制,从而把原始告警变成"可操作、有上下文"的通知。
Alertmanager 的核心特点:
- 告警去重
- 分组
- 灵活路由:基于标签匹配的多级路由树,可按服务、严重级别等维度分发
- 多接收器集成:邮件、PagerDuty、OpsGenie、Slack、微信、Webhook 等
- 静默
- 抑制
- 高可用
- amtool
2. v0.33.1 版本亮点
该版本汇集了 2 位贡献者 的 3 条 贡献。
v0.33.1 发布于 2026 年 7 月 4 日,是一个缺陷修复补丁版本,共修复 3 处问题:
2.1 缺陷修复
- 文档:补充 webhook 文档中缺失的
notification_reason 字段说明 - 静默快照兼容性:修复静默快照缺少旧版 matchers(匹配器)字段的问题,该缺陷曾导致旧版 Alertmanager 无法读取新版快照
- API 响应:无 matchers 的静默在 API 响应中现在返回空数组,而非 null
3. 获取安装包
如果访问 GitHub 不便,安装包及中文文档:https://hanshuixin.org/go/225Q(内含 alertmanager-0.33.1.linux-amd64.tar.gz、README 中英对照、发布说明中英对照和 LICENSE)。
适用于 Linux x86_64(amd64)。
Alertmanager 其他版本:https://hanshuixin.org/resource/software_integrated_package/Linux/Alertmanager
Linux安装alertmanager-v0.33.1(alertmanager-0.33.1.linux-amd64).zip├── alertmanager-0.33.1.linux-amd64.tar.gz ← 解压后运行├── Linux安装alertmanager-v0.33.1(alertmanager-0.33.1.linux-amd64).pdf├── README/│ ├── README.md│ └── README-中文版.md├── 发布说明/│ ├── RELEASE-NOTES.md│ └── RELEASE-NOTES-中文版.md└── LICENSE
4. 安装
alertmanager-0.33.1.linux-amd64.tar.gz 是 Alertmanager 官方发布的 Linux x86_64 预编译二进制包,不绑定特定发行版,解压即可运行:
# 解压二进制包tar -xzf alertmanager-0.33.1.linux-amd64.tar.gz# 进入解压目录(内含 alertmanager 与 amtool 两个可执行文件)cd alertmanager-0.33.1.linux-amd64# 启动 Alertmanager(使用自带的默认配置)./alertmanager --config.file=alertmanager.yml
启动后访问 http://localhost:9093 即可打开 Alertmanager 的 Web 界面。
4.1 生产环境配置(systemd 服务化)
实际生产部署中,建议将二进制部署到统一目录,创建无登录权限的专用运行用户,并以 systemd 服务托管,便于开机自启、崩溃自动拉起与统一管理:
# 将二进制部署到统一目录sudo mkdir -p /opt/alertmanagersudo cp alertmanager amtool /opt/alertmanager/# 创建专用用户(无登录权限)并授权sudo useradd --system --no-create-home --shell /sbin/nologin alertmanagersudo chown -R alertmanager:alertmanager /opt/alertmanager
创建服务文件 /etc/systemd/system/alertmanager.service:
[Unit]Description=AlertmanagerDocumentation=https://prometheus.io/docs/alerting/latest/alertmanager/After=network.target[Service]Type=simpleUser=alertmanagerGroup=alertmanagerWorkingDirectory=/opt/alertmanagerExecStart=/opt/alertmanager/alertmanager \ --config.file=/opt/alertmanager/alertmanager.yml \ --storage.path=/opt/alertmanager/data \ --web.listen-address=0.0.0.0:9093Restart=on-failureRestartSec=5[Install]WantedBy=multi-user.target
配置要点说明:
--config.file:配置文件路径,默认读取 /etc/alertmanager/alertmanager.yml--storage.path:告警与静默数据的存储路径,默认 data/ 目录--web.listen-address:Web 界面与 API 的监听地址,默认 :9093User
# 开机自启并启动sudo systemctl enable alertmanagersudo systemctl start alertmanager# 查看状态sudo systemctl status alertmanager
5. 使用
5.1 配置邮件告警(alertmanager.yml)
Alertmanager 的行为全部由 alertmanager.yml 配置文件驱动,最常用的场景是"故障时发邮件通知"。一个完整的邮件告警配置由三部分组成:global 配置 SMTP 发信参数,route 定义分组与发送节奏,receivers 定义收件人:
global: # SMTP 邮件服务器地址,格式:主机:端口 smtp_smarthost: 'smtp.example.com:465' # 发件人邮箱(收件人看到的发件人) smtp_from: 'alert@example.com' # SMTP 认证用户名,一般就是邮箱账号 smtp_auth_username: 'alert@example.com' # SMTP 认证密码 # 注意:这里通常不是邮箱登录密码,而是邮箱后台生成的"客户端授权码" smtp_auth_password: 'your_auth_code' # 是否要求 TLS 加密(465 端口 = SSL/TLS 直连,无需 STARTTLS 命令) smtp_require_tls: falseroute: # 默认接收器,所有告警最终都会发到它 receiver: email # 告警分组维度:相同 alertname + instance 的告警合并为一个告警组 group_by: ['alertname', 'instance'] # 首次发现告警后等待多久再发送,用于聚合同一时段出现的多个告警 group_wait: 5m # 同一告警组新增告警后,多久再次发送 group_interval: 15m # 告警持续存在时的重复提醒间隔 repeat_interval: 1hreceivers: # 接收器名称,route.receiver=email 即引用这里 - name: email email_configs: # 收件人邮箱 - to: 'ops@example.com' # 告警恢复时是否发送邮件:true 额外发恢复通知,false 只发故障邮件 send_resolved: true
配置要点说明:
- SMTP 授权码:
smtp_auth_password 通常是邮箱服务商(126、QQ、163 等)后台生成的「客户端授权码」,而非登录密码,用登录密码会认证失败 - 端口与加密:
465 端口是 SSL/TLS 直连,配合 smtp_require_tls: false;若用 587 端口则需 STARTTLS,应改为 smtp_require_tls: true - 分组节奏:
group_wait 聚合首波告警、group_interval 控制同组增量发送、repeat_interval 控制重复提醒,三者配合避免刷屏 - 恢复通知:
send_resolved: true 时,故障恢复后还会补发一封"已恢复"邮件
如需按严重级别分派到不同渠道,可在 route 下加子路由(routes),按标签匹配后投递到对应接收器(如值班邮箱、PagerDuty、Webhook 等)。
修改配置后先用 amtool 校验语法,再热加载:
# 校验配置语法amtool check-config alertmanager.yml# 重新加载配置systemctl reload alertmanager
5.2 静默与抑制
- 静默(silencing):在维护窗口或已知故障期间临时屏蔽告警,可在 Web 界面"静默"页或通过 amtool 创建,指定匹配标签与生效时间段。
- 抑制(inhibition):通过
inhibit_rules 配置,当更高优先级的告警触发时抑制低优先级告警,避免同一故障引发一屏冗余通知:
inhibit_rules:- source_matchers: - severity="critical" target_matchers: - severity="warning" equal: ['alertname']
5.3 amtool 常用命令
amtool 是随包提供的命令行工具,用于查询告警、管理静默:
# 查看当前正在触发的告警amtool alert# 查看当前静默amtool silence query# 添加一个静默(静默 alertname=Test_Alert 的告警)amtool silence add alertname=Test_Alert# 使某个静默失效amtool silence expire <静默ID>
5.4 与 Prometheus 对接
Alertmanager 本身不产生告警,需要 Prometheus 把告警推送过来。在 Prometheus 的 prometheus.yml 中配置:
alerting: alertmanagers: - static_configs: - targets: - alertmanager1:9093 - alertmanager2:9093
注意:不要在 Prometheus 与其 Alertmanager 之间做负载均衡,而应让 Prometheus 指向所有 Alertmanager 的列表——Alertmanager 期望所有告警都发送到所有实例,以确保高可用。
若需多实例高可用,可配合 --cluster.* 标志(--cluster.listen-address、--cluster.peer 等)组建 gossip 集群,各实例自动同步告警状态。
5.5 Web 界面与 REST API
启动后访问 http://localhost:9093,Web 界面提供告警列表、静默管理、状态查看等功能。同时提供版本 2 的 REST API,以 /api/v2 为前缀,例如查询所有告警:
GET /api/v2/alertsGET /api/v2/silencesGET /api/v2/status
配合 amtool 或任意 HTTP 客户端即可完成告警的查询、静默的增删改等操作,也便于接入自建的通知与运维自动化系统。