用shell脚本分析Nginx日志

 

1.4.3 用shell脚本分析Nginx日志

《构建高可用Linux服务器》第1章Linux服务器构建基础,本章从Centos5.5 x86_64的安装、网络配置、日志分析、性能及状态监控、优化及虚拟化等方面对Linux硬件进行了全方位的说明,这些都是构建高性能及高可用Linux系统的基础,希望大家能够掌握此章内容。本节为大家介绍用shell脚本分析Nginx日志。

    1.4.3 用shell脚本分析Nginx日志

    本节将介绍用shell脚本来分析Nginx负载均衡器的日志,这样可以快速得出排名靠前的网站和IP等,推荐大家使用线上环境下的shell脚本。本节中的shell脚本又分为两种情况,第一种情况是Nginx作为最前端的负载均衡器,其集群架构为Nginx+Keepalived时,脚本内容如下所示:

       
       
    1. vim log-nginx.sh  
    2. #!/bin/bash  
    3.  
    4. if [$# -eq 0 ]; then  
    5.   echo "Error: please specify logfile."  
    6.   exit 0  
    7. else  
    8.   LOG=$1  
    9. fi  
    10.  
    11. if [ ! -f$1 ]; then  
    12.   echo "Sorry, sir, I can't find this apache log file, pls try again!"  
    13. exit 0  
    14. fi  
    15.  
    16. ####################################################  
    17. echo "Most of the ip:"  
    18. echo "-------------------------------------------"  
    19. awk '{ print$1 }'$LOG| sort| uniq -c| sort -nr| head -10  
    20. echo  
    21. echo  
    22. ####################################################  
    23. echo "Most of the time:"  
    24. echo "--------------------------------------------"  
    25. awk '{ print$4 }'$LOG| cut -c 14-18| sort| uniq -c| sort -nr| head -10  
    26. echo  
    27. echo  
    28. ####################################################  
    29. echo "Most of the page:"  
    30. echo "--------------------------------------------"  
    31. awk '{print$11}'$LOG| sed 's/^.*\\(.cn*\\)\"/\\1/g'| sort| uniq -c| sort -rn| head -10  
    32. echo  
    33. echo  
    34. ####################################################  
    35. echo "Most of the time / Most of the ip:"  
    36. echo "--------------------------------------------"  
    37. awk '{ print$4 }'$LOG| cut -c 14-18| sort -n| uniq -c| sort -nr| head -10 > timelog  
    38.  
    39. for i in 'awk '{ print$2 }' timelog'  
    40. do  
    41.   num='grep$i timelog| awk '{ print$1 }''  
    42.   echo "$i$num"  
    43.   ip='grep$i$LOG| awk '{ print$1}'| sort -n| uniq -c| sort -nr| head -10'  
    44.   echo "$ip"  
    45.   echo  
    46. done  
    47. rm -f timelog 

    第二种情况是以Nginx作为Web端,置于LVS后面,这时要剔除掉LVS的IP地址,比如LVS服务器的公网IP地址(像203.93.236.141、203.93.236.145等)。这样可以将第一种情况的脚本略微调整一下,如下所示:
       
       
    1. #!/bin/bash  
    2. if [$# -eq 0 ]; then  
    3.   echo "Error: please specify logfile."  
    4.   exit 0  
    5. else  
    6.   cat$1| egrep -v '203.93.236.141|145' > LOG  
    7. fi  
    8.  
    9. if [ ! -f$1 ]; then  
    10.   echo "Sorry, sir, I can't find this apache log file, pls try again!"  
    11. exit 0  
    12. fi  
    13.  
    14. ###################################################  
    15. echo "Most of the ip:"  
    16. echo "-------------------------------------------"  
    17. awk '{ print$1 }' LOG| sort| uniq -c| sort -nr| head -10  
    18. echo  
    19. echo  
    20. ####################################################  
    21. echo "Most of the time:"  
    22. echo "--------------------------------------------"  
    23. awk '{ print$4 }' LOG| cut -c 14-18| sort| uniq -c| sort -nr| head -10  
    24. echo  
    25. echo  
    26. ####################################################  
    27. echo "Most of the page:"  
    28. echo "--------------------------------------------"  
    29. awk '{print$11}' LOG| sed 's/^.*\\(.cn*\\)\"/\\1/g'| sort| uniq -c| sort -rn| head -10  
    30. echo  
    31. echo  
    32. ####################################################  
    33. echo "Most of the time / Most of the ip:"  
    34. echo "--------------------------------------------"  
    35. awk '{ print$4 }' LOG| cut -c 14-18| sort -n| uniq -c| sort -nr| head -10 > timelog  
    36.  
    37. for i in 'awk '{ print$2 }' timelog'  
    38. do  
    39.   num='grep$i timelog| awk '{ print$1 }''  
    40.   echo "$i$num"  
    41.   ip='grep$i LOG| awk '{ print$1}'| sort -n| uniq -c| sort -nr| head -10'  
    42.   echo "$ip"  
    43.   echo  
    44. done  
    45. rm -f timelog 

    我们可以用此脚本分析文件名为www_tomcat_20110331.log的文件。[root@localhost 03]# sh counter_nginx.sh www_tomcat_20110331.log大家应该跟我一样比较关注脚本运行后的第一项和第二项结果,即访问我们网站最多的IP和哪个时间段IP访问比较多,如下所示:
       
       
    1. Most of the ip:  
    2. -------------------------------------------  
    3.   5440 117.34.91.54  
    4.  9 119.97.226.226  
    5.  4 210.164.156.66  
    6.  4 173.19.0.240  
    7.  4 109.230.251.35  
    8.  2 96.247.52.15  
    9.  2 85.91.140.124  
    10.  2 74.168.71.253  
    11.  2 71.98.41.114  
    12.  2 70.61.253.194  
    13.  
    14. Most of the time:  
    15. --------------------------------------------  
    16.  12 15:31  
    17.  11 09:45  
    18.  10 23:55  
    19.  10 21:45  
    20.  10 21:37  
    21.  10 20:29  
    22.  10 19:54  
    23.  10 19:44  
    24.  10 19:32  
    25.  10 19:13 

    如果对日志的要求不高,我们可以直接通过Awk和Sed来分析Linux日志(如果对Perl熟练也可以用它来操作),还可以通过Awstats来进行详细分析,后者尤其适合Web服务器和邮件服务器。另外,如果对日志有特殊需求的话,还可以架设专用的日志服务器来收集Linux服务器日志。总之一句话:一切看需求而定。
     
     
    • 0
      点赞
    • 1
      收藏
      觉得还不错? 一键收藏
    • 0
      评论
    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值