牛X的正则表达式——从nagios中提取数据的过程
最近应移动要求要提取每天的系统负载情况。其> 包括每天的CPU、内存的最高使用情况和平 均使用情况,load average平均1、5、15分钟> 的负载!刚好公司的nagios的监控日志能提到数据。不过nagios日志里都是像下图中的数 据。
显然无法直接汇制成表格按月提取 ,因为里面数据量挺大。有全国几十个区域的数据。所以 就先用一个脚本把需要的数据过滤出来,放到一个.txt文件里。脚本如下:
1#!/bin/bash
2for (( i=0; i $date1-2011-00.tmp
3 grep $1 $date1-2011-00.tmp|grep Check_Memory|grep COMMAND|awk -F OK: '{print $2}'|awk -F Used '{print $1}'> $date1.mem
4 cat $date1.mem|awk '{sum+=$1} END {print "Memory-Average : ", sum/NR}' >$date1.txt
5 echo "max memory-used:">>$date1.txt
6 sort -unr $date1.mem |head -1 >>$date1.txt
7 grep $1 $date1-2011-00.tmp|grep "idle"|grep "SERVICE CHECK"|awk -F idle: '{ print $2 }' >$date1.cpu
8 cat $date1.cpu|awk '{sum+=$1} END {print "idle-Average : ", sum/NR}' >>$date1.txt
9 echo "min idle-used:">>$date1.txt
10 sort -un $date1.cpu |head -1 >>$date1.txt
11 rm -rf $date1-2011-00.tmp $date1.mem $date1.cpu
12 mv /usr/local/nagios/var/archives/*.txt /home/nagios/test
13done
因为后来load average的内容不需要了,所认把load average提取的代码给删了,需要的话可以根据上面的内容加。文件保存为shell.sh吧!使用方法为./shell.sh 主机名。我这里是./shell ZJ-db1 。这样shell就完成了最近30天数据的提取,统一保存为每天的日期.txt。如10-31.txt。 而取得的内容为:
1Memory-Average : 18.9783
2max memory-used:
3 20%
4idle-Average : 95.1858
5min idle-used:
6 92.32
显然这样导到excel里很麻烦。我们可以再进行下转换。可以先将所有的数据进行下方便excel导的格式: 首先修改为以下格式,这里就要用到牛X的正则表达式了。
1Memory-Average:18.9301
2max memory-used:19%
3idle-Average:95.3885
4min idle-used:92.77
要转换为上面的格式,可以利用下面两个语句中的任 一个实现。另外可以再加上for循环转换所有文件为上面的格式。
1cat 10-31.txt | sed '/max/{N;s/n//}'
2cat 10-31.txt|awk '{if(/min/){printf $0" ";next} else{print}}'
注:当然也可以两行同时匹配代码为cat 10-31.txt | sed ‘/max|min/{N;s/n//}’和 cat 10-31.txt|awk ‘{if(/min|/){printf $0″ “;next} else{print}}’
进行处理,有多个匹配内容时,可以用|,不过前面最好加转义。
该名我使用的代码为
1for i in `ls *.txt`;do sed -i '/max|min/{N;s/n//}' $i;done
转换完成后,一个一个导还是不方便,要导入30多次 ,这时可以利用下awk ‘{ print $0 ,FILENAME}’该语名将所有的文件本日期加在最后,开成 的格式就会如下面的样式。
1Memory-Average:18.9301 10-13.txt
2max memory-used:19% 10-13.txt
3idle-Average:95.3885 10-13.txt
4min idle-used:92.77 10-13.txt
如果感觉看起来不美观的话,还可以使用column和sed命令进行处理将.txt去掉,将三个列之 间以:分开,并且按列对齐排列。这里就不详细介绍了。完了一个,形成的这一个文档就可以很方便的导入excel,再利excel的强大公式功能。进行增长率之类的计算了。我的最后的处理脚本是:
1for i in `ls *.txt`;do sed -i '/max|min/{N;s/n//}' $i;awk '{ print $0 ,":",FILENAME}' $i>>test.test;done
当然,也可以可前面第一个取数据的脚本合并,这样一个脚本取出所有数据后,再通过excel 公式处理。
捐赠本站(Donate)
如您感觉文章有用,可扫码捐赠本站!(If the article useful, you can scan the QR code to donate))
- Author: shisekong
- Link: https://blog.361way.com/regular-nagios/346.html
- License: This work is under a 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议. Kindly fulfill the requirements of the aforementioned License when adapting or creating a derivative of this work.