低价VPS常见资源与稳定性问题(CPU、内存、磁盘I/O、网络质量与宿主机迁移)会导致突发宕机。通过实时监控与告警能快速发现问题、自动或人工恢复、减少业务中断时间(MTTR)。本文给出可执行、可复用的实操指南。
采用“主机内监控 + 外部可用性探测 + 告警与自动恢复”三层策略:a) 主机内指标(Prometheus + node_exporter),b) 外部探测(UptimeRobot/Pingdom/Datadog)监测对外端口与HTTP,c) 告警路由(Alertmanager/Slack/Email/SMS/Telegram)和自动恢复脚本。
假设 VPS 为 Ubuntu 20.04/22.04,具备 sudo 权限。需要一台额外的监控服务器(也可与非生产VPS合并),或使用云端托管的 Prometheus 服务。外部监控推荐使用 UptimeRobot 免费计划做简单第3方探测。
步骤:1) 在目标VPS上执行:sudo useradd --no-create-home --shell /bin/false node_exporter;2) 下载并解压最新 node_exporter:wget https://github.com/prometheus/node_exporter/releases/download/v1.5.0/node_exporter-1.5.0.linux-amd64.tar.gz && tar xzf ...;3) 将二进制移动到 /usr/local/bin 并设置 systemd 服务文件 /etc/systemd/system/node_exporter.service;4) systemctl daemon-reload && systemctl enable --now node_exporter。验证:curl http://localhost:9100/metrics
在监控服务器上:1) 下载 Prometheus 二进制并解压;2) 编辑 prometheus.yml,加入 scrape_configs 指向每台 VPS 的 node_exporter 地址(例:targets: ['vps-tw-1:9100']);3) 创建 systemd 服务并启动;4) 在浏览器访问 http://监控服务器:9090 确认 targets 状态为 UP。
在 Prometheus rules 文件(例如 rules.yml)添加常用规则:a) instance_down: probe of node_exporter up == 0 for 2m;b) cpu_high: avg(rate(node_cpu_seconds_total{mode!="idle"}[5m])) by (instance) > 0.85 for 5m;c) disk_free_low: node_filesystem_free_bytes / node_filesystem_size_bytes < 0.15 for 5m。把 rules.yml 在 prometheus.yml 中包含并重载 Prometheus。
在监控服务器上 apt install grafana(或用官方仓库),启动并在 Web UI 添加 Prometheus 为 DataSource。导入 community 的 Node Exporter dashboard(ID 示例:1860)或者自行创建显示 CPU、内存、磁盘、网络、load、process 等面板。
安装 Alertmanager,编辑 alertmanager.yml 配置路由(通过 label 区分环境、严重性),配置接收器:电子邮件、Slack webhook、Telegram bot 或短信服务(Twilio)。在 Prometheus 中配置 alerting -> alertmanagers 指向 Alertmanager 地址。
在 UptimeRobot 上添加 HTTP(s) 或 TCP 监控,监测对外端口(80/443/22/应用端口)响应。设置探测间隔(5分钟或更短),并把通知集中到 Slack/Email。外部探测可以发现同一区域宿主机网络问题或路由问题。
编写本地健康检查脚本,例如 /usr/local/bin/check_app.sh:先用 curl 检查服务 HTTP 端点,若连续 3 次超时则记录并执行 systemctl restart service 或 sudo reboot。用 systemd timer 每分钟执行;在脚本中加入日志、阈值与冷却时间避免重启风暴。示例逻辑:if failed_count >=3 then notify -> attempt restart -> wait 60s -> recheck -> if still down escalate to Alertmanager/外部告警。
为关键域名使用低TTL(例如 60 秒)与多个备份节点(多地域 VPS 或云实例)。当监控检测到主节点不可用时,触发自动脚本更新 DNS(通过 API 如 Cloudflare/Route53)或手动在 Control Panel 切换。DNS 切换要配合会话/状态管理策略。
定期做故障演练:模拟服务进程挂掉、网络被阻断、磁盘满等场景,验证告警是否到达、自动恢复是否生效、外部探测能否发现问题。记录演练结果并根据误报/漏报调整阈值。
设置多层告警确认(短时告警仅通知 chatops,持续告警发短信);在 Alertmanager 中配置抑制规则避免重复告警;使用滑动窗口与多指标关联(同时 CPU 高且 load 高且响应超时才触发高优先级告警),减少廉价VPS短暂抖动带来的误报。
低价VPS易发生宿主机维护或迁移,定期做快照与备份(自动化脚本 + provider API),保存最近 N 天快照;关键数据同步到对象存储(S3/兼容服务)。若业务需高可用,考虑多节点负载均衡或云主机替代。
每日/每周检查:Prometheus targets 状态、Alertmanager 未处理告警、Grafana 仪表盘是否有异常、UptimeRobot 探测的失败记录、备份快照是否成功。建立运维 runbook,记录恢复步骤与联系方式。
答:常见原因包括宿主机资源争用(noisy neighbor)、突然的流量攻击/带宽拥塞、磁盘I/O瓶颈、内存泄漏或进程崩溃、宿主机维护/迁移导致的重启、网络上游故障与区域性路由问题。监控能帮助定位哪一层发生了故障。
答:采用分级告警(info/warn/critical)、多指标关联(避免单一指标触发高优先级)、延迟触发(例如连续5分钟)、抑制重复告警、并把短暂性告警发到聊天频道作为低优先级通知,只有持续或严重问题才发短信/电话。
答:检查外部探测(UptimeRobot)是否也显示失败;查看宿主商通告与维护历史;抓取系统日志(dmesg、syslog)、内核 OOM、网络丢包(mtr/traceroute),并联系 VPS 提供商索取宿主机日志或迁移记录。必要时将服务迁移到更稳定的实例或多节点部署。