AWStats: Apache/IIS的日志分析工具 ——在Windows平台上的使用简介

 
AWStats: Apache/IIS的日志分析工具
    ——在Windows平台上的使用简介



内容摘要:AWStats的使用简介和配置一些改进说明。很高兴看到在AWStats 6.3版本开始:中文用户基本上已经只需要将配置文件中将 LoadPlugin="decodeutfkeys" 启用基本上就没有什么中文搜索引擎的统计问题了,目前增加了# Minor chinese search engines 'baidu/.com','search/.sina/.com','search/.sohu/.com',这3个搜索引擎。 包含了针对国内主要搜索引擎和门户网站定义的补丁(解包后覆盖lib/目录下的原程序目录即可)
 
日志统计系统在站点的用户行为分析中扮演了重要的角色,尤其是对于来自搜索引擎的关键词访问统计:是很有效的用户行为分析数据来源。随着互联网多年的发展,WEB日志统计工具已经越来越成熟,功能也越来越丰富。其中有很多是开放源代码的, AWStats就是其中非常优秀的一款。
AWStats: Advanced Web Statistics
AWStats是在 Sourceforge上发展很快的一个基于Perl的WEB日志分析工具。相对于另外一个非常优秀的开放源代码的日志分析工具 Webalizer,AWStats的优势在于:
界面友好:可以根据浏览器直接调用相应语言界面(有简体中文版)

基于Perl:并且很好的解决了跨平台问题,系统本身可以运行在GNU/Linux上或Windows上(安装了 ActivePerl后);分析的日志直接支持Apache格式 (combined)和IIS格式(需要修改)。Webalizer虽然也有 Windows平台版,但目前已经缺乏维护;
AWStats完全可以实现用一套系统完成对自身站点不同WEB服务器: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/ 下载安装包后:
 
Windows 2000:按照后台脚本模式运行,直接解包,然后移动到D:/AWStats目录下
把图标icon目录复制到IIS的发布目录下:inetpub/icon
数据源日志格式和按天的截断规则

对于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=liujien调用的就是同目录下的 awstats.liujien.conf 配置文件;
如果没有指定-config,还会找当前目录下的awstats.conf或者/etc/awstats.conf作为缺省配置文件。
所以最好把缺省的awstats.model.conf 重命名成 awstats.yoursite.conf;比如:awstats.www.xxxx.com.conf,
对于多个站点的统计,AWStats的配置文件包含功能还是非常有用的,我们可以把通用的配置放在一个文档中,然后用(5.4版本以后开始支持) Include配置将通用配置包含在各个具体配置文件的头部,然后用其他配置覆盖通用配置中的相应属性,比如:
Include="common.conf"
LogFile="/path/to/bbs/access_log"
SiteName="bbs.xxxx.com"
最少的配置文件修改:LogFile SiteDomain LogFormat

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日志
其他需要注意的事项:
AWStats缺省不过滤swf文件,会把.swf算成PageView,所以如果站点上swf文件主要是广告的话最好还是要过滤掉:
日志分析
./awstats.pl -update -config=sitename -lang=cn
比如:./awstats.pl -update -config=liujien
会自动调用awstats.liujien.conf这个配置文件
统计输出
Windows 2000 http://localhost/awstats/awstats.liujien.html
日志统计自动运行
 
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
多站点日志统计
AWStats自带了一个批处理工具:tools/awstats_updateall.pl,可以批量地遍历一个目录下所有地配置文件并运行统计。因此剩下的工作就主要是日志的同步问题了。
针对多个站点,很多配置选项是重复的,如果每个配置文件都修改维护起来会很麻烦,AWStats从5.4版本开始提供了配置文件包含的功能,所以我们可以配置一个通用配置,比如:common.conf
然后其他站点的配置设置为:可以通过后面的选项覆盖和缺省不一致的配置。
awstats.bbs.liujien.conf
Include "liujien.common.conf"
LogFile "/path/to/bbs_log"
SiteName "bbs.liujien.com"
awstats.www.liujien.conf
Include "liujien.common.conf"
LogFile "/path/to/www_log"
SiteName "www.liujien.com"
HostAliases="liujien.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=liujien
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两条记录。
我增加了以下函数用于Google 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+)
GeoIP和Geo::IPfree都免费的是国家/IP的影射表,比通过DNS反相解析域名得到的统计准确,而且速度快。GeoIP的API都是免费的,缺省库是免费的,收费的是它的数据更新服务。Geo::IPfree不仅代码是公开的,而且库数据也是公开的,因此可以自己定制,我曾经设想做一个中国城市到IP的映射。
GeoIP安装:
先下载C库: GeoIP C解包后
%./configure; make
#make install

然后下载Perl库: GeoIP Perl解包后
%perl MakeFile.PL; make
#make install
Geo::IPfree安装:
下载 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
 
 
 
我们可以在它的官方网站上下载到源码( http://awstats.sourceforge.net/)。
下面简单介绍一下在WIN32+IIS6.0平台下它的安装步骤:
1. Perl环境搭建
 由于AWStats是基于Perl的,所以在安装前必须让IIS支持Perl脚本的解析。这里简要介绍一下配置过程:在 http://www.activestate.com/上下载到Perl安装包,如果选择.exe格式的则在安装过程中选择在IIS中支持即可完成配置,如果选择.zip格式的安装包,则需对其解压,并在需要支持Perl脚本的虚拟目录中添加一条应用程序映射:应用程序为C:/Perl/bin/perl.exe "%s" %s(根据实际路径可能有所不同),扩展名为.pl,动作限制为GET,HEAD,POST,这样在这个虚拟目录下的.pl文件就会被当作Perl脚本解析了。
2. 下载源码
 从官方网站 http://awstats.sourceforge.net/上可以下载到程序的最新版本,我下载到的是当前最新版本AWStats 6.4。网站上提供了多种格式的安装文件下载(.exe,.zip,.tar.gz等),.exe格式更适合于快速安装配置,而这里为了让安装配置过程更DIY一些,我选择.zip版本。
 下载后解压源码,它包含三个文件夹docs,tools和wwwroot。docs目录下包含了英文的安装配置说明和帮助;tools目录下包含了可使用的Perl脚本;wwwroot目录下则包含安装所需要的源码。
3. 建立工作目录
 在硬盘上建立一个目录C:/wwwroot/awstats/,并将解压后源代码中wwwroot/cgi-bin/目录下的文件全部复制到C:/wwwroot/awstats/下,并将图标文件夹wwwroot/icon/复制到任何一个可访问的目录下。在IIS中建立一个虚拟目录指向C:/wwwroot/awstats/,并按步骤1的方法配置应用程序映射,使其支持.pl。
4. 扩展IIS日志
 IIS的默认日志选项中并没有包含足够的属性以供AWStats进行分析,因此我们要对IIS日志进行扩展。在站点属性中配置扩展属性,使日志中包含以下属性:
date
time
c-ip
cs-username
cs-method
cs-uri-stem
cs-uri-query
sc-status
sc-bytes
cs-version
cs(User-Agent)
cs(Referer)
 由于IIS日志使用的是格林威治标准时间,和我们的本地时间有很大偏差,为了让IIS日志文件名本地化,请在常规属性页中勾选“文件命名和回卷使用本地时间”。另外,我们还可以自定义日志文件保存路径,可以保证在重装系统后不丢失历史日志,这里我将它设置为D:/IISLOG/。
5. AWStats配置
 将配置文件C:/wwwroot/awstats/awstats.model.conf 更名为awstats.www.lrcpub.com.conf。这里的www.lrcpub.com表示虚拟主机名称。
 下面列出了常要配置的参数,你可以根据自己的情况配置其它参数:
+ 将LogFile值改为IIS日志存放的路径D:/IISLOG/W3SVC1/ex%YY-0%MM-0%DD-0.log(也可以是相对路径),%YY-0,%MM-0,%DD-0中的0表示时间偏移量为0小时,关于时间格式符的更多帮助,请查看该配置文件注释中的说明。
+ 将LogFormat改为IIS日志的输出格式,字段可以从IIS日志中复制得到,这里是:
 LogFormat=2
 LogFormat="date time c-ip cs-username cs-method cs-uri-stem cs-uri-query sc-status sc-bytes cs-version cs(User-Agent) cs(Referer)"
+ 将SiteDomain改为站点的主域名,这里是:
 SiteDomain="www.lrcpub.com"
+ 如果站点还有其它访问方式,比如使用IP访问,则可在HostAliases添加,这里是:
 HostAliases="lrcpub.com 218.193.12.34"
+ 将DirIcons改为图标文件夹的相对路径,我把该文件夹话在网站的根目录下,因此这里保持/icon不变。
+ 如果想在浏览器上更新日志分析,则请将AllowToUpdateStatsFromBrowser设置为1。
+ 由于IIS的时差,为了使分析结果显示正确时间,我们必须设置时差,找到LoadPlugin="timezone +2"这行,去前面的注释符#,并将时差改为+8即可,即
 LoadPlugin="timezone +8"
结束了 :)
 

你可能感兴趣的:(WEB技术)