• shell脚本分析nginx日志


    shell脚本分析nginx日志:

    name=`awk -F ',' '{print $13":"$32}' $file | awk -F ':' '{print $4}'`
    echo "name=$name"

    awk -F

    http://www.cnblogs.com/ggjucheng/archive/2013/01/13/2858470.html

    抽取nginx日志access.log中的状态码,然后统计状态码中大于等于200小于300的数量

    grep -ioE "HTTP/1.[1|0]"[[:blank:]][0-9]{3}" /data/nginx/logs/access.log | awk -F "[ ]+" 'BEGIN{i=0;print "[start]i=0;"}{if($2>=200&&$2<300){i++}}END{print i?i:0}'

    grep -ioE "HTTP/1.[1|0]"[[:blank:]][0-9]{3}" /data/nginx/logs/access.log| awk -F "[ ]+" 'BEGIN{i=0;print "[start]i=0;"}{if($2>=200&&$2<300){i++}else if($2>=300&&$2<400){j++}}END{print i?i:0,j?j:0}'

    采用慕课网上的案例:

    得不出结果,经过调试发现在CentOS6.5下,if语句和上一个括号之间在同一行就好了:

    脚本上用到了数组,grep,awk

    #!/bin/sh
    # Nginx's log analysis
    

    #控制终端的输出格式 resettem=$(tput sgr0)
    #定义日志的路径 Logfile_path
    ='/data/nginx/logs/access.log' #i=0 #j=1 #grep -ioE "HTTP/1.[1|0]"[[:blank:]][0-9]{3}" /data/nginx/logs/access.log| awk -F "[ ]+" 'BEGIN{i=0;print "[start]i=0;"}{if($2>=200&&$2<300){i++}else if($2>=300&&$2<400){j++}}END{print i?i:0,j?j:0}' echo "$Logfile_path"


    #拿到日志中所有的包含HTTP状态码的部分,拿出第二段来判断,并将结果分配到数组中 grep -ioE "HTTP/1.[1|0]"[[:blank:]][0-9]{3}" $Logfile_path | awk -F "[ ]+" 'BEGIN{i=0;j=0;k=0;n=0;p=0;}{ if($2>=100&&$2<200) {i++} else if($2>=200&&$2<300) {j++} else if($2>=300&&$2<400) {k++} else if($2>=400&&$2<500) {n++} else if($2>=500) {p++} }END{ print i?i:0,j?j:0,k?k:0,n?n:0,p?p:0,i+j+k+n+p }' Check_http_status() { #grep -ioE "HTTP/1.[1|0]"[[:blank:]][0-9]{3}" access.log
    #拿到日志中所有的包含HTTP状态码的部分,拿出第二段来判断,并将结果分配到数组中
    Http_status_codes=(`grep -ioE "HTTP/1.[1|0]"[[:blank:]][0-9]{3}" $Logfile_path | awk -F"[ ]+" 'BEGIN{i=0;j=0;k=0;n=0;p=0;}{ if($2>=100&&$2<200)  {i++} else if($2>=200&&$2<300) {j++} else if($2>=300&&$2<400) {k++} else if($2>=400&&$2<500) {n++} else if($2>=500) {p++} }END{ print i?i:0,j?j:0,k?k:0,n?n:0,p?p:0,i+j+k+n+p }'`)  echo "---------" echo -e 'E[33m'"The number of http status[100+]:" ${resettem} ${Http_status_codes[0]} echo -e 'E[33m'"The number of http status[200+]:" ${resettem} ${Http_status_codes[1]} echo -e 'E[33m'"The number of http status[300+]:" ${resettem} ${Http_status_codes[2]} echo -e 'E[33m'"The number of http status[400+]:" ${resettem} ${Http_status_codes[3]} echo -e 'E[33m'"The number of http status[500+]:" ${resettem} ${Http_status_codes[4]} echo -e 'E[33m'"The number of http all status:" ${resettem} ${Http_status_codes[5]} } Check_http_status

    查看具体的状态码,比如403的状态码

    grep -ioE "HTTP/1.[1|0]"[[:blank:]][0-9]{3}" /data/nginx/logs/access.log | awk -F "[ ]+"  

    'BEGIN{total=0;}{if($2!=""){code[$2]++;total++}else{exit}}END{print code[404]?code[404]:0,code[403]?code[403]:0,total?total:0}'

    具体脚本:

    Check_http_code()
    {
    #grep -ioE "HTTP/1.[1|0]"[[:blank:]][0-9]{3}" access.log
    Http_Code=(`grep -ioE "HTTP/1.[1|0]"[[:blank:]][0-9]{3}" $Logfile_path | awk -F "[ ]+" 'BEGIN{total=0;}{ if($2!="")        
                {code[$2]++;total++}
            else 
                {exit}
        }END{
            print code[404]?code[404]:0,code[403]?code[403]:0,total}'`)    
    echo "---------"
    echo -e 'E[33m'"The number of http code[404]:" ${resettem} ${Http_Code[0]}
    echo -e 'E[33m'"The number of http code[403]:" ${resettem} ${Http_Code[1]}
    echo -e 'E[33m'"The number of http all status:" ${resettem} ${Http_Code[2]}
    }
    Check_http_code

    查看IP来源记录:

    nginx默认配置:

    log_format  main  '$remote_addr - $remote_user [$time_local] $request '
                          '"$status" $body_bytes_sent "$http_referer" '
                          '"$http_user_agent" "$http_x_forwarded_for" $request_time';
    
        access_log  /var/log/nginx/access.log  main buffer=32k;
  • 相关阅读:
    [Tip: VS debugging]F5 VS Ctrl +F5
    C#: boxing and unboxing
    [Tip: check overflow/underflow C#]
    C# floating Point types
    UVa 103 Stacking Box(记忆化搜索)
    POJ 3321 apple tree(树形数组)
    UVa 116 Unidirectional TSP(简单旅行商DP)
    UVa 562 Dividing coins(简单DP)
    UVa 10003 Cutting Sticks(区间DP)
    UVa 348 Optimal Array Multiplication Sequence(链式DP/区间DP)
  • 原文地址:https://www.cnblogs.com/taiguyiba/p/6373690.html
Copyright © 2020-2023  润新知