monitor

开始

这是什么

monitor 是一个 Rust 写的服务器探针:单二进制、常驻数 MB 内存、只做四件事。

monitor 是一个服务器探针:装在一台机器上看一堆机器的状态。

它只回答四个问题——机器还活着吗、跑了多少流量、网络通不通、这台还有几天到期。 除此之外的事情它一件也不做,这是刻意的,见设计哲学

三个部分

组件装在哪是什么
hub你自己的一台机器Rust + axum + SQLite,单个二进制。后台、API、公开状态页都在里面
agent每一台被监控的机器静态链接的单文件,读 /proc,通过 WebSocket 上报
主题hub 里公开状态页的样子,可以换。默认主题已经嵌在二进制里
agent (Linux VPS) ──WebSocket / JSON-RPC 2.0──▶ hub ──▶ 面板 + 公开状态页

agent 主动连 hub,所以被监控的机器不需要开放任何端口,NAT 后面、只有 IPv6 的机器都能接入。

部署起来是什么样

一台 hub,一个数据库文件:

/opt/monitor/
├── monitor-hub          # hub 二进制,5.4 MiB
├── monitor-agent        # 这台机器也装了 agent 的话
├── agent.env            # agent 的 token,0600 root
└── data/                # 服务唯一可写的目录
    ├── monitor.db
    └── themes/          # 后台装的外部主题

备份就是复制 data/,搬机器就是把这个目录拷过去。没有配置文件要同步,没有第二个目录要记。

面板能看到什么

  • 节点 —— 在线状态、CPU、内存、硬盘、网速、连接数、进程数、运行时间、所在国家
  • 流量 —— 今日 / 本月 / 总计,按商家的重置日算,跨重启持续累加
  • 延迟 —— 你自己定义的 TCP 探测目标,画中位数和极差
  • 成本 —— 单价、付款周期、到期日;到期后自动按周期顺延

公开状态页可以关掉,也可以按节点决定哪些对外可见。对外可见的节点也永远不输出 IP、主机名和备注—— 这条是在序列化的时候执行的,不是靠前端不显示。

只支持 Linux

agent 直接读 /procstatvfs,不引入跨平台的采集库。这换来的是更准的数字和更小的二进制, 代价是 Windows、macOS、BSD 都不支持,而且短期内不会支持。

hub 本身也只在 Linux 上测试和发布。

hub 支持 Docker,agent 不支持。 很多被监控的 VPS 本身资源就少, 为一个无运行时依赖、常驻几 MiB 的 agent 装一套容器运行时,账算不过来。

接下来