tomcat access log日志分析

2020-02-21  本文已影响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

上一篇 下一篇

猜你喜欢

热点阅读