From ffe3a8027dbea33d681e78910c47a8c4514c5713 Mon Sep 17 00:00:00 2001 From: stqfdyr <89149493+stqfdyr@users.noreply.github.com> Date: Thu, 24 Sep 2026 19:37:19 +0800 Subject: [PATCH 1/2] =?UTF-8?q?docs:=20=E6=B5=81=E9=87=8F=E7=BA=A6?= =?UTF-8?q?=E6=AF=8F=E5=88=86=E9=92=9F=E8=AE=B0=E8=B4=A6=E3=80=81hub=20?= =?UTF-8?q?=E6=8C=89=20agent=20=E8=8A=82=E5=A5=8F=E6=94=B6=E5=B8=A7?= =?UTF-8?q?=E3=80=81=E5=AE=89=E8=A3=85=E5=BC=B9=E7=AA=97=E6=B2=BF=E7=94=A8?= =?UTF-8?q?=E4=B8=8A=E6=8A=A5=E9=97=B4=E9=9A=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/content/config/traffic.mdx | 2 ++ src/content/dev/architecture.mdx | 12 ++++++++++-- src/content/dev/theme.mdx | 3 ++- src/content/install/agent.mdx | 3 ++- 4 files changed, 16 insertions(+), 4 deletions(-) diff --git a/src/content/config/traffic.mdx b/src/content/config/traffic.mdx index 8358fe8..959f2d8 100644 --- a/src/content/config/traffic.mdx +++ b/src/content/config/traffic.mdx @@ -6,6 +6,8 @@ | **本月流量** | 同上,另存一份 | 跨过这个节点的重置日 | | **今日流量** | 同上 | 跨过 hub 本地时区的零点 | +三个数字约每分钟更新一次,实时网速不受影响。 + ## 为什么由 hub 累加 网卡流量来自内核计数器,它每次开机从零开始。直接显示的话,机器一重启,总流量就归零。 diff --git a/src/content/dev/architecture.mdx b/src/content/dev/architecture.mdx index 44c70f5..d1b8647 100644 --- a/src/content/dev/architecture.mdx +++ b/src/content/dev/architecture.mdx @@ -51,6 +51,9 @@ tcp udp procs `net_rx_total` / `net_tx_total` 在哪段区间内可以相减:hub 只比较是否相等,变了就重新对基线。重启、 改 `--iface`、网卡增减或被重新归类都走这一条。`iface` 回报当前的 `--iface`,面板用它显示并预填。 +hub 按 agent 自己的节奏收,超出的直接丢弃:与上一条间隔不足 500 ms 的 `report`、同一连接的第二个 +`hello`、每 5 秒超过 128 条的 `ping.result`(每节点至多 64 个探测,每个最短 5 秒一次)。 + ### hub → agent | method | params | 何时发 | @@ -138,15 +141,20 @@ POST /api/db/restore POST /api/db/vacuum |---|---| | `setting` | key/value 配置,替代配置文件 | | `node` | 节点配置 + agent 上报的静态信息,含分组、离线通知的开关与状态 | -| `traffic` | **单调递增的流量累计**。1:1 于 node,但每次上报都写 | +| `traffic` | **单调递增的流量累计**。1:1 于 node,约每分钟写一次 | | `metric` | 历史明细,每节点每分钟一行,按保留天数删 | | `ping_task` / `ping_node` | 探测任务及其节点分配 | | `ping_record` | 探测结果,同样按保留天数删 | | `session` | 登录会话,存 sha256,14 天过期 | -`traffic` 单独一张表,因为它和 `node` 的读写方式完全不同:一个是偶尔修改的配置,一个是每秒都在写的数据。 +`traffic` 单独一张表,因为它和 `node` 的读写方式完全不同:一个是偶尔修改的配置,一个是持续累加的数据。 更重要的是,`metric` 可以随意清理而累计流量不受影响,累计值不是从明细算出来的。 +累计值约每分钟记一次账:hub 在内存里保留每个节点最新的一条读数,跨分钟时记账,`boot_id` 变化或读数变小 +时断点两侧各记一次,连接断开和 hub 正常退出时补记。内核计数器一直在累加,后一次记账包含中间的全部增量, +结果与逐条记账相同。hub 被强行杀掉时少记最后不到一分钟,节点下次上报补回(前提是期间没重启)。探测结果 +同样按分钟成批写入。 + `metric` 的一行描述的是它之前的那一分钟,而不是某一时刻:网速由累计值的差算出,其余字段是这一分钟内的 平均值。 diff --git a/src/content/dev/theme.mdx b/src/content/dev/theme.mdx index 95308d5..51ae538 100644 --- a/src/content/dev/theme.mdx +++ b/src/content/dev/theme.mdx @@ -300,7 +300,8 @@ body 是整个设置对象,会替换已保存的那份,规则和面板相同 `hostname`、`remark`、`token` 这些 key:不是空字符串,而是根本不存在。国家只给一个 `country`,手填的 优先。 -指标部分走白名单,所以 `boot_id`、`iface`、`net_rx_total`、`net_tx_total` 也只给登录后的面板。 +指标部分走白名单:内核原始计数器 `net_rx_total`、`net_tx_total` 和 `boot_id` 谁都拿不到,`iface` 只给登录后的 +面板。`metrics` 里的 `total_rx`、`total_tx`、`month_rx`、`month_tx` 由 hub 填入,与顶层同名字段相同。 字段定义以 hub 的源码为准。写主题时按「这个 key 可能不存在」处理。 diff --git a/src/content/install/agent.mdx b/src/content/install/agent.mdx index ebf2409..95b35f6 100644 --- a/src/content/install/agent.mdx +++ b/src/content/install/agent.mdx @@ -23,7 +23,8 @@ curl -fsSL https://hub.example.com/install.sh | sh -s -- \ | 上报间隔 | `--interval <秒>` | 1–3600,默认 1 | | 指定统计的网卡 | `--iface <列表>` | 见[流量统计](/config/traffic#转发流量的机器要手动指定) | -两项都记在机器上,以后重装或升级时不写就沿用。 +两项都记在机器上,以后重装或升级时不写就沿用。节点在线时,弹窗显示并预填它当前的上报间隔和统计网卡; +上报间隔没改就不写进命令。 ## 批量安装 From 4db2ea169a72fee6361090caf778a95135f52efc Mon Sep 17 00:00:00 2001 From: stqfdyr <89149493+stqfdyr@users.noreply.github.com> Date: Thu, 24 Sep 2026 21:53:21 +0800 Subject: [PATCH 2/2] =?UTF-8?q?docs:=20=E5=8C=BF=E5=90=8D=E6=8B=BF?= =?UTF-8?q?=E4=B8=8D=E5=88=B0=E7=9A=84=E5=9C=B0=E5=9D=80=E8=A1=A5=E4=B8=8A?= =?UTF-8?q?=E9=9D=A2=E6=9D=BF=E6=96=B0=E5=A2=9E=E7=9A=84=E4=B8=89=E4=B8=AA?= =?UTF-8?q?=20key=EF=BC=9Biface=20=E7=99=BB=E5=BD=95=E5=90=8E=E6=89=8D?= =?UTF-8?q?=E8=BF=94=E5=9B=9E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/content/dev/theme.mdx | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/content/dev/theme.mdx b/src/content/dev/theme.mdx index 51ae538..c628c7b 100644 --- a/src/content/dev/theme.mdx +++ b/src/content/dev/theme.mdx @@ -296,12 +296,12 @@ body 是整个设置对象,会替换已保存的那份,规则和面板相同 ## 匿名拿不到什么 -匿名访问 `GET /api/nodes` 只返回公开的节点,响应里没有地址(`ip`、`ipv4`、`ipv6`、`ipv4_pin`、`ipv6_pin`)、 -`hostname`、`remark`、`token` 这些 key:不是空字符串,而是根本不存在。国家只给一个 `country`,手填的 -优先。 +匿名访问 `GET /api/nodes` 只返回公开的节点,响应里没有地址(`ip`、`ipv4`、`ipv6`、`ipv4_pin`、`ipv6_pin`、 +`ipv4_auto`、`ipv6_auto`、`addresses`)、`hostname`、`remark`、`token` 这些 key:不是空字符串,而是根本 +不存在。国家只给一个 `country`,手填的优先。 -指标部分走白名单:内核原始计数器 `net_rx_total`、`net_tx_total` 和 `boot_id` 谁都拿不到,`iface` 只给登录后的 -面板。`metrics` 里的 `total_rx`、`total_tx`、`month_rx`、`month_tx` 由 hub 填入,与顶层同名字段相同。 +指标部分走白名单:内核原始计数器 `net_rx_total`、`net_tx_total` 和 `boot_id` 谁都拿不到,`iface` 和地址 +一样只在登录后返回。`metrics` 里的 `total_rx`、`total_tx`、`month_rx`、`month_tx` 由 hub 填入,与顶层同名字段相同。 字段定义以 hub 的源码为准。写主题时按「这个 key 可能不存在」处理。