目标:在一台 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 不会回溯系统历史流量。它的机制是:

  1. 周期性读取网卡计数器(rx_bytes/tx_bytes)
  2. 写入自己的数据库(SQLite)
  3. 用采样点差值计算按天/月/年的统计

因此:

  • ✅ 安装后开始统计,越用越准
  • ❌ 安装前的“历史总流量”无法恢复
  • ✅ 重启不丢(只要数据库文件还在)

这也是很多人第一次用 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-CARRIERstate 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. 一套可复制的最小化方案

如果目标是“最小成本、可观测性拉满”,建议:

  1. 长期统计vnstat(只监控 WAN)
  2. 实时总带宽nload <WAN_IF>
  3. 连接级排查iftop -i <WAN_IF>
  4. 一屏状态面板bmon -p <WAN_IF>

这样既能:

  • 月度对账(vnstat)
  • 秒级观察(nload/bmon)
  • 定位“谁在跑”(iftop)

9. 常见坑位清单(避免重复踩坑)

  1. 装完立刻查 vnstat 没数据:正常,等采样或制造流量
  2. 监控错接口:必须以 ip route | grep default 为准
  3. ethX 显示 NO-CARRIER:接口没连,统计当然为 0
  4. 同时监控 WAN+LAN 导致统计失真:转发场景建议只保留 WAN
  5. 以为 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>

Leave a Reply

Your email address will not be published. Required fields are marked *