Linux 下如何使用 sar 命令查看历史性能数据?

文章导读
sar 命令通过读取 sysstat 服务采集的二进制日志文件查看历史性能,默认需手动启用数据收集功能,数据通常存储在/var/log/sysstat/或/var/log/sa/目录下。若未提前配置 sysstat 服务,sar 无法回溯任何历史数据。
📋 目录
  1. A 命令速用版
  2. B 为什么会这样
  3. C 分步处理
  4. D 怎么验证是否生效
  5. E 常见坑
  6. F 常见问题
  7. G 参考来源
A A

sar 命令通过读取 sysstat 服务采集的二进制日志文件查看历史性能,默认需手动启用数据收集功能,数据通常存储在/var/log/sysstat//var/log/sa/目录下。若未提前配置 sysstat 服务,sar 无法回溯任何历史数据。

先说结论:sar 本身只是报告工具,必须依赖 sysstat 服务后台运行并保存日志才能查看历史数据。

  • 适合:需要回溯过去某天 CPU、内存、磁盘或网络负载的场景
  • 先看:/var/log/sysstat/目录下是否有对应日期的 saXX 文件
  • 建议:先确认 ENABLED="true" 再等待至少一个采集周期

命令速用版

# 查看指定日期的 CPU 使用率(例如 12 号)
sar -u -f /var/log/sysstat/sa12

# 查看指定日期的内存使用情况
sar -r -f /var/log/sysstat/sa12

# 查看指定日期的磁盘 IO 统计
sar -b -f /var/log/sysstat/sa12

# 查看指定日期的网卡流量
sar -n DEV -f /var/log/sysstat/sa12

# 查看指定时间段的数据(例如 9 点到 10 点半)
sar -u -f /var/log/sysstat/sa12 09:00:00 10:30:00

为什么会这样

sar 依赖 sysstat 包中的 sadc 数据采集器和 cron 定时任务,默认安装后往往未开启自动收集,导致日志目录为空。系统通过/etc/cron.d/sysstat每 10 分钟运行一次采集脚本,将原始数据写入二进制文件,sar 命令仅负责读取这些已归档的文件。

分步处理

步骤 1:确认 sysstat 已安装并启用
适用场景:新服务器或从未配置过历史监控的环境。
操作动作:检查配置文件/etc/default/sysstat(Debian/Ubuntu)或/etc/sysconfig/sysstat(RHEL/CentOS),确保ENABLED="true"
验证结果:执行systemctl is-active sysstat显示 active。
风险边界:修改配置后需重启服务或等待下一个 cron 周期生效。

Linux 下如何使用 sar 命令查看历史性能数据?

步骤 2:确认日志文件存在
适用场景:准备读取历史数据前。
操作动作:执行ls -l /var/log/sysstat/ls -l /var/log/sa/
验证结果:看到名为saXX的文件(XX 为日期,如 sa15 表示 15 号)。
风险边界:文件名为两位日期,不足补零,如 5 号为 sa05,不是 sa5。

步骤 3:使用 -f 参数读取数据
适用场景:查看特定日期的性能指标。
操作动作:执行sar -u -f /var/log/sysstat/sa15
验证结果:屏幕输出包含时间戳和%user、%system、%idle 等列。
风险边界:必须使用绝对路径,且文件必须是二进制格式,不能用 cat 直接查看。

Linux 下如何使用 sar 命令查看历史性能数据?

怎么验证是否生效

执行ls -lt /var/log/sysstat/查看最新文件修改时间,确认是否有当天或昨天的saXX文件。若文件存在,运行sar -u -f /var/log/sysstat/saXX能输出具体数据而非报错,即表示采集正常。若提示Cannot open ... No such file or directory,说明 cron 任务未运行或配置未生效。

常见坑

路径错误:部分发行版数据存放在/var/log/sa/而非/var/log/sysstat/,需先用ls确认实际路径。
文件名格式:文件名是sa12而不是sa012sa202412,sysstat 不存储年份和月份信息。
权限不足:非 root 用户可能无法读取/var/log/sysstat/目录,导致输出为空且无报错。
时间对齐:历史数据默认每 10 分钟采集一次,查询时间范围需对齐采集粒度,如09:00:00而非09:03:22

常见问题

为什么 sar -f 报错找不到文件?

大概率是 sysstat 服务未启用或 cron 任务未运行,导致没有生成二进制日志文件。

Linux 下如何使用 sar 命令查看历史性能数据?

CPU 使用率各项加起来为什么不等于 100%?

因为 sar -u 默认显示的是各 CPU 核心的平均值,且%user、%system 等字段是按采样周期内各自占用时间比例计算的,它们可以同时发生。

如何查看特定网卡的历史流量?

使用sar -n DEV -f /var/log/sysstat/saXX,注意历史记录中的接口名可能与当前ip link看到的不一致,需核对采集时刻的设备名。

参考来源

  • Linux sar 命令监控系统历史性能
  • Linux 怎么使用 sar 命令_Linux 如何查看历史性能数据【技巧】
  • Linux 怎么使用 Sar 查看历史网卡流量
  • 【linux】sar 查看历史 io/cpu 负荷
  • Linux 怎么使用 sar 命令查看历史负载记录
  • Linux 如何使用 sar 收集系统性能数据_Linux sar 收集系统性能数据攻略
  • 如何在 Linux 中安装并使用 Sar 工具 Linux 查看历史系统性能的方法
  • Linux sar 命令
  • SAR 命令
  • linux sar 命令详解 (历史资源查看,如内存、CUP 等等) - 邱明成 - 博客园