awk分析nginx日志_awk统计日志信息

发布时间:2020-04-30编辑:脚本学堂
awk分析nginx日志文件的方法,awk命令统计日志信息,awk命令格式与awk日志分析命令的例子,需要的朋友参考下。

linuxjishu/13830.html target=_blank class=infotextkey>awk命令格式:
 

awk 'pattern{action;action} pattern{action;action}' {filenames} 

日志分析命令
 

awk 'BEGIN{len=0;tm=0} {len=length($NF);tm=substr($NF,2,len-2)+0} tm>0.5 {print NR " " $0 }' nginx.log 

解释:
1、BEGIN{len=0;tm=0}
在awk开始时,定义变量len和tm
len为字符串长度,tm为响应时间
BEGIN关键字,表示awk命令开时执行一次,不是每行一次,只仅一次。

2、{len=length($NF);tm=substr($NF,2,len-2)+0}
NF为当前行的字段数,awk读入的当前行时,使用空格分隔后的字段数
length()为awk的内置函数,取字符串长度
len=length($NF)表示将最后一个字段的长度,赋值给len
substr()为awk的内置函数,截串
substr($NF,2,len-2)为取字符串"0.0003"中的0.0003,去掉双引号
substr($NF,2,len-2)+0为将字符串0.0003,转为数字0.0003

3、tm>0.5 {print NR " " $0 }
tm>0.5 响应时间超过0.5秒 就打印NR当前行数和$0当前行

代码:
 

复制代码 代码示例:
awk  '/responseTime/ {  
where=match($0,/"responseTime":[[:alnum:]]+/);  
if(where>0){ 
    spend=substr($0,RSTART,RLENGTH);  
    len=length(spend); 
    where = index(spend,":");  
    spend=substr(spend,where+1,len); 
    spend=spend+0; 
    if(spend>10000) 
    print $0; 
    } 
}'  
somelog.log

awk统计日志信息

一些日志统计的问题,使用awk可以很迅速地处理日志中的信息,因此把比较有用的提取出来,比如如下日志:
 

ALARM 10-31 10:41:02 140038239139584 file[crawling_thread.cc:171] func[request_cb] url[http://bbs.tianya.cn/post-culture-282402-1.shtml] 403, proxy[58.252.56.149:9000] forbiddened

表示代理58.252.56.149端口9000失效了,被服务器封禁了,当日志文件到好几G时,如何快速统计代理ip及被封禁次数,awk命令可以解决:
 

grep “forbiddened” log/evcrawler.log.20131031 | awk -F “[][]” ‘{w[$8]+=1} END{for (a in w) printf(“proxy:%s, forbid times:%un”, a, w[a])}’

打印每个代理和封禁次数。

加上时间:
 

awk ‘{if($3 > “12:00:00″) print $0}’ log/evcrawler.log.20131031 | grep “forbiddened” | awk -F “[][]” ‘{w[$8]+=1} END{for (a in w) printf(“proxy:%s, forbid times:%un”, a, w[a])}’