Linux中sar本身不直接生成全天候性能日报,但通过启用sysstat服务、配置定时采集(默认每10分钟)、配合脚本提取saXX日志并格式化输出CPU/内存/I/O/网络数据,可自动化产出带时间维度的每日汇总报告。

Linux 中的 sar(System Activity Reporter)本身不直接生成“全天候性能日报”,但它能持续采集并保存系统指标,配合定时任务与简单脚本,就能稳定产出带时间维度、覆盖全天的 CPU、内存、I/O、网络等关键指标汇总报告。核心在于:启用 sysstat 的数据收集服务 + 合理配置轮转 + 定时生成可读摘要。
确保 sysstat 已启用并持续采集
sar 依赖 sysstat 包中的 sa1/sa2 后台收集器。多数发行版默认安装但可能未启用:
- 确认已安装:
sudo apt install sysstat(Debian/Ubuntu)或sudo yum install sysstat(RHEL/CentOS) - 启用数据采集:编辑
/etc/default/sysstat(Debian系)或/etc/sysconfig/sysstat(RHEL系),将ENABLED="true" - 确保
sysstat服务正在运行:sudo systemctl enable --now sysstat - 默认每 10 分钟采集一次,数据存于
/var/log/sysstat/saXX(XX 为日期,如 sa08 表示 10 月 8 日)
用 sar 命令提取当日完整数据并格式化输出
每日凌晨或指定时间,运行脚本调用 sar 读取当天原始二进制日志(如 /var/log/sysstat/sa$(date +%d)),并导出为易读文本报告:
- CPU 使用率(每 5 分钟一行,含 %user/%system/%iowait/%idle):
sar -u -f /var/log/sysstat/sa$(date +%d) | grep "^[0-9]" > cpu_daily.txt - 内存使用(KB 单位,含 used/free/buff/cache):
sar -r -f /var/log/sysstat/sa$(date +%d) | grep "^[0-9]" > mem_daily.txt - 磁盘 I/O(每秒读写块数、平均等待):
sar -b -f /var/log/sysstat/sa$(date +%d) | grep "^[0-9]" > io_daily.txt - 网络接口流量(每秒收发字节数):
sar -n DEV -f /var/log/sysstat/sa$(date +%d) | grep "eth0\|enp0s3" > net_daily.txt(替换为你的主网卡名)
生成一份简洁整合的“日报”文本
把各模块结果拼接,并添加标题与统计摘要(例如最大 CPU 负载、内存峰值时刻):
- 用
awk提取关键极值:sar -u -f /var/log/sysstat/sa$(date +%d) | awk '$6 ~ /^[0-9.]+$/ {if($6 max) max=$6} END{print "CPU idle min:" min "%, max:" max "%"}' - 组合成完整日报:
{ echo "== $(date '+%Y-%m-%d') 系统性能日报 =="; echo; echo "--- CPU 摘要 ---"; sar -u -f /var/log/sysstat/sa$(date +%d) | head -12; echo; echo "--- 内存峰值 ---"; sar -r -f /var/log/sysstat/sa$(date +%d) | awk 'NR>2 && $4>max{max=$4; t=$1} END{printf "最高 used: %.0f KB at %s\n", max, t}'; } > daily_report_$(date +%Y%m%d).txt
自动化:每天凌晨自动生成并归档
添加 crontab 条目(如每天 00:15 执行):
15 0 * * * /bin/bash -c 'cd /opt/reports && /path/to/generate_daily_report.sh && gzip -f /opt/reports/daily_report_$(date -d "yesterday" +\%Y\%m\%d).txt'
这样每天都能得到一个带日期命名、压缩归档的文本日报,内容覆盖全天每 10 分钟采样点,无需人工干预。



















