部署
接入节点
单台安装、批量注册,以及 agent 的全部参数。
agent 是一个静态链接的单文件,无运行时依赖,常驻内存几 MiB。它主动连 hub, 所以被监控的机器不需要开放任何端口。
只支持 Linux,支持 systemd 和 OpenRC。不提供 Docker 镜像,理由见 Docker 部署。
单台安装
在面板 节点 → 添加 填一个名字,然后点这个节点旁边的下载按钮,复制生成的命令:
curl -fsSL https://hub.example.com/install.sh | sh -s -- \
--server https://hub.example.com --token <token>bash以 root 在目标主机执行。装完几秒钟节点就会在面板里亮起来。
二进制由 hub 转发(<hub>/agent/<arch>),节点不需要能连上 GitHub——
能连上 hub 就能装,IPv6-only 或者出不去的机器也一样。
批量注册
机器多的时候不必一台一台添加。节点 → 批量添加开一个一小时的注册窗口, 期间下面这条命令在任意机器上跑一次,那台机器就带着自己的 hostname 出现在列表里,各自拿到各自的 token:
curl -fsSL https://hub.example.com/install.sh | sh -s -- \
--server https://hub.example.com --register <key>bash这条命令里没有任何一台机器的凭证,所以可以直接进 for 循环、ansible 或者开机脚本:
for h in node1 node2 node3; do
ssh "$h" 'curl -fsSL https://hub.example.com/install.sh | sh -s -- \
--server https://hub.example.com --register <key>'
donebash窗口到点自动失效,一个窗口最多注册 100 台。重跑同一条命令不会重复添加—— 机器上已经有 token 就直接沿用。
key 泄露的爆炸半径:在窗口剩下的时间里最多建 100 个节点,每个只能上报它自己那一个节点。 读不到任何已有节点的数据,改不了设置,碰不到面板。代价是面板里多出一批垃圾节点—— 关掉窗口,删掉它们,已经装好的机器不受影响。
安装脚本做的事
- 识别 systemd 或 OpenRC,写对应的服务定义
- 二进制装到
/opt/monitor/monitor-agent - token 写进
/opt/monitor/agent.env,0600,不写在服务定义里——那些内容会出现在systemctl cat和日志里 - systemd 单元带一整行加固:
DynamicUser、NoNewPrivileges、ProtectSystem=strict、ProtectHome、PrivateTmp、PrivateDevices、RestrictAddressFamilies、MemoryMax=64M
重跑一遍就是升级,也是幂等的。
OpenRC 上 agent 以 root 跑。 DynamicUser 是 systemd 白送的降权,OpenRC 没有对应开关。
两边等价的只有自动重启;token 的存放两边一样(root-only 的 env 文件,不进服务定义,不进日志)。
手动运行
monitor-agent --server https://hub.example.com --token <token>bash| 参数 | 默认 | 说明 |
|---|---|---|
--server | 必填 | hub 地址,也可用环境变量 MONITOR_SERVER |
--token | 必填 | 节点 token,也可用 MONITOR_TOKEN |
--interval | 1 | 上报间隔(秒),1–3600 |
--insecure | — | 允许明文连远程 hub,见下 |
明文与 --insecure
agent 和 install.sh 都拒绝明文连远程 hub,裸主机名默认升级到 https:// / wss://。
token 会明文传输是一半理由;另一半更要紧——安装时下载的那个二进制走同一条未验证的通道,
而它紧接着要以 root 跑起来。
裸 ip:port 部署的 hub 只有明文 HTTP,所以两边都认一个 --insecure。它一次改三件事:
- 放行明文到远程 hub
- 裸主机名不再升级成 TLS
install.sh往 stderr 打风险说明,并把--insecure写进服务的启动参数
显式写了 https:// 的地址加上 --insecure 也仍然走 TLS——这个开关允许明文,不强制明文。
面板不会替你生成带 --insecure 的命令:从 IP 或明文入口进后台时,添加节点、
批量窗口和安装命令一律不可用。要用这个开关,只能自己手工跑脚本,并且清楚自己在做什么。
换 token
节点 → 重新生成 token。旧 token 立刻失效,包括已经连着的那条连接—— hub 会把这个节点踢下线,它拿旧 token 重连会吃到 401。
安装命令随时可以再看一次,token 不会「只显示一次」。
卸载
# systemd
systemctl disable --now monitor-agent
rm -f /etc/systemd/system/monitor-agent.service && systemctl daemon-reload
# OpenRC
rc-update del monitor-agent default && rc-service monitor-agent stop
rm -f /etc/init.d/monitor-agent
rm -f /opt/monitor/monitor-agent /opt/monitor/agent.envbash然后在面板里删掉这个节点。
上报什么
连接建立时上报一次静态信息(Facts):主机名、系统、内核、架构、虚拟化类型、
CPU 型号与核数、内存与硬盘总量、本机 IPv4 / IPv6、agent 版本。
之后每 --interval 秒上报一次指标(Metrics):CPU、负载、内存、swap、硬盘、
网卡收发速率与内核累计计数器、TCP / UDP 连接数、进程数、运行时间、boot_id。
字段的权威定义是 agent 源码里的两个 struct,完整说明见架构与协议。
agent 不写任何文件,也不记忆任何跨重启的状态。 它只上报此刻内核给出的数字,累加是 hub 的事。