版權(quán)聲明:可以任意轉(zhuǎn)載,轉(zhuǎn)載時請務(wù)必以超鏈接形式標明文章原始出處和作者信息及本版權(quán)聲明。
http://www.chedong.com/blog/archives/001293.html
你完全不用耐心的看完后面所有的說明,awstats在進行日志統(tǒng)計時,
命令行統(tǒng)計增加: -databasebreak=day
報表輸出時增加: &databasebreak=day&day=DD
即可按天進行統(tǒng)計, 解決按月統(tǒng)計,歸檔數(shù)據(jù)過大導(dǎo)致統(tǒng)計過慢/失敗的問題。
問題:
很多網(wǎng)站在流量從10萬級增加到百萬級以后就放棄了awstats作為統(tǒng)計,具體表現(xiàn)就是到月底的時候,統(tǒng)計數(shù)據(jù)會運行1天都運行不完。于是就改為webalizer或者analog了。其實這并非awstats統(tǒng)計效率不高:awstats很多豐富的統(tǒng)計指標:蜘蛛識別 瀏覽器識別,文件類型統(tǒng)計等,都是比Webalizer豐富的,Webalizer要實現(xiàn)類似的統(tǒng)計力度也會出現(xiàn)性能問題。
原因分析:
性能的瓶頸在哪里呢:awstats統(tǒng)計缺省時按月統(tǒng)計,到月底時候記住的頭20多天的歷史IP等累計統(tǒng)計指標,會使得DUMP數(shù)據(jù)文件變得很大(數(shù)百M),而awstats運行時,需要的內(nèi)存量是dump數(shù)據(jù)文件的3-4倍。當(dāng)這個monthly積累的數(shù)據(jù)導(dǎo)致awstats統(tǒng)計腳本載入內(nèi)存的數(shù)據(jù)量過大,用到系統(tǒng)文件交換做內(nèi)存的時候日志統(tǒng)計效率就會降低了(處理速度會低2-3個數(shù)量級),于是出現(xiàn)了運行一天都統(tǒng)計不完前一天日志的現(xiàn)象。
解決:
AWStats豐富的統(tǒng)計指標還是很有用的,而一個網(wǎng)站已經(jīng)達到日千萬級的訪問請求,按天的詳細的數(shù)據(jù)統(tǒng)計也是必須的了。所以:索性犧牲一下按月的獨立IP統(tǒng)計,將日志改成按天統(tǒng)計,如果需要按月的匯總,可以利用awstats的dump數(shù)據(jù)成為一個中間數(shù)據(jù)源匯總統(tǒng)計。
其他問題:
1 按天的報表瀏覽:用Calendar.php做個日歷瀏覽界面;
按天統(tǒng)計后,awstats的輸出文件會變成awstatsMMYYYYDD.confname.txt 每天一個統(tǒng)計文件,而報表的輸出需要增加 &databasebreak=day&day=DD 來指定某一天的數(shù)據(jù)。增加了日期后,awstats的報表輸出有些不方便,awstats本身沒有提供按日的瀏覽,可以自己做個日歷前端,方便awstats的報表瀏覽。
2 日志數(shù)據(jù)源:最好是壓縮的,因為日志上2G以后,文件系統(tǒng)出問題的可能性大。盡量還是壓縮日志后,通過zcat管道給awstats進行統(tǒng)計;
類似的思路:
1 如果 databasebreak=day 仍然無法解決問題, 排除掉次要統(tǒng)計指標:過濾掉圖片 js css等文件的請求日志;
2 如果仍然沒有辦法解決問題: 設(shè)置為小時級別截斷 databasebreak=hour 然后用每天的同一個小時(比如:下午5點-6點)做為1天的抽樣,進行每天的數(shù)據(jù)跟蹤;
總之:為了統(tǒng)計精度/完整性犧牲重要的統(tǒng)計統(tǒng)計指標是不值得的。當(dāng)流量提高到百萬級別,即使損失了n%的精度,對于做出結(jié)論已經(jīng)足夠了。而且利用awstats 的dump data作為中間處理結(jié)果,進行數(shù)據(jù)挖掘也是很方便的(大部分是CSV,分項的很容易用grep截取分離出來)。