VPS Monitor 动态化改造:从硬编码到自动发现服务
遇到的坑
坑 1:系统服务太多
第一次跑,扫描到 29 个服务,包括:
sshd(22)systemd-resolve(53)rpcbind(111)k3s-server(6443, 10250)tailscaled(36961)hbbs/hbbr(RustDesk,21115-21119)
解决:加端口 + 进程名双黑名单 → 过滤到 16 个。
坑 2:Nginx 反代的服务「消失」
8000(PhotoGemMap)和 8080(OpenClaw)都通过 Nginx 反代——ss 显示进程名是 nginx,被黑名单过滤掉了。
解决:
- 黑名单**移除**
nginx - 配置里有的服务,**扫描没到就 curl 测端口**
async function isPortAlive(port: number): Promise<boolean> {
const code = await sh(`curl -s -o /dev/null -w "%{http_code}" --max-time 2 http://127.0.0.1:${port}/`);
return /^\d{3}$/.test(code.trim()); // 任何 HTTP 响应(含 404)都算 alive
}
坑 3:K8s NodePort 抓不到
K8s 的 NodePort(30080/30081/31026/31340)由 kube-proxy 用 iptables 转发——ss 完全不显示。
解决:单独扫 kubectl get svc:
$ kubectl get svc -A
default wordpress NodePort 80:30080/TCP
kube-system traefik LoadBalancer 80:31340/TCP,443:31026/TCP
wordpress-prod wordpress NodePort 80:30081/TCP
坑 4:PM2 应用名不好认
PM2 应用 my-dashboard 端口是 3002,但 ss 显示进程名是 node——看不出是什么应用。
解决:先跑 pm2 jlist 拿 PID → 名字 映射,再用 PID 反查 ss 端口,替换掉通用进程名。
