AWStats: Apache/IIS的日誌分析工具

 

日誌統計系統在站點的用戶行爲分析中扮演了重要的角色,尤其是對於來自搜索引擎的關鍵詞訪問統計:是很有效的用戶行爲分析數據來源。隨着互聯網多年的發展,WEB日誌統計工具已經越來越成熟,功能也越來越豐富。其中有很多是開放源代碼的, AWStats就是其中非常優秀的一款。
AWStats: Advanced Web Statistics
AWStats是最近發展很快的一個基於Perl的WEB日誌分析工具。相對於另外一個非常優秀的開放源代碼的日誌分析工具Webalizer,AWStats的優勢在於:


界面友好:可以根據瀏覽器直接調用相應語言界面(有簡體中文版)
參考輸出樣例:http://awstats.sourceforge.net/cgi-bin/awstats.pl

基於Perl:並且很好的解決了跨平臺問題,系統本身可以運行在GNU/Linux上或Windows上(安裝了ActivePerl後);分析的日誌直接支持Apache格式 (combined)和IIS格式(需要修改)。Webalizer雖然也有Windows平臺版,但目前已經缺乏維護;
AWStats完全可以實現用一套系統完成對自身站點不同服務器:GNU/Linux/Apache和Windows/IIS服務器的統一統計。
效率比較高:AWStats輸出統計項目比Webalizer豐富了很多,速度仍可以達到Webalizer的1/3左右,對於一個日訪問量百萬級的站點,這個速度都是足夠的;

配置/定製方便:系統提供了足夠靈活但缺省也很合理的配置規則,需要修改的缺省配置不超過3,4項就可以開始運行,而且修改和擴展的插件還是比較多的;
AWStats的設計者是面向精確的/"Human visits"設計的,因此很多搜索引擎的機器人訪問都被過濾掉了,因此有可能比其他日誌統計工具統計的數字要低,來自公司內部的訪問也可以通過IP過濾設置過濾掉。
提供了很多擴展的參數統計功能:使用ExtraXXXX系列配置生成針對具體應用的參數分析會對產品分析非常有用。
更多與其他工具:Webalizer, analog的比較請參考:
http://awstats.sourceforge.net/#COMPARISON


AWStats安裝備忘
AWStats的運行模式是這樣的:


分析日誌:運行後將這樣的日誌統計結果歸檔到一個AWStats的數據庫(純文本)裏;
然後是輸出:分兩種形式
一種是通過cgi程序讀取統計結果數據庫輸出;
一種是運行後臺腳本將輸出導出成靜態文件;
以下是2個針對單個站點日誌統計例子:
一個是在GNU/Linux上通過CGI方式的輸出,
一個是在Windows 2000上的基於靜態頁面的導出


下載/安裝
http://sourceforge.net/projects/awstats/ 下載安裝包後:
GNU/Linux:tar zxf awstats-5.4.tgz
#部署awstats cgi程序到/path/to/apache/cgi-bin/awstats
mv awstats-5.4/wwwroot/cgi-bin /path/to/apache/cgi-bin/awstats
#把圖標icon目錄複製到WEB發佈目錄下:/path/to/apache/htdocs/icon/


Windows 2000: 直接解包,然後移動到D:/AWStats目錄下
把圖標icon目錄複製到IIS的發佈目錄下:inetpub/icon


數據源日誌格式和按天的截斷規則
對於Apache:日誌格式好設置:設置成combined格式即可,日誌截斷麻煩一點:需要安裝cronolog工具,將日誌設置成按天截斷:
CustomLog "|/usr/local/sbin/cronolog /path/to/apache/logs/access_%y%m%d.log" combined
比如:logs/access_030327.log logs/access_030326.log
對於IIS:缺省有比較好的日誌按天截斷規則,但是IIS的日誌格式比較不適合AWStats統計,
因此最好直接去掉所有日誌字段,然後嚴格按照以下列表設置

日期 date
時間 time
客戶IP地址 c-ip
用戶名 cs-username
方法 cs-method
URI資源 cs-uri-stem
協議狀態 sc-status
發送字節數 sc-bytes
協議版本 cs-version
用戶代理 cs(User-Agent)
參照 cs(Referer)

相比IIS缺省設置: 減少的有: 服務器IP地址 服務器端口 URI查詢 增加的有: 發送字節數 協議版本 參照 配置文件的命名規則:awstats.sitename.conf AWStats的主程序awstats.pl會自動根據站點名調用相應站點的配置文件:awstats.sitename.conf 比如:運行./awstats.pl -config=chedong 調用的就是同目錄下的 awstats.chedong.conf 配置文件; 如果沒有指定-config,還會找當前目錄下的awstats.conf或者/etc/awstats.conf作爲缺省配置文件。 所以最好把缺省的awstats.model.conf 重命名成 awstats.yoursite.conf;比如:awstats.chedong.conf, 對於多個站點的統計,AWStats的配置文件包含功能還是非常有用的,我們可以把通用的配置放在一個文檔中,然後用5.4開始支持的 Include配置將通用配置包含在各個具體配置文件的頭部,然後用其他配置覆蓋通用配置中的相應屬性,比如: Include="chedong.common.conf" LogFile="/path/to/bbs/access_log" SiteName="bbs.chedong.com"

最少的配置文件修改:LogFile SiteDomain LogFormat
對於在GNU/Linux上統計Apache日誌只需修改:LogFile SiteDomain這2個選項


GNU/Linux LogFile="/path/to/apache/logs/access_%YY-24%MM-24%DD-24.log"
Windows 2000 LogFile="d:/iis_logs/W3SV3/ex%YY-24%MM-24%DD-24.log"
這個配置的意思是用24小時前的年份,月份,日期拼出的日誌文件名;
SiteDomain="www.chedong.com"
站點的名稱,缺省是空的,如果爲空,AWStats將拒絕運行;
對於統計IIS日誌需要多修改一個:
LogFormat=2
缺省值是1:Apache日誌,2是IIS日誌
其他需要注意的事項:/nAWStats缺省不過濾swf文件,會把.swf算成PageView,所以如果站點上swf文件主要是廣告的話最好還是要過濾掉:


日誌分析
./awstats.pl -update -config=sitename -lang=cn
比如:./awstats.pl -update -config=chedong
會自動調用awstats.chedong.conf這個配置文件

統計輸出
GNU/Linux http://localhost/cgi-bin/awstats/awstats.pl?config=chedong
Windows 2000 http://localhost/awstats/awstats.chedong.html

日誌統計自動運行
GNU/Linux上:crontab -e: 每天8點10分運行
#update awstats
10 8 * * * (cd /path/to/apache/cgi-bin/awstats/; ./awstats.pl -update -config=chedong)


Windows 2000上:設置每天8點10分運行
D:/Perl/bin/perl.exe d:/AWStats/tools/awstats_buildstaticpages.pl -update -config=chedong -lang=cn -dir=c:/inetpub/awstats/ -awstatsprog=d:/awstats/wwwroot/cgi-bin/awstats.pl


多站點日誌統計/nAWStats自帶了一個批處理工具:tools/awstats_updateall.pl,可以批量地遍歷一個目錄下所有地配置文件並運行統計。因此剩下的工作就主要是日誌的同步問題了。

針對多個站點,很多配置選項是重複的,如果每個配置文件都修改維護起來會很麻煩,AWStats從5.4開始提供了配置文件包含的功能,所以我們可以配置一個通用配置,比如:chedong.common.conf

然後其他站點的配置設置爲:可以通過後面的選項覆蓋和缺省不一致的配置。 awstats.bbs.chedong.conf
Include "chedong.common.conf"
LogFile "/path/to/bbs_log"
SiteName "bbs.chedong.com"

awstats.www.chedong.conf
Include "chedong.common.conf"
LogFile "/path/to/www_log"
SiteName "www.chedong.com"
HostAliases="chedong.com"


統計指標說明
參觀者:按來訪者不重複的IP統計,一個IP代表一個參觀者;
參觀次數:一個參觀者可能1天之內參觀多次(比如:上午一次,下午一次),所以按一定時間內(比如:1個小時),不重複的IP數統計,參觀者的訪問次數;
網頁數:不包括圖片,CSS, JavaScript文件等的純頁面訪問總數,但如果一個頁面使用了多個幀,每個幀都算一個頁面請求;
文件數:來自瀏覽器客戶端的文件請求總數,包括圖片,CSS,JavaScript等,用戶請求一個頁面是,如果頁面中包含圖片等,所以對服務器會發出多次文件請求,文件數一般遠遠大於文件數;
字節:傳給客戶端的數據總流量;
來自REFERER中的數據:日誌中的參考(REFERER)字段,記錄了訪問相應網頁之前地址,因此如果用戶是通過搜索引擎的搜索結果點擊進入網站的,日誌中就會有用戶在相應搜索引擎的查詢地址,這個地址中就可以通過解析將用戶查詢使用的關鍵詞提取出來:
比如:
2003-03-26 15:43:58 123.123.123.123 - GET /index.html 200 192 HTTP/1.1 Mozilla/4.0+(compatible;+MSIE+5.01;+Windows+NT+5.0) http://www.google.com/search?q=chedong
AWStats在搜索引擎的關鍵短語和關鍵詞統計方面的功能還是比較完整的:可以對全世界3百多種機器爬蟲進行識別,並且可以識別大部分主流國際化搜索引擎和很多地區的本地語言搜索引擎。
Hacking AWStats
IIS按GMT時間的補丁:awstats.pl
IIS的日誌時間是格林威治之間,中國本地時間和GMT有+8個小時差距,如果直接用TIMEZONE插件從格林威治時間轉換會有40%的性能下降,這裏有一個將時間按本地時間修改時間座標的補丁:
7696d7695
< my $TIME_ZONE = 8;
7698,7702c7697
< my $ix_local = $ix + $TIME_ZONE;
< if ($ix_local >= 24) {
< $ix_local = $ix_local - 24;
< }
< print "$ix_local/n"; # width=19 instead of 18 to avoid a MacOS browser bug.
---
> print "$ix/n"; # width=19 instead of 18 to avoid a MacOS browser bug.
7708,7712c7703
< my $ix_local = $ix + $TIME_ZONE;
< if ($ix_local >= 24) {
< $ix_local = $ix_local - 24;
< }
< my $hr= $ix_local + 1 ; if ($hr>12) { $hr=$hr-12; }
---
> my $hr=($ix+1); if ($hr>12) { $hr=$hr-12; }

在Awstats 5.5以後中已經加入了針對中文主要搜索引擎的定義:這裏是補充後的完整列表(包括了主要門戶和搜索引擎)
62c60
< "baidu/.com","search/.sina/.com","search/.sohu/.com",
---
> "baidu/.com","sina/.com","3721/.com","163/.com","tom/.com","sohu/.com",


153c144
< "baidu/.com","word=", "search/.sina/.com", "word=", "search/.sohu/.com","word=",
---
> "baidu/.com","word=", "sina/.com", "word=", "3721/.com", "name=","163/.com","q=","tom/.com","word=","sohu/.com","word=",


250c234
< "baidu/.com","Baidu", "search/.sina/.com","Sina", "search/.sohu/.com","Sohu",
---
> "baidu/.com","Baidu", "sina/.com","Sina", "3721/.com","3721","163/.com","NetEase","tom/.com","Tom","sohu/.com","Sohu",


對Google的Unicode查詢還是需要一些查詢補丁:
因爲Google對於Windows 2000以上的IE瀏覽器缺省發送的查詢都是UTF-8格式的,而其他搜索引擎大部分使用的是系統本地編碼:GB2312,因此需要將查詢URI解碼後,還要根據是否使用UTF-8進行到GB2312的轉碼,否則同樣的單詞會在統計中留有UTF-8和GB2312兩條記錄。

我增加了以下函數用於UTF-8字符的解碼和類似於“/xc4/xbe/xd7/xd3/xc3/xc0”這樣查詢的解碼
sub Utf8_To_Ascii {
my $string = shift;
my $encoding = shift;

# change /xc4/xbe/xd7/xd3/xc3/xc0 into %c4%be%d7%d3%c3%c0
$string =~ s///x(/w{2})/%/1/gi;

# uri unescape
$string = uri_unescape($string);

if ( $string =~ m/^([/x00-/x7f]|[/xc2-/xdf][/x80-/xbf]|/xe0[/xa0-/xbf][/x80-/xbf]|[/xe1-/xef][/x80-/xbf][/
x80-/xbf]|/xf0[/x90-/xbf][/x80-/xbf][/x80-/xbf]|[/xf1-/xf7][/x80-/xbf][/x80-/xbf][/x80-/xbf])*$/ )
{
$string = decode("utf-8", $string);
$string = encode($encoding, $string);
}

# trim space
$string =~ s/^/s+//;
$string =~ s//s+$//;

# reverse "+", ";" to space
$string =~ s/;+//g;
$string =~ s//s+//+/g;

#print $string."/n";
return $string;
}


這裏有更多關於GOOGLE UTF-8查詢的補丁。

基於地理信息的插件安裝:

GeoIP 和 Geo::IPfree(awstats 5.5+)/nGeoIP和Geo::IPfree都免費的是國家/IP的影射表,比通過DNS反相解析域名得到的統計準確,而且速度快。GeoIP的API都是免費的,缺省庫是免費的,收費的是它的數據更新服務。Geo::IPfree不僅代碼是公開的,而且庫數據也是公開的,因此可以自己定製,比如:中國城市到IP的映射。

安裝:
下載GeoIP
解包後
./configure;make
#make install


下載Geo::IPfree
perl Makefile
make
#make install


配置:通過在配置文件中啓用插件GeoIP或者Geo::IPfree


參考資料:

AWStats
http://awstats.sourceforge.net/


Webalizer
http://www.webalizer.org/


日誌分析工具
http://directory.google.com/Top/Computers/Software/Internet/Site_Management/Log_Analysis/


商業日誌統計/分析工具
http://directory.google.com/Top/Computers/Software/Internet/Site_Management/Log_Analysis/Commercial/


多站點的日誌合併統計:
http://www.chedong.com/tech/rotate_merge_log.html


日誌統計對於分析搜索引擎對站點的影響具有非常重要的意義 http://www.chedong.com/tech/google.html


AWStats 本身也包含了很多插件,包括將多個站點的統計再次彙總輸出,IIS日誌時間轉換,URL的標題映射等http://awstats.sourceforge.net/awstats_contrib.html

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