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

对于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来统计字符串的出现次数是多少效率低下啊!

 

 

你可能感兴趣的:(apache,日志,统计,休闲,性能分析)