[转帖]使用ksar解析sar监控日志

使用,ksar,解析,sar,监控,日志 · 浏览次数 : 0

小编点评

**ksar工具简介** ksar是一个用于查看和分析系统性能的工具,它可以将 sar 文件转换为图形,方便于查看内存等数据的变化情况。 **用法** 1. 下载并安装 ksar 工具。 2. 将 sa 文件的路径传递给 ksar 命令。 3. 启动 ksar 工具。 **命令格式** ksar [options] -f **可选参数** * **-f**:指定要读取的文件。默认值为 “/var/log/sa/sa12”。 * **-s**:显示简化的命令行输出。 * **-h**:显示帮助信息。 **示例** ``` ksar -f /tmp/sar/web1_sa -s ``` 这将创建一个简化的图形,显示 web1_sa 文件中的内存占用情况。 **简图语法** ksar 默认使用 markdown 语法,以下是一些基础语法: * `$line`:每行字符串。 * `$1`、`$2`、...:分别表示每行字符串的第 1、2、... 个部分。 * `[条件]`:用于判断字符串是否满足条件。 * `\`:用于转义字符串。 **其他提示** * ksar 可以与其他工具集成,例如 htop 或 glances。 * 可以使用管道将输出转换为图表。

正文

  •  

    http://t.zoukankan.com/mikeguan-p-6371278.html

     

    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

    以下记录操作过程

    1. 下载5.0.6的zip文件
    2. 解压zip文件
    3. 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语法简图

    markdown

  •  

与[转帖]使用ksar解析sar监控日志相似的内容:

[转帖]使用ksar解析sar监控日志

http://t.zoukankan.com/mikeguan-p-6371278.html sar 是属于sysstat包中的一个工具 安装sysstat包后,默认创建一个/etc/cron.d/sysstat文件,其默认内容为: # run system activity accounting

[转帖]Linux查看硬件信息超强命令sar,以及可视化工具ksar

https://juejin.cn/post/6947470401135968286 一、概述 sar(System Activity Reporter,系统活动情况报告)是Linux下系统运行状态统计工具,可从多方面对系统的活动进行报告,包括:文件的读写情况、系统调用的使用情况、磁盘I/O、CPU

[转帖]使用JMX服务监控Java程序性能

https://www.jianshu.com/p/3c3c836c1c20?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation 背景 单机收集服务器需要性能监控和测试。 JMX

[转帖]使用 tc netem 模拟网络异常

https://cizixs.com/2017/10/23/tc-netem-for-terrible-network/ 在某些情况下,我们需要模拟网络很差的状态来测试软件能够正常工作,比如网络延迟、丢包、乱序、重复等。linux 系统强大的流量控制工具 tc 能很轻松地完成,tc 命令行是 ipr

[转帖]使用 sysdig 进行监控和调试 linux 机器

https://cizixs.com/2017/04/27/sysdig-for-linux-system-monitor-and-analysis/ sysdig 简介 sysdig 官网 上对自己的介绍是: Open Source Universal System Visibility With

[转帖]使用MAT命令行工具生成堆dump分析文件

https://www.cnblogs.com/hellxz/p/use_mat_linux_command_line_generate_reports.html 写作目标 Java程序运行过程中,难免会出现 OOM,往往是在 JVM 启动参数中添加出现 OOM 时输出堆 dump(又名:堆转储、堆

[转帖]使用火焰图(FlameGraph)分析程序性能

火焰图概念 火焰图(FlameGraph)是 svg 格式的矢量图,是先通过 perf 等工具分析得到结果,并将该结果生成的具有不同层次且支持互动的图片,看起来就像是火焰,这也是它的名字的由来。表现形式如下所示: 需要注意以下几点: 纵向(Y 轴)高低不平,表示的是函数调用栈的深度。每一层都是一个函

[转帖]使用Prometheus和Grafana监控RabbitMQ集群 (使用RabbitMQ自带插件)

https://www.cnblogs.com/hahaha111122222/p/15683696.html 配置RabbitMQ集群 官方文档:https://www.rabbitmq.com/prometheus.html#quick-start 官方github地址:https://gith

[转帖]使用Flame Graph进行系统性能分析

http://t.zoukankan.com/arnoldlu-p-10148558.html 关键词:Flame Graph、perf、perl。 FlameGraph是由BrendanGregg开发的一款开源可视化性能分析工具,形象的成为火焰图。 从底向上像火苗一样逐渐变小,也反映了相互之间的包

[转帖]使用 nsenter、dig 和 tcpdump 调试 Kubernetes 网络问题

https://zhuanlan.zhihu.com/p/410217354 使用 nsenter、dig 和 tcpdump 调试 Kubernetes 网络问题 作为 Kubernetes 管理员,我经常发现自己需要调试应用程序和系统问题。我遇到的大多数问题都可以通过 Grafana 仪表板和