• Maose

    [!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

    应输出:test result: ok. 20 passed

    ``第二步:安装到固定位置``
    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 # 删掉 @reboot 那行
    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 , 在部署全部完成后, 你的探针就会出现一台超级🐥 ^-^

    主楼
  • 夜轻

    ^-^

    #1
  • reboot-nodeseek

    收到召唤@reboot 特此前来

    #2
  • qq3300

    顶顶顶顶顶

    #3

发表回复

登录后回复