环境:oracle linux  5.8

需求:有台机器总感觉系统资源不稳定,打算长期观察一下系统资源情况。

系统默认是有保存sar日志的,当然前提是你有安装这个工具。

但是系统默认是保存日志7 天(在 oracle linux 6.4版本中默认是28天),这里我们将通过修改日志保存30天这个配置,来了解一下sar这个工具的运行过程。

分析:开始动手前,以为是日志logrotate控制这个时间轮转,还去找了一下logrotate日志轮转的配置文件,结果可想而知,没找到。

要使用sar工具,首先需要安装sysstat工具包。

1、安装sysstat
安装这么简单的事就不讲了

#sar -V 查看一下版本
sysstat version 7.0.2

sar其实是sysstat中的其中一个工具。

Sysstat 是一个软件包,包含监测系统性能及效率的一组工具,这些工具对于我们收集系统性能数据,比如CPU使用率、硬盘和网络吞吐数据,这些数据的收集和分析,有利于我们判断系统是否正常运行,是提高系统运行效率、安全运行服务器的得力助手。


Sysstat 软件包集成如下工具:


Sysstat的功能列表:

◆iostat:统计并报告你的设备的CPU状态和I/O状态数据。
◆mpstat:监控和显示关于CPU的细节信息。
◆pidstat:统计正在运行的进程/任务的CPU、内存等信息。
◆sar:保存和报告不同资源(CPU、内存、输入输出、网络、内核等)的详细信息。
◆sadc:系统活动数据收集器,用于为sar收集后台的数据。
◆sa1:读取和存储sadc的数据文件的二进制数据。
◆sa2:和sar协作,用于总结每日报告。
◆Sadf:以不同的格式(CSV或XML)显示sar生成的数据。
◆Sysstat:解释sysstat的各种作用。
◆nfsiostat-sysstat:统计NFS协议的网络文件系统的 I/O状态数据。
◆cifsiostat:统计CIFS协议的网络文件系统的 I/O状态数据。

安装完,sysstat默认就是随机启动的。
可以通过chkconfig –list|grep sysstat来检查

而且会在日志保存目录/var/log/sa/中产生当天的日志文件:这也说明sysstat运行正常。

cd /var/log/sa/
ls
sa01 sa02 sar01

sa1程序会将每天的数据保存到不同的文件中。
会发现文件都是以sa或sar开头,后跟一个数字。这个数字表示一个月中的第几天,以sa开头的文件是以sadc动态保存着的二进制数据,以sar开头的文件是该日对应的由sa2转储的文本数据。

2、分析sar运行步骤
前面分析sar的轮转并没有在日志轮转那里,但是发现sar日志是每十分钟保存一次数据,这次需要用到cron功能。
进入/etc/cron.d/目录中,果然发现有sysstat的计划文件:

cat /etc/cron.d/sysstat
# run system acvivity accounting tool every 10 minutes
*/10 * * * * root /usr/lib64/sa/sa1 1 1
#generate a daily summary of process accounting at 23:53
53 23 * * * root /usr/lib64/sa/sa2 -A

从这里就能看出很多东西。
动态写入数据,产生日志的工具是sa1,每10分钟运行一次(如果想修改运行频率,就在这里修改)
sa2每晚23:53分运行,英文注释是说每天晚上23:53分会产生一个日志汇总。但后面我们发现它还有清理过期日志的作用。

我们可以分别打开这两个工具看看:

cat /usr/lib64/sa/sa1
#!/bin/sh
# /usr/lib64/sa/sa1.sh
# (C) 1999-2006 Sebastien Godard (sysstat <at> wanadoo.fr)
#
umask 0022
ENDIR=/usr/lib64/sa
cd ${ENDIR}
if [ $# = 0 ]
then
# Note: Stats are written at the end of previous file *and* at the
# beginning of the new one (when there is a file rotation) only if
# outfile has been specified as '-' on the command line...
	exec ${ENDIR}/sadc -F -L 1 1 -
else
	exec ${ENDIR}/sadc -F -L $* -
fi

发现里面程序很简单,就是调用sadc命令进行动态写入。所以真正发挥作用的是sadc工具。

cat / /usr/lib64/sa/sa2
#!/bin/sh
# /usr/lib64/sa/sa2.sh
# (C) 1999-2006 Sebastien Godard (sysstat <at> wanadoo.fr)
#
# Changes:
# - 2004-01-22 Nils Philippsen <nphilipp@redhat.com>
#   make history configurable
#
HISTORY=7
[ -r /etc/sysconfig/sysstat ] && . /etc/sysconfig/sysstat
[ ${HISTORY} -gt 25 ] && HISTORY=25
S_TIME_FORMAT=ISO ; export S_TIME_FORMAT
umask 0022
DATE=`date  +%d`
RPT=/var/log/sa/sar${DATE}
ENDIR=/usr/bin
DFILE=/var/log/sa/sa${DATE}
[ -f "$DFILE" ] || exit 0
cd ${ENDIR}
${ENDIR}/sar $* -f ${DFILE} > ${RPT}
find /var/log/sa \( -name 'sar??' -o -name 'sa??' \) -mtime +"${HISTORY}" -exec rm -f {} \;

我们发现sa2里面的内容正是我们所寻找的。
HISTORY=7 #历史7天,这正是我们所要修改的,但是先别急,再看下面一句
[ -r /etc/sysconfig/sysstat ] && . /etc/sysconfig/sysstat
#判断/etc/sysconfig/sysstat是否存在,如果存在就使里面的环境生效。
我们打开这个文件看看

cat /etc/sysconfig/sysstat
HISTORY=7
这个才真正起作用的。
oracle linux 6.4里,默认是28天,而且如果大于28天,sa2中还会创建文档分开放。稍微比这个版本的sa2复杂一点。

修改HISTORY=7为你想保存日志的天数,推荐保存为30天。


[ ${HISTORY} -gt 25 ] && HISTORY=25
如果保存天数大于25天,还是会强制修改为25天。我们可以注释掉这句。


${ENDIR}/sar $* -f ${DFILE} > ${RPT}
这个就是每天晚上23:53分运行的时候要做的一件事,就是会从二进制日志文件中导出汇总,存到一个文本格式文件中。也就是把/var/log/sa目录中以sa开头的二进制数据转储成以sar开头的文本格式。

find /var/log/sa \( -name 'sar??' -o -name 'sa??' \) -mtime +"${HISTORY}" -exec rm -f {} \;
这句就是每天晚上23:53分根据我们修改的保存天数来清理过期的日志文件。

纵观整个过程,其实最主要的工具就是sadc,其它的都是调用它来实现,或者就是一些脚本写成的工具。

3、查看日志文件
日志文件是二进制的,直接打开没办法看。
为sar命令指定-f以选择要读取的文件。如果想读1日的数据,可以使用命令sar -f /var/log/sa/sa01来读取sa01以查看当天的数据,这里会打开当天全部的数据,基本上没办法看。
我们通常都是想看某一时段的数据,这时就需要添加开始时间和结束时间:
使用-s和-e参数(即开始和结束)来指定具体时间以缩小查询的范围。
请注意,-s并不是包含性的,所以必须从所选择的开始时间中多减去十分钟。

[root@linux sa]# sar -f  sa01 -s 01:00:00 -e 05:00:00 -u
sar -f 日志文件  -s 开始时间  -e 结束时间 平时我们经常用的参数
Usage: sar [ options... ] [ <interval> [ <count> ] ]
Options are:
[ -A ] [ -b ] [ -B ] [ -c ] [ -d ] [ -i <interval> ] [ -p ] [ -q ]
[ -r ] [ -R ] [ -t ] [ -u ] [ -v ] [ -V ] [ -w ] [ -W ] [ -y ]
[ -I { <irq> | SUM | ALL | XALL } ] [ -P { <cpu> | ALL } ]
[ -n { DEV | EDEV | NFS | NFSD | SOCK | ALL } ]
[ -x { <pid> | SELF | ALL } ] [ -X { <pid> | SELF | ALL } ]
[ -o [ <filename> ] | -f [ <filename> ] ]
[ -s [ <hh:mm:ss> ] ] [ -e [ <hh:mm:ss> ] ]

再来总结一下:

sa1 是调用sadc将性能数据收集到二进制日志文件中的一个Shell 脚本,而且在cron中被计划执行,每隔十分钟运行一次;
sa2 是将当日二进制日志文件中所有的数据转储到文本文件,并根据保存天数清除过期日志文件的一个shell脚本,在cron中每晚23:53分定期执行;
sadc 是系统动态数据收集工具,收集的数据被写一个二进制的文件中,也是其中最重要的工具,其它工具基本上都是调用它来实现功能;
sadf 显示被sar通过多种格式收集的数据;

参考:
http://www.ibm.com/developerworks/cn/aix/library/es-unix-perfmonsar.html#main
http://www.eygle.com/digest/2007/07/linux_sysstat.html



发表评论