VPS服务器自动化运维实战:用Prometheus+Grafana搭出你的服务器监控体系

moduo320
2026-07-03 / 0 评论 / 0 阅读 / 正在检测是否收录...

这两天后台有朋友问我:"买回来的VPS,总不能天天ssh上去挨个看资源吧?"

老实说,这个问题戳中了太多新手运维的痛处。

我自己做服务器导购这些年,见过太多用户——买了一台配置不错的VPS,跑了两三个月突然挂了,一顿排查发现:磁盘早在两周前就满了,内存天天打满swap,CPU被某个异常进程占得死死的。

没有人会在凌晨三点盯着终端看监控。 但你可以在凌晨三点收到告警短信,然后安稳地翻个身——前提是你搭了一套靠谱的监控体系。

今天这篇文章,我就把从零搭建VPS监控体系的完整方案摊开来讲。核心三剑客:Prometheus + Grafana + Alertmanager,全部开源免费,一台1核2G的VPS就能跑起来。


目录

  1. 为什么要上监控?
  2. 监控体系架构——一张图看懂
  3. Prometheus部署——监控数据的"大脑"
  4. Node Exporter——让操作系统开口说话
  5. Grafana——把数据变成看得见的仪表盘
  6. Alertmanager——关键指标告警到手机
  7. 生产环境建议——别踩这些坑
  8. 总结


一、为什么要上监控?

先抛一个问题:你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 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_totalnode_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数据源

  1. 进入Grafana → Configuration → Data Sources → Add data source
  2. 选择 Prometheus
  3. URL填入 http://你的VPS-IP:9090(如果Grafana和Prometheus在同一台机器上,可以直接用 http://localhost:9090
  4. 点击 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监控仪表盘
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

评论 (0)

取消