加些來了解一下如何統計Apache的訪問日誌,通常能夠用tail命令來實時查看日誌文件變化,可是各類的應用系統中的日誌會很是複雜,一堆長度超過你瀏覽極限的日誌出如今你眼前時,你會以爲很是無奈,怎麼辦呢?這時能夠用grep、sed、awk和sort等篩選工具幫助你解決這個問題。下面總結了幾個常見分析方法。web
(1)查看IP($1表明IP)apache
#cataccess_log | awk '{print $1}'工具
(2)對IP排序網站
#cataccess_log | awk '{print $1}'|sortui
(3)打印每一重複行出現的次數,「uniq -c」表示標記出重複數量。命令行
#cataccess_log | awk '{print $1}'|sort|uniq -c日誌
(4)排序並統計行數blog
#cataccess_log | awk '{print $1}'|sort|uniq -c|sort -rn|wc -l排序
(5)顯示訪問前10位的IP地址,便於查找攻擊源ip
#cat access_log|awk '{print $1}'|sort|uniq-c|sort -nr|head -10
注意awk '{print$1',它表示取日誌的第一段,若是換成別的日誌,其IP地址在第3段那麼就要改變相應數值。
(6)顯示指定時間之後的日誌($4表明時間)
#cat access_log |awk'$4>="[23/Jul/2012:01:00:01"' access_log
推薦你們在排錯時,同時打開多個終端,好比在一個窗口中顯示錯誤日誌,在另外一個窗口中顯示訪問日誌,這樣就可以隨時獲知網站上發生的狀況。
(7)找出訪問量最大的IP,並封掉(對排錯頗有幫助)
#cat access_log |awk '{print $1}'|sort|uniq -c|sort -nr |more
9999192.168.150.179
11 192.168.150.1
#iptables -I INPUT -s 192.168.150.179 -j DROP
#iptables -I INPUT -s 192.168.150.0/24 -j DROP
若是將上面的Shell作如下變形就能夠得出訪問量TOP 10
#cat access_log |awk '{print $1}'|sort|uniq -c|sort -nr |head -10
(8)找出Apache日誌中,下載最多的幾個exe文件(下載類網站經常使用,這裏以.exe擴展名舉例)
[root@localhost httpd]# cataccess_log |awk '($7 ~/.exe/){print $10 "" $1 ""$4""$7}' |sort -n |uniq -c |sort -nr |head -10
2 - 192.168.150.1[25/Jul/2012:05:46:05/test.exe
1 -192.168.150.152[25/Jul/2012:05:46:47/test.exe
使用以下命令:
#cat access_log |awk `($10 >10000000&& $7 ~/.exe/) {print $7}` |sort –n|uniq –c|sort –nr|head -10
這條命令通過增長一個>10000000的條件判斷內容就能夠顯示出大於10MB的exe文件,並統計對應文件發生次數,這條命令對於網站平常分析是很是有幫助的,你們能夠靈活使用。
(12)用goaccess工具分析
GoAccess是一款開源、實時,運行在命令行終端下的web日誌分析工具。該工具提供快速、多樣的HTTP狀態統計,若是你以爲以上管道、腳本麻煩的話,請用這個工具試試吧。
Debian Linux安裝:
#ape-get install goaccess
#goaccess -f /var/log/apache2/access.log
運行效果以下:
輕按下箭頭,咱們看看goaccess給咱們呈現更多的統計數據吧,細心的讀者發現BW N /A 帶寬怎麼沒統計出來?下面咱們在加一個 -b 參數試試吧,以下圖所示。
注意:以上工具和技巧一樣適用於Nginx、Squid的訪問日誌。