[!danger] 免责申明: 本项目由 AI 辅助完成. 使用本项目产生的一切后果由使用者自行承担,项目作者不对任何直接或间接损失负责.
本 Agent 仓库地址: https://github.com/MaoShiSanKe/monitor-agent-freebsd
探针官方文档: https://monitor-document.pages.dev/
探针官方 Github: https://github.com/monitor-probe/
由于本人只有 serv00 的 FreeBSD 系统, 所以对 Serv00 做了适配
Agent 概览:
- 协议层复用官方 Linux agent 的代码(MIT),采集层针对 FreeBSD 重写:全部走 sysctl / getfsstat / getifaddrs 内核接口,不读 /proc、不调外部命令
- 产出约 1.5MB 单二进制,内存占用约 20MB(含 rustls TLS 栈)
前置条件
要求 |
说明 |
|---|
FreeBSD 12/13/14(amd64) |
实测环境为 14.3 |
Rust 工具链 |
pkg install rust 或 rustup;serv00 已系统级自带 rustc/cargo |
git |
serv00 自带 |
hub 端一个节点 |
面板 → 节点管理 → 添加节点,拿到该节点的 token(64 位十六进制串) |
jail 用户的磁盘配额:源码 + 编译缓存约需 300MB~500MB。编译完可删 target/ 目录释放大半。
第一步:编译
git clone https://github.com/MaoShiSanKe/monitor-agent-freebsd.git
cd monitor-agent-freebsd
cargo build --release
首次编译拉取依赖约 1-3 分钟。产物在 target/release/monitor-agent-freebsd。
自检(可选但建议):
cargo test --release
第二步:安装到固定位置
install -d ~/bin
cp target/release/monitor-agent-freebsd ~/bin/
~/bin/monitor-agent-freebsd --help
能打印用法即安装成功。
第三步:试运行
~/bin/monitor-agent-freebsd --server https://你的面板域名 --token 你的节点token --interval 2
成功标志:
counting traffic on: bge0 bge1 ue0 ← 列出参与流量统计的网卡(你的机器上名字会不同)
connected to x.x.x.x:443 ← 连上 hub(经 Cloudflare 时显示 CF 的 IP)
此时刷新面板,节点应已点亮。Ctrl+C 停掉,进入下一步。
第四步:常驻运行
(无 root 方案)
jail 没有 systemd/OpenRC。用 FreeBSD 自带的 daemon(8) + crontab 实现开机自启 + 崩溃自动拉起:
crontab -e
加入一行(注意 daemon 在 /usr/sbin):
@reboot /usr/sbin/daemon -r /home/你的用户名/bin/monitor-agent-freebsd --server https://你的面板域名 --token 你的token --interval 2 >> /home/你的用户名/monitor-agent.log 2>&1
再手动启动一次(不用等重启):
/usr/sbin/daemon -r /home/你的用户名/bin/monitor-agent-freebsd --server https://你的面板域名 --token 你的token --interval 2 >> ~/monitor-agent.log 2>&1 &
验证守护有效:kill 掉 agent 进程,1 秒内 ps aux | grep monitor-agent 应出现新 PID(daemon -r 的自动重启)。
有 root 的完整 FreeBSD 机器
可以写 rc.d 脚本,或者同样用上面的 daemon + cron 方案。
运行参数
参数 |
默认 |
说明 |
|---|
--server |
必填 |
hub 地址,https:// 或裸域名均可(自动升级 wss://) |
--token |
必填 |
面板节点 token;经 Authorization: Bearer 头传输,不进 URL、不进反代日志 |
--interval |
1 |
上报间隔秒数,范围 1-3600。jail 建议 2-5,降低宿主压力 |
--iface |
全部非虚拟网卡 |
流量统计白名单,逗号分隔,如 em0,vtnet0;-名字 表示排除 |
--insecure |
关 |
允许明文 ws:// 连远程 hub(token 明文传输,仅限无 TLS 内网) |
也支持环境变量 MONITOR_SERVER / MONITOR_TOKEN / MONITOR_IFACE。
jail 环境的数据口径
serv00 等 FreeBSD jail 共享宿主内核,指标口径如下——装前须知,免得误会数据造假:
指标 |
口径 |
|---|
CPU 占用 / 负载 / 内存 |
整台宿主机(所有租户共享),与在 jail 里跑 top 看到的一致 |
网络流量 |
默认整台宿主机的物理网卡总和;可用 --iface 指定 |
磁盘 |
本 jail 可见的挂载(一般是分配给你的那块) |
TCP/UDP 连接数 |
jail 可见子集(宿主连接表对 jail 关闭,读到多少算多少) |
进程数 |
本 jail 自己的 |
Swap |
通常为 0(jail 看不到 swap 设备) |
这些是 FreeBSD jail 的固有行为,不是 agent 的 bug。
更新
cd ~/monitor-agent-freebsd
git pull
cargo build --release
cp target/release/monitor-agent-freebsd ~/bin/
pkill -f monitor-agent-freebsd
daemon -r 会在 1 秒内用新二进制把进程拉起来,无感更新。agent 本身没有自动更新,需要手动执行。
卸载
pkill -f monitor-agent-freebsd
crontab -e
rm ~/bin/monitor-agent-freebsd
rm -rf ~/monitor-agent-freebsd ~/monitor-agent.log
hub 面板上删除或隐藏该节点即可,无需其他清理。
常见问题
Q:编译报 error: linker 'cc' not found
A:缺基础工具链。serv00 自带;自己的机器 pkg install rust llvm 即可。
Q:面板显示在线但 CPU/内存数字巨大
A:正常——jail 共享宿主,显示的是整台机器(见上文口径表)。
Q:流量数字从安装那一刻起就几百 GB?
A:正常——上报的是内核的生命周期累计计数器(宿主机开机至今),hub 从此刻开始累计增量。面板上"日流量/月流量"从安装起算才是你自己的用量。
Q:hub 返回 401
A:token 错了。回面板节点列表重新复制完整 token(64 位十六进制)。
Q:daemon: not found
A:用完整路径 /usr/sbin/daemon,FreeBSD base 系统自带,jail 一般不屏蔽。
Q:掉线后多久面板变灰?
A:hub 侧判定约 150 秒。agent 掉线后会自动指数退避重连(1s→60s),hub 恢复后自动上线,无需人工干预。
与官方 Linux agent 的差异
- 仅采集层(collect.rs)是 FreeBSD 实现;协议层与官方代码同源,行为一致(心跳、重连退避、ping 探测、并发上限保护全部相同)
boot_id 用 kern.boottime + 网卡集合摘要生成(FreeBSD 没有 Linux 的 boot_id 文件),重启后 hub 自动重新基线流量
- 官方
install.sh 一键脚本不适用于 FreeBSD(它依赖 systemd/OpenRC),本文的手动流程即 jail 等价物
如果你部署在 Serv00 , 在部署全部完成后, 你的探针就会出现一台超级🐥 ^-^