Prometheus+Grafana搭建机房服务器监控大屏
机房服务器数量一多,靠 SSH 逐台查看 CPU、内存、磁盘就变得很低效。
用 Prometheus 采集指标、Grafana 绘制大屏,可以把几十台机器的运行状态集中到一块屏幕上。
下面按零基础也能照做的顺序,讲清楚安装、配置、出图和排错。
准备阶段:角色分配与基础环境
这套方案由三个角色组成:被监控服务器上运行 Node Exporter 暴露指标,监控服务器上运行 Prometheus 负责拉取和存储数据,Grafana 负责读取 Prometheus 数据并展示图表。
建议监控服务器配置不低于 2 核 4G,磁盘预留 50G 以上,因为 Prometheus 的时序数据会持续增长。
假设监控服务器 IP 为 192.168.1.100,被监控服务器为 192.168.1.101、192.168.1.102。
所有机器建议时间同步,否则图表时间轴会错乱:
timedatectl set-timezone Asia/Shanghai
systemctl enable --now chronyd
确认防火墙放行端口:监控服务器需要放行 9090(Prometheus)和 3000(Grafana);
被监控服务器需要放行 9100(Node Exporter)。
被监控端:安装并验证 Node Exporter
在每台被监控服务器上执行以下命令下载并解压 Node Exporter:
cd /opt
wget https://github.com/prometheus/node_exporter/releases/download/v1.7.0/node_exporter-1.7.0.linux-amd64.tar.gz
tar -xzf node_exporter-1.7.0.linux-amd64.tar.gz
mv node_exporter-1.7.0.linux-amd64 node_exporter
创建 systemd 服务以便开机自启:
cat > /etc/systemd/system/node_exporter.service <<'EOF'
[Unit]
Description=Node Exporter
After=network.target
[Service]
User=nobody
ExecStart=/opt/node_exporter/node_exporter
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable --now node_exporter
验证是否成功:curl http://localhost:9100/metrics 应返回大量以 # HELP 开头的指标文本,说明数据已暴露。
若连接被拒绝,检查服务状态 systemctl status node_exporter 和防火墙规则。
监控端:部署 Prometheus 并接入目标
在监控服务器上安装 Prometheus:
cd /opt
wget https://github.com/prometheus/prometheus/releases/download/v2.48.0/prometheus-2.48.0.linux-amd64.tar.gz
tar -xzf prometheus-2.48.0.linux-amd64.tar.gz
mv prometheus-2.48.0.linux-amd64 prometheus
编辑配置文件 /opt/prometheus/prometheus.yml,在 scrape_configs 下添加任务:
scrape_configs:
- job_name: 'node'
static_configs:
- targets: ['192.168.1.101:9100', '192.168.1.102:9100']
同样用 systemd 管理 Prometheus,启动后访问 http://192.168.1.100:9090,在顶部菜单 Status → Targets 中应看到所有 target 状态为 UP。
如果显示 DOWN,优先检查被监控端 9100 端口是否可达。
可视化:Grafana 接入数据源并导入大屏
安装 Grafana(以 RPM 系为例):
wget https://dl.grafana.com/oss/release/grafana-10.2.3-1.x86_64.rpm
yum install -y grafana-10.2.3-1.x86_64.rpm
systemctl enable --now grafana-server
浏览器打开 http://192.168.1.100:3000,默认账号密码均为 admin,首次登录会要求修改。
进入 Configuration → Data Sources → Add data source,选择 Prometheus,URL 填写 http://localhost:9090,点击 Save & test 出现绿色提示即成功。
导入现成面板最省事:
点击左侧 Dashboards → Import,
在 Import via grafana.com 输入面板 ID 1860(Node Exporter Full),
选择刚添加的 Prometheus 数据源,
即可生成包含 CPU、
内存、
磁盘、
网络等图表的监控大屏。
避坑与效果验证
时间不同步会导致 Grafana 图表出现断点或查询为空,
确保所有节点启用 NTP 或 chronyd。Prometheus 内存占用过高通常是因为采集目标过多或保留时间过长,
可在启动参数中调整 --storage.tsdb.retention.time=15d。Grafana 面板无数据时,
先到 Prometheus 的 Graph 页面执行 up 查询,
确认数据源本身有返回。
验证整套监控是否生效,可以在一台被监控服务器上执行 dd if=/dev/zero of=/tmp/test bs=1M count=1024 制造磁盘写入,观察 Grafana 磁盘 I/O 图表是否出现对应波动。
能看到曲线变化,说明采集、存储、展示链路已经打通。
常见问题
Node Exporter 启动后 9100 端口不通? 检查 systemd 服务是否 active,以及云服务器安全组或本机 iptables 是否放行。
Grafana 导入面板后提示 Datasource not found? 导入时需手动选择已配置的 Prometheus 数据源,不能留空。
Prometheus Targets 显示 context deadline exceeded? 通常是被监控端响应慢或网络不通,
先用 telnet 192.168.1.101 9100 测试连通性。
按以上步骤完成后,你就能在 Grafana 中看到机房服务器的实时监控大屏。
后续增加服务器时,只需在被监控端部署 Node Exporter,并在 prometheus.yml 的 targets 列表中追加 IP,执行 systemctl reload prometheus 即可生效。