linux无内置“流量突发”日志,需主动配置采样与阈值判断;iftop/nload仅实时渲染、不存历史;vnstat分辨率低(5分钟级);精确抓突发需watch+/proc/net/dev差分或sar -n dev 1秒级采集并标记。

Linux 本身不记录“流量突发”事件,也没有内置的「突发日志」功能——所谓“突发”,是人为定义的速率跃变,必须靠你主动配置采样+阈值判断才能捕获。
为什么 iftop 和 nload 看不到“突发记录”
它们只做实时渲染,不存历史数据,更不会标记“某秒内流量从 1MB/s 跳到 12MB/s”这类变化。按下 q 退出后,所有画面立即消失,连峰值都留不下。
-
iftop -n显示的是当前连接的瞬时速率(滚动平均),顶部的TX: 1.23MB/s是过去几秒的估算,不是精确时间点值 -
nload的Max字段是本次运行以来的最大值,重启就归零,无法回溯“什么时候达到过这个最大值” - 两者都不输出时间戳,也没提供回调或告警机制
用 vnstat 查小时级“疑似突发”,但分辨率太低
vnstat 每 5 分钟采样一次 /proc/net/dev,生成小时粒度统计。它能告诉你“14:00–15:00 流量比平时高 3 倍”,但无法定位到“14:23:17 那一秒冲到了 80MB/s”。
在无 root/sudo 权限的环境(云容器、VPS、隔离主机)中安装并配置 OpenClaw 浏览器工具的 headless Chrome。适用场景:...
- 查小时分布:
vnstat -h -i eth0,看哪一小时的rx或tx明显凸起 - 但它不记录每秒值,所以即使发现异常小时,你也得结合其他手段排查具体时刻
- 如果没提前运行
vnstat -u -i eth0初始化数据库,此刻查不到任何历史 —— 这点最容易被忽略
真正能抓到“突发”的办法:watch + /proc/net/dev 手动差分
这是零依赖、可脚本化、能精确到秒的方案。核心是每秒读取 /proc/net/dev,算两次 rx_bytes 差值,再换算成 bps。
- 执行:
watch -n 1 'awk \'/eth0/ {print \"RX:\", ($2-$last2)/1024/1024 \" MB/s\"; last2=$2}\' /proc/net/dev'(需预设初始值,实际建议写成小脚本) - 单位注意:
/proc/net/dev的rx_bytes是字节数,除以 1024² 得 MB,再 ×8 得 Mbps;但多数人只关心相对跃变,用 MB/s 更直观 - 要自动告警?加一行
if (( $(echo \"$rate > 10\" | bc -l) )); then echo \"$(date): burst detected\" >> /tmp/burst.log; fi - 别用
cat /proc/net/dev | grep eth0直接算——字段顺序在不同内核版本可能不同,必须用awk按列索引取值
想长期盯突发?sar -n DEV 1 是最稳的选择
sar 来自 sysstat,默认每 10 分钟存一次系统快照,但可以临时调成每秒采集,且带时间戳、支持导出 CSV。
- 启动秒级采集:
sudo sar -n DEV 1 60 > /tmp/sar-eth0.log(采集 60 秒) - 输出里
rxkB/s和txkB/s列就是每秒速率,直接用awk或 Excel 找极值点 - 关键优势:时间戳精确到毫秒级(如
14:23:17),且自带平滑处理,比 raw/proc/net/dev更抗抖动 - 注意:
sar默认不开启实时收集服务,要长期监控得配/etc/cron.d/sysstat或手动启systemctl enable sysstat
真正的“突发记录”不是现成的日志,而是你用工具把原始计数器变成带时间戳的速率序列后,自己定义阈值、自己打标记的结果。没人替你决定“多大才算突发”,也没人替你保存那一秒的快照——这恰恰是 Linux 监控最实在的地方。










