用awk工具分析系统日志-小试牛刀

      最近团队需要分析一下网站各uri在框架中的执行时间,所以想到用awk这个分析字符串能力很强的工具来时间,下面是实现代码,具体看行注释。

下面这个是awk 脚本,然后运行 cat 框架日志文件|awk -f hapn.awk|sort -k2nr,结果就行了.

#!/bin/awk
#desc 统计系统日志发掘请求执行记录
#author *********
#date 2013.4.24

BEGIN {
  #初始化统计记录个数变量 total_count
=0; } /uri:\/[a-z]+/&&/total/ {#匹配日志记录中符合这个规则的记录uri:/accounts/login total:78643 gsub(/\[/," ",$0);#替换单行记录中的[ gsub(/\]/," ",$0);#替换单行记录中的] gsub(/\=/,":",$0);#替换单行记录中的= gsub(/time\:/,"",$0);#替换单行记录中的time: uri=""; total=0; total_count++; for(i=1;i<=NF;i++) { #匹配uri m=match($i,/uri/);#正则匹配uri的字段 if(m>0) { split($i,ar,":");#将uri:/acctounts 分拆为ar[1]="uri" ar[2]="/accounts"的数组 uri_str=ar[2]; uri=""; len=split(uri_str,u_ar,"/");#分拆ar[2]以/为分割符 for(j=1;j<=len;j++) { if(u_ar[j]) { if(0<match(u_ar[j],/^[0-9]+$/))#匹配数字 如果uri中有数字则统计为一类uri { uri=uri"/[NUM]";#带有数字的uri的替换数字为NUM }else{ uri=uri"/"u_ar[j]; } } } continue; } #匹配耗时 m=match($i,/total/);#正则匹配total的字段 if(m>0) { split($i,ar,":"); total=ar[2]; } } #存储相关值 if(uri in source)#看看数组是否已经记录uri { source[uri]+=total; source_count[uri"_count"]+=1; #计算最大值 if(source_max[uri]<total) { source_max[uri]=total; } #计算最小值 if(source_min[uri]>total) { source_min[uri]=total; } }else{#为数组赋初值 source[uri]=total; source_count[uri"_count"]=1; source_max[uri]=total; source_min[uri]=total; } } END {#最后计算统计结果并输出 for(m in source) { #计算平均耗时 average = source[m]/source_count[m"_count"]/1000; if(average>100) { #计算uri的请求比率 average_rows = source_count[m"_count"]/total_count*100; printf("%-30s\t%-20.2f\t%-20.2f\t%-20.2f\t%-20.2f\t%-20d\t%-20d\n",m,average,source_max[m]/1000,source_min[m]/1000,average_rows,source_count[m"_count"],total_count); } } }

 

转载于:https://www.cnblogs.com/azheng007/archive/2013/04/25/3042952.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值