Prometheus + Alertmanager + Grafana 监控平台部署
说明:本文只记录部署操作步骤与配置要点。安装包内已提供的文件(
docker-compose.yaml、prometheus.yml、alerts/*.yml、node_targets.json、alertmanager/config.yml、install_node_exporter.sh、node_exporter.service)不再重复列出内容,按需修改即可。
一、组件与端口
| 组件 | 作用 | 端口 |
|---|---|---|
| Prometheus | 采集、存储、告警规则判定 | 9090 |
| Alertmanager | 告警去重/分组/路由到飞书 | 9093 |
| Grafana | 可视化,数据源对接 Prometheus | 3000 |
| node_exporter | 部署在被监控主机,暴露系统指标 | 9100 |
数据流:
node_exporter(:9100) ──拉取──> Prometheus(:9090) ──告警──> Alertmanager(:9093) ──webhook──> 飞书中转服务 ──> 飞书群 │ └──数据源──> Grafana(:3000)二、目录结构
. ├── alertmanager │ └── config.yml ├── docker-compose.yaml ├── grafana │ └── grafana_data └── prometheus ├── prometheus_config │ ├── alerts │ │ ├── blackbox_alerts.yml │ │ ├── kafka_alerts.yml │ │ ├── milvus_standalone_rule.yml │ │ └── rules.yml │ ├── node_targets.json │ └── prometheus.yml └── prometheus_data三、部署前准备:目录权限
三个组件在容器内均以非 root 用户运行,宿主机挂载目录属主不一致会直接导致启动失败。
| 组件 | 容器内数据目录 | 运行 UID:GID |
|---|---|---|
| Prometheus | /prometheus | 65534:65534(nobody) |
| Alertmanager | /alertmanager | 65534:65534* |
| Grafana | /var/lib/grafana | 472:0(grafana:root) |
执行
# Prometheuschown-R65534:65534 prometheus/chmod-R755prometheus/# Alertmanager(UID 以上面自查结果为准)chown-R65534:65534 alertmanager/chmod-R755alertmanager/# Grafanachown-R472:0 grafana/chmod-R755grafana/需要 root 执行,命令前加
sudo。
四、启动
docker-composeup-d验证
dockercomposeps# 三个服务均应为 Updockerlogs-fprometheusdockerlogs-falertmanagerdockerlogs-fgrafana访问地址
| 地址 | 用途 |
|---|---|
http://<IP>:9090 | Prometheus UI |
http://<IP>:9090/targets | 查看采集目标状态(应为 UP) |
http://<IP>:9093 | Alertmanager UI |
http://<IP>:3000 | Grafana |
若端口打不开,检查防火墙是否放行 9090 / 9093 / 3000。
五、Grafana 配置
5.1 登录
访问http://<IP>:3000,默认用户名密码admin / admin,首次登录强制修改密码。
5.2 添加数据源
Connections → Data sources → Add data source → Prometheus
- Prometheus server URL填:
http://prometheus:9090 - 其余保持默认,点Save & test,提示
Successfully queried the Prometheus API即通。
不要填
localhost:9090—— Grafana 容器内的 localhost 指向它自己,连不通。
5.3 导入仪表盘
Dashboards → New → Import→ 填入 ID1860→ Load → 选择 Prometheus 数据源 → Import。
其他常用仪表盘:
| Dashboard ID | 说明 |
|---|---|
| 1860 | Node Exporter Full(推荐) |
| 11074 | Node Exporter for Prometheus Dashboard |
| 3662 | Prometheus 2.0 Overview |
六、安装 node_exporter(被监控主机)
安装包已提供:
. ├── install_node_exporter.sh ├── node_exporter-1.9.1.linux-amd64.tar.gz └── node_exporter.service在被监控主机上执行:
chmod+x install_node_exporter.sh ./install_node_exporter.sh安装后验证(在被监控主机上):
systemctl status node_exportercurl-shttp://localhost:9100/metrics|head-5需放行 9100 端口,且仅允许 Prometheus 主机访问:
firewall-cmd--permanent--add-rich-rule='rule family="ipv4" source address="<Prometheus主机IP>/32" port port="9100" protocol="tcp" accept'firewall-cmd--reload
七、添加 / 移除监控节点
- 目标主机安装 node_exporter(见第六章)。
- 编辑
prometheus/prometheus_config/node_targets.json,按已有格式追加主机。 - 改
node_targets.json无需任何操作,文件服务发现会自动加载。 - 改
prometheus.yml主配置(如新增 job)才需要重载:
curl-shttp://localhost:9090/-/reload-XPOST配置校验
# 主配置语法dockerexecprometheus promtool check config /etc/prometheus/prometheus.yml# 告警规则语法dockerexecprometheus promtool check rules /etc/prometheus/alerts/rules.yml八、Alertmanager 配置飞书告警
编辑alertmanager/config.yml,在receivers中把 webhook 地址指向中转服务:
receivers:-name:'feishu'webhook_configs:-url:'http://<中转服务IP>:<端口>/alert'send_resolved:true为什么需要中转:Alertmanager 发出的 JSON 结构与飞书自定义机器人要求的
{"msg_type":"text","content":{"text":"..."}}(或 interactive 卡片)格式不一致,必须由一个中转程序做格式转换后再调用飞书 Webhook。若飞书机器人开启了签名校验,中转程序还需按timestamp + key生成 HMAC-SHA256 签名。
飞书侧:群设置 → 群机器人 → 添加自定义机器人,获取 Webhook 地址:
https://open.feishu.cn/open-apis/bot/v2/hook/<token>配置校验与重载
dockerexecalertmanager amtool check-config /etc/alertmanager/config.ymlcurl-shttp://localhost:9093/-/reload-XPOST九、常见问题速查
| 现象 | 处理 |
|---|---|
Prometheus 报queries.active permission denied | chown -R 65534:65534 prometheus/ |
Grafana 报GF_PATHS_DATA is not writable | chown -R 472:0 grafana/ |
Grafana 数据源连不上prometheus:9090 | 确认两者在同一 compose 网络;容器内测试docker exec grafana wget -qO- http://prometheus:9090/-/healthy |
/-/reload返回 404 | compose 补--web.enable-lifecycle,然后docker compose restart prometheus |
| Target 状态 DOWN | 在 Prometheus 主机执行curl http://<目标IP>:9100/metrics,检查 9100 端口与防火墙 |
| 告警不推送 | 先看http://<IP>:9093是否收到告警,再查中转服务日志 |
| 规则文件未生效 | promtool check rules校验语法,确认rule_files路径能匹配到 |
| 数据保留时间过短 | 默认 15 天,用--storage.tsdb.retention.time=30d调整 |
安装包可私信我获取