使用ksar解析sar监控日志
sar 是属于sysstat包中的一个工具
安装sysstat包后,默认创建一个/etc/cron.d/sysstat文件,其默认内容为:
# run system activity accounting tool every 10 minutes
*/10 * * * * root /usr/lib/sa/sa1 1 1
# generate a daily summary of process accounting at 23:53
53 23 * * * root /usr/lib/sa/sa2 -A
这里用到了两个命令/usr/lib/sa/sa1 /usr/lib/sa/sa2
sa1:是调用sadc(二进制文件),将数据收集到二进制日志文件的一个Shell脚本。sa1命令还确保每天使用不同的文件。每隔十分钟运行一次该命令,最好不要改这个值,这是对一般系统折中的值。二进制日志文件存放在/var/log/sa/目录下,命名为sa${DATE}。
sa2:是将当日二进制日志文件中所有的数据转储到文本文件(sar)的另一个Shell脚本,然后它将清除七天之前的所有日志文件。参数-A指定了从二进制文件中提取哪些数据转储到文本文件中。转储的文件存放在/var/log/sa/目录下,命名为sar${DATE}。
这两个命令要配合着使用。
查看一下/usr/lib/sa/sa1脚本,里面执行这样一句命令:
/usr/lib/sa/sadc -F -L 1 1 -
-F:强制指定一个储存文件,如果文件已存在,就将其转换成sa的二进制文件形式。
-L:给sa文件加互斥锁,不能让两个sadc进程同时写一个sa文件。
跟据sa1脚本中的命令,我们也可以手动的创建sa二进制文件,使用/usr/lib/sa/sadc命令,
# /usr/lib/sa/sadc 1 10 /tmp/jaylin_sa
上述命令的作用是:每隔1s写一条记录,写10条,存放到二进制文件/tmp/jaylin_sa中。
查看一下/usr/lib/sa/sa2脚本,里面执行这样一句命令:
/usr/bin/sar -A -f /var/log/sa/sa${DATE} > /var/log/sa/sar${DATE}
-A:列出所有存储在/var/log/sa/sa${DATE}里的统计信息。
-f:指定将要转储的sa文件,默认的参数值为/var/log/sa/sa${DATE}。
根据sa2脚本中的命令,我们也可以手动将sa文件(二进制)转储到sar文件(ASCII文本)中,使用/usr/bin/sar命令,
# /usr/bin/sar -A -f /tmp/jaylin_sa> /tmp/jaylin_sar
我们可以通过cat等命令查看sar文件的内容。但是我们也可以通过sar命令读取sa的二进制文件。
# sar
03:00:01 PM CPU %user %nice %system %iowait %steal %idle
03:10:01 PM all 1.02 0.00 2.33 0.39 0.00 96.25
03:20:01 PM all 1.85 0.00 3.29 0.32 0.00 94.54
03:30:02 PM all 1.63 0.06 3.81 2.05 0.00 92.45
03:40:02 PM all 9.31 0.00 8.10 3.39 0.00 79.20
03:50:01 PM all 8.64 0.00 7.73 2.27 0.00 81.36
04:00:01 PM all 0.84 0.00 2.12 1.81 0.00 95.23
Average: all 3.88 0.01 4.56 1.71 0.00 89.84
其中:
%user:CPU花费在用户进程(如应用程序、Shell脚本或该用户进行的交互)上的时间的百分比。
%nice:CPU用来执行有用户级别优先级别的任务的时间的百分比。
%system:CPU用来执行核心任务的时间的百分比。
%iowait:CPU等待块设备输入或输出的时间的百分比。
%steal:CPU等待管理程序(hypervisor)处理其他任务的时间的百分比。
%idle:CPU未进行任何有用操作的时间的百分比。
最后一行是所有数据的平均值。然而,因为大多数系统都会在忙时间段后经历空闲时间段,所以平均值并不能反映完整的情况。
其他度量参数:
-b:显示了缓冲区信息和使用缓冲区与必须写磁盘的比率。
-c:显示了系统调用分解为一些常用的调用,如fork()、exec()、read()和write()。高进程 创建会导致较差的性能,并且这是可能需要将一些应用程序转移到其他计算机的信号。
-p 和 -w:显示了分页(交换)活动。高分页操作是内存缺乏的信号。特别地,-w 选项 显示了进程切换的次数:高的数值表示计算机上运行的内容过多,该计算机在切换任务 上花费了比实际工作更多的时间。
-q:显示了运行队列的大小,它与当时的平均负载相同。
-r:显示了一段时间的可用内存和交换空间。
它们显示每一列的含义请查看sar的man page。
我们也可以查看指定的某一时间段内的记录
-f:指定要读取的sa文件。
-s:开始的时间。注意,-s不是包含性的,所以必须从所选择的开始时间减去十分钟。
-e:结束的时间。
例如:
# # sar -f /var/log/sa/sa12 -s 14:50:00 -e 15:30:00
03:00:01 PM CPU %user %nice %system %iowait %steal %idle
03:10:01 PM all 1.02 0.00 2.33 0.39 0.00 96.25
03:20:01 PM all 1.85 0.00 3.29 0.32 0.00 94.54
Average: all 1.44 0.00 2.81 0.36 0.00 95.40
上述命令查看本月12日,15:00—15:30之间的记录。
下面介绍一个第三方工具Ksar
ksar这个工具可以将sar文件装换成图形,便于查看内存等数据的变化情况。
ksar这款软件在2009年以后已经不在更新, 由于需要解析阿里云产生的监控数据,以便更好的展示, 我下载安装ksar
以下记录操作过程
- 下载5.0.6的zip文件
- 解压zip文件
java -jar kSar.jar运行这个程序
注意,如果是手动将sa文件转储到sar文件中,执行sar命令时要加LANG=C,即:
# LANG=C /usr/bin/sar -A -f /tmp/jaylin_sa> /tmp/jaylin_sar
不加LANG=C,sar文件显示的时间为12小时制;加LANG=C之后,sar文件显示的时间为24小时制。Ksar工具只能识别24小时制的sar文件,所以切记执行转储时要加此环境变量。
这里遇到的问题
阿里云上的监控数据是使用sar获取的 以纯文本的形式记录, 但是阿里云的日志上时间是以12小时制的
12:00:01 AM CPU %usr %nice %sys %iowait %steal %irq %soft %guest %idle
12:10:01 AM all 28.75 0.00 0.25 0.02 0.00 0.00 0.05 0.00 70.93
12:10:01 AM 0 42.95 0.00 0.51 0.04 0.00 0.00 0.39 0.00 56.12
12:10:01 AM 1 35.92 0.00 0.35 0.01 0.00 0.00 0.00 0.00 63.72
12:10:01 AM 2 32.93 0.00 0.30 0.02 0.00 0.00 0.00 0.00 66.75
12:10:01 AM 3 30.23 0.00 0.23 0.03 0.00 0.00 0.00 0.00 69.51
12:10:01 AM 4 21.33 0.00 0.19 0.02 0.00 0.00 0.00 0.00 78.47
12:10:01 AM 5 20.28 0.00 0.15 0.01 0.00 0.00 0.00 0.00 79.57
12:10:01 AM 6 20.30 0.00 0.15 0.01 0.00 0.00 0.00 0.00 79.54
12:10:01 AM 7 26.14 0.00 0.11 0.01 0.00 0.00 0.00 0.00 73.74
而ksar无法识别这一格式, 会报这个错误
java.lang.NumberFormatException: For input string: "all"
at sun.misc.FloatingDecimal.readJavaFormatString(Unknown Source)
at java.lang.Float.valueOf(Unknown Source)
at java.lang.Float.<init>(Unknown Source)
at net.atomique.ksar.Linux.Parser.parse(Parser.java:624)
at net.atomique.ksar.kSar.parse(kSar.java:750)
at net.atomique.ksar.FileRead.run(FileRead.java:62)
那就转换成24小时制的吧, 第一反应是vim
本来简单的以为这个修改在vim里面应该很容易完成, 不想vim太高冷, 还是驾驭不住. 用vim试了一个多小时无果
只能用shell来处理了
#!/bin/bash
#
output="web1"
inpath="/tmp/sar/web1_sa"
change() {
while read line; do
temp1=`echo "$line" |awk '{print $1}'`
temp2=`echo "$line" |awk '{print $2}'`
if [ "$temp2" == "AM" ]; then
newtime=`date -d "$temp1 AM" +%T`
echo "`echo "$line" |sed "s/[0-9][0-9]:[0-9][0-9]:[0-9][0-9] AM/$(echo $newtime)/"`" >> $1_$output
elif [ "$temp2" == "PM" ]; then
newtime=`date -d "$temp1 PM" +%T`
echo "`echo "$line" |sed "s/[0-9][0-9]:[0-9][0-9]:[0-9][0-9] PM/$(echo $newtime)/"`" >> $1_$output
else
echo "$line" >> $1_$output
fi
done < $1
echo >> $1_$output
}
for i in `ls $inpath/sar*`
do
change $i &
done
如果各位有好的vim解决方案, 还请不吝赐教
由于这里采用markdown的编辑器, 而markdown语法还未到信手拈来的地步
最后, 附上markdown语法简图

使用ksar解析sar监控日志的更多相关文章
- ksar、sar及相关内核知识点解析
关键词:sar.sadc.ksar./proc/stat./proc/cpuinfo./proc/meminfo./proc/diskstats. 在之前有简单介绍过sar/ksar,最近在使用中感觉 ...
- 学习总结 之 WebApi服务监控 log4net记录监控日志
在请求WebApi 的时候,我们更想知道在请求数据的时候,调用了哪个接口传了什么参数过来,调用这个Action花了多少时间,有没有人恶意请求.我们可以通过记录日志,对Action进行优化,可以通过日志 ...
- log4net 记录MVC监控日志
由于MVC自身的特点,可以让我们记录每一个Controller下Action的执行时间以及View视图渲染完成的时间,本文采用log4net记录MVC每个Action的执行时间和View视图渲染完成时 ...
- 以芯片直读方式得到的全盘镜像解析及ext4日志区域解析
之前在centos中分析了/dev/sda1下的结构,但当对象是一块以芯片直读方式作出来的全盘镜像呢? 这次以安卓手机的全盘镜像为对象,尝试按照ext4文件系统结构手动解析,加强对ext4文件系统.E ...
- 基于innodb_print_all_deadlocks从errorlog中解析MySQL死锁日志
本文是说明如何获取死锁日志记录的,不是说明如何解决死锁问题的. MySQL的死锁可以通过show engine innodb status;来查看,但是show engine innodb statu ...
- zabbix监控日志文件
环境: 操作系统:centos 6.8 ,zabbix软件版本:zabbix 3.0.1 前提条件:zabbix客户端已经配置了主动模式,如何配置主动模式,请参考此文 监控日志keys 首先要了解k ...
- linux 判断文件最后更新时间 实现监控日志是否有输出功能
linux 判断文件最后更新时间 实现监控日志是否有输出功能. 需求:监控log.txt日志文件,超过一分钟没输出内容就认为是停了,则自动启动程序. 用stat 可以看文件的更新时间stat -c % ...
- zabbix 3.x 监控日志文件
1.启用zabbix主动模式 在zabbix agent端,修改/etc/zabbix/zabbix_agentd.conf ServerActive=服务端IP Hostname=tspnginx0 ...
- C# 面向切面编程--监控日志记录方案
背景:现在公司整体在做监控平台,要求把各个部分的细节都记录下来,在前台页面上有所显示,所以现在需要做的就是一个监控日志的记录工作,今天讲的就是渲染监控日志的例子. 现状:当前的渲染程序没有为监控日志记 ...
随机推荐
- Unity3d 实现鼠标左键点击地形使角色移动到指定地点[脚本]
Unity3d 实现鼠标左键点击地形使角色移动到指定地点[脚本] 2013-02-19 15:29:33 我来说两句 作者:nnsword 收藏 我要投稿 其中涉及,移动速度, ...
- Hadoop相关资料
http://blog.csdn.net/skywalker_only/article/details/40650427
- 开发app应用的开源项目推荐
app检测内存泄漏 请看这里:LeakCanary Android 和 Java 内存泄露检测 app应用想要控制状态栏 StatusBarUtil :https://github.com/laobi ...
- yum lock 解决方法
方法一: # ps aux | grep yum # kill -9 pid 方法二:可以通过执行rm -rf /var/run/yum.pid 来强行解除锁定,然后你的yum就可以运行了 解释: [ ...
- LINQ TO SQL:操作有层次关系的对象
对于关系型数据与对象数据之间最大的隔阂就是由标识列连接起来的行(关系型数据)与由集合保存的对象(对象数据)之间的冲突. 例如某个Subject对象(也就是数据库中的Subject表),从Subject ...
- Java程序发送邮件
之前上网有看到过别人总结的使用java程序发送邮件,于是自己下来练习,把自己学习的一些心得总结出来. 首先我们这里需要采用两个jar包: 需要的朋友可以自行上网去CSDN类似的网站上面找 顺便把自己测 ...
- nginx学习之详细安装篇(二)
1. 选择稳定版还是主线版 主线版:包含最新的功能和bug修复,但该版本可能会含有一些属于实验性的模块,同时可能会有新的bug,所以如果只是做测试使用,可以使用主线版. 稳定版:不包含最新的功能,但修 ...
- phpstorm+xdebug, 实现断点调试: xdebug如何配置
[XDebug] xdebug.profiler_output_dir="D:\phpStudy\tmp\xdebug" xdebug.trace_output_dir=" ...
- 【python】-- 继承式多线程、守护线程
继承式多线程 1.定义 继承式多线程是自己自定义类,去继承theading.Tread这个类,通过类实例.start()启动,去执行run方法中的代码. import threading import ...
- 我的Android进阶之旅------> Android应用升级构想和要点总结
广大博友,看过后帮忙顶顶,谢谢大家!!! 转载请注明: http://blog.csdn.net/richway2010/article/details/6408258 [博主:各位博友,网友们,大家 ...