您的位置:首页 > 运维架构 > Apache

apache日志的不同统计方法性能比较

2012-03-11 16:22 225 查看
对于apache日志的统计分析,如分析URL排名,访问IP统计排名等,使用Shell脚本来直接进行是一个非常高效的手段.

apache 访问日志形式如下:

192.168.102.135 - - [03/Jan/2012:10:49:58 -0500] "GET / HTTP/1.1" 200 44

如果统计访问10名的IP地址,网络流传的方法通常是

#awk '{print $1}' access_log|sort|uniq -c|sort -k1 -nr|head

58569 192.168.102.240

6745 192.168.200.14

5785 192.168.102.135

668 ::1

43 192.168.102.54

1 172.16.1.2

我们来看一下这条命令的执行时间

time awk '{print $1}' access.log|sort|uniq -c|sort -k1 -nr|head

real 0m1.128s

user 0m1.089s

sys 0m0.031s

总共需要1.128秒。效率不算太高, 我们加以改进。

#awk '{s[$1]++}END{for (i in s) print s[i],i}' access.log|sort -k2 -nr|head

58569 192.168.102.240

6745 192.168.200.14

5785 192.168.102.135

668 ::1

43 192.168.102.54

1 172.16.1.2

real 0m0.052s

user 0m0.038s

sys 0m0.013s

总执行时间为0.052秒,但结果不太易于观察,我们column -t 下后

# time awk '{s[$1]++}END{for (i in s) print s[i],i}' access_log|sort -k2 -nr|head |column -t

58569 192.168.102.240

6745 192.168.200.14

5785 192.168.102.135

668 ::1

43 192.168.102.54

1 172.16.1.2

real 0m0.056s

user 0m0.033s

sys 0m0.022s

输出结果与使用uniq -c一致,但执行时间从1.128s 一下提升到0.056秒,效率提升20倍, 可见使用uniq -c结合sort来统计字符串的出现次数是多少效率低下啊!

本文出自 “凯骑龟来~~” 博客,请务必保留此出处http://zzkai.blog.51cto.com/804611/803021
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: