加油
努力

在CentOS系统中如何查询流量使用记录?

在 CentOS 系统中,Linux 内核本身并不默认记录历史网络流量使用记录(如按小时/天的流量统计),它只提供实时或自系统启动以来的累计流量计数(通过 /proc/net/devethtool 等)。因此,“查询流量使用记录”需分两种情况理解:


✅ 一、查看当前实时/累计流量(自启动以来)

这是内核原生支持的方式,无需额外安装:

1. 使用 cat /proc/net/dev

cat /proc/net/dev

输出示例:

Inter-|   Receive                                                |  Transmit
 face |bytes    packets errs drop fifo frame compressed multicast|bytes    packets errs drop fifo colls carrier compressed
  eth0: 123456789  123456   0    0    0     0          0         0 987654321  987654   0    0    0     0       0          0
  • bytes 列即为总接收/发送字节数(B),可换算为 MB/GB。
  • 注意:这是自系统上次启动以来的累计值,不是历史记录。

2. 使用 ip -s link(推荐,更清晰)

ip -s link show eth0  # 替换 eth0 为你的网卡名(可用 ip link show 查看)

输出包含 RX(接收)和 TX(发送)的 bytespackets 等累计统计。

3. 实时监控工具(非记录,但可观测)

# 安装 iftop(实时带宽占用)
sudo yum install -y iftop
sudo iftop -P  # 按端口显示;-P 显示端口

# 或 nethogs(按进程显示)
sudo yum install -y nethogs
sudo nethogs eth0

# 或使用 ss + watch(简单轮询)
watch -n 1 'cat /proc/net/dev | grep eth0'

⚠️ 这些工具不保存历史数据,关闭后即丢失。


✅ 二、实现真正的历史流量记录(按时间维度)

需借助第三方工具进行持续采集与存储:

✅ 推荐方案:vnstat(轻量、专为流量统计设计)

✅ 支持按小时/天/月统计,后台守护进程自动记录,低开销,CentOS 原生仓库可用。

安装与配置(CentOS 7/8):
# CentOS 7
sudo yum install -y epel-release
sudo yum install -y vnstat

# CentOS 8/9(使用 dnf)
sudo dnf install -y epel-release
sudo dnf install -y vnstat

# 初始化数据库(指定网卡,如 eth0 或 ens33)
sudo vnstat -u -i eth0

# 启动并设置开机自启
sudo systemctl enable vnstat
sudo systemctl start vnstat
查询历史记录:
vnstat                    # 总览(日/月)
vnstat -d                   # 按天统计(最近 30 天)
vnstat -h                   # 按小时统计(最近 24 小时)
vnstat -m                   # 按月统计
vnstat -t                   # 实时速率(类似 iftop,但基于采样)
vnstat --oneline            # 简洁单行输出(适合脚本)

✅ 输出示例(vnstat -d):

  Day        RX      TX      Total  Avg. rate
2024-05-01  2.13 GiB  1.05 GiB  3.18 GiB  1.22 Mbit/s
2024-05-02  3.45 GiB  1.89 GiB  5.34 GiB  2.05 Mbit/s

💡 vnstat 本质是定期(默认每5分钟)读取 /proc/net/dev 并计算差值,写入 SQLite 数据库(默认 /var/lib/vnstat/),因此真正实现了“历史记录”功能


🔁 其他可选方案(进阶场景):

工具 特点 适用场景
ntopng Web 界面,深度协议分析、实时+历史、支持导出 需要图形化、多用户、审计级需求(资源消耗较高)
darkstat 轻量 Web 统计,内置 HTTP 服务 简单局域网流量分析(无认证,慎用于公网)
Netdata 实时监控平台,含流量图表+告警+历史(内存占用略高) 需要统一监控服务器健康状态
自定义脚本 + cron + 日志 awk 解析 /proc/net/dev,定时记录到文件 极简需求,无额外依赖

示例脚本(每5分钟记录一次):

#!/bin/bash
IFACE="eth0"
TS=$(date '+%Y-%m-%d %H:%M:%S')
RX=$(awk -v iface="$IFACE" '$1 ~ iface":" {print $2}' /proc/net/dev)
TX=$(awk -v iface="$IFACE" '$1 ~ iface":" {print $10}' /proc/net/dev)
echo "$TS,$RX,$TX" >> /var/log/traffic.log

(需配合 cron 和日志轮转,不如 vnstat 可靠)


❌ 不推荐/无效方法:

  • iftop -t(仅输出当前快照,不记录历史)
  • netstat(无流量统计功能)
  • sar -n DEV(来自 sysstat 包)→ ⚠️ 注意:sar 默认不记录网络流量!
    sar -n DEV 1 3 只能实时采样,且 sysstat 的网络统计需开启 SA1_OPTIONS="-S ALL" 并配置 */10 * * * * root /usr/lib64/sa/sa1 1 1 才可能记录(但实际 CentOS 中 sar -n DEV 通常只记录接口 up/down 状态,不记录 bytes 流量,不可靠)。

✅ 总结建议:

需求 推荐方案
✅ 快速查看当前/累计流量 cat /proc/net/devip -s link
✅ 实时监控(谁在用网) iftop / nethogs
长期、可靠的历史流量记录(小时/天/月) vnstat(首选)
✅ 企业级可视化+告警 Netdatantopng

如需进一步帮助(例如:
🔹 如何为多网卡配置 vnstat?
🔹 如何导出 vnstat 数据为 CSV?
🔹 如何排查 vnstat 数据为空?
🔹 CentOS Stream 9 的适配说明?),欢迎继续提问!

云服务器