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來統計字符串的出現次數是多少效率低下啊!

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章