VPS 网络突然抽风,SSH 卡死或者网站 502,很多新手第一反应是重启。其实大部分网络异常通过 ping、mtr 和 curl 就能定位病灶。在主机选的实战经验中,与其手动敲命令,不如让 AI Agent 或自动化脚本替你盯着网络状态。本文教你如何利用 AI Agent 自动执行这些检查,快速判断 VPS 是丢包、路由震荡还是 DNS 污染。

VPS 网络异常排查思路与工具准备
网络问题通常分三层:物理连通性、路由链路和应用层。手动排查效率低,且容易错过故障发生的瞬间。利用 AI Agent(如 Claude Code 编写的脚本或 n8n 工作流)可以定期巡检。
开始前,确保你的 VPS 安装了基础工具。如果是 Debian/Ubuntu 系统,执行以下命令补全:
apt update && apt install -y iputils-ping mtr curl traceroute dnsutils
CentOS/RHEL 系统则使用:
yum install -y iputils mtr curl traceroute bind-utils
基础连通性检查:Ping 命令实战
Ping 是最基础的 ICMP 检测,用来判断目标是否“活着”。
ping -c 4 8.8.8.8
* `-c 4`:只发送 4 个包,防止无限跑。
* 看 `time` 值判断延迟,看 `packet loss` 判断丢包率。
如果 ping 不通 IP 但能 ping 通域名,多半是 DNS 挂了;如果 IP 都不通,可能是防火墙拦截或物理链路断了。注意,很多 VPS 商家为了防 DDoS 会默认禁用 ICMP 响应,ping 不通不代表机器死机,这时候需要结合端口检测。
路由链路追踪:MTR 定位丢包节点
光看 Ping 不够,MTR(My Traceroute)结合了 ping 和 traceroute 的功能,能告诉你数据包在哪一跳丢了。这是排查 VPS 网络延迟高或丢包的神器。
mtr -r -c 10 -n 8.8.8.8
* `-r`:报告模式,运行完直接输出结果,不动态刷新。
* `-c 10`:发送 10 个包。
* `-n`:不解析域名,直接显示 IP,加快速度。
怎么看结果?
重点看 `Loss%` 列。如果第一跳(你的本地网关)就丢包,那是你自己的网络问题。如果中间几跳丢包但最后一跳(目标服务器)正常,通常是运营商节点防 ICMP 策略,不用太担心。如果最后一跳丢包严重,那就是目标 VPS 的锅。
应用层连通性:Curl 检测 HTTP 状态
有时候网络通了,但 Web 服务挂了。用 Curl 检查 HTTP 状态码和响应时间更准确。
curl -o /dev/null -s -w "%{http_code}\n" -m 5 https://www.google.com
* `-o /dev/null`:丢弃下载的内容。
* `-s`:静默模式,不显示进度条。
* `-w "%{http_code}\n"`:只打印状态码。
* `-m 5`:5 秒超时,防止卡住。
返回 `200` 说明正常,`000` 或 `timeout` 说明连接不上,`502`/`504` 说明后端服务崩了。
构建 AI Agent 自动化巡检脚本
手动敲命令只能救急,要实现 24 小时监控,得把这些命令封装成一个脚本,交给 AI Agent 或自动化工具执行。这里演示一个 Python 脚本,它可以作为 Agent 的核心逻辑,也可以被 n8n 调用。
编写 Python 检测脚本
创建一个 `network_check.py`,这个脚本会执行上述命令并返回结构化的 JSON 数据,方便 AI Agent 分析。
python
import subprocess
import json
import sys
def run_cmd(cmd):
try:
result = subprocess.run(cmd, shell=True, capture_output=True, text=True, timeout=10)
return result.stdout.strip()
except Exception as e:
return str(e)
def check_ping(target="8.8.8.8"):
output = run_cmd(f"ping -c 4 {target}")
if "packet loss" in output:
return {"status": "checked", "raw": output}
return {"status": "error", "raw": output}
def check_mtr(target="8.8.8.8"):
output = run_cmd(f"mtr -r -c 4 -n {target}")
return {"status": "checked", "raw": output}
def check_curl(url="https://www.google.com"):
code = run_cmd(f"curl -o /dev/null -s -w '%{{http_code}}' -m 5 {url}")
return {"http_code": code}
if __name__ == "__main__":
data = {
"ping": check_ping(),
"mtr": check_mtr(),
"curl": check_curl()
}
print(json.dumps(data, indent=2))
运行 `python3 network_check.py`,你会得到一份包含各项指标的 JSON 报告。
接入 n8n 实现定时巡检与告警
有了脚本,用 n8n 这种自动化工具来调度非常简单。如果你在本地或服务器上跑了 n8n,可以创建一个 Workflow:
1.Trigger:设置 Cron 定时,比如每 10 分钟跑一次。
2.SSH Command:n8n 通过 SSH 连接到目标 VPS,执行 `python3 network_check.py`。
3.Code 节点:解析返回的 JSON。
* 如果 `http_code` 不等于 200,或者 `ping` 结果包含 `100% packet loss`。
4.IF 节点:判断是否异常。
5.Send Message:如果异常,调用 Telegram Bot 或发送邮件给自己。
这种方式比在 VPS 上跑繁重的监控 Agent(如 Zabbix)轻量得多,适合个人开发者或轻量级业务。
常见网络故障分析与处理
数据收集到了,怎么处理?这里列出几个常见场景。
1.Ping 不通,SSH 也连不上:
检查 VPS 控制面板的 VNC 控制台。如果能进 VNC,说明是防火墙(iptables/ufw)把 SSH 端口封了,或者网关配置错误。如果 VNC 进不去,直接发工单给 IDC,大概率是宿主机挂了。
2.Ping 延迟忽高忽低(丢包):
看 MTR 结果。如果丢包发生在 VPS 商家接入网的前几跳,那是机房线路拥堵。这种通常没法自己修,只能换机房或用 CDN 加速。如果是跨运营商线路(电信连联通),属于正常现象,考虑多线 BGP VPS。
3.Curl 报 502/504:
网络没问题,是服务崩了。检查 Nginx/PHP-FPM/MySQL 的进程状态和日志。别急着重启网络,先看 `tail -f /var/log/nginx/error.log`。
4.DNS 解析失败:
Ping 域名提示 `bad address` 或 `temporary failure in name resolution`。编辑 `/etc/resolv.conf`,把 DNS 改成 `8.8.8.8` 或 `1.1.1.1` 试试。
老鸟叮嘱
*权限陷阱:MTR 命令通常需要 root 权限才能生成完整的报告。如果你的脚本是用普通用户跑的,记得配置 sudo 免密,或者接受 MTR 数据不完整的事实。
*ICMP 限制:千万别因为 Ping 不通就判定机器死了,很多云厂商(如 AWS、某些高防 VPS)默认禁用 ICMP。一定要结合端口扫描(如 `telnet ip 80` 或 `curl`)来判断。
*日志留存:自动化脚本最好把每次检查的结果写入本地日志文件或数据库,出问题时才有据可查,不要只在控制台打印。
*安全风险:不要把监控脚本直接暴露在公网 URL 上被任何人触发。n8n 等工具一定要做好鉴权,避免被恶意调用导致 VPS 资源耗尽。
FAQ
Q:VPS 网络卡顿,一定是带宽不够吗?
A:不一定。先用 `iftop` 或 `nload` 看看带宽是否跑满。如果带宽占用很低但很卡,多半是 CPU 爆了或者线路丢包,跟带宽总量关系不大。
Q:MTR 显示中间节点丢包严重,需要联系 IDC 处理吗?
A:如果最后一跳(你的 VPS)不丢包,且业务访问正常,中间节点的丢包通常是运营商路由器为了防攻击降低了 ICMP 优先级,一般不需要处理。
Q:AI Agent 能自动修复网络故障吗?
A:简单的故障可以,比如检测到 DNS 挂了自动切换 `/etc/resolv.conf`,或者检测到服务挂了自动重启。但涉及物理线路或机房路由问题,AI 只能报警,无法修复。
Q:为什么我的脚本里 MTR 报错 "mtr: unable to get raw sockets"?
A:这是权限问题。MTR 需要原始套接字权限。请使用 `sudo` 运行脚本,或者给普通用户配置 sudo 权限:`echo "username ALL=(ALL) NOPASSWD: /usr/sbin/mtr" >> /etc/sudoers`。
Q:除了 Ping 和 MTR,还有什么工具推荐?
A:推荐 `tcptraceroute`,它能追踪 TCP 端口的路径,比传统的 UDP traceroute 更能穿透防火墙,适合排查 HTTP/HTTPS 服务连通性。
通过将 ping、mtr 和 curl 封装成自动化脚本,配合 n8n 或简单的定时任务,你就能拥有一套 7×24 小时的网络巡检 Agent。这比出问题后手动敲命令要从容得多,也能让你在向 IDC 报障时拿出更有力的证据。
转载请注明出处:https://www.zhujixuan.com/jishujiaocheng/10108.html 商家投稿邮箱:zhujixuanblog@qq.com
