服务器预测性维护监控新手搭建指南
当你管理的服务器突然宕机,排查半天才发现是磁盘写满或内存泄漏,这种被动维修既耗时又影响业务。
预测性维护监控的目标,就是通过持续采集 CPU、内存、磁盘、网络等指标,结合趋势变化提前发现异常,在故障发生前就发出告警。
本文使用开源的 Prometheus + Node Exporter + Grafana 组合,带零基础用户一步步搭建这套监控系统,即使没接触过监控也能直接上手。
搭建前需要准备什么
- 一台 Linux 服务器(本文以 CentOS 7/Ubuntu 20.04 为例,其他发行版命令类似)。
- 服务器能正常访问 GitHub 和 Grafana 仓库(如受限需提前准备代理或离线包)。
- 开放服务器防火墙:Prometheus 默认端口 9090,Node Exporter 端口 9100,Grafana 端口 3000。
如果你用云服务器,还需要在安全组中放行这三个端口。
第一步:安装系统资源采集器 Node Exporter
Node Exporter 负责收集服务器的 CPU、内存、磁盘、网络等指标,是最底层的数据源。
- 下载并解压最新版(到 Prometheus 官网 找当前版本号,本文以 1.6.0 为例):
wget https://github.com/prometheus/node_exporter/releases/download/v1.6.0/node_exporter-1.6.0.linux-amd64.tar.gz
tar -xzf node_exporter-1.6.0.linux-amd64.tar.gz
sudo mv node_exporter-1.6.0.linux-amd64/node_exporter /usr/local/bin/
- 创建系统服务文件,让 Node Exporter 开机自启:
sudo tee /etc/systemd/system/node_exporter.service <
- 启动并验证:
sudo systemctl daemon-reload
sudo systemctl start node_exporter
sudo systemctl enable node_exporter
curl http://localhost:9100/metrics # 应返回大量指标数据
第二步:配置 Prometheus 抓取数据
Prometheus 是一个时序数据库,负责定期拉取 Node Exporter 的指标并存储。
- 下载 Prometheus:
wget https://github.com/prometheus/prometheus/releases/download/v2.50.1/prometheus-2.50.1.linux-amd64.tar.gz
tar -xzf prometheus-2.50.1.linux-amd64.tar.gz
sudo mv prometheus-2.50.1.linux-amd64 /opt/prometheus
- 编辑配置文件
/opt/prometheus/prometheus.yml,在 scrape_configs 下添加 Node Exporter 的抓取目标:
scrape_configs:
- job_name: 'node'
static_configs:
- targets: ['localhost:9100']
(如果有多个服务器,继续添加 targets,用逗号分隔)
- 创建服务并启动:
sudo tee /etc/systemd/system/prometheus.service <
- 验证:浏览器访问
http://服务器IP:9090,在 Expression 框输入up,点 Execute。如果看到 node 对应的值为 1,说明抓取成功。
第三步:用 Grafana 可视化并设置告警
Grafana 负责将 Prometheus 里的指标画成图表,并支持配置告警。
- 安装 Grafana(以 Ubuntu 为例):
sudo apt-get install -y software-properties-common
sudo add-apt-repository "deb https://packages.grafana.com/oss/deb stable main"
sudo apt-get update
sudo apt-get install -y grafana
sudo systemctl start grafana-server
sudo systemctl enable grafana-server
- 打开浏览器
http://服务器IP:3000,默认用户名/密码均为 admin,首次登录会要求修改密码。 - 添加数据源:左侧齿轮图标 → Data Sources → Add data source → 选择 Prometheus,URL 填写
http://localhost:9090,点击 Save & Test。 - 导入仪表盘:左侧 + 号 → Import → 输入 Dashboard ID
1860(Node Exporter 官方推荐)→ Load → 选择数据源 → Import。你会看到 CPU、内存、磁盘、网络等实时图表。 - 设置预测性告警:以磁盘根分区使用率超过 80% 为例:
- 进入对应面板,编辑指标查询(如
(1 - (node_filesystem_avail_bytes{mountpoint="/", fstype!= ""} / node_filesystem_size_bytes{mountpoint="/", fstype!= ""})) * 100)。 - 切换到 Alert 选项卡 → Create Alert Rule → 设置 Condition:当
WHEN last() OF query (A, 5m, now) IS ABOVE 80→ 设置通知渠道(如邮件、钉钉、Slack)。 - 保存。这样当磁盘用量持续超过阈值,就会提前告警,避免写满后服务中断。
常见踩坑与解决方法
- 端口被占用:Node Exporter 默认 9100,如果冲突,启动时加参数
--web.listen-address=":9101",同时修改 prometheus.yml 里的 targets。 - Prometheus 抓取超时:量大的服务器建议调大 scrape_timeout,在 prometheus.yml 的 global 或 job 下添加
scrape_timeout: 30s。 - Grafana 告警不生效:确保 Grafana 已正确配置 SMTP(邮件)或其他通知渠道,且 Alert Rule 的状态从 Pending 变为 Firing 才触发。
- 忘记放行端口:检查云服务安全组和服务器内部防火墙(
systemctl status firewalld确认)。
验证监控是否生效
- 用命令
stress --cpu 2 --timeout 60(需先安装 stress)模拟 CPU 高负载,观察 Grafana CPU 面板曲线是否上升。 - 用
dd if=/dev/zero of=/tmp/bigfile bs=1M count=1024快速消耗磁盘,看磁盘使用率是否超过告警阈值,同时检查是否收到告警通知。 - 在 Prometheus 的 Web UI 中执行
rate(node_cpu_seconds_total{mode="system"}[5m])查看 CPU 增长率,了解系统负载变化趋势。
通过这套组合,你不仅能实时看到服务器状态,还能借助历史数据预测哪些指标即将突破红线,把故障消灭在萌芽阶段。
每次调整阈值后,建议持续观察一周,根据实际波动微调告警灵敏度。
如果觉得这些操作还是复杂,可以继续阅读本博客的《使用宝塔面板内置监控实现基础预测》教程,但功能上远不及 Prometheus 灵活。