sar需配合sysstat的sa1/sa2服务才能持久化记录历史数据,启用需设置ENABLED="true"、确认cron任务、指定-f读取saXX文件,并注意采集项配置与7天默认保留限制。

sar 默认不持久化记录历史数据,必须配合 sysstat 的后台收集服务(sa1/sa2)才能实现长期指标存档与趋势分析。
确认 sysstat 已启用自动采集
很多发行版安装 sysstat 后默认禁用数据收集,需手动开启。关键看 /etc/default/sysstat(Debian/Ubuntu)或 /etc/sysconfig/sysstat(RHEL/CentOS)中 ENABLED 是否设为 true:
- 若为
false或注释状态,改为ENABLED="true"并保存 - 检查 cron 任务是否生效:
grep -r "sa1\|sa2" /etc/cron.d/,正常应有类似*/10 * * * * root /usr/lib/sysstat/sa1 1 1的条目 - 首次启用后,等待下一个整点(或手动运行
sudo /usr/lib/sysstat/sa1 1 1)才会生成首个/var/log/sysstat/saXX文件
理解 sar 数据文件命名与时间范围
sar 历史数据按日存储在 /var/log/sysstat/ 下,文件名形如 sa01、sa02,对应每月第几天;当前月的实时汇总则写入 sarXX(如 sar05)。读取时必须指定日期:
- 查 5 月 3 日 CPU 使用率:
sar -f /var/log/sysstat/sa03 -u - 查 5 月 12 日磁盘 I/O(每秒传输量):
sar -f /var/log/sysstat/sa12 -d - 不加
-f默认读取当天的/var/log/sysstat/sa$(date +%d),但该文件只含当日已采集的片段,非完整 24 小时
用 sar 提取多日趋势需拼接 + 时间对齐
sar 本身不支持跨文件聚合,直接循环读多个 saXX 会导致时间戳错乱、无法绘图。实用做法是导出为 CSV 再处理:
- 提取连续 7 天的 5 分钟粒度平均负载:
for d in {01..07}; do sar -f /var/log/sysstat/sa$d -q | awk '/^[0-9]/ {print "'$d'",$1,$2,$3,$4,$5,$6}'; done > load_week.csv - 注意:不同日期的
saXX文件采样间隔可能不同(由sa1参数控制),需统一用sa1 interval count配置,例如*/5 * * * * root /usr/lib/sysstat/sa1 300 1表示每 5 分钟采 1 次 - 导出字段顺序不固定(如
sar -u和sar -r列数不同),做趋势对比前务必先用head -n5看清列含义再切列
常见错误:sar 显示 “Requested activities not available”
这不是权限或路径问题,而是对应指标未被 sa1 收集。每个 sa1 调用只能采集有限几类数据,比如:
-
sa1 1 1只采集基础 CPU、内存、进程数等 - 要获取磁盘详细统计(
sar -d),需额外启用DISK_STATS=true(在/etc/sysconfig/sysstat中)并重启 cron - 网络接口统计(
sar -n DEV)依赖NET_STATS=true,且内核需启用CONFIG_NET - 验证当前收集项:
sudo cat /var/log/sysstat/sa01 | head -n10,看输出里是否包含你想要的字段头
真正麻烦的是 saXX 文件默认只保留 7 天(由 /etc/cron.d/sysstat 中 rm -f /var/log/sysstat/sa$(date -d '7 days ago' +\%d) 控制),长期趋势分析必须提前改配置或定期归档,否则数据静默丢失。











