在 Rocky Linux 10 上部署这套监控栈,不需要从 GitHub 下载 tar 包,不需要手工创建用户,
也不需要自己编写 systemd unit。Rocky AppStream 和 EPEL 已经提供中心端与主机采集端需要
的 RPM;配置交给 /etc,数据交给 /var/lib,升级和回滚交给 DNF。
本文只解决一件事:用最短、可维护的路径搭起 20 台左右 Linux 主机的基础监控。容器指标、
日志采集、长期存储和高可用不混进第一阶段。
示例使用文档保留地址 192.0.2.0/24,不包含真实内网地址、域名或通知凭据。
1. 软件来源
本文在 Rocky Linux 10.2 上实际查询到:
| 组件 | 版本 | 仓库 | RPM 提供的服务 |
|---|---|---|---|
| Prometheus | 3.13.1 | EPEL 10 | prometheus.service |
| Alertmanager | 0.33.0 | EPEL 10 | prometheus-alertmanager.service |
| Grafana | 10.2.6 | Rocky AppStream | grafana-server.service |
| node_exporter | 1.12.1 | EPEL 10 | prometheus-node-exporter.service |
版本会随 Rocky/EPEL 更新。部署时以 dnf info 显示的版本为准,不要为了照抄文章而绕开
RPM 降级到旧版。
这些包已经提供专用系统用户、systemd unit、/etc/default/* 参数文件、配置目录和数据
目录。因此本文没有 useradd、/usr/local/bin 或自建 service 文件。
2. 架构与端口
Linux 主机 × 20
└─ node_exporter :9100
│ Prometheus 每 15 秒拉取
▼
monitor VM
├─ Prometheus :9090 指标存储、查询、规则计算
├─ Alertmanager :9093 告警分组与通知
└─ Grafana :3000 仪表盘
| 端口 | 允许来源 |
|---|---|
| 9100 | 只允许 monitor VM |
| 9090 | 只允许管理网;不需要对被监控节点开放 |
| 9093 | 默认只监听 127.0.0.1 |
| 3000 | 只允许管理网,或只监听回环并交给反向代理 |
Prometheus 主动拉取 node_exporter,因此节点不需要向中心端 remote_write,也不需要给每个
Agent 配置中心 URL。
3. 安装中心端
在 monitor VM 执行:
sudo dnf update -y
sudo dnf install -y epel-release
sudo dnf install -y prometheus alertmanager grafana node-exporter
rpm -q prometheus alertmanager grafana node-exporter
包名是 alertmanager,但 unit 名是 prometheus-alertmanager.service;node_exporter 同理,
推荐使用 prometheus-node-exporter.service。不要凭组件名猜 unit。
4. 配置 Prometheus
sudo install -d -o root -g prometheus -m 0750 /etc/prometheus/rules /etc/prometheus/targets
sudo install -o root -g prometheus -m 0640
prometheus/prometheus.yml /etc/prometheus/prometheus.yml
sudo install -o root -g prometheus -m 0640
prometheus/monitoring-rules.yml /etc/prometheus/rules/monitoring.yml
sudo install -o root -g prometheus -m 0640
prometheus/node-targets.yml /etc/prometheus/targets/nodes.yml
sudo install -o root -g root -m 0644
default/prometheus /etc/default/prometheus
/etc/default/prometheus 中设置:
ARGS='--config.file=/etc/prometheus/prometheus.yml --storage.tsdb.retention.time=30d --storage.tsdb.retention.size=20GB --web.listen-address=0.0.0.0:9090 --web.enable-lifecycle'
30 天和 20GB 是双上限,先达到哪个就先清理旧数据。它不是“保证保留 30 天”;如果指标量
先吃满 20GB,实际保留时间会更短。
编辑 /etc/prometheus/targets/nodes.yml,每台主机一条:
- targets:
- 192.0.2.21:9100
labels:
host: linux-node-01
site: homelab
先校验再启动:
sudo -u prometheus /usr/bin/promtool check config /etc/prometheus/prometheus.yml
sudo -u prometheus /usr/bin/promtool check rules /etc/prometheus/rules/monitoring.yml
sudo systemctl enable --now prometheus
curl -fsS http://127.0.0.1:9090/-/ready
5. 配置 Alertmanager
EPEL 的配置路径是 /etc/prometheus/alertmanager.yml,不是另建的 /etc/alertmanager。
sudo install -o root -g prometheus -m 0640
alertmanager/alertmanager.yml /etc/prometheus/alertmanager.yml
sudo install -o root -g root -m 0644
default/prometheus-alertmanager /etc/default/prometheus-alertmanager
sudo -u prometheus /usr/bin/amtool check-config /etc/prometheus/alertmanager.yml
sudo systemctl enable --now prometheus-alertmanager
curl -fsS http://127.0.0.1:9093/-/ready
附件默认使用空接收器,只验证 Prometheus → Alertmanager 链路,不会真的发通知。确认邮件、
企业微信或 Webhook 目标后,再把真实 receiver 写进本机配置;凭据不要放入 Git 或公开附件。
单节点应关闭 Alertmanager 的集群监听:
ARGS='--config.file=/etc/prometheus/alertmanager.yml --storage.path=/var/lib/prometheus/alertmanager --web.listen-address=127.0.0.1:9093 --cluster.listen-address='
6. 配置 Grafana
AppStream RPM 已创建 grafana 用户、数据目录和 service。编辑 /etc/grafana/grafana.ini:
[server]
http_addr = 0.0.0.0
http_port = 3000
[users]
allow_sign_up = false
[auth.anonymous]
enabled = false
安装 Prometheus 数据源 provisioning:
sudo install -o root -g grafana -m 0640
grafana/prometheus-datasource.yml
/etc/grafana/provisioning/datasources/prometheus.yml
sudo systemctl enable --now grafana-server
curl -fsS http://127.0.0.1:3000/api/health
首次登录后立即修改管理员密码。生产环境应由 Nginx/Caddy 提供 HTTPS,并让 Grafana 只
监听回环地址;家庭管理网第一阶段可以通过 firewalld 限制 3000 端口。
7. 在每台 Linux 主机安装 node_exporter
Rocky Linux 10 节点执行:
sudo dnf install -y epel-release node-exporter
sudo systemctl enable --now prometheus-node-exporter
curl -fsS http://127.0.0.1:9100/metrics >/dev/null
RPM 默认已经启用 CPU、内存、磁盘、网络、systemd、时间等常用 collector。没有明确需求
不要先堆额外参数。
节点防火墙只允许 monitor VM:
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.0.2.10/32" port port="9100" protocol="tcp" accept'
sudo firewall-cmd --reload
在 monitor VM 验证:
curl -fsS http://192.0.2.21:9100/metrics >/dev/null
确认可达后,将节点写进 /etc/prometheus/targets/nodes.yml。file_sd_configs 会自动刷新,
不需要每加一台主机就重启 Prometheus。
8. monitor VM 防火墙
把示例管理网段替换为实际值:
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.0.2.0/24" port port="9090" protocol="tcp" accept'
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.0.2.0/24" port port="3000" protocol="tcp" accept'
sudo firewall-cmd --reload
sudo firewall-cmd --list-all
9093 已绑定回环,不开放。保持 SELinux Enforcing,不要为省事关闭 SELinux 或 firewalld。
9. 验收
systemctl --no-pager --full status
prometheus prometheus-alertmanager grafana-server prometheus-node-exporter
curl -fsS http://127.0.0.1:9090/-/ready
curl -fsS http://127.0.0.1:9093/-/ready
curl -fsS http://127.0.0.1:3000/api/health
curl -fsS http://127.0.0.1:9100/metrics >/dev/null
Prometheus 查询页至少验证:
up
node_uname_info
100 * (1 - avg by (instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])))
100 * (1 - node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)
目标页中所有节点应为 UP。Grafana 数据源页面应显示 Prometheus 可用。
10. 20 台主机、30 天大概占多少空间
node_exporter 默认指标、15 秒采集、20 台主机通常从几 GB 到十几 GB 起步,但真实容量取决于
启用的 collector、磁盘/网卡数量、标签基数和额外 exporter。不要用主机数量直接乘出一个
“保证值”。
先设 30d + 20GB 双上限,每周观察:
prometheus_tsdb_head_series
rate(prometheus_tsdb_head_samples_appended_total[5m])
同时查看 Prometheus 的 TSDB Status 和 /var/lib/prometheus/metrics2 实际增长。若 20GB 先触顶,
再根据磁盘余量增加容量,而不是取消 size 上限。
11. 日常维护
sudo -u prometheus promtool check config /etc/prometheus/prometheus.yml
sudo -u prometheus promtool check rules /etc/prometheus/rules/monitoring.yml
sudo systemctl reload prometheus
sudo -u prometheus amtool check-config /etc/prometheus/alertmanager.yml
sudo systemctl reload prometheus-alertmanager
统一查看日志:
sudo journalctl -u prometheus -u prometheus-alertmanager
-u grafana-server -u prometheus-node-exporter --since -30min
升级前记录版本并备份配置:
rpm -q prometheus alertmanager grafana node-exporter
sudo tar -czf /root/monitoring-config-$(date +%F).tgz
/etc/prometheus /etc/default/prometheus
/etc/default/prometheus-alertmanager /etc/grafana
sudo dnf upgrade prometheus alertmanager grafana node-exporter
Prometheus 历史数据若必须恢复,应使用 snapshot API;不要在运行时直接复制 TSDB 目录。
12. 本文刻意没有加入的东西
- Alloy:当前 Rocky AppStream/EPEL 没有对应 RPM,基础主机指标用 node_exporter 已足够;
- 容器指标:等主机监控稳定后,再按 Docker/Podman 的实际环境选择采集方式;
- Loki/日志采集:与指标监控分开实施;
- 长期存储与高可用:20 台家庭或实验主机暂不需要。
先把最小闭环跑稳,再增加组件。
13. 附件
附件只包含 RPM 安装后需要覆盖或新增的配置,不包含二进制、用户、systemd unit 和秘密:
prometheus-grafana-rocky10-rpm-2026.07.19-r3.zip
SHA256:5831cbbf8886c6bc9a5ff90060ae33888cd7131ba88953574f7d32699776d5fb