美文网首页
tomcat access log日志分析

tomcat access log日志分析

作者: 叶迎宪 | 来源:发表于2020-02-21 23:36 被阅读0次

    tomcat默认access log日志格式为 pattern="%h %l %u %t "%r" %s %b"

    %h 远程的主机名或IP
    %l 远程的逻辑用户名
    %u 通过身份验证的远程用户
    %t 通用日志格式的日期和时间
    %r 请求
    %s 返回的HTTP状态码
    %b 响应中发送的字节,不包括HTTP头

    我定制的格式为

    pattern="%h %l %u %t "%r" %s %b %D "%{User-Agent}i"" 
    

    增加了请求处理时间,以及user agent
    按时间段过滤日志

    awk '($4>="[21/Feb/2020:22:00:00]" && $4<="[21/Feb/2020:22:00:10]"){print $0}' localhost_access_log.2020-02-21.txt
    awk '($4>="[02/Mar/2020:08:00:00]" && $4<="[02/Mar/2020:08:30:00]"){print $0}' localhost_access_log.2020-03-02.txt
    

    按照访问url进行统计,并列出前20条

    awk -F\" '{print $2}' localhost_access_log.2020-02-20.txt | sort | uniq -c  | sort -nr | head -20
    

    上面这样统计,会把同一个url,?后面参数不同视为2个不同的访问而分开统计访问次数。如果要忽略url ?之后的参数差异,可以修改为

    awk -F\" '{print $2}' localhost_access_log.2020-02-20.txt | awk -F\? '{printf $1 "\n"}' | sort | uniq -c  | sort -nr | head -20
    

    这样写法,仍然可能有bug,例如
    GET /login.do HTTP/1.1

    GET /login.do?a=a HTTP/1.1
    被看成2条不同记录了,因为没有?的url没法切割。改进的写法为

    awk -F\" '{print $2}' localhost_access_log.2020-02-20.txt | awk -F "[? ]" '{printf $2 "\n"}' | sort | uniq -c  | sort -nr | head -20
    

    找出非200的请求

    awk '($9!=200 && $9!=302){print $0}' localhost_access_log.2020-02-21.txt
    

    统计访问ip数

    awk '{print $1}' localhost_access_log.2020-02-21.txt | sort | uniq | wc -l
    

    一个稍微复杂一点的统计,统计某品牌用户数量

    cat localhost_access_log.2020-03-02.txt | grep HUAWEI | awk '{print $1}' | sort | uniq | wc -l
    

    统计某接口访问次数最多的ip

    awk '($4>="[05/Mar/2020:15:40:00]" && $4<="[05/Mar/2020:15:50:00]"){print $0}' localhost_access_log.2020-03-05.txt | grep listCourse.do | awk '{print $1}'  | sort | uniq -c | sort -nr | head -20
    

    参考
    https://blog.csdn.net/c1052981766/article/details/79423429

    相关文章

      网友评论

          本文标题:tomcat access log日志分析

          本文链接:https://www.haomeiwen.com/subject/nslkqhtx.html