日志统计中awk常见的运用

网友投稿 315 2022-10-28


日志统计中awk常见的运用

前言:首先awk是一门语言,其次跟其他语言相比,awk的优势是在文本处理、数值计算等方面,在我们日常的运维工作中,awk还有1个很重要的场景是配合sed、grep的使用,正是因为这些,awk是运维工程师最常用的工具之一,下面记录一下,awk在日志收集、统计场景的一些最常用的姿势。

awk使用格式

awk [-F value] [-v var=value] 'program text' [files....]program text:     BEGIN {actions}/pattern/{actions}END{actions}内置变量     FS--Field Separator:域的分隔符,默认的是以空白符分隔     RS--Record Separator 记录的分隔符,默认是以换行符来分隔     FILENAME -- current filename                   NF -- Number of Feilds in current record,域的个数     NR -- Number of Record 输入的记录数,相当于行号一样,多个文件时会接着递增     FNR -- File Number of Record 输入的当前记录数,每个文件单独计算     $0 -- the whole record  当前整个记录     $n -- the nth field of the current record 当前记录的第n个域

awk常用函数

1、split (string, array, field separator)

2、substr(s,p,n) 返回字符串s中从p开始长度为n的后缀部分

3、 length函数返回没有参数的字符串的长度

4、gsub(regular expression, subsitutionstring, target string)

awk扩展使用

1,统计squid日志中各个状态码所占的百分比

# cat /usr/local/squid/var/logs/access.log | awk 'BEGIN{print "status code","\t""rate"}{count+=1;a[$9]+=1}END{for(i in a) print i,"\t",a[i]/count*100}' | sort -nk2 status code  rate 400   0.00412448 416   0.00412448 478   0.00412448 204   0.00618672 401   0.0268091 0   0.0659916 301   0.0763028 302   0.787775 404   2.19628 403   2.66441 206   5.02567 304   17.7043 200   71.4339

2,统计squid日志中访问次数前10的域名

]# cat /usr/local/squid/var/logs/access.log | awk 'BEGIN{print "domain","\t","rate"}{count+=1;a[$2]+=1}END{for(i in a){print i,"\t",a[i]}}' | sort -nk2 | tail bsy.pp.starschinalive.com   125 js1.pcfg.cache.wpscdn.cn   131 portal.wsds.cn   162 vas.fun.tv   173 img.funshion.com   238 duba.com   277 plugin.video.51togic.com   280 p1.meituan.net   286 res.qxz.37wan.com   306 d.ifengimg.com   481

3,统计最近5分钟的流量

日志:27.156.95.175 uc.a.yximgs.com "p_w_picpath/webp" [25/Dec/2016:22:17:01 +0800] "GET HTTP/1.1" 200

cat /usr/local/squid/var/logs/access.log | awk '{i=int(substr($4,17,2)/5)*5;h=substr($4,14,2);s[h":"i]+=$10;}END{for(i in s)print i,s[i]*8/1024/1024/300"Mbps"}' 21:50 143.537Mbps

4,MISS的域名请求数top10统计

# cat /usr/local/squid/var/logs/access.log | awk '{n+=1;if($0~/MISS/)a[$2]+=1}END{for(i in a){print i,a[i],a[i]/n*100}}' | sort -nrk2  | head duba.com 237 0.868291 p1.meituan.net 163 0.597179 pas.suning.com 66 0.241803 shopping.suning.com 55 0.201502 77g4l9.com5.z0.glb.qiniucdn.com 55 0.201502 res.qxz.37wan.com 50 0.183184 review.suning.com 41 0.150211 static.1sapp.com 32 0.117238 s1.vas.wpscdn.cn 30 0.10991 fs.ios.kugou.com 25 0.0915919


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java实战之基于I/O流设计的图书管理系统
下一篇:搭建常用服务pure-ftpd服务
相关文章

 发表评论

暂时没有评论,来抢沙发吧~