正确解析历史网络流量需满足三个前提:启用sysstat服务、定位/var/log/sa/saDD格式日志文件、使用sar -f前置语法;单位为KB/s,含L2帧头,须sudo执行并验证接口名一致性。

要分析历史网络吞吐与流量,核心是让 sar -n DEV 正确读取 sysstat 保存的二进制日志文件。它不是“查昨天的网卡流量”这么简单,而是依赖三个前提:数据得存下来、文件得找对、命令得写对。
确保 sysstat 在后台持续采集网络数据
默认安装后,sysstat 并不自动记录——必须手动启用:
- 检查服务状态:
systemctl is-active sysstat,返回 active 才算运行中 - 确认配置已开启:Debian/Ubuntu 查
/etc/default/sysstat,RHEL/CentOS 查/etc/sysconfig/sysstat,里面ENABLED="true" - 验证 cron 任务存在:
grep -v "^#" /etc/cron.d/sysstat | grep sa1,应看到类似*/10 * * * * root /usr/lib/sa/sa1 -S DISK 1 1的行 - 若未启用,执行:
sudo systemctl enable --now sysstat
定位正确的历史日志文件
sysstat 每天只生成一个文件,路径固定为 /var/log/sa/saDD(DD 是当月日期,两位数字),不含年份和月份:
Linux 安全审计工具,检查 SSH 配置、开放/监听端口、防火墙规则(ufw/iptables/nftables)、失败登录尝试、sudoers 权限...
- 今天是 10 月 9 日,想查 10 月 5 日的数据 → 文件是
/var/log/sa/sa05(不是sa20241005或sa1005) - 用
ls -l /var/log/sa/sa$(date -d "3 days ago" +%d)快速验证文件是否存在 - 注意权限:非 root 用户直接
-f读/var/log/sa/下文件会静默失败(输出为空),建议加sudo或切换到 root
用 sar -n DEV 正确解析网卡流量
语法顺序很关键:-f 必须放在最前面,否则会被忽略,变成查实时缓存(可能为空):
- 查某天全部网卡流量:
sar -f /var/log/sa/sa05 -n DEV - 限定时间段(时间需对齐采样点,默认每 10 分钟一次):
sar -f /var/log/sa/sa05 -n DEV -s 14:00:00 -e 15:00:00 - 只看指定网卡(如 ens33):
sar -f /var/log/sa/sa05 -n DEV | grep ens33(注意:历史记录中的接口名以采集时刻为准,重启或重命名后可能不一致) - 单位是 KB/s(千字节每秒),不是 Mbps;rxkB/s 和 txkB/s 包含 IPv4+IPv6 的 L2 层总字节数,含帧头
交叉验证与常见陷阱
输出为空或字段异常?先做这几件事:
- 执行
sar -f /var/log/sa/sa05 -n DEV | head -5,看第一行是否列出接口名(如lo、ens33) - 对比当前活跃网卡:
awk '{print $1}' /proc/net/dev | sed 's/://g' | grep -E '^[a-z]',若历史里没有 ens33,说明当天该网卡未 UP 或 sysstat 启动晚于网卡激活 - 别用
cat /var/log/sa/sa05—— 这是二进制格式,必须用sar -f或sadf -d解析 - 避免错序写法:
sar -n DEV -f /var/log/sa/sa05是无效的,-f必须前置










