monitor

配置

流量统计

面板上有三个流量数字:

数字从哪来什么时候归零
总流量hub 侧累加永不归零,也永不回退
本月流量同上,另存一份跨过这个节点的重置日
今日流量同上跨过 hub 本地时区的零点

三个数字约每分钟更新一次,实时网速不受影响。

为什么由 hub 累加

网卡流量来自内核计数器,它每次开机从零开始。直接显示的话,机器一重启,总流量就归零。

所以 agent 只上报内核计数器的当前读数和一个每次开机都会变的 boot_id,由 hub 累加,agent 保持无状态。

只计入 hub 看着增长的部分

读不出计数器            → 整行不动,不计流量也不改基线
boot_id 和上次一样      → delta = max(当前读数 - 上次读数, 0)
其余情况                → delta = 0,只重新对基线

「其余情况」有三种:节点第一次上报、同一次开机内读数变小(某块网卡消失了)、boot_id 变了(重启了,或改了下文的统计网卡)。三种都只重新对基线,因为两种出错方式的代价差几个数量级:

  • 按差值计入而判断错了:一次多出一整个 lifetime 计数器(几百 GB),总流量只增不减,只能手工改回
  • 重新对基线:只丢掉开机到首次上报之间的量,通常几十秒、几百 KB

boot_id 变化时不计流量还有一个原因:同一条安装命令可能被装到了第二台机器上,两个 agent 用同一个 token 互相顶替,hub 每秒看到两个 boot_id 来回切换。按差值计入的话,实测每来回一次多出 180 GB。

agent 掉线期间的流量会补上

agent 停着的时候内核照样计数,重连后的第一次差值包含了这一段。流量确实跑了,商家也会算。

前提是机器没重启:掉线期间重启过,boot_id 变了,那一段没有基线可减。

哪些网卡计入

默认规则是同一份线路上的字节只数一次,大多数机器不用配置:

  • lo、容器和虚拟机的网卡、隧道(WireGuard、Tailscale、tun、sit、gre、vxlan 等)不计
  • 网桥、bond、VLAN、macvlan 这类叠在别的网卡上的设备不计,只计它们底下的那块
  • 除了看名字,还按内核给出的链路信息判断,自己起名的网桥和隧道也认得出
  • PPPoE 只认 OpenWrt 的 pppoe-wan。pppd 拨号的 ppp0 默认照计,因为 LTE 拨号时它是唯一的链路;用 pppd 拨 PPPoE 的机器会把拨号口和底下的网卡各算一遍,需要按下文指定

agent 启动时会打印一行,列出此刻计入的网卡:

# systemd
journalctl -u monitor-agent | grep "counting traffic"
 
# OpenRC
grep "counting traffic" /var/log/monitor-agent.log
bash

转发流量的机器要手动指定

软路由、桥接了软路由的宿主机上,一个包会先后经过 WAN 口和 LAN 口两块真网卡,按默认规则会算两遍。哪块面向运营商只有你知道,需要手动指定。

点节点的安装按钮打开弹窗,打开指定统计的网卡,在「只统计」或「不统计」里填网卡名,下面的安装命令随之带上 --iface。节点在线时,弹窗会显示并预填它当前的设置。

直接写命令也一样:

curl -fsSL https://hub.example.com/install.sh | sh -s -- \
  --server https://hub.example.com --token <token> --iface eth1
bash

面向运营商的一般是默认路由所在的那块:

# dev 后面就是网卡名
ip route show default
bash
机器--iface
PPPoE 拨号拨号口,OpenWrt 叫 pppoe-wan,pppd 叫 ppp0
DHCP 或静态 IP 上网的软路由WAN 口,如 eth1
PVE 宿主机上桥接了软路由接运营商的那块物理口,如 enp1s0
PVE 宿主机只算自己、不算 guestvmbr0

写法:

弹窗命令含义
只统计 eth1, eth2--iface eth1,eth2只统计列出的网卡,默认规则不再生效
不统计 eth0--iface -eth0从本来会计入的网卡里去掉这一块,如软路由的 LAN 口;排除优先于列出

只认完整的网卡名,eth* 这类通配会被拒绝,以免什么都没匹配上却以为设好了。

批量添加的弹窗里也有这个选项。一批机器都有一块同名的内网网卡时(比如都叫 ens19),在「不统计」里填它,每台都只去掉那一块。

改设置

在安装弹窗里改好,复制命令到那台机器上重跑。开关关着时命令不带 --iface,重跑(包括升级)沿用机器上原来的设置;开关打开、两栏都留空,生成 --iface '',恢复默认规则。

也可以直接改配置文件:

# 改 MONITOR_IFACE= 这一行,没有就加一行
vi /opt/monitor/agent.env
 
# systemd
systemctl restart monitor-agent
 
# OpenRC
rc-service monitor-agent restart
bash

改了之后 hub 重新对基线:从这一刻起按新的网卡累加,已有的总流量不变,新旧两组网卡读数之差不会被当成流量。网卡增减、被重新归类时也一样。

月度周期按商家的重置日算

每个节点有自己的每月重置日(1–31),在编辑节点里设。

  • 今天 ≥ 本月的重置日 → 周期从本月的重置日开始
  • 否则 → 从上月的重置日开始
  • 重置日超过当月天数就落到当月最后一天(设 31 号,2 月落到 28 或 29 号)

重置不靠定时任务,而是在节点下一次上报时触发,所以离线很久的节点重新上线时会从正确的周期开始。

读取时也会再判断一次周期:在周期边界之前掉线的节点,库里存的是上一周期的数字,读出来是 0,不会把上个月的用量当成这个月的。

每月额度

编辑节点里的每月额度(GB)留空或填 0 表示不限。计算方式决定拿哪个数去对额度,流量通知也按它算:

计算方式拿去对额度的数适用
上下行相加上行 + 下行大多数商家
取较大值上行、下行中较大的一个按较大方向计费
仅上行上行只限上行
仅下行下行只限下行

今日流量按本地时区

日边界和月边界都按 hub 所在机器的本地时区算,不按 UTC。Docker 部署要设 TZ,否则按 UTC 算,见 Docker 部署。

手工校正

在编辑节点里展开流量校正,按 GB 填入总流量或本月流量,用于换机器、迁移或修正一次误算。

只提交改过的项,没改的继续正常累计,不会把打开表单那一刻的数写回去。改本月的值时,hub 同时把周期记为当前周期,否则刚填的数会被当成上个周期的读成 0。

累计值不是从历史明细算出来的,调小保留天数不影响任何流量数字。

在 GitHub 上修改这一页最后更新 2026-09-29