设为首页收藏本站

LinuxTone | 运维专家网论坛 - 最棒的Linux运维与开源架构技术交流社区!

 找回密码
 注册

QQ登录

只需一步,快速开始

#公告#抱歉,网站将关闭,不再开放。由于PC时代已远逝 。在这个后移动互联网时代,我们继续携手前行,保持对技术的热情。共同构建linuxtone知识星球欢迎加入,一起讨论技术、招聘人才、分享资源。请新老linuxtone人 扫码移步到 知识星球:linuxtone

学习是一种信仰!分享是一种快乐!能力= 心态 * 沟通 * 知识 (你的每一天需要正能量!)

 网站的发展需要你贡献一份力量!希望你能每天坚持看贴1小时,并回答网友的问题!祝你在浏览论坛的过程中取得进步!谢谢!linuxtone加油!大家加油! 友情提示: 你今天学习了吗?你今天进步了吗?少一点抱怨!多一点进步!Life is short ! Why not linuxtone ?  

网站的发展、感谢每位坛友的努力!

查看: 3482|回复: 8

[shell] shell 脚本求拍砖 [复制链接]

Rank: 8Rank: 8

签到
143
注册时间
2011-7-8
最后登录
2014-10-11
在线时间
75 小时
阅读权限
90
积分
11652
帖子
107
主题
9
精华
0
UID
14891
发表于 2011-10-17 17:15:00 |显示全部楼层
本帖最后由 oneliting 于 2011-10-17 19:22 编辑

上周写的一个shell 脚本,用来分析apache access_log的,实现以下功能:

a、访问次数最大的前20个IP地址,访问次数

b、平均RT和最大的20个Rt和最小的20个RT

c、统计请求的方式的次数

d、除HTTP头以外传送的字节总数

e、状态码的类型和对应的次数

f、top 20 QPS,并打印出相对于的URL

g、对QPH(query per hour)每小时的access 数量进行排序,得出一天中哪个时间段访问人数最多

h.帮助信息

i、计算出每天的PV

j、计算出每天的UV

k、计算相同的Useragent数量并排序

l、计算top 20 URL


注:附件里有定义color的文件。想用什么颜色可以直接调用。由于是第一次比较正式写脚本,有很多地方做得不够好,帖出来让大伙看看,求拍砖,共同进步
  1. #!/bin/bash
  2. #***************************************************************
  3. #Function:      query informations from apache access log
  4. #Version:       1.1
  5. #Create Date:   2011.10.10
  6. #File name:     main.sh
  7. #author:        litingwen
  8. #***************************************************************
  9. if [ -z `echo $1` ];then
  10.   echo "pleas input file name" && exit
  11. fi

  12. logfile=$1
  13. date=`echo ${logfile:0:10}`
  14. lines=`wc -l $logfile |cut -d " " -f1`
  15. size=` ls -lh $logfile  |cut -d " " -f5`
  16. . defcolor.sh

  17. # describe funtions of this scritp
  18. Des(){
  19. clear
  20. echo
  21. color red
  22. echo "this file count to $size and $lines lines"
  23. echo
  24. color grn
  25. cat <<EOF
  26. ##################################################################
  27. #                   Welcome !!     #
  28. #          -----------------------------------                    #
  29. # This script will help you to query informations from access log #
  30. #                                                                 #
  31. # U can choose what to query:                                     #
  32. # a.The top 20 Remote hosts' IP and access times                  #
  33. # b.Average RT and top 20 RT                                      #
  34. # c.The request methods and times                                 #
  35. # d.Total size of response in bytes, excluding HTTP headers       #
  36. # e.about Status                                                  #
  37. # f.about QPS                                                     #
  38. # g.about QPH                                                     #
  39. # h.for help                                                      #
  40. # i.daily PV                                                      #
  41. # j.daily UV                                                      #
  42. # l.Top 20 URL                                                    #
  43. # k.SameUserAgent                                                 #
  44. #                                                                 #
  45. # Usage: mail.sh filename                                         #
  46. ##################################################################
  47. EOF
  48. }

  49. Des

  50. ## this function will display the top 10 IPs,which accessed most ,and thier access times
  51. Remote_ip(){
  52.   color grn
  53.   echo -e "\n i'm working,please wait a minute."
  54.   echo
  55.   echo "times###IP###################### "
  56.   awk '{count[$1]++} END {for(ip in count)print count[ip],ip}' $logfile |sort -nr |head -20  
  57.   echo
  58.   Funchoose
  59.      }
  60.   
  61. ##show average  response time,and the top 20 response time
  62. RT(){
  63.    color grn
  64.    echo -e "\n average response time:\n"   
  65.    awk '{all+=$2;total=all/1000000;ave=total/NR}END {print "average RT = "ave"s"}' $logfile
  66.    echo -e "\n 20 of the largest  RT and URL :"
  67.    awk 'sub("\?"," "){print $2/1000000"s---"$7}' $logfile |sort -nr |head -20 |sed 's/"/ /g'
  68.    echo
  69.    Funchoose
  70.      }

  71. ###show you request method and times

  72. Req_method(){
  73.    color grn
  74.    echo -e "\n working hard,wait a minute...\nmethod---times"
  75.    awk 'BEGIN{get=0;post=0} $6 ~ /\<GET\>/{get++} $6 ~ /\<POST\>/{post++}
  76.     END{print "GET===="get, "\n""POST===="post}' $logfile  
  77.     echo
  78.   Funchoose
  79.     }  


  80. ## total size of  response in bytes, excluding HTTP headers
  81. Resp_bytes(){
  82.     color grn
  83.     echo -e "patience...\n"
  84.     awk '{FS="\"";print $3}' $logfile |awk '$2 ~ /[1-9]/{a+=$2;total=a/1048576}END{print "total send :"total"M"}'  
  85.     echo
  86.     Funchoose
  87.     }

  88. ##show status numbers and thier times
  89. Status(){
  90.      color grn
  91.      echo -e "\n i'm  working,please wait a minute...\nstatus----times"
  92.      awk  '{count[$8]++} END {for(Sta in count)printf "%-10s %-10s\n",Sta,count[Sta]}' $logfile  |sort -nr |head
  93.      echo
  94.      Funchoose
  95.     }


  96. ##informations about QPS
  97.   QPS(){
  98.   color grn
  99.   echo -e "\n top qps of $date is: \nQPS-----time"
  100.   awk '{count[$4]++}END {for(qps in count)print "  " count[qps]"---"qps}' $logfile |sort -nr|uniq |head -20
  101.    Funchoose
  102.     }

  103. ## Query Per Hour and which hour query most
  104. QPH(){
  105.        echo -e "\n the QPH of $date is : \n times--hour"  
  106.        awk -F ":" '{print $2}' $logfile |sort|uniq -c |sort -nr   
  107.        Funchoose
  108.     }


  109. ## just as the function name say
  110. PV(){
  111.     color grn
  112.     echo -e "PV of $date is :\n"
  113.     awk 'BEGIN{PV=0} $8 ~ /\<200\>/{PV++}END{print PV}' $logfile
  114.     echo
  115.       Funchoose
  116.     }

  117. ###how much real visitor today?
  118. UV(){
  119.        color grn
  120.        echo -e "\n patience......\n \nthe UV of $date is:"
  121.        awk   '$8 ~ /\<200\>/{print $1 }' $logfile|sort |uniq |wc -l
  122.        echo
  123.        Funchoose
  124.      }
  125.    


  126. ###count useragent which are the same
  127. SameUserAgent(){
  128.       color grn
  129.       awk -F "\"" '{count[$6]++} END {for(value in count)print count[value],value}' $logfile |sort -nr |more

  130.        Funchoose
  131.      }

  132. URL(){
  133.      color grn
  134.      echo -e "\nthe top 20 URL is: \n"
  135.      awk  'sub("\?"," ") {count[$7]++} END {for(URL in count)print count[URL],URL}' $logfile | sort -nr |head -20
  136.      echo
  137.      Funchoose
  138.      }
  139. ## This function will help you to choose
  140. Help(){
  141.   color grn
  142.   cat << EOF
  143.    a.The top 20 Remoute hosts' IP and access times
  144.    b.Average RT and top 20 RT                                      
  145.    c.The request method                                            
  146.    d.Size of response in bytes, excluding HTTP headers              
  147.    e.about Status
  148.    f.top 20 QPS
  149.    g.about QPH (Query Per Hour)
  150.    h.for help
  151.    i.PV
  152.    j.UV
  153.    k.SameUserAgent
  154.    l.Top 20 URL
  155.    q.quit

  156. EOF
  157.   echo
  158.   Funchoose
  159. }


  160. # main function,which offer other function's entrance
  161. Funchoose(){
  162.     read -p "now,choose what U want to query about(h for help):" fun
  163.    case $fun in
  164.     a|A)Remote_ip;;
  165.     b|B)RT;;
  166.     c|C)Req_method;;
  167.     d|D)Resp_bytes;;
  168.     e|E)Status;;
  169.     f|F)QPS;;
  170.     g|G)QPH;;
  171.     h|H)Help;;
  172.     i|I)PV;;
  173.     j|J)UV;;
  174.     k|K)SameUserAgent;;
  175.     l|L)URL;;
  176.     q|Q)exit;;
  177.     *)color red && echo "sorry,out of choice,h for help " && Funchoose;;
  178.    esac
  179.   }
  180. if [ -r $logfile ];then
  181. read -p  "Do U want to continue?(Y/N):" yn
  182. case $yn in
  183. y|Y) Funchoose;;
  184. n|N) exit;;
  185. *) color red && echo "sorry,your input is wrong";;
  186. esac
  187. else
  188.   echo "sorry,this file can not be read" && exit
  189. fi
复制代码



shell script.rar

2.36 KB, 下载次数: 34

论坛元老

每只菜鸟都有成为鹰的梦想

Rank: 8Rank: 8

注册时间
2011-6-2
最后登录
2014-2-27
在线时间
192 小时
阅读权限
90
积分
13925
帖子
90
主题
9
精华
0
UID
14038
发表于 2011-10-17 17:23:29 |显示全部楼层
好长,学习了,有个请教
color red && echo
这个color是装什么软件能使用的调取颜色?
http://bbs.ngacn.cc/
http://www.xbox-skyer.com/forum.php
http://bbs.linuxtone.org/forum.php

使用道具 举报

Rank: 8Rank: 8

注册时间
2011-7-8
最后登录
2014-10-11
在线时间
75 小时
阅读权限
90
积分
11652
帖子
107
主题
9
精华
0
UID
14891
发表于 2011-10-17 18:07:16 |显示全部楼层
回复 kele8 的帖子

忘记说了,在附件里有定义color的文件。这样用起来方便点

使用道具 举报

Rank: 8Rank: 8

注册时间
2011-7-8
最后登录
2014-10-11
在线时间
75 小时
阅读权限
90
积分
11652
帖子
107
主题
9
精华
0
UID
14891
发表于 2011-10-17 18:12:42 |显示全部楼层
回复 zuopucuen 的帖子

公司的日志是每天一份的,combined格式,就适用。

使用道具 举报

Rank: 8Rank: 8

注册时间
2011-3-11
最后登录
2013-5-19
在线时间
213 小时
阅读权限
90
积分
19923
帖子
58
主题
1
精华
0
UID
12347
发表于 2011-10-17 18:47:55 |显示全部楼层
我冒个泡,顶一下
<-sina_sign,1793345607,c7f905c0,1->

使用道具 举报

Rank: 6Rank: 6

注册时间
2010-4-17
最后登录
2014-3-18
在线时间
104 小时
阅读权限
70
积分
7458
帖子
38
主题
1
精华
0
UID
8933
发表于 2011-10-17 23:14:02 |显示全部楼层
很不错啊 哈哈

使用道具 举报

Rank: 8Rank: 8

注册时间
2011-1-5
最后登录
2016-9-13
在线时间
219 小时
阅读权限
90
积分
32817
帖子
669
主题
20
精华
0
UID
11685
发表于 2011-10-18 08:48:16 |显示全部楼层
不错。。感谢楼主分享哈。。
<-sina_sign,1912418175,a06243e0,1->

使用道具 举报

论坛元老

LT社区闲人

Rank: 8Rank: 8

注册时间
2011-6-20
最后登录
2014-5-12
在线时间
253 小时
阅读权限
90
积分
87857
帖子
193
主题
2
精华
0
UID
14521
发表于 2011-10-18 08:54:15 |显示全部楼层
虽然用不到, 但是学习了

使用道具 举报

Rank: 7Rank: 7Rank: 7

注册时间
2008-9-20
最后登录
2019-9-2
在线时间
489 小时
阅读权限
100
积分
38065
帖子
2202
主题
48
精华
0
UID
307

LT元老

发表于 2011-10-18 09:18:24 |显示全部楼层
我们的格式是自定义的,功能更多些,用python写的

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

IT运维专家网感谢您的支持

合作联系: QQ:67888954/MSN:cnseek@msn.com/mail:netseek@linuxtone.org

Archiver|手机版|感谢所有关心和支持过LinuxTone的朋友们 转载本站内容请注明原作者名及出处 ( 京ICP备08103151 )   |

GMT+8, 2019-10-15 06:41 , Processed in 0.037181 second(s), 16 queries , Apc On.

Powered by Discuz! X2 Licensed

© 2001-2011 Comsenz Inc.

回顶部