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 端口,替换掉通用进程名。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注