目标:在一台 ARM 小主机(双网口场景常见,如 R2S 一类)上,完成
1)长期累计流量统计(按天/月/年)
2)终端实时图形化监控(看瞬时带宽、看谁在跑流量)
并解决“vnstat 显示 No data/查不到数据”的典型问题。
1. 为什么需要两类工具:累计统计 vs 实时观察
网络监控分两类,作用不同:
1.1 长期累计(趋势、账单、限额)
- 想知道本月总共跑了多少 GB
- 想看每天流量曲线
- 想做长期审计(代理/隧道节点很常见)
选型:vnStat
优点:轻量、低开销、重启不丢(数据库在本机保存)。
1.2 实时观察(当前状态、排障、抓异常)
- 想知道现在有没有人在用代理/隧道
- 想知道流量突然暴涨来自哪里
- 想看实时 RX/TX 图形
选型:bmon / nload / iftop
其中:
bmon:终端图形化面板(接口级 RX/TX、pps、错误统计)nload:最直观的实时曲线(进/出两条曲线)iftop:连接级别“谁在跑流量”(源/目的、端口、速率)
2. 基础概念:RX / TX 是什么
所有工具里都绕不开:
- RX(Receive):接收方向,等价于“下载/入站”
- TX(Transmit):发送方向,等价于“上传/出站”
在转发型节点(隧道/代理)里,经常出现一个明显特征:
RX ≈ TX(接收多少就转发多少)
而在普通客户端(浏览网页、下载)上更常见:
RX >>> TX
3. 长期累计:vnStat 的正确用法与常见误解
3.1 vnStat 的工作机制(决定了“能不能看历史”)
vnStat 不会回溯系统历史流量。它的机制是:
- 周期性读取网卡计数器(rx_bytes/tx_bytes)
- 写入自己的数据库(SQLite)
- 用采样点差值计算按天/月/年的统计
因此:
- ✅ 安装后开始统计,越用越准
- ❌ 安装前的“历史总流量”无法恢复
- ✅ 重启不丢(只要数据库文件还在)
这也是很多人第一次用 vnStat 时最容易误解的点:
看到 “since <安装日>” 是正常的。
4. 典型问题:vnstat 显示 “No data” 的原因与解决
常见输出类似:
No data. Timestamp of last update is same as of database creation.
这通常意味着:
4.1 原因 A:数据库刚创建,还没采样
vnStat 默认采样间隔较长(常见 5 分钟),刚安装就查询会显示 No data。
解决:等待一轮采样后再看,或先制造一点流量。
4.2 原因 B:看错接口(最常见、最关键)
在双网口设备上,接口名与实际 WAN/LAN 可能与直觉相反。
例如以为 eth0 是外网口,但实际上外网走 eth1。
如果监控了一个 没有链路/没有路由/没有流量 的口,当然永远 No data。
如何确定真正的外网接口(唯一可靠方法)
看默认路由:
ip route | grep default
输出会包含:
default via <GATEWAY_IP> dev <WAN_IF> ...
这里的 <WAN_IF> 就是真正的外网接口。
这是判断 WAN 的“金标准”。
再用链路状态确认(避免“有接口但没插线”)
看接口状态:
ip a
典型判断规则:
state UP+LOWER_UP+ 有inet <PRIVATE_IP>/...→ 正常在用NO-CARRIER或state DOWN→ 没插线/没链路/没工作
结论:默认路由 dev 指向哪个接口,就监控哪个接口。
5. vnStat 部署步骤(适用于 Debian/Ubuntu/Armbian 系)
5.1 安装与服务状态
apt update
apt install vnstat -y
systemctl status vnstat
状态应该是 active (running)。
5.2 第一次运行会自动加接口(正常)
服务日志常见信息:
- 自动发现接口并添加到数据库
- 开始监控接口列表
这表示 vnstatd 已经在后台工作。
5.3 只监控真正的 WAN(建议做)
双网口机器常见:LAN 口会产生大量“内网搬运流量”,导致统计失真。
如果目标是“外网真实消耗”,建议只保留 WAN。
先确认 WAN 接口名:
ip route | grep default
假设得到 <WAN_IF>,那么:
- 若之前误监控了
<LAN_IF>,可以移除:
vnstat --remove -i <LAN_IF>
systemctl restart vnstat
- 查看当前监控接口列表(不同版本命令略有差异,常用):
vnstat --iflist
5.4 查看数据(建议的几个视图)
- 总览:
vnstat
- 指定接口:
vnstat -i <WAN_IF>
- 按天:
vnstat -d
- 按月:
vnstat -m
刚装完时
estimated(预测月流量)会很不稳定,运行一段时间后才有参考价值。
6. 终端实时图形化:bmon / nload / iftop 的组合打法
6.1 bmon:接口级“仪表盘”(推荐常驻)
安装:
apt install bmon -y
运行:
bmon
推荐只看 WAN:
bmon -p <WAN_IF>
bmon 能看到:
- 每个接口 RX/TX bps
- pps(每秒包数)
- 图形化历史柱状图
- 丢包、CRC、错误等健康指标
读图要点:
- TX/RX 接近 0:基本空闲
- TX/RX 同时上升:存在真实传输
- pps 突然暴涨:可能被扫描/大量连接
- Errors/Dropped 不为 0:链路或队列可能异常
6.2 nload:最直观的双曲线带宽图
安装:
apt install nload -y
运行:
nload <WAN_IF>
适合:
- “现在有没有人在用”
- “带宽是不是在持续跑”
- 看峰值/平均值很直观
6.3 iftop:谁在跑流量(连接级定位)
安装:
apt install iftop -y
运行:
iftop -i <WAN_IF>
iftop 能直接回答:
- 哪个源 IP 在发送/接收
- 连到哪个目的 IP
- 速率多少(短期/中期/长期平均)
对代理/隧道节点极有价值:
不看日志也能知道“流量来自哪里”。
7. 结合转发型节点的“快速判断法”
对于典型“转发/中继”用途(FRP/VPN/代理等),只靠 bmon/iftop 就能做出很多判断:
7.1 是否有人在用
- bmon/nload:RX/TX 同时稳定上升
- iftop:出现持续的高带宽连接
7.2 是否在做“转发”
- bmon:累计 Bytes 里 RX ≈ TX(长期看更明显)
- iftop:常见表现为“进出对称”的流量
7.3 是否异常(扫描/攻击倾向)
- bmon:pps 突然升高但 bps 不一定高(大量小包)
- iftop:出现很多陌生源 IP、短连接、端口多样
7.4 链路是否健康
- bmon:CRC Error / Dropped / Overrun 长期为 0 → 链路质量好
- 一旦错误增长,需要检查网线、交换机口、驱动、队列拥塞等
8. 一套可复制的最小化方案
如果目标是“最小成本、可观测性拉满”,建议:
- 长期统计:
vnstat(只监控 WAN) - 实时总带宽:
nload <WAN_IF> - 连接级排查:
iftop -i <WAN_IF> - 一屏状态面板:
bmon -p <WAN_IF>
这样既能:
- 月度对账(vnstat)
- 秒级观察(nload/bmon)
- 定位“谁在跑”(iftop)
9. 常见坑位清单(避免重复踩坑)
- 装完立刻查 vnstat 没数据:正常,等采样或制造流量
- 监控错接口:必须以
ip route | grep default为准 - ethX 显示 NO-CARRIER:接口没连,统计当然为 0
- 同时监控 WAN+LAN 导致统计失真:转发场景建议只保留 WAN
- 以为 vnstat 能看安装前历史:做不到,除非之前已有其他监控体系
10. 附:命令模板(便于复制)
将下面的 <WAN_IF> 替换成实际接口名(由默认路由确定):
# 1) 找到 WAN 接口
ip route | grep default# 2) 看接口链路状态
ip a# 3) vnstat 查看指定接口
vnstat -i <WAN_IF># 4) vnstat 按月统计
vnstat -m# 5) bmon 只看 WAN
bmon -p <WAN_IF># 6) nload 实时曲线
nload <WAN_IF># 7) iftop 看谁在跑流量
iftop -i <WAN_IF>