当前位置: > Linux命令 >

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

时间:2015-05-02 01:51来源:linux.it.net.cn 作者:IT
awk分析nginx日志文件的方法,awk命令统计日志信息,awk命令格式与awk日志分析命令的例子,需要的朋友参考下。

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:%u\n”, 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:%u\n”, a, w[a])}’
 
 
(责任编辑:IT)
------分隔线----------------------------
栏目列表
推荐内容