插件窝 干货文章 使用sysstat graph来分析sar获取的性能数据

使用sysstat graph来分析sar获取的性能数据

数据 sar CPU 使用 613    来源:    2025-05-19

使用sysstat和graph分析sar性能数据

概述

sysstat是一套强大的系统性能监控工具集,其中sar命令可以收集和报告系统活动信息。结合图形化工具,可以更直观地分析系统性能数据。

安装sysstat

在大多数Linux发行版上安装sysstat:

# Debian/Ubuntu
sudo apt-get install sysstat

# RHEL/CentOS
sudo yum install sysstat

# 启用数据收集
sudo systemctl enable sysstat
sudo systemctl start sysstat

收集性能数据

实时监控

# CPU使用率
sar -u 1 5  # 每1秒采样一次,共5次

# 内存使用情况
sar -r 1 5

# I/O统计
sar -b 1 5

# 网络统计
sar -n DEV 1 5

历史数据

sysstat默认每10分钟收集一次数据并存储在/var/log/sa//var/log/sysstat/目录下。

查看特定日期的数据:

sar -u -f /var/log/sa/sa15  # 查看15号的数据

图形化分析工具

1. 使用ksar

ksar是一个Java-based的sar数据可视化工具。

安装:

# Debian/Ubuntu
sudo apt-get install ksar

# 或从官网下载
wget https://github.com/vlsi/ksar/releases/download/v5.2.4/ksar-5.2.4.zip
unzip ksar-5.2.4.zip

使用:

# 导出sar数据为文本格式
sar -A -f /var/log/sa/sa15 > sar_data.txt

# 使用ksar打开
java -jar kSar.jar -input sar_data.txt

2. 使用sadf和gnuplot

# 将sar数据转换为CSV格式
sadf -d /var/log/sa/sa15 -- -u > cpu_data.csv

# 使用gnuplot绘图
gnuplot -p -e "plot 'cpu_data.csv' using 4:5 with lines title 'CPU Usage'"

3. 使用Python + Matplotlib

import pandas as pd
import matplotlib.pyplot as plt

# 读取sar数据
df = pd.read_csv('cpu_data.csv', sep=';')

# 转换时间格式
df['timestamp'] = pd.to_datetime(df['# timestamp'])

# 绘制CPU使用率
plt.figure(figsize=(12,6))
plt.plot(df['timestamp'], df['%user'], label='User CPU')
plt.plot(df['timestamp'], df['%system'], label='System CPU')
plt.plot(df['timestamp'], df['%iowait'], label='I/O Wait')
plt.legend()
plt.title('CPU Usage Analysis')
plt.xlabel('Time')
plt.ylabel('Percentage')
plt.grid()
plt.show()

常用分析场景

CPU分析

# 查看CPU使用率历史
sar -u -f /var/log/sa/sa15

# 查看单个CPU核心使用情况
sar -P ALL 1 5

图形化关注点: - 用户态(%user)和内核态(%system)CPU使用比例 - I/O等待(%iowait)是否过高 - 空闲时间(%idle)是否充足

内存分析

# 查看内存使用历史
sar -r -f /var/log/sa/sa15

# 查看页面交换情况
sar -W 1 5

图形化关注点: - 内存使用趋势 - 交换分区使用情况 - 页面交换频率

磁盘I/O分析

# 查看磁盘I/O统计
sar -b -d -p 1 5

图形化关注点: - 读写吞吐量 - I/O等待时间 - 设备利用率

网络分析

# 查看网络接口统计
sar -n DEV 1 5

图形化关注点: - 网络吞吐量(rxKB/s, txKB/s) - 错误包和丢包数量 - 接口利用率

自动化报告

可以编写脚本定期生成性能报告:

#!/bin/bash

DATE=$(date +%d)
REPORT_DIR="/var/log/sa/reports"
mkdir -p $REPORT_DIR

# CPU报告
sar -u -f /var/log/sa/sa$DATE > $REPORT_DIR/cpu_$DATE.txt
sadf -d /var/log/sa/sa$DATE -- -u > $REPORT_DIR/cpu_$DATE.csv

# 内存报告
sar -r -f /var/log/sa/sa$DATE > $REPORT_DIR/mem_$DATE.txt

# 生成简单图表
gnuplot << EOF
set terminal png
set output "$REPORT_DIR/cpu_usage_$DATE.png"
set title "CPU Usage - $(date +%Y-%m-%d)"
set xdata time
set timefmt "%Y-%m-%d %H:%M:%S"
set format x "%H:%M"
set xlabel "Time"
set ylabel "Percentage"
plot "$REPORT_DIR/cpu_$DATE.csv" using 3:5 title "User" with lines, \
     "$REPORT_DIR/cpu_$DATE.csv" using 3:6 title "System" with lines, \
     "$REPORT_DIR/cpu_$DATE.csv" using 3:7 title "I/O Wait" with lines
EOF

高级技巧

  1. 长期趋势分析:合并多天的数据进行分析
  2. 异常检测:设置阈值自动标记异常点
  3. 关联分析:将CPU、内存、磁盘I/O数据关联分析
  4. 基线比较:将当前数据与历史基线比较

通过图形化分析sar数据,可以更直观地发现系统性能瓶颈和异常情况,帮助进行容量规划和性能优化。