1.
目标与准备工作
目标:对菲律宾VPS的“原生IP”(非NAT、可公网访问)进行可观测性、告警与自动化修复。准备:可SSH的管理主机(Linux)、VPS root权限、一个外部监控机或云监控(Prometheus/Grafana或Zabbix)、DNS托管支持API(如Cloudflare)。备份关键配置并开启SSH密钥认证。
2.
基础连通性与主动探测部署
步骤:1) 在监控机安装mtr、ping、curl:apt install mtr-tiny iputils-ping curl。2) 配置定时ICMP探测:在监控机写脚本 /opt/check_icmp.sh:
#!/bin/bash
host="1.2.3.4" # 替换为VPS原生IP
if ! ping -c3 -W2 $host >/dev/null; then
echo "$(date): $host ICMP failed" | tee -a /var/log/check_icmp.log
exit 2
fi
3) crontab -e 添加*/1 * * * * /opt/check_icmp.sh >/dev/null 2>&1。
3.
使用Prometheus+blackbox_exporter做外部探测
步骤:1) 在监控机安装blackbox_exporter(下载二进制并systemd启动)。2) 在Prometheus的prometheus.yml加入:
- job_name: 'blackbox'
metrics_path: /probe
params: {module: [icmp]}
static_configs:
- targets: ['1.2.3.4']
relabel_configs:
- source_labels: [__address__]; target_label: __param_target
- source_labels: [__param_target]; target_label: instance
- target_label: __address__; replacement: 127.0.0.1:9115
3) 重载Prometheus并在Grafana做Dashboard展示ICMP延迟与丢包率。
4.
主机内部监控(node_exporter / Zabbix Agent)
步骤:1) 在菲律宾VPS上安装node_exporter(或Zabbix Agent)并用systemd管理。2) 暴露指标:CPU、内存、网络接口流量、conntrack、tcp_established数。示例node_exporter: sudo useradd -rs /bin/false nodeusr;下载二进制并创建systemd unit。3) Prometheus拉取后设置阈值,例如tcp_established过低或网口错误包>100触发告警。
5.
流量异常与防护自动化
步骤:1) 在VPS上部署fail2ban或写基于conntrack的脚本检测短时间大量连接:使用ss -s 和 conntrack -L | wc -l。2) 自动化阻断示例(/usr/local/bin/auto_block.sh):
#!/bin/bash
TH=1000
CNT=$(conntrack -L | wc -l)
if [ $CNT -gt $TH ]; then
ipset create badips hash:ip -exist
ipset add badips 1.2.3.100 # 根据攻击源动态add
nft add element inet filter input { 1.2.3.100 } counter drop
systemctl restart nginx
fi
3) 将脚本放入systemd timer或cron每分钟执行。
6.
自动化修复与DNS故障转移
场景:IP不可达且自恢复失败,自动把流量切回备用机或备用IP(使用Cloudflare/API)。步骤示例:/opt/failover.sh
#!/bin/bash
IP=1.2.3.4
CHECK=/opt/check_icmp.sh
$CHECK || {
# 切换DNS到备用IP
curl -X PUT "https://api.cloudflare.com/client/v4/zones/ZONE_ID/dns_records/RECORD_ID" \
-H "Authorization: Bearer $CF_TOKEN" -H "Content-Type: application/json" \
--data '{"type":"A","name":"host.example.com","content":"5.6.7.8","ttl":120}'
# 记录并通知
echo "$(date) failover to 5.6.7.8" >> /var/log/failover.log
curl -s -X POST "https://api.telegram.org/bot$TG_TOKEN/sendMessage" -d chat_id=$TG_CHAT "&text=VPS $IP failover"
}
将脚本由Prometheus Alertmanager webhook或cron触发。
7.
告警规则与通知链路设计
建议:1)分层告警:短期抖动(3次ping失败)为info,持续不可达(>5分钟)为critical。2)Alertmanager配置Route将critical推送到电话/Telegram并触发自动修复Webhook。3)在通知中包含诊断命令输出(mtr -c10、ss -tn)以便快速定位。
8.
调试与取证步骤
当问题发生:1) 在监控机执行 mtr -r -c 50 1.2.3.4 保存结果;2) 在VPS上执行 tcpdump -i eth0 -w /tmp/cap.pcap host
and port 并上传到安全存储;3) 检查路由表 ip route show、nft list ruleset、dmesg 判断内核丢包/硬件问题。
9.
配置管理与自动化部署(Ansible示例)
用Ansible管理VPS模板:写playbook安装node_exporter、配置防火墙、部署自动修复脚本。示例任务:
- name: copy failover
copy: src=files/failover.sh dest=/opt/failover.sh mode=0755
- name: enable failover timer
systemd: name=failover.timer enabled=yes state=started
通过CI触发在多台菲律宾VPS上统一部署。
10.
合规与运营注意事项
注意IP逆向解析(PTR)、WHOIS信息与滥用邮箱,保持与带宽/机房联系通道,记录维护窗口,避免在高峰时间做自动重启或切换。维护变更写入变更单并保留回滚方案。
11.
问:如何判断菲律宾VPS的原生IP是网络问题还是宿主机问题?
答:先从外部探测(Prometheus/blackbox或ping/mtr)判断丢包/跳点异常;然后登录VPS检查网络接口、路由、iptables/nft规则、dmesg与ifconfig;若外部到第一跳就丢包,多为机房/ISP链路问题;若机房内多个实例均异常,联系运营商。
12.
问:自动化修复会产生风险,如何保障不会误触发?
答:用分级告警和冷却时间(例如连续5次失败且间隔>1分钟再触发),自动修复前先执行只读诊断并通知人工确认(或通过双因素自动化),并保留回滚(自动把DNS恢复到原IP的脚本和监控确认)。
13.
问:如果VPS提供商不支持快速换IP或回退,如何保证业务连续性?
答:提前准备多可用区域或多提供商的备用节点,使用DNS快速切换(低TTL)或全局流量管理(GSLB/Cloudflare Load Balancer),并将状态同步到配置管理系统,实现无缝故障转移。
来源:从运维角度看菲律宾vps原生ip的监控与自动化管理方法