Linux 性能分析工具 sar 历史数据缺失如何配置 sysstat 服务?

文章导读
sar 查不到历史数据通常是因为系统没有开启定时采集任务,最直接的处理是检查 sysstat 服务状态并启用数据收集配置。
📋 目录
  1. 命令速用版
  2. 为什么会这样
  3. 分步处理
  4. 怎么验证是否生效
  5. 配置日志轮转
  6. 常见坑
  7. 参考来源
A A

sar 查不到历史数据通常是因为系统没有开启定时采集任务,最直接的处理是检查 sysstat 服务状态并启用数据收集配置。

先说结论:大多数发行版默认安装了 sysstat 但未启用数据采集,需要手动修改配置并启动定时任务。

  • 适合:需要回溯过去 CPU、内存、IO 等指标的场景
  • 先准备:确认已安装 sysstat 包且有 root 权限
  • 验收:确认/var/log/sysstat 目录下生成 sa 文件且 sar 命令可读取

命令速用版

如果你需要快速开启采集,可以参考以下常用命令,具体路径可能因发行版而异:

# 检查服务状态(Systemd 系统)
systemctl status sysstat-collect.timer

# 启用并启动定时任务
systemctl enable `--now` sysstat-collect.timer

# 查看今日数据
sar -u

为什么会这样

sar 命令本身只是一个读取工具,它不负责产生数据。历史数据是由 sadc(系统活动数据收集器)通过定时任务(cron 或 systemd timer)定期写入/var/log/sysstat 目录的。如果服务未启用或配置文件中关闭了采集开关,sar 自然读不到任何历史记录。

分步处理

1. 确认安装包

首先确保 sysstat 已安装。Debian/Ubuntu 使用 apt,CentOS/RHEL 使用 yum 或 dnf。

Linux 性能分析工具 sar 历史数据缺失如何配置 sysstat 服务?
# Debian/Ubuntu
apt install sysstat

# CentOS/RHEL
yum install sysstat

2. 修改配置文件

不同发行版的配置文件位置不同,需要确保启用开关。建议使用 sed 命令直接修改,避免手动编辑出错。

# Debian/Ubuntu: 编辑/etc/default/sysstat
sed -i 's/ENABLED="false"/ENABLED="true"/g' /etc/default/sysstat

# RHEL/CentOS: 编辑/etc/sysconfig/sysstat
sed -i 's/ENABLED="false"/ENABLED="true"/g' /etc/sysconfig/sysstat

# 验证修改是否生效
grep ENABLED /etc/default/sysstat
# 或
grep ENABLED /etc/sysconfig/sysstat

确保输出显示 ENABLED="true"。如果配置文件不存在,请检查安装包是否完整。

3. 启用定时任务

较新的系统使用 systemd timer,旧系统依赖 cron。

# Systemd 系统
systemctl enable `--now` sysstat-collect.timer
systemctl enable `--now` sysstat-summary.timer

# 或者检查 cron 任务
cat /etc/cron.d/sysstat

4. 检查目录权限

确保/var/log/sysstat 目录存在且可写,通常由安装包自动创建。如果权限不足,sar 命令可能无法读取文件。

ls -ld /var/log/sysstat
chmod 755 /var/log/sysstat

怎么验证是否生效

注意:数据生成需要等待首个采集周期完成,默认间隔通常为 10 分钟。立即执行验证命令可能因文件未生成而报错。

Linux 性能分析工具 sar 历史数据缺失如何配置 sysstat 服务?

建议等待 10 分钟后,检查日志目录是否有新文件生成,并尝试读取。

# 查看目录文件
ls -l /var/log/sysstat/

# 查看定时器下次运行时间
systemctl list-timers | grep sysstat

# 读取当前生成的数据文件(saDD 代表日期)
sar -u -f /var/log/sysstat/sa$(date +%d)

# 查看服务状态
systemctl status sysstat-collect.timer

如果 sar 命令输出了表格数据而非报错,说明配置生效。

配置日志轮转

sysstat 数据文件会随时间积累,建议配置 logrotate 防止占满磁盘。大多数安装包会自动创建轮转配置。

# 检查是否存在轮转配置
ls -l /etc/logrotate.d/sysstat

# 查看配置内容
cat /etc/logrotate.d/sysstat

典型配置会保留最近 7 天的数据,超过期限自动删除。如果磁盘空间紧张,可编辑该文件调整保留天数。

常见坑

  • 时区问题:sa 文件按本地时间命名,跨时区操作可能导致找不到文件
  • 等待时间:配置生效后需等待至少一个采集周期(默认 10 分钟)才有数据
  • 版本差异:部分最小化安装的系统可能没有默认包含 sysstat,需手动安装
  • 权限不足:普通用户无法读取/var/log/sysstat 下的文件,需使用 sudo 或加入 adm 组

参考来源

  • sysstat 官方项目页面:sysstat (https://sysstat.free.fr/)
  • Linux man pages: sar, sadc, sysstat (https://man7.org/linux/man-pages/man1/sar.1.html)