查网络接口历史收发包数据的前提是 sysstat 已启用并持续采集,需验证服务状态、配置文件、日志文件存在性及 cron 任务;正确使用 sar -f /var/log/sa/saDD -n DEV(-f 必须前置),关注 rxpck/s、txpck/s 等字段,并注意接口名时效性。

要查网络接口的历史收发包数据,关键不是“会不会用 sar”,而是“有没有存下来”。sar 本身不自动记历史,必须提前配好 sysstat 并启用采集,否则只能看实时数据。
确认历史数据是否已采集
先验证系统有没有在存网卡数据:
- 运行 systemctl is-active sysstat,输出必须是 active
- 检查配置文件:
Ubuntu/Debian 看 /etc/default/sysstat,RHEL/CentOS 看 /etc/sysconfig/sysstat,确保 ENABLED="true" - 执行 ls -l /var/log/sa/sa$(date -d yesterday +%d),比如今天是 9 月 24 日,就查 sa23 文件是否存在;没有就说明昨天没采集
- 确认 cron 任务生效:grep -v "^#" /etc/cron.d/sysstat | grep sa1 应该有类似 */10 * * * * root /usr/lib/sa/sa1 的行
正确读取历史收发包数据
网卡收发包记录用 sar -n DEV,但查历史必须带 -f 且路径准确:
- 文件名只含日期(两位),不带年月,例如 9 月 20 日的数据存为 /var/log/sa/sa20,不是 sa0920 或 sa20260920
- -f 参数必须放在最前面,正确写法:sar -f /var/log/sa/sa20 -n DEV;错写成 sar -n DEV -f /var/log/sa/sa20 会被忽略,实际查的是当天缓存
- 若提示权限不足或输出为空,尝试加 sudo,因为 /var/log/sa/ 通常仅 root 可读
识别关键字段和接口名
输出中重点关注这些列:
- rxpck/s:每秒接收的数据包数
- txpck/s:每秒发送的数据包数
- rxkB/s 和 txkB/s:每秒收发千字节数(1 KB = 1000 B)
- 接口名如 ens33、lo 来自采集时刻的 /proc/net/dev,如果某天网卡未 up 或被重命名,它可能不会出现在对应日期的 saXX 文件里
限定时间段和补充技巧
在已有历史文件基础上进一步筛选:
- 查某一时段(如 10:00–11:00):sar -f /var/log/sa/sa20 -n DEV -s 10:00:00 -e 11:00:00
- 想看所有统计项(含错误包):sar -f /var/log/sa/sa20 -n ALL
- 对比当前活跃接口:awk '{print $1}' /proc/net/dev | sed 's/://g' | grep -E '^[a-z]',再和 sar 输出的接口列表比对,能判断当时哪些网卡实际在线


















