Field note / 2026.07.18

Rocky Linux 10 用 DNF 部署 Prometheus、Grafana 与 Alertmanager

14 分钟阅读 HomeLab

在 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.ymlfile_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

参考资料