开始
这是什么
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 直接读 /proc 和 statvfs,不引入跨平台的采集库。这换来的是更准的数字和更小的二进制,
代价是 Windows、macOS、BSD 都不支持,而且短期内不会支持。
hub 本身也只在 Linux 上测试和发布。
hub 支持 Docker,agent 不支持。 很多被监控的 VPS 本身资源就少, 为一个无运行时依赖、常驻几 MiB 的 agent 装一套容器运行时,账算不过来。