VPS服务器自动化运维实战：用Prometheus+Grafana搭出你的服务器监控体系
这两天后台有朋友问我："买回来的VPS，总不能天天ssh上去挨个看资源吧？"老实说，这个问题戳中了太多新手运维的痛处。我自己做服务器导购这些年，见过太多用户——买了一台配置不错的VPS，跑了两三个月突然挂了，一顿排查发现：磁盘早在两周前就满了，内存天天打满swap，CPU被某个异常进程占得死死的。没有人会在凌晨三点盯着终端看监控。 但你可以在凌晨三点收到告警短信，然后安稳地翻个身——前提是你搭了一套靠谱的监控体系。今天这篇文章，我就把从零搭建VPS监控体系的完整方案摊开来讲。核心三剑客：Prometheus + Grafana + Alertmanager，全部开源免费，一台1核2G的VPS就能跑起来。目录 为什么要上监控？ 监控体系架构——一张图看懂 Prometheus部署——监控数据的"大脑" Node Exporter——让操作系统开口说话 Grafana——把数据变成看得见的仪表盘 Alertmanager——关键指标告警到手机 生产环境建议——别踩这些坑 总结 一、为什么要上监控？先抛一个问题：你100%确定你的VPS现在"健康"吗？你可能会说——"我刚才看了，uptime 200多天，一切正常。"但你答不上来的是： 昨天凌晨2点的平均负载是多少？ 磁盘IO等待是不是悄悄飙到30%以上了？ 可用磁盘空间还能撑几天？ 有没有异常进程在偷偷跑挖矿脚本？ 你看，没有监控，你在裸奔。而有一句老话说得好——"你不关心监控，监控就会在某天凌晨3点把你叫醒。"Prometheus（普罗米修斯） 是目前业界最主流的开源监控方案。你信不信，Kubernetes、Docker生态里的监控，十有八九都是它。我个人的经验是：一套监控体系投进去的时间成本大约2-3小时，但它能在接下来的一年里帮你省下无数个排查故障的夜晚。二、监控体系架构——一张图看懂整个架构非常清晰，就三个组件：+----------------+ +------------------+ +----------------+ | 被监控服务器 | | Prometheus | | Grafana | | (Node Exporter) | ----> | (数据采集+存储) | ----> | (可视化仪表盘) | +----------------+ +------------------+ +----------------+ | v +------------------+ | Alertmanager | --> 邮件/钉钉/企业微信 | (告警通知) | +------------------+ Node Exporter：部署在被监控的服务器上，采集CPU、内存、磁盘、网络等系统指标 Prometheus Server：拉取并存储所有指标数据，提供查询语言 PromQL Grafana：从Prometheus读取数据，生成直观的可视化图表 Alertmanager：根据规则触发告警，推送到你的手机（邮件、钉钉、企业微信等） 整个体系对系统资源的要求极低。 我用一台1核2G、20GB SSD的轻量云服务器做演示，Prometheus + Grafana + 监控3台机器，内存占用不到1GB。三、Prometheus部署——监控数据的"大脑"Prometheus 的部署方式，我建议用 Docker——干净、快速、好维护。3.1 创建数据目录mkdir -p /opt/prometheus/{data,config} cd /opt/prometheus 3.2 编写配置文件创建 /opt/prometheus/config/prometheus.yml：global: scrape_interval: 15s # 每15秒采集一次数据 evaluation_interval: 15s # 每15秒评估一次告警规则 alerting: alertmanagers: - static_configs: - targets: - "localhost:9093" # Alertmanager地址 rule_files: - "rules/*.yml" # 告警规则文件 scrape_configs: - job_name: "prometheus" static_configs: - targets: ["localhost:9090"] - job_name: "node_exporter" static_configs: - targets: - "192.168.1.10:9100" # 替换为你的VPS IP 注意：这里 scrape_interval 设15秒，对个人VPS完全够用。如果监控上百台机器，可以适当放宽到30-60秒。3.3 用Docker启动Prometheusdocker run -d \ --name prometheus \ --restart=always \ -p 9090:9090 \ -v /opt/prometheus/config:/etc/prometheus \ -v /opt/prometheus/data:/prometheus \ prom/prometheus:v2.53.0 启动后访问 http://你的VPS-IP:9090，看到 Prometheus 的 Web 界面，说明部署成功。 Prometheus自带的查询界面，支持PromQL实时检索指标数据四、Node Exporter——让操作系统开口说话Node Exporter 是 Prometheus 官方出品的系统指标采集器，部署在被监控的VPS上。4.1 部署Node Exporterdocker run -d \ --name node-exporter \ --restart=always \ --network="host" \ --pid="host" \ -v "/:/host:ro,rslave" \ quay.io/prometheus/node-exporter:v1.8.2 \ --path.rootfs=/host 4.2 验证采集是否正常curl http://localhost:9100/metrics | head -20 如果看到类似 node_cpu_seconds_total、node_memory_MemTotal_bytes 这样的指标，说明采集成功。Node Exporter 会暴露上千个指标——CPU、内存、磁盘、网络、文件系统、系统负载……只要你能想到的系统指标，它都有。一个小技巧：在 Prometheus 配置里加入多台 Node Exporter，可以统一监控所有VPS。一台监控机，随时掌握所有服务器的健康状况。五、Grafana——把数据变成看得见的仪表盘有数据了，但全是数字和代码，看起来不够直观。这个时候 Grafana 就登场了。5.1 部署Grafanadocker run -d \ --name grafana \ --restart=always \ -p 3000:3000 \ -v /opt/grafana/data:/var/lib/grafana \ grafana/grafana:11.1.0 启动后访问 http://你的VPS-IP:3000，默认账号密码都是 admin。5.2 连接Prometheus数据源 进入Grafana → Configuration → Data Sources → Add data source 选择 Prometheus URL填入 http://你的VPS-IP:9090（如果Grafana和Prometheus在同一台机器上，可以直接用 http://localhost:9090） 点击 Save & Test，看到绿色提示就OK了 5.3 导入现成的仪表盘Grafana 社区有大量现成的仪表盘模板。我推荐使用 Node Exporter Full（ID: 1860）：# 直接在Grafana中导入 # 或通过API导入，这里给出curl示例 curl -X POST \ -H "Content-Type: application/json" \ -d '{"id":1860,"type":"grafana","orgId":1}' \ http://admin:admin@localhost:3000/api/dashboards/import 导入后，你会看到类似这样的仪表盘： Grafana仪表盘直观展示CPU、内存、磁盘、网络等核心指标这个仪表盘会把所有指标分成几个大区： 区域 关键指标 告警建议阈值 CPU 使用率、负载、IO等待 CPU使用率 > 80% 持续10分钟 内存 总内存、已用、可用、Swap 可用内存 < 20% 磁盘 使用率、IO读写速率、IO等待 磁盘使用率 > 85% 网络 带宽使用、连接数、错误包 入站带宽 > 80% 上限 系统 Uptime、进程数、文件描述符 — 老实说，这个仪表盘一上，你的VPS状态一目了然。 之前那种"ssh上去看一眼free -h"的原始操作，可以直接扔掉了。六、Alertmanager——关键指标告警到手机仪表盘可以看，但不能时刻盯着。告警才是监控的核心价值。6.1 部署Alertmanagerdocker run -d \ --name alertmanager \ --restart=always \ -p 9093:9093 \ -v /opt/alertmanager/config:/etc/alertmanager \ prom/alertmanager:v0.27.0 6.2 配置告警规则创建 /opt/prometheus/config/rules/vps_alerts.yml：groups: - name: vps_alerts rules: - alert: 磁盘即将写满 expr: (1 - (node_filesystem_avail_bytes{fstype!="",mountpoint="/"} / node_filesystem_size_bytes{fstype!="",mountpoint="/"})) * 100 > 85 for: 5m labels: severity: warning annotations: summary: "服务器 {{ $labels.instance }} 磁盘使用率超过85%" - alert: 内存不足 expr: node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes * 100 < 20 for: 5m labels: severity: warning summary: "服务器 {{ $labels.instance }} 可用内存低于20%" - alert: CPU负载过高 expr: node_load15 / count(node_cpu_seconds_total{mode="idle"}) by (instance) > 0.8 for: 10m labels: severity: critical summary: "服务器 {{ $labels.instance }} CPU负载异常" 6.3 配置告警通知到钉钉/企业微信创建 /opt/alertmanager/config/alertmanager.yml：global: resolve_timeout: 5m route: group_by: ["alertname", "instance"] group_wait: 30s group_interval: 5m repeat_interval: 4h receiver: "webhook" receivers: - name: "webhook" webhook_configs: - url: "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=你的WebHook密钥" send_resolved: true 供你参考：企业微信的WebHook是免费的，配置起来也最简单。钉钉、飞书也支持类似的WebHook。如果是个人使用，用 Server酱 或者 邮件告警 也可以。我自己用的是企业微信WebHook。设置好之后，半夜磁盘使用率超过85%，手机"叮"一声就来了——安心睡觉，不再焦虑。6.4 重启服务使配置生效docker restart prometheus docker restart alertmanager 七、生产环境建议——别踩这些坑这些年帮人搭过几十套监控体系，踩过的坑写出来，供你参考：7.1 不要把所有鸡蛋放在同一个篮子里监控机和生产机要分开。 如果你只有一台VPS，那就用这台VPS监控它自己——虽然不太完美，但总比没有好。如果有两台以上的VPS，用配置最低的那台做监控机，其他做业务机。7.2 告警阈值要"温柔"很多新手一上来就把阈值设得太紧，结果一天收到200条告警，最后直接无视了。我建议： - 磁盘使用率：85% 告警，95% 紧急 - CPU负载：持续10分钟超过核心数的80%才告警 - 内存：低于20% 告警，低于10% 紧急告警的目的是让你关注，而不是让你烦躁。7.3 数据保留策略Prometheus 默认将所有数据保留在本地磁盘。对于个人VPS，建议保留15天：# prometheus.yml 中增加 storage: tsdb: retention.time: 15d retention.size: 5GB 7.4 别忘了安全 Prometheus、Grafana 暴露的端口不要直接开放到公网。用 Nginx 反代 + 密码认证，或者直接通过 WireGuard/Tailscale 组网访问 Grafana 默认账号密码 admin/admin，部署后第一时间修改 7.5 升级到进阶方案当你的服务器超过3台以后，可以考虑引入： cAdvisor：监控Docker容器指标 Blackbox Exporter：监控网站和API的可用性 Loki：日志聚合，配合Grafana查看日志 Nginx Exporter：监控Nginx连接数和请求量 你信不信，这些全部开源免费。 一台低配的VPS就能撑起一套完整的运维体系。八、总结（全文完）写这篇文章的时候，我想起刚入行那会儿，自己买了一台VPS跑了半年，连监控是什么都不知道。直到有一天网站打不开了，ssh上去一看——磁盘100%，日志文件把整个根分区撑爆了。那次之后我就明白了：监控不是锦上添花，是雪中送炭。今天这套方案，用到的全是开源工具： Prometheus：数据采集和存储的心脏 Node Exporter：让每一台VPS开口说话 Grafana：把冰冷的数据变成赏心悦目的仪表盘 Alertmanager：在问题变成灾难之前通知你 全部免费，全部开源，全部经过大规模生产环境验证。如果你还在手动登录每台VPS看资源使用情况，真的，花2-3小时把监控搭起来，你会感谢自己的。