2013-10-24 shell脚本实践

回复 收藏

我有一个日志(php的slow_log) 几乎每分钟都有输出信息。需要我们来写个脚本分析一下它,目的就是为了归类汇总,按照它们出现的频次做个排序,假如日志是每天0点5分清空,那么按照每小时一次汇总分析该日志,最后在第二天0点0分时,再汇总一下整天的日志,怎么写呢? 下面我给出一个日志样例和我写的分析汇总脚本供参考。日志样例:

  1. [24-Oct-2013 00:05:39]  [pool www.lishiming.net] pid 19101

  2. script_filename = /data/release/www.lishiming.net/forum.php

  3. [0x00007f9279237e98] mysql_unbuffered_query() /data/release/www.lishiming.net/source/class/db/db_driver_mysql.php:147

  4. [0x00007f92792377a8] query() /data/release/www.lishiming.net/source/class/discuz/discuz_database.php:136

  5. [0x00007f9279236f40] query() /data/release/www.lishiming.net/source/class/table/table_forum_thread.php:932

  6. [0x00007f92792365e8] increase() /data/release/www.lishiming.net/source/module/forum/forum_viewthread.php:1034

  7. [0x00007f9279218f48] viewthread_updateviews() /data/release/www.lishiming.net/source/module/forum/forum_viewthread.php:353

  8. [0x00007f9279218050] +++ dump failed

  9. [24-Oct-2013 00:05:39]  [pool www.lishiming.net] pid 19754

  10. script_filename = /data/release/www.lishiming.net/forum.php

  11. [0x00007f9279237938] mysql_query() /data/release/www.lishiming.net/source/class/db/db_driver_mysql.php:147

  12. [0x00007f9279237248] query() /data/release/www.lishiming.net/source/class/discuz/discuz_database.php:136

  13. [0x00007f9279236dc0] query() /data/release/www.lishiming.net/source/class/discuz/discuz_database.php:100

  14. [0x00007f9279235d48] fetch_all() /data/release/www.lishiming.net/source/class/table/table_forum_thread.php:523

  15. [0x00007f9279218f48] fetch_all_search() /data/release/www.lishiming.net/source/module/forum/forum_forumdisplay.php:637

  16. [0x00007f9279218050] +++ dump failed

  17. [24-Oct-2013 00:06:07]  [pool www.lishiming.net] pid 22624

  18. script_filename = /data/release/www.lishiming.net/forum.php

  19. [0x00007f9279237938] mysql_query() /data/release/www.lishiming.net/source/class/db/db_driver_mysql.php:147

  20. [0x00007f9279237248] query() /data/release/www.lishiming.net/source/class/discuz/discuz_database.php:136

  21. [0x00007f9279236dc0] query() /data/release/www.lishiming.net/source/class/discuz/discuz_database.php:100

  22. [0x00007f9279235d48] fetch_all() /data/release/www.lishiming.net/source/class/table/table_forum_thread.php:523

  23. [0x00007f9279218f48] fetch_all_search() /data/release/www.lishiming.net/source/module/forum/forum_forumdisplay.php:637

  24. [0x00007f9279218050] +++ dump failed

  25. [24-Oct-2013 00:06:18]  [pool www.lishiming.net] pid 22624

  26. script_filename = /data/release/www.lishiming.net/forum.php

  27. [0x00007f9279237938] mysql_query() /data/release/www.lishiming.net/source/class/db/db_driver_mysql.php:147

  28. [0x00007f9279237248] query() /data/release/www.lishiming.net/source/class/discuz/discuz_database.php:136

  29. [0x00007f9279236dc0] query() /data/release/www.lishiming.net/source/class/discuz/discuz_database.php:100

  30. [0x00007f9279235d48] fetch_all() /data/release/www.lishiming.net/source/class/table/table_forum_thread.php:523

  31. [0x00007f9279218f48] fetch_all_search() /data/release/www.lishiming.net/source/module/forum/forum_forumdisplay.php:637

  32. [0x00007f9279218050] +++ dump failed

参考脚本

#! /bin/bash 

slow_log=/usr/local/php/log/php.slow

d=`date -d "-1 minute" +%H:%M`

d_h=`date +%H`

d_m=`date +%M`

d_d=`date +%Y%d`

d_d2=`date -d "-1 day" +%Y%d`

logdir="/log/php_slow/$d_d"

logdir2="/log/php_slow/$d_d2"

[ -d $logdir ] || mkdir -p $logdir

[ -d $logdir2 ] || mkdir -p $logdir2

if [ $d_m -eq "00" ]; then 

    d1=`date -d "-1 hour" +%H`

    n1=`grep -n " $d1:[0-9][0-9]:" $slow_log|head -n1 |awk -F':' '{print $1}'`

    n2=`wc -l $slow_log |awk '{print $1}'`

    n3=$[$n2-$n1]

    tail -n $n3 $slow_log>/tmp/1.txt

    sed 's/\[0x.*\]//g' /tmp/1.txt |xargs > /tmp/2.txt

    n=`grep '\[pool' /tmp/1.txt|wc -l`

    for i in `seq 1 $n`; do awk -F '+++ dump failed' '{print $'"$i"'}' /tmp/2.txt; done > /tmp/3.txt

    if [ $d_h -ne "00" ]; then

        sed 's/^.*script_filename = //' /tmp/3.txt |grep -v '^$'|sort |uniq -c |sort -rn > $logdir/$d1\_slow_log

    else

        sed 's/^.*script_filename = //' /tmp/3.txt |grep -v '^$'|sort |uniq -c |sort -rn > $logdir2/$d1\_slow_log

        sed 's/^.*[0-9] \//\//' $logdir2/*_log |sort |uniq -c |sort -rn > $logdir2/$d_d2\_slow_log

    fi

fi   

2013-10-24 15:37 举报
已邀请:
0

monga

赞同来自:

学习
0

elvis

赞同来自:

ddd
0

大仔黑黑

赞同来自:

看看
0

xiaoweili

赞同来自:

学习了
0

luckytodd

赞同来自:

没看懂意思
0

jxcia2018

赞同来自:

{:4_91:}
0

guo

赞同来自:

look
0

jxcia2018

赞同来自:

根本没法看懂 看懂的人说一下意思{:4_97:}
0

jonnylin

赞同来自:

学习
0

小毅

赞同来自:

我开始学习脚本了
0

hsm

赞同来自:

学习
0

df1360

赞同来自:

1
0

wzwyql

赞同来自:

1
0

kevinjin

赞同来自:

关键在于如何分类汇总
0

善思致用

赞同来自:

没思路啊
0

粗粮面包

赞同来自:

看下答案
0

Nyemu

赞同来自:

看一下。
0

wangzai

赞同来自:

学习
0

13805775620

赞同来自:

学习
0

上海-KL

赞同来自:

看看
0

s269143569

赞同来自:

学习一下
0

张磊磊

赞同来自:

看看
0

linuxcp

赞同来自:

xuexi
0

幻夜猫儿

赞同来自:

学习
0

13600827194

赞同来自:

学习

0

凌乱

赞同来自:

没能理解意思

0

。。。

赞同来自:

学习

0

有人喜欢蓝

赞同来自:

统计什么信息呢,需求没看明白

0

kw是id

赞同来自:

学习

0

ichbinww

赞同来自:

看看

0

qwlp19910807

赞同来自:

有点思路

0

重庆-刘鹏

赞同来自:

看看

0

西瓜糖

赞同来自:

要求不太明确,这里说分类统计,那到底分几类呢?有模版不?

0

大雁

赞同来自:

对新手有点难理解

回复帖子,请先登录注册

退出全屏模式 全屏模式 回复
评分
可选评分理由: