Linux系统不自带图形化网络流量日报功能,但可通过/proc/net/dev采集实时流量数据,结合定时脚本、差值计算与awk处理,自动生成含总流量、Top接口及环比变化的文本或CSV日报。

Linux 系统本身不自带图形化网络流量日报功能,但通过组合系统命令与轻量脚本,完全可以自动采集、汇总并生成可读的日报表。关键在于稳定获取原始数据、合理聚合时段(如按小时/接口)、避免重复统计,并支持导出为文本或 CSV 便于归档或进一步处理。
用 /proc/net/dev 获取实时流量数据
/proc/net/dev 是内核提供的实时网络设备统计接口,每行包含接收(RX)和发送(TX)的字节数、包数等。它不依赖额外服务,开销极低,适合定时采集。
- 字段顺序固定:第1列是接口名,第2列为 RX 字节数,第10列为 TX 字节数(从第1列开始计数,索引从1起)
- 跳过前两行(标题与空行),用 awk 提取指定接口(如 eth0)的字节数:
awk '/eth0/{print $2,$10}' /proc/net/dev - 建议每次采集后记录时间戳,用于后续计算增量(因 /proc/net/dev 是累计值)
定时采集 + 差值计算实现日粒度统计
单纯抓一次数据没意义,需至少两次采样才能得出流量变化量。推荐每5–15分钟采集一次,再按自然日聚合。
- 用 cron 每10分钟执行一次采集脚本,将时间戳、接口名、RX/TX 字节数追加到日志文件(如
/var/log/net-daily.log) - 日报生成脚本读取当日所有记录,按接口分组,对相邻时间点做差值累加,得到每小时/全天总流量
- 注意处理跨天边界:只筛选
date -d "today" +%Y-%m-%d对应的行,避免混入昨日末尾数据
生成简洁可读的日报文本或 CSV
日报不必复杂,重点呈现总流入流出、Top 接口、环比变化即可。CSV 格式更利于 Excel 或 Grafana 导入。
- 用 awk 或 Python pandas 汇总:例如统计 eth0 全天 RX=12.4GB、TX=8.7GB,docker0 RX=2.1GB(若存在)
- 自动换算单位:字节 → KB/MB/GB,保留一位小数;超过 1TB 显示 TB 单位
- 附加简要说明,如“相比昨日 +3.2%”,需前一天同文件参与计算,可存为
daily-2024-06-14.csv方便比对
附:最小可用 Bash 日报脚本框架
以下为可直接保存为 gen-daily-report.sh 并 chmod +x 的核心逻辑(需配合 cron 使用):
#!/bin/bash
TODAY=$(date +%Y-%m-%d)
LOG="/var/log/net-daily.log"
REPORT="/var/log/net-report-${TODAY}.txt"
<h1>提取今日数据,按接口分组求和(字节)</h1><p>awk -v date="$TODAY" '$1 == date {rx[$2] += $3; tx[$2] += $4} END {for (i in rx) print i, rx[i], tx[i]}' "$LOG" | \
awk '{printf "%-10s %8.1f MB %8.1f MB\n", $1, $2/1024/1024, $3/1024/1024}' > "$REPORT"</p><p>echo "=== Network Daily Report for ${TODAY} ===" | cat - "$REPORT" > "${REPORT}.tmp" && mv "${REPORT}.tmp" "$REPORT"


















