这两天后台有朋友问我:"买回来的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启动Prometheus
docker 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 Exporter
docker 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 部署Grafana
docker 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 部署Alertmanager
docker 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小时把监控搭起来,你会感谢自己的。
评论 (0)