1.
列出目标与SLA:明确需要监控的指标(主机存活、CPU、内存、磁盘、网络、服务端口/进程、应用响应时间)以及恢复策略(自动重启、脚本修复、人工介入时限)。
收集权限与信息:准备好 VPS 的 SSH 密钥、root 或 sudo 权限、提供商 API Token(如果支持通过 API 重启/重建实例),以及内网/公网 IP 与防火墙策略。
2.
推荐组件:Prometheus + node_exporter(主机指标)、Blackbox Exporter(端口/HTTP/ICMP 探测)、Alertmanager(告警路由)、Grafana(可视化)、Filebeat/Fluentbit + Elasticsearch/Graylog(日志)。
在台湾节点优先选择本地镜像源与 CDN,减少拉取延迟;如果是私有网络,考虑在同一机房部署监控集群以降低跨区域依赖。
3.
安装 node_exporter:登录 VPS,执行:sudo useradd --no-create-home --shell /bin/false nodeusr;下载并解压 node_exporter,复制二进制到 /usr/local/bin,创建 systemd 单元文件 /etc/systemd/system/node_exporter.service,内容参考官方,启动并开机自启:sudo systemctl daemon-reload && sudo systemctl enable --now node_exporter。
安装 blackbox_exporter(用于外部探测请放在监控服务器或边缘机):同样以 systemd 管理,并配置 probe 目标(http_2xx、tcp_connect、icmp)。
4.
在 Prometheus 配置文件 prometheus.yml 中添加 job:static_configs(填写台湾 VPS 列表)或者使用 Consul/etcd/kubernetes 做服务发现。示例:
- job_name: 'node'\n static_configs:\n - targets: ['10.0.0.5:9100','10.0.0.6:9100']
为黑盒探测添加 job,配置 module(http_2xx)并在 target 中指定要检测的 HTTP 地址或 IP。
5.
建议告警清单(必须实现并逐条测试):主机不可达(10分钟内无数据)、SSH 端口连接失败(3次探测)、磁盘使用 > 90%、CPU 使用 > 90% 持续 5 分钟、重要进程(nginx/mysql)down、应用响应 5xx 比例超过阈值。
使用 Alertmanager 做抑制与分组:例如主机 down 告警触发后抑制其上面其他指标告警,避免告警风暴;配置不同接收组(值班群组、运维邮箱、Webhook)。
6.
分级策略:1)Agent 本地自动修复(systemd restart、crontab 复活脚本);2)监控平台触发的自动重启脚本(调用 provider API 或 cloud 控制台);3)当自动重启失败则触发人工介入并发起工单。
优先做最小破坏动作:先尝试重启服务,再重启整台机器,最后重建机器或切换流量。
7.
准备恢复脚本 recover.sh 放在运维跳板或监控报警接收器主机上,脚本示例(伪代码):
#!/bin/bash\nTARGET_IP=$1\nPROVIDER_TOKEN='你的TOKEN'\n# 调用提供商 API 重启\ncurl -X POST -H \"Authorization: Bearer ${PROVIDER_TOKEN}\" https://api.provider.example/v1/instances/${TARGET_IP}/reboot
把脚本设为仅运维用户可读执行,记录日志到 /var/log/recover.log,并实现幂等与重试(最多 3 次,每次间隔 30 秒)。
8.
在 Alertmanager config.yml 中添加 receiver 类型为 webhook,指向监控侧可执行脚本的 HTTP 接口(例如在跳板机上用 systemd + nginx + /run-recover 接收 POST 并执行本地脚本)。注意身份验证:使用签名 token 或 mTLS。示例 receiver:
receivers:\n- name: 'auto-recover'\n webhook_configs:\n - url: 'https://ops.example/tw-recover'
Webhook 服务接收到告警后校验告警类型(仅 host_down 或 ssh_unreachable 才触发),记录并调用 recover.sh。
9.
记录每次自动恢复操作的输入(告警ID、时间、操作人/机器人)、执行结果(成功/失败、返回码、provider 返回信息)以及恢复前后状态快照(监控点数据、最近日志片段)。
把日志发送到集中日志系统(例如 Filebeat->Elasticsearch),便于事后分析并根据失败场景调整策略。
10.
问:自动重启可能正在写数据的服务,会不会引起数据损坏或不一致?
答:在设计自动重启前,应区分无状态服务与有状态服务。有状态服务(数据库)优先尝试进程级恢复或触发数据库内建的安全重启命令(如 mysqladmin shutdown)。如果必须重启整机,先在脚本中调用优雅停机命令并等待超时,再强制重启。并在恢复策略中加入快照/备份点与回滚流程,且对关键数据库设置事务复制/备库以降低重启风险。
11.
问:有些台湾本地 VPS 提供商没有开放 API,如何实现自动恢复?
答:可采用以下替代方案:1)通过 provider 提供的控制台发送工单(半自动);2)使用 IPMI/iLO 等远程管理(如果支持);3)通过约定的 watchdog 机制在 VM 内部实现自愈(systemd watchdog、cron 健康检查与自动重启服务);4)在多可用区/多实例上做主动迁移与流量切换,降低单实例恢复需求。
12.
问:如何在不影响生产服务的情况下,验证监控+告警+自动恢复流程有效?
答:先在预生产或镜像环境复刻完整流程,模拟故障(shutdown nic、kill -9 关键进程、制造高负载),观察 Prometheus 抓取、Alertmanager 报警与 webhook 调用是否按预期。然后在生产低峰窗口做灰度测试:先对非关键实例执行,记录和评估;再逐步扩大范围。最后加入每月演练并把结果纳入 SLA 与改进计划。