Prometheus + Alertmanager 三节点高可用集群部署
前言
Prometheus 作为云原生时代的主流监控方案,单节点部署存在单点故障风险。生产环境中通常需要搭建多实例高可用架构,同时配合 Alertmanager 集群实现告警的高可用与去重。
本文记录完整的三节点高可用部署流程,适合运维学习和课程作业参考。
一、环境规划
1.1 节点规划
| 主机名 | IP 地址 | 部署组件 |
|---|---|---|
| Prometheus01 | 192.168.24.10 | Prometheus + Node_exporter + Alertmanager + Grafana |
| Prometheus02 | 192.168.24.11 | Prometheus + Node_exporter + Alertmanager |
| Prometheus03 | 192.168.24.12 | Prometheus + Node_exporter + Alertmanager |
1.2 端口说明
表格
| 组件 | 端口 | 用途 |
|---|---|---|
| Prometheus | 9090 | 指标查询 Web 界面 |
| Alertmanager | 9093 | 告警管理 Web 界面 |
| Alertmanager 集群 | 9094 | 集群间 Gossip 通信 |
| Node_exporter | 9100 | 主机指标采集 |
| Grafana | 3000 | 可视化仪表盘 |
1.3 安装目录统一
将4个组件均解压至 /opt/monitor/ 目录下,便于统一管理:
/opt/monitor/
├── prometheus/
├── alertmanager/
├── node_exporter/
└── grafana/
二、第一台节点基础环境搭建(192.168.24.10)
2.1 前置准备
# 关闭防火墙(或按需放行端口)
systemctl stop firewalld
systemctl disable firewalld
# 关闭 SELinux
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
# 创建运行用户
useradd -M -s /sbin/nologin prometheus
# 创建统一目录
mkdir -p /opt/monitor
2.2 四个组件的 systemd 服务配置
四个组件分别编写 service 文件,统一用 systemd 管理。
Prometheus 服务
# /usr/lib/systemd/system/prometheus.service
[Unit]
Description=Prometheus
Wants=network-online.target
After=network-online.target
[Service]
Type=simple
User=prometheus
Group=prometheus
ExecStart=/opt/monitor/prometheus/prometheus \
--config.file=/opt/monitor/prometheus/prometheus.yml \
--storage.tsdb.path=/opt/monitor/prometheus/data/
Restart=always
[Install]
WantedBy=multi-user.target
Node_exporter 服务
# /usr/lib/systemd/system/node_exporter.service
[Unit]
Description=Node Exporter
Wants=network-online.target
After=network-online.target
[Service]
Type=simple
User=prometheus
Group=prometheus
ExecStart=/opt/monitor/node_exporter/node_exporter
Restart=always
[Install]
WantedBy=multi-user.target
Alertmanager 服务(节点 1,后续会改集群参数)
# /usr/lib/systemd/system/alertmanager.service
[Unit]
Description=Alertmanager
Wants=network-online.target
After=network-online.target
[Service]
Type=simple
User=prometheus
Group=prometheus
ExecStart=/opt/monitor/alertmanager/alertmanager \
--config.file=/opt/monitor/alertmanager/alertmanager.yml \
--storage.path=/opt/monitor/alertmanager/
Restart=always
[Install]
WantedBy=multi-user.target
Grafana 服务
Grafana 安装包自带 service 文件,直接启用即可:
systemctl daemon-reload
systemctl start grafana
systemctl enable grafana --now
2.3 目录授权
bash
chown -R prometheus:prometheus /opt/monitor/prometheus
chown -R prometheus:prometheus /opt/monitor/alertmanager
chown -R prometheus:prometheus /opt/monitor/node_exporter
三、Prometheus 高可用配置
Prometheus 的高可用思路很简单:多台实例拉取相同的 targets,数据各自独立存储,任何一台挂掉不影响其他节点采集。
3.1 编辑 prometheus.yml
bash
vim /opt/monitor/prometheus/prometheus.yml
完整配置:
# ========== 全局配置 ==========
global:
scrape_interval: 15s # 每15秒抓取一次指标
evaluation_interval: 15s # 每15秒评估一次告警规则
# ========== Alertmanager 配置 ==========
# 配置所有 Alertmanager 节点地址,实现告警高可用
alerting:
alertmanagers:
- static_configs:
- targets:
- '192.168.24.10:9093'
- '192.168.24.11:9093'
- '192.168.24.12:9093'
# ========== 告警规则文件 ==========
rule_files:
- "alert.yml"
# ========== 抓取任务配置 ==========
scrape_configs:
# 监控 Prometheus 自身(3个节点)
- job_name: 'prometheus'
static_configs:
- targets:
- '192.168.24.10:9090'
- '192.168.24.11:9090'
- '192.168.24.12:9090'
# 监控 Alertmanager 集群(3个节点)
- job_name: 'alertmanager'
static_configs:
- targets:
- '192.168.24.10:9093'
- '192.168.24.11:9093'
- '192.168.24.12:9093'
# 监控主机指标(3台节点的 node_exporter)
- job_name: 'node-exporter'
static_configs:
- targets: ['192.168.24.10:9100']
labels:
instance: Prometheus01
- targets: ['192.168.24.11:9100']
labels:
instance: Prometheus02
- targets: ['192.168.24.12:9100']
labels:
instance: Prometheus03
3.2 创建告警规则文件 alert.yml
bash
vim /opt/monitor/prometheus/alert.yml
yaml
groups:
- name: test-alert
rules:
- alert: InstanceDown
expr: up == 0
for: 1m
labels:
severity: warning
annotations:
summary: "实例 {{ $labels.instance }} 宕机"
description: "{{ $labels.instance }} 已离线超过 1 分钟,请及时处理。"
3.3 重启生效
bash
systemctl restart prometheus
浏览器访问 http://192.168.24.10:9090 确认 Web 界面正常。

四、Alertmanager 集群高可用配置
Alertmanager 通过 Gossip 协议(9094 端口)组成集群,实现告警去重和高可用。Prometheus 会同时向所有 Alertmanager 发送告警,集群内部自动合并,确保只发一次通知。
4.1 节点 1 的 alertmanager.service
# /usr/lib/systemd/system/alertmanager.service
[Unit]
Description=Alertmanager
Wants=network-online.target
After=network-online.target
[Service]
Type=simple
User=prometheus
Group=prometheus
ExecStart=/opt/monitor/alertmanager/alertmanager \
--config.file=/opt/monitor/alertmanager/alertmanager.yml \
--storage.path=/opt/monitor/alertmanager/ \
--web.external-url=http://192.168.24.10:9093 \
--cluster.listen-address=0.0.0.0:9094
Restart=always
[Install]
WantedBy=multi-user.target
节点 1 作为集群种子节点,只需要监听 9094 端口,不需要指定 peer。
4.2 节点 2 的 alertmanager.service
vim /usr/lib/systemd/system/alertmanager.service
完整内容:
[Unit]
Description=Alertmanager
Wants=network-online.target
After=network-online.target
[Service]
Type=simple
User=prometheus
Group=prometheus
ExecStart=/opt/monitor/alertmanager/alertmanager \
--config.file=/opt/monitor/alertmanager/alertmanager.yml \
--storage.path=/opt/monitor/alertmanager/ \
--web.external-url=http://192.168.24.11:9093 \
--cluster.listen-address=192.168.24.11:9094 \
--cluster.peer=192.168.24.10:9094
Restart=always
[Install]
WantedBy=multi-user.target
4.3 节点 3 的 alertmanager.service
vim /usr/lib/systemd/system/alertmanager.service
[Unit]
Description=Alertmanager
Wants=network-online.target
After=network-online.target
[Service]
Type=simple
User=prometheus
Group=prometheus
ExecStart=/opt/monitor/alertmanager/alertmanager \
--config.file=/opt/monitor/alertmanager/alertmanager.yml \
--storage.path=/opt/monitor/alertmanager/ \
--web.external-url=http://192.168.24.12:9093 \
--cluster.listen-address=192.168.24.12:9094 \
--cluster.peer=192.168.24.10:9094
Restart=always
[Install]
WantedBy=multi-user.target
节点 2 和节点 3 通过
--cluster.peer指向节点 1 加入集群,只要连上任意一个节点就能自动发现全部成员。
五、克隆虚拟机并配置另外两台节点
第一台全部配置好后,直接克隆出另外两台,效率最高。
5.1 克隆步骤
- 关闭 Prometheus01:
shutdown -h now - 在 VMware 中右键 → 管理 → 克隆 → 完整克隆
- 克隆两份,分别命名为 Prometheus02、Prometheus03
- 逐台开机修改,避免 IP 冲突
5.2 修改 IP 地址
bash
[root@prometheus02 ~]# nmcli c modify ens160 ipv4.method manual ipv4.addresses 192.168.24.11/24 ipv4.gateway 192.168.24.2 ipv4.dns 223.5.5.5 connection.autoconnect yes
[root@prometheus02 ~]# nmcli c up ens160
# 节点2:192.168.24.11
# 节点3:192.168.24.12
节点3同节点2
5.3 修改主机名
bash
# 节点2
hostnamectl set-hostname Prometheus02
# 节点3
hostnamectl set-hostname Prometheus03
5.4 修改 alertmanager.service
分别替换节点 2 和节点 3 的 service 文件,然后:
bash
systemctl daemon-reload
systemctl restart alertmanager
5.5 关闭多余的 Grafana
节点 2、3 不需要 Grafana,停掉即可:
bash
systemctl stop grafana-server
systemctl disable grafana-server
5.6 启动全部服务
bash
systemctl start prometheus
systemctl start node_exporter
systemctl start alertmanager
systemctl enable prometheus node_exporter alertmanager
六、Grafana 配置数据源
Grafana 只在节点 1 部署,统一做可视化。
- 浏览器访问
http://192.168.24.10:3000,默认账号密码 admin/admin - 左侧菜单 → Connections → Data sources → Add data source
- 选择 Prometheus
- Prometheus server URL 填写:
http://192.168.24.10:9090 - 底部点击 Save & test,绿色提示成功即可

后续可以导入 Node Exporter 仪表盘(推荐 ID:1860 / 8919)做主机监控展示。
七、163 邮箱告警配置
7.1 开启 163 邮箱 SMTP 服务
- 登录 mail.163.com
- 设置 → POP3/SMTP/IMAP → 开启 IMAP/SMTP 服务
- 短信验证后获取授权码(注意:不是登录密码)
7.2 修改 alertmanager.yml
global:
resolve_timeout: 5m
# 163邮箱SMTP配置
smtp_smarthost: 'smtp.163.com:465'
smtp_from: 'xxx@163.com'
smtp_auth_username: 'xxx@163.com'
smtp_auth_password: '你的授权码'
smtp_require_tls: false
route:
group_by: ['alertname']
group_wait: 10s
group_interval: 10s
repeat_interval: 1h
receiver: 'email'
receivers:
- name: 'email'
email_configs:
- to: '收件人@163.com'
send_resolved: true # 告警恢复也发通知
inhibit_rules: []
7.3 同步配置到三台节点
bash
scp /opt/monitor/alertmanager/alertmanager.yml root@192.168.24.11:/opt/monitor/alertmanager/
scp /opt/monitor/alertmanager/alertmanager.yml root@192.168.24.12:/opt/monitor/alertmanager/
三台都重启:
bash
systemctl restart alertmanager
八、验证与测试
8.1 检查配置文件
bash
# 检查 Alertmanager 配置
cd /opt/monitor/alertmanager
./amtool check-config alertmanager.yml
# 检查 Prometheus 配置
cd /opt/monitor/prometheus
./promtool check config prometheus.yml
8.2 查看 Prometheus Targets
访问 http://192.168.24.10:9090 → Status → Targets
确认 9 个目标(3 prometheus + 3 alertmanager + 3 node-exporter)全部 UP。

8.3 查看 Alertmanager 集群状态
访问 http://192.168.24.10:9093 → Status → 找到 Cluster 区域
正常会显示 3 个节点的 IP 和端口,说明集群组建成功。

8.4 发送测试告警(v2 API)
注意:Alertmanager 0.27+ 版本已移除 v1 API,使用 v2 接口
bash
curl -X POST http://localhost:9093/api/v2/alerts \
-H "Content-Type: application/json" \
-d '[{
"labels": {"alertname": "TestAlert", "instance": "example", "severity": "warning"},
"annotations": {"summary": "测试告警"}
}]'
发送后立刻刷新 Alerts 页面,三台 Alertmanager 都能看到同一条告警 → 集群同步正常。
8.5 验证邮件接收
触发告警后等待几十秒,检查 163 邮箱收件箱是否收到告警邮件。
查看邮箱

点开邮箱:

九、常见问题与排错
1. Target 显示 DOWN
- 检查对端服务是否启动:
systemctl status xxx - 检查防火墙是否放行端口
- 两台机器之间 ping 测试网络连通性
2. Alertmanager 集群只有自己
- 确认 9094 端口防火墙已放行
- 检查
--cluster.listen-address是否绑定了正确的网卡地址 - 三台节点之间能否互相 telnet 9094 端口
3. 邮件发不出去
- 550 认证失败:用的是邮箱登录密码,必须换成 SMTP 授权码
- 连接超时:465 端口出站被拦截,换 25 端口或检查服务器网络
- 进垃圾箱:163 反垃圾策略,把发件地址加入白名单
4. v1 API 报错 deprecated
Alertmanager 0.27 及以上版本移除了 v1 API,统一使用 /api/v2/alerts,并加上 Content-Type: application/json 请求头。
总结
本文完整实现了 Prometheus + Alertmanager 的三节点高可用架构:
- Prometheus 高可用:多实例独立采集,任一节点故障不影响整体监控
- Alertmanager 集群:Gossip 协议同步告警,自动去重,避免重复通知
- Grafana 可视化:统一展示监控数据
- 邮件告警:163 邮箱 SMTP 实现告警通知
这套架构是生产环境 Prometheus 监控的基础入门方案,后续可以在此基础上扩展 Thanos / VictoriaMetrics 实现长期存储,或者接入 Webhook 对接企业微信、钉钉等告警渠道。
更多推荐
所有评论(0)