From b32d29ae3d4334d77e761b6d2dc90d01440d447f Mon Sep 17 00:00:00 2001 From: stqfdyr <89149493+stqfdyr@users.noreply.github.com> Date: Sat, 19 Sep 2026 07:22:38 +0800 Subject: [PATCH 1/4] =?UTF-8?q?docs:=20=E6=B5=81=E9=87=8F=E9=A1=B5?= =?UTF-8?q?=E8=A1=A5=E5=85=85=E7=BB=9F=E8=AE=A1=E5=93=AA=E4=BA=9B=E7=BD=91?= =?UTF-8?q?=E5=8D=A1=EF=BC=8C=E4=BB=A5=E5=8F=8A=E7=94=A8=E9=9D=A2=E6=9D=BF?= =?UTF-8?q?=E6=88=96=20--iface=20=E6=8C=87=E5=AE=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/content/config/traffic.mdx | 82 +++++++++++++++++++++++++++++++- src/content/dev/architecture.mdx | 4 +- src/content/install/agent.mdx | 3 +- 3 files changed, 86 insertions(+), 3 deletions(-) diff --git a/src/content/config/traffic.mdx b/src/content/config/traffic.mdx index b1178b9..6d628f2 100644 --- a/src/content/config/traffic.mdx +++ b/src/content/config/traffic.mdx @@ -22,7 +22,8 @@ boot_id 和上次一样 → delta = max(当前读数 - 上次读数, 0) 其余情况 → delta = 0,只重新对基线 ``` -「其余情况」有三种:节点第一次上报、同一个 boot 下读数变小(某个网卡消失了)、`boot_id` 变了。 +「其余情况」有三种:节点第一次上报、同一个 boot 下读数变小(某个网卡消失了)、`boot_id` 变了 +(重启了,或者改了下面说的统计网卡)。 三种都选重新对基线,因为赌错的代价差几个数量级: - 猜错方向计进去,一次虚增一整个 lifetime 计数器(几百 GB),而总流量单调递增,只能手工改回来 @@ -38,6 +39,85 @@ boot_id 和上次一样 → delta = max(当前读数 - 上次读数, 0) 前提是机器没重启。掉线期间重启过的话 `boot_id` 变了,那一段没有基线可减。 +## 哪些网卡计入 + +默认规则是同一份线上的字节只数一次,大多数机器不用配置: + +- lo、容器和虚拟机的网卡、隧道(WireGuard、Tailscale、tun、sit、gre、vxlan 等)不计 +- 网桥、bond、VLAN、macvlan、PPPoE 这类叠在别的网卡上的设备不计,只计它们底下的那块 +- 除了看名字,还按内核给出的链路信息判断,自己起名的网桥和隧道也认得出 + +agent 启动时会打印一行,列出此刻计入的网卡: + +```bash +# systemd +journalctl -u monitor-agent | grep "counting traffic" + +# OpenRC +grep "counting traffic" /var/log/monitor-agent.log +``` + +### 转发流量的机器要手动指定 + +软路由、桥接了软路由的宿主机上,一个包会先后经过 WAN 口和 LAN 口两块真网卡,按默认规则会算两遍。 +哪块面向运营商只有你知道,需要手动指定。 + +在面板 **节点 → 下载按钮** 打开安装弹窗,打开 **指定统计的网卡**,在「只统计」或「不统计」里填网卡名, +下面的安装命令会随之带上 `--iface`。节点在线时,弹窗会显示并预填它当前的设置。 + +直接写命令也一样: + +```bash +curl -fsSL https://hub.example.com/install.sh | sh -s -- \ + --server https://hub.example.com --token --iface eth1 +``` + +面向运营商的一般就是默认路由所在的那块: + +```bash +# dev 后面就是网卡名 +ip route show default +``` + +| 机器 | `--iface` | +|---|---| +| PPPoE 拨号 | 拨号口,OpenWrt 叫 `pppoe-wan`,pppd 叫 `ppp0` | +| DHCP 或静态 IP 上网的软路由 | WAN 口,如 `eth1` | +| PVE 宿主机上桥接了软路由 | 接运营商的那块物理口,如 `enp1s0` | +| PVE 宿主机只算自己、不算 guest | `vmbr0` | + +写法: + +| 弹窗 | 命令 | 含义 | +|---|---|---| +| 只统计 `eth1, eth2` | `--iface 'eth1,eth2'` | 只统计列出的网卡,默认规则不再生效 | +| 不统计 `vxlan100` | `--iface '-vxlan100'` | 从本来会计入的网卡里去掉这一块,排除优先于列出 | +| `enp*` | `--iface 'enp*'` | 末尾的 `*` 匹配前缀 | + +**批量添加**的弹窗里也有这个选项。一批网卡名各不相同的机器,适合用「不统计」:`nebula*` 在每台上都只 +去掉那个口。 + +### 改设置 + +在安装弹窗里改好,复制命令到那台机器上重跑。弹窗里的开关关着时,命令不带 `--iface`,重跑(包括 +升级)会沿用机器上原来的设置;开关打开、两栏都留空,则生成 `--iface ''`,恢复默认规则。 + +也可以直接改配置文件: + +```bash +# 改 MONITOR_IFACE= 这一行,没有就加一行 +vi /opt/monitor/agent.env + +# systemd +systemctl restart monitor-agent + +# OpenRC +rc-service monitor-agent restart +``` + +改了之后 hub 重新对基线:从这一刻起按新的网卡累加,已有的总流量不变,新旧两组网卡读数的差值 +不会被当成流量。 + ## 月度周期按商家的重置日算 每个节点有自己的**每月重置日**(1–31),在节点编辑里设。 diff --git a/src/content/dev/architecture.mdx b/src/content/dev/architecture.mdx index 18d94a3..67ffa56 100644 --- a/src/content/dev/architecture.mdx +++ b/src/content/dev/architecture.mdx @@ -46,7 +46,9 @@ net_rx net_tx ← 瞬时速率 B/s,agent 自己算差值 tcp udp procs ``` -`boot_id` 来自 `/proc/sys/kernel/random/boot_id`,是 hub 识别 VPS 重启的唯一依据。 +`boot_id` 来自 `/proc/sys/kernel/random/boot_id`,agent 设了 `--iface` 时后接 `/` 与网卡列表。它标明 +`net_rx_total` / `net_tx_total` 在哪段区间内可以相减:hub 只比较是否相等,变了就重新对基线,重启和 +改统计网卡都走这一条。 ### hub → agent diff --git a/src/content/install/agent.mdx b/src/content/install/agent.mdx index f3117cf..8398586 100644 --- a/src/content/install/agent.mdx +++ b/src/content/install/agent.mdx @@ -9,7 +9,8 @@ curl -fsSL https://hub.example.com/install.sh | sh -s -- \ --server https://hub.example.com --token ``` -以 root 在目标主机执行,几秒钟后节点就会在面板里亮起来。 +以 root 在目标主机执行,几秒钟后节点就会在面板里亮起来。软路由、PVE 宿主机这类转发流量的机器, +装之前先看[哪些网卡计入](/config/traffic)。 二进制由 hub 转发(`/agent/`),节点不需要能连上 GitHub——能连上 hub 就能装, IPv6-only 或者出不去的机器也一样。 From 136b0afecaebe21f3a42297d0f464b1779f1bae1 Mon Sep 17 00:00:00 2001 From: stqfdyr <89149493+stqfdyr@users.noreply.github.com> Date: Sat, 19 Sep 2026 11:01:05 +0800 Subject: [PATCH 2/4] =?UTF-8?q?docs:=20=E4=BF=AE=E6=AD=A3=20PPPoE=20?= =?UTF-8?q?=E8=AF=B4=E6=98=8E=E4=B8=8E=E6=8E=92=E9=99=A4=E7=A4=BA=E4=BE=8B?= =?UTF-8?q?=EF=BC=8Cboot=5Fid=20=E6=94=B9=E4=B8=BA=E6=89=80=E8=AE=A1?= =?UTF-8?q?=E7=BD=91=E5=8D=A1=E9=9B=86=E5=90=88=E7=9A=84=E6=91=98=E8=A6=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/content/config/traffic.mdx | 16 +++++++++------- src/content/dev/architecture.mdx | 8 ++++---- src/content/install/agent.mdx | 2 +- 3 files changed, 14 insertions(+), 12 deletions(-) diff --git a/src/content/config/traffic.mdx b/src/content/config/traffic.mdx index 6d628f2..6eb2c54 100644 --- a/src/content/config/traffic.mdx +++ b/src/content/config/traffic.mdx @@ -44,8 +44,10 @@ boot_id 和上次一样 → delta = max(当前读数 - 上次读数, 0) 默认规则是同一份线上的字节只数一次,大多数机器不用配置: - lo、容器和虚拟机的网卡、隧道(WireGuard、Tailscale、tun、sit、gre、vxlan 等)不计 -- 网桥、bond、VLAN、macvlan、PPPoE 这类叠在别的网卡上的设备不计,只计它们底下的那块 +- 网桥、bond、VLAN、macvlan 这类叠在别的网卡上的设备不计,只计它们底下的那块 - 除了看名字,还按内核给出的链路信息判断,自己起名的网桥和隧道也认得出 +- PPPoE 只认 OpenWrt 的 `pppoe-wan`。pppd 拨号的 `ppp0` 默认照计,因为 LTE 拨号时它是唯一的链路; + 用 pppd 拨 PPPoE 的机器会把拨号口和底下的网卡各算一遍,需要按下文指定 agent 启动时会打印一行,列出此刻计入的网卡: @@ -90,12 +92,12 @@ ip route show default | 弹窗 | 命令 | 含义 | |---|---|---| -| 只统计 `eth1, eth2` | `--iface 'eth1,eth2'` | 只统计列出的网卡,默认规则不再生效 | -| 不统计 `vxlan100` | `--iface '-vxlan100'` | 从本来会计入的网卡里去掉这一块,排除优先于列出 | -| `enp*` | `--iface 'enp*'` | 末尾的 `*` 匹配前缀 | +| 只统计 `eth1, eth2` | `--iface 'eth1,eth2'` | 只统计列出的网卡,写全名时默认规则不再生效 | +| 不统计 `eth0` | `--iface '-eth0'` | 从本来会计入的网卡里去掉这一块,如软路由的 LAN 口;排除优先于列出 | +| 只统计 `enp*` | `--iface 'enp*'` | 末尾的 `*` 匹配前缀,只在默认会计入的网卡里挑,不会带上 `enp1s0.100` 这类 VLAN | -**批量添加**的弹窗里也有这个选项。一批网卡名各不相同的机器,适合用「不统计」:`nebula*` 在每台上都只 -去掉那个口。 +**批量添加**的弹窗里也有这个选项。一批机器都有一块同名的内网网卡时(比如都叫 `ens19`),在「不统计」 +里填它,每台都只去掉那一块。 ### 改设置 @@ -116,7 +118,7 @@ rc-service monitor-agent restart ``` 改了之后 hub 重新对基线:从这一刻起按新的网卡累加,已有的总流量不变,新旧两组网卡读数的差值 -不会被当成流量。 +不会被当成流量。网卡增减、被重新归类时也一样。 ## 月度周期按商家的重置日算 diff --git a/src/content/dev/architecture.mdx b/src/content/dev/architecture.mdx index 67ffa56..7ba1d4e 100644 --- a/src/content/dev/architecture.mdx +++ b/src/content/dev/architecture.mdx @@ -39,16 +39,16 @@ disk_total、agent_version、ipv4、ipv6 `Metrics`: ```text -boot_id uptime cpu load[3] +boot_id iface uptime cpu load[3] mem_total mem_used swap_total swap_used disk_total disk_used net_rx_total net_tx_total ← 内核 lifetime 计数器,hub 负责累加 net_rx net_tx ← 瞬时速率 B/s,agent 自己算差值 tcp udp procs ``` -`boot_id` 来自 `/proc/sys/kernel/random/boot_id`,agent 设了 `--iface` 时后接 `/` 与网卡列表。它标明 -`net_rx_total` / `net_tx_total` 在哪段区间内可以相减:hub 只比较是否相等,变了就重新对基线,重启和 -改统计网卡都走这一条。 +`boot_id` 来自 `/proc/sys/kernel/random/boot_id`,后接 `/` 与所计网卡集合的摘要。它标明 +`net_rx_total` / `net_tx_total` 在哪段区间内可以相减:hub 只比较是否相等,变了就重新对基线。重启、 +改 `--iface`、网卡增减或被重新归类都走这一条。`iface` 回报当前的 `--iface`,面板用它显示并预填。 ### hub → agent diff --git a/src/content/install/agent.mdx b/src/content/install/agent.mdx index 8398586..e5f19af 100644 --- a/src/content/install/agent.mdx +++ b/src/content/install/agent.mdx @@ -10,7 +10,7 @@ curl -fsSL https://hub.example.com/install.sh | sh -s -- \ ``` 以 root 在目标主机执行,几秒钟后节点就会在面板里亮起来。软路由、PVE 宿主机这类转发流量的机器, -装之前先看[哪些网卡计入](/config/traffic)。 +装之前先看[流量统计](/config/traffic)页的「哪些网卡计入」一节。 二进制由 hub 转发(`/agent/`),节点不需要能连上 GitHub——能连上 hub 就能装, IPv6-only 或者出不去的机器也一样。 From 4159a1c69a25c037505390e7b06c112c7c115582 Mon Sep 17 00:00:00 2001 From: stqfdyr <89149493+stqfdyr@users.noreply.github.com> Date: Sat, 19 Sep 2026 16:45:56 +0800 Subject: [PATCH 3/4] =?UTF-8?q?docs:=20agent=20=E9=87=8D=E8=B7=91=E5=8D=87?= =?UTF-8?q?=E7=BA=A7=E6=97=B6=E6=B2=BF=E7=94=A8=E5=8E=9F=E6=9D=A5=E7=9A=84?= =?UTF-8?q?=20--interval=20=E4=B8=8E=20--iface?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/content/reference/faq.mdx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/content/reference/faq.mdx b/src/content/reference/faq.mdx index 759f932..37c0f73 100644 --- a/src/content/reference/faq.mdx +++ b/src/content/reference/faq.mdx @@ -177,7 +177,8 @@ WAL 模式下不截断的话文件只会变大不会变小,所以这三步是 hub 重跑一遍安装脚本:校验通过才替换,起不来自动回滚,没写的参数沿用上次的。 -agent 重跑一遍它的安装命令。没有自动更新,因为自更新意味着 agent 能以 root 下载并执行任意二进制。 +agent 重跑一遍它的安装命令,没写的 `--interval` 和 `--iface` 沿用机器上原来的设置。没有自动更新, +因为自更新意味着 agent 能以 root 下载并执行任意二进制。 主题点卡片上的 ⟳。 From 7f11045548443259a40b8dfada124d82b95f8187 Mon Sep 17 00:00:00 2001 From: stqfdyr <89149493+stqfdyr@users.noreply.github.com> Date: Sat, 19 Sep 2026 17:01:07 +0800 Subject: [PATCH 4/4] =?UTF-8?q?docs:=20--iface=20=E5=8F=AA=E8=AE=A4?= =?UTF-8?q?=E5=AE=8C=E6=95=B4=E7=BD=91=E5=8D=A1=E5=90=8D=EF=BC=8C=E5=88=A0?= =?UTF-8?q?=E6=8E=89=E5=89=8D=E7=BC=80=E5=86=99=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/content/config/traffic.mdx | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/content/config/traffic.mdx b/src/content/config/traffic.mdx index 6eb2c54..8aeb1c7 100644 --- a/src/content/config/traffic.mdx +++ b/src/content/config/traffic.mdx @@ -92,9 +92,10 @@ ip route show default | 弹窗 | 命令 | 含义 | |---|---|---| -| 只统计 `eth1, eth2` | `--iface 'eth1,eth2'` | 只统计列出的网卡,写全名时默认规则不再生效 | -| 不统计 `eth0` | `--iface '-eth0'` | 从本来会计入的网卡里去掉这一块,如软路由的 LAN 口;排除优先于列出 | -| 只统计 `enp*` | `--iface 'enp*'` | 末尾的 `*` 匹配前缀,只在默认会计入的网卡里挑,不会带上 `enp1s0.100` 这类 VLAN | +| 只统计 `eth1, eth2` | `--iface eth1,eth2` | 只统计列出的网卡,默认规则不再生效 | +| 不统计 `eth0` | `--iface -eth0` | 从本来会计入的网卡里去掉这一块,如软路由的 LAN 口;排除优先于列出 | + +只认完整的网卡名,`eth*` 这类通配会被拒绝,免得什么都没匹配上还以为设好了。 **批量添加**的弹窗里也有这个选项。一批机器都有一块同名的内网网卡时(比如都叫 `ens19`),在「不统计」 里填它,每台都只去掉那一块。