Skip to content
25 changes: 23 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,26 @@ monitor-agent --server https://your-hub --token <token>
| `--server` | 必填 | hub 地址,也可用 `MONITOR_SERVER` |
| `--token` | 必填 | 节点 token,也可用 `MONITOR_TOKEN` |
| `--interval` | 1 | 上报间隔(秒),1–3600 |
| `--iface` | 空 | 流量统计的网卡,逗号分隔,也可用 `MONITOR_IFACE`;见下 |

### 统计哪些网卡的流量

默认规则是同一份线上的字节只数一次:lo、容器与虚拟机网卡、隧道不计;bond、网桥、VLAN、macvlan
这类叠在别的网卡上的设备也不计,只计它们底下的那块。除了按名字,还按内核给出的链路类型、`DEVTYPE`、
`lower_*` 链接和所属网桥判断,改过名的隧道、网桥,以及挂在网桥上的虚拟机 tap(如 libvirt 的 `vnet0`)
和容器 veth 同样认得出。PPPoE 只认 OpenWrt 的 `pppoe-wan`:pppd 拨号的
`ppp0` 默认照计,因为 LTE 拨号时它是唯一的链路,用 pppd 拨 PPPoE 的机器要用 `--iface` 指定。

转发流量的机器(软路由、桥接了软路由的宿主机)上,同一个包会经过两块真网卡,哪块面向运营商只有
使用者知道,这时用 `--iface`:

- `--iface eth1` 或 `--iface pppoe-wan`:只统计列出的网卡,写全名时内置规则不再生效
- `--iface -eth0`:从本来会计入的网卡里去掉一块(如软路由的 LAN 口),`-` 开头的都是排除,排除优先于列出。
一批机器都有一块同名的内网网卡时,一条批量命令就能在每台上去掉它
- 只认完整的网卡名,不支持通配

启动时打印一行 `counting traffic on: ...`,列出此刻计入的网卡。所计网卡的集合一旦变化(改了 `--iface`、
网卡增减或被重新归类),上报的 `boot_id` 也跟着变,hub 重新对基线,不会把新旧两组读数之差记成流量。

## 上报字段

Expand All @@ -42,8 +62,9 @@ monitor-agent --server https://your-hub --token <token>
- **`Facts`** 连接时上报一次:主机名、系统、内核、架构、虚拟化类型、CPU 型号与核数、内存与磁盘总量、本机 IPv4 / IPv6(每族一个,公网地址优先;IPv6 不取临时地址和已废弃地址)
- **`Metrics`** 每 `--interval` 秒上报:CPU、负载、内存、swap、磁盘、网卡收发速率与内核累计计数器、TCP / UDP 连接数、进程数、运行时间

`net_rx_total` / `net_tx_total` 为内核 lifetime 计数器,原样上报;`boot_id` 取自
`/proc/sys/kernel/random/boot_id`,是 hub 判定主机重启的唯一依据,**不要删**。
`net_rx_total` / `net_tx_total` 为所计网卡的内核 lifetime 计数器之和,原样上报;`boot_id` 取自
`/proc/sys/kernel/random/boot_id`,后接 `/` 与所计网卡集合的摘要,标明这两个读数在哪段区间内可以相减,
是 hub 判定计数器重新开始的唯一依据,**不要删**。`iface` 回报当前的 `--iface`,供面板显示与预填。

连接 hub 时逐个尝试解析出的地址,除最后一个外每个限 5 秒。网卡上只有内网 IPv4(NAT)时先连 hub 的
IPv4:NAT 的公网地址不在网卡上,hub 只有看到一条 IPv4 连接才知道它。
Expand Down
Loading
Loading