AWK分析access日志中的应用

要即时分析线上访问商品情况,命中率,缓存,热点商品统计,比如一小时内,数秒内的值,还有一些其它数据指标的分析。这个时候AWK就显得非常强大了。

日志格式:

由Nginx配置

$remote_addr $request_time_usec $http_x_readtime [$time_local] \"$request_methodhttp://$host$request_uri\" $status $body_bytes_sent \"$http_referer\" \"$http_user_agent\" $upstream_response_time $http_ns_client_ip $srcache_cache_status

很久没用awk了,有些生疏,记下此次过程。

1 首先要从一个日志文件获取指定时间以来数据。如何进行日期比较?

          主要是取当前系统时间生与一个与日志格式相同的字符串再进行比较,awk 内置 strftime这个函数,可以使用这个函数

2 如何统计商品这段时间访问数?

          从访问URL中 抓取特定参数 id 来进行统计,每分析到一条 ids[id]++;

3  如何抓取URL中指定参数?

        使用gsub函数,t=gsub(/.*[&|?]id=|[&|"].*/,"",t),t为整个访问的URL

4  如何获取top N?

        使用sort将结果排序:for(i in ids){print i,ids[i] | "sort -r -n -k2"}

5 由于中间还夹杂些其它它干扰日志,需要再作些简单的过滤。

 

最终结果:

完整的热点访问统计:

awk 'BEGIN{sum=0;now=strftime("[%d/%b/%Y:%T",systime())}{if(NF>15 && $4>now){sum++;t=$7;t=gsub(/.*[&|?]id=|[&|"].*/,"",t);ids[t]++;srcache[$NF]++; }}END{ for(i in ids){print i,ids[i] | "sort -r -n -k2"} print "total:" sum}' xxxx-access_log | more

 

命中率
awk 'BEGIN{sum=0;now=strftime("[%d/%b/%Y:%T",systime())}{if(NF>15 && $4>now){sum++;t=$7;id=gsub(/.*[&|?]id=|[&|"].*/,"",t);ids[t]++;srcache[$NF]++; }}END{ for(i in srcache){print i,srcache[i]} hit=srcache["HIT"]/sum; print "Total:" sum,"Hit rate:"hit}' xxxx-access_log

如需要1小时内的统计: systime()-3600

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值