21
2007
08

IIS日志分析工具AWStats配置与应用详解(下)

完全可以实现用一套系统完成对自身站点不同WEB服务器:GNU/Linux/Apache 和Windows/IIS服务器的统一统计。 效率比较高:AWStats输出统计项目比Webalizer丰富了 很多,速度仍可以达到Webalizer的1/3左右。
安装
AWStats安装很简单,只需要把它解压到合适的目录(通常为 /usr/local/awstats),然后使用tools/awstats_configure.pl来帮助配置就好啦!
大概说说这个脚本(awstats_config.pl)要做的事情:
首先它会寻找httpd的配置文件,并查看其中设置的日志格式,如果你的日志格式是common的话,它会建议你改为combined格式,并且如果你同意的话,它会帮你改掉的。
然后,它将会把类似如下的配置文件追加到你的httpd的配置文件中,如果如下部分不存在的话:
#
# Directives to add to your Apache conf file to allow use of AWStats as a CGI
# Note that path "/usr/local/awstats/" must reflect your AWStats install path.
#
Alias /awstatsclasses "/usr/local/awstats/wwwroot/classes/"
Alias /awstatscss "/usr/local/awstats/wwwroot/css/"
Alias /awstatsicons "/usr/local/awstats/wwwroot/icon/"
ScriptAlias /awstats/ "/usr/local/awstats/wwwroot/cgi-bin/"
#
# This is to permit URL access to scripts/files in AWStats directory.
#
Options None
AllowOverride None
order allow,deny
Allow from all
然后,它将重启你的httpd,以使得配置生效。
最后它将要你输入AWStats配置文件的名字,比如我们输入"oisp.net",它将把wwwroot/cgi-bin/awstats.model.conf文件复制到/etc/awstats下并命名为 awstats.oisp.net.conf
安装完成
配置
配置文件为awstats.sunnavy.net.conf。详细说明请看这里。
主要注意以下几个字段:
LogFile
要统计的日志文件的路径
LogType
W代表网站日志;
S代表流服务日志;
M代表邮件日志;
F代表ftp日志;
LogFormat
日志的格式。比如"%host %other %logname %time1 %methodurl %code %bytesd %refererquot %uaquot"
SiteDomail
域名。如果你有多个域名,把它们加到HostAlias字段里
DirData
统计结果放置的目录
生成/升级统计结果
第一两次分析日志最好手动来做,这样可以很容易发现哪里出错了。
升级统计结果的命令为
# awstats.pl -config=oisp.net -update
升级结束后,你将能看到类似如下的输出:
Update for config "/etc/awstats/awstats.sunnavy.net.conf"
With data in log file "/pathtoyourlog/yourlog.log"...
Phase 1 : First bypass old records, searching new record...
Searching new records from beginning of log file...
Phase 2 : Now process new records (Flush history on disk after 20000 hosts)...
Jumped lines in file: 0
Parsed lines in file: 225730
Found 122 dropped records,
Found 87 corrupted records,
Found 0 old records,
Found 225521 new qualifed records.
解释一下几个名词:
dropped records
丢弃掉的记录,因为这些记录不是用户的http请求或者请求被AWStats filters 过滤掉了(参见SkipHosts, SkipUserAgents, SkipFiles, OnlyHosts, OnlyUserAgents and OnlyFiles)
如果你想看那些记录被丢弃掉了,在命令行上加 -showdropped 选项。
corrupted records
不满足我们设定的LogFormat的记录,如果所有记录都不满足,那肯定不是AWSstats的配置写错了,就是Httpd的配置写错了,或者两个都错了...
如果你想看那些记录是坏了的,在命令行上加 -showcorrupted 选项。
Old records
是这次升级之前已经处理过的记录。既然已经处理过了,就不必再处理一次了,呵呵。
New records
这是新统计成功的的记录
我们需要定时更新记录,我们可以做个定时任务(crontab)
读取统计结果主要有两种方法:
命令行下直接生成静态网页和直接用浏览器查看动态网页
命令行下生成静态网页
如下命令生成主报告:
# perl awstats.pl -config=oisp -output -staticlinks > awstats.oisp.html
output还有些别的选项,分别为
alldomains allhosts lasthosts unknownip alllogins lastlogins allrobots lastrobots urldetail urlentry urlexit borwserdetail osdetail unknownbrowser unknownos refererse refererpages keyphrases keywords errors404
比如,也可以这样:
# perl awstats.pl -config=oisp -output=alldomains -staticlinks >awstats.oisp.alldomains.html
你可以使用awstats_buildstaticpages.pl来一下生成所有这些页面或者生成pdf格式的文件(生成pdf的话需要htmldoc程序)
你可以在这些output选项(urldetail, urlentry, urlexit, allhosts, refererpages)后加过滤器,记得要在output选项后加":"
比如
# perl awstats.pl -config=oisp.net -output=urldetail:/open -staticlinks > awstats.oisp.net.urldetailwithfilter.html
如果想生成某天的统计结果,加上这些选项:-day=DD -month=MM -year=YYYY
如果想生成某月的统计结果,加上这些选项:-month=MM -year=YYYY
如果想生成某年的统计结果,加上这些选项:-month=all -year=YYYY
直接用浏览器查看动态网页
比如,可以用这个url
http://www.domainname.com/awstats/awstats.pl?config=oisp.net
在命令行下的那些参数在URL里还可以使用,比如
http://www.domainname.com/awstat ... p;output=unknnownos
如果AllowToUpdateStatsFromBrowser参数设为1的话,那么可以直接在浏览器上点击"Update now"来更新统计结果 注意:如果需要直接在线更新统计结果的话,存放统计结果的目录(比如 /var/lib/awstats)要设为apache用户(比如nobody)可写。
AWStats 的配置指令和选项
主设置(必须设置)
LogFile
"LogFile"包含要分析的日志文件,可以使用绝对路径或者相对路径(对 awstats.pl而言)。
比如:
LogFile = /var/log/apache2/access_log
如果需要设定动态的文件名(比如日志文件名中含有该日志生成的日期),可以使用标签(tags):
tags 含义
%YYYY-n n小时前的年(四位,比如2006)
%YY-n n小时前的年(两位,比如06)
%MM-n n小时前的月(比如01)
%MO-n n小时前的月(比如Jan)
%DD-n n小时前的天(比如03)
%HH-n n小时前的小时(比如03)
%NS-n n小时前的秒(自1970年0:00以来,只精确到天,比如1136332800,是格林威治时间2006年1月4日的零点)
%WM-n n小时前的周(week in month,值为01-05)(注意,文档与实际并不一致,文档中值为1-5,可能是个bug)
%Wm-n n小时前的周(week in  month,值为0-4)
%WY-n n小时前的周(week in  year,值为01-52)
%Wy-n n小时前的周(week in  year,值为00-51)
%DW-n n小时前的天(day in  week,值为1-7,1=sunday,如果需要使得1=monday,减去24小时就可以了。)
%Dw-n n小时前的天(day in  week,值为0-6,0=sunday,如果需要使得0=monday,减去24小时就可以了。)
比如:
LogFile = /var/log/apache2/access_log.%YYYY-24-%MM-24-%DD-24.txt
还可以使用管道:
LogFile = gzip -d
如果有多个日志文件需要分析(比如做了负载均衡),可以这样:
LogFile = "/pathtotools/logresolvemerge.pl *.log |"
LogType
日志的类型:
W web日志
M mail日志
F ftp日志
比如:
LogType=W

LogFormat
日志的格式:
1 Apache 或者 Lotus Notes/Domino 的combined日志格式
2 老的IIS的日志格式
3 Webstar的native日志格式
4 Apache 或者 Squid 的common日志格式
我们还可以自己指定日志格式,下表是日志格式的各个字段
%host 客户端的主机名或者IP地址
%lognamequot Authenticated login/user with format: "alex"
%logname Authenticated login/user with format: alex
%time1 日期,格式为 [dd/mon/yyyy:hh:mm:ss +0000] 或 [dd/mon/yyyy:hh:mm:ss]
%time2 日期,格式为 yyyy-mm-dd hh-mm-ss
%time3 日期,格式为 Mon dd hh:mm:ss 或 Mon dd hh:mm:ss yyyy
%time4 日期,格式为 dddddddddd(unix的时间戳)
%methodurl 方法和url,格式为:"GET /index.html HTTP/x.x"
%methodurlnoprot 方法和url,格式为:"GET /index.html"
%method 方法,格式为:GET
%url URL,格式为:/index.html
%query 查询的字符串(Query
string
) ( URLWithQuery 选项要用)
%code 返回的状态码Return code status (with format for web log: 999)
%bytesd 文档的大小(字节)
%refererquot Referer page,格式为:"http://from.com/from.htm"
%referer Referer page,格式为:
http://from.com/from.htm

%uaquot User agent,格式为:"Mozilla/4.0 (compatible, ...)"
%ua User agent,格式为:Mozilla/4.0_(compatible...)
%gzipin mod_gzip compression input bytes: In:XXX
%gzipout mod_gzip compression output bytes & ratio: Out:YYY:ZZpct.
%gzipratio mod_gzip compression ratio: ZZpct.
%deflateratio mod_deflate compression ratio with format: (ZZ)
%email EMail sender (for mail log)
%email_r EMail receiver (for mail log)
%virtualname Web sever virtual hostname. Use this tag when same log contains data of several virtual web servers. AWStats will discard records not in SiteDomain nor HostAliases
%cluster If log file is provided from several computers (merged by logresolvemerge.pl), this tag define field of cluster id.
%other 如果日志文件有一些字段不被上面的列表包括,使用%other
比如:
LogFormat= 1
LogFormat= "%host %other %logname %time1 %methodurl %code %bytesd %refererquot %uaquot"
LogSeparator
日志各个字段间的分隔符
比如:
LogSeparator=" "
DNSLookup
DNS反查,可取的值如下:
0 不用DNS反查
1 完全启用DNS反查
2 DNS反查只从静态的DNS的缓存中取得
比如:
DNSlookup=2
DirData
统计结果存放的目录。
注意:如果需要直接在浏览器上更新统计结果的话,这个目录要设为apache用户 (比如nobody)可写。
比如:
DirData="/var/lib/awstats"
DirCgi
awstats的cgi-bin目录的相对或者绝对URL路径。
这个参数只是在命令行下使用-output选项时才有用
比如:
DirCgi="/cgi-bin"
DirIcons
awstats的icon目录的相对或者绝对URL路径。
比如:
DirIcons="/icon"
SiteDomain
主域名。如果日志里含有多个域名的话,AWStats将过滤掉非此域名的访问。(当然,你的日志格式里得含有域名的信息)
当ShowLinksOnUrl选项设为1时,这个参数用来生成URL路径。
如果是分析mail日志,这里写上mail服务器的域名。
比如:
SiteDomain="www.sunnavy.net"
HostAliases
可以在这里写上其他所有可以访问这个站点的域名,IP等等。这些值之间用空格隔开。为了获得最好的性能,这个参数的值越少越好。这个参数还用来分析日志里的referer字段,以区分一个referer URL是本地的还是别的站点的。
还可以使用正则表达式(REGEX[value]),比如:
HostAliases = "localhost 127.0.0.1 REGEX[^.*\.myserver\.com$]"
AllowToUpdateStatsFromBrowser
可选值为0或1。
如果设为1的话,将在报告页面里增加一个"update now"的按钮,这样可以在线更新统计结果。
比如:
AllowToUpdateStatsFromBrowser=0
AllowFullYearView
AWStats是按月来存放数据库的。这使得可以很快地生成统计结果。如果你在命令行下选择-month=all或者在web上选择-year-,AWStats将把一年的数据全部加载以生成统计结果,这将耗费大量的资源。
可选值为:
0 不允许
1 只允许在命令行下使用,web上不可见。
2 只允许在命令行下使用,web上可见但不可用。
3 允许
比如:
AllowFullYearView=2
可选的设置(不是必需但可以增加AWStats的功能)
EnableLockForUpdate
可选值为0或1。
如果设为1的话,当更新统计结果的时候,AWStats可以在TEMP或者TMP目录设置一个锁文件,这样可以避免同时有多个进程更新,避免可能的冲突以及DoS攻击。
可是,当使用锁文件的时候,你可能会碰到锁文件不能自动删除的问题,就只能手动删除,所以你需要登陆服务器的权限。
比如:
EnableLockForUpdate=0
DNSStaticCacheFile
AWStats可以通过一个静态(static)的DNS缓存(cache)文件进行DNS反查。这个文件默认的路径为DirData,这个文件不能改变(This file is never changed)。
DNS文件的格式为'minsince1970 ipaddress resolved_hostname'或者只是 'ipaddress resolved_hostname'
比如:
DNSStaticCacheFile="dnscache.txt"
DNSLastUpdateCacheFile
AWStats可以通过一个静态(static)的DNS缓存(cache)文件进行DNS反查。在每次统计结果更新完后,这个文件会自动消除和重新生成,所以不需要手动创建或改变。这个文件将被放在DirData目录。
只有当DNSLookup=1时,这个选项才有作用。
注意:如果DNSStaticCacheFile存在的话,AWStats将会在检查 DNSStaticCacheFile完后检查这个文件。
比如:
DNSLastUpdateCacheFile="dnscachelastupdate.txt"
SkipDNSLookupFor
可以指定某些IP不被DNS反查。这个选项只有在DNSLookup=1时才起作用。IP之间用空格隔开。
注意:可以使用正则表达式。
比如:
SkipDNSLookupFor="123.123.123.123 REGEX[^192\.168\.]"

AllowAccessFromWebToAuthenticatedUsersOnly

可选值为0或1
接下来的这两个选项允许你保护你的配置文件不被AWStats访问,如果这个AWStats是被未经认证的web用户访问的话。这样的话,AWStats必须被httpd设为认证访问。
AllowAccessFromWebToAuthenticatedUsersOnly=0
AllowAccessFromWebToFollowingAuthenticatedUsers
这个参数指定允许访问统计结果的用户名单,只有在AllowAccessFromWebToAuthenticatedUsersOnly=1时才起作用。
比如:
AllowAccessFromWebToFollowingAuthenticatedUsers="sunnavy sunhj"

AllowAccessFromWebToFollowingIPAddresses

当这个参数定义后,用户从浏览器访问统计结果时所用的IP地址将被检查是否在指定的IP里。
比如:
AllowAccessFromWebToFollowingIPAddresses="127.0.0.1 123.123.123.1-123.123.123.255"
CreateDirDataIfNotExists
可选值为0和1。
如果DirData目录不存在的话,AWStats将返回一个错误。我们可以让AWStats自行创建这个目录,如果这个值设为1的话。
比如:
CreateDirDataIfNotEXists=1
BuildHistoryFormat
我们可以选择AWStats历史数据库的保存格式,"xml"或者"text"。
比如:
BuildHistoryFormat=text
BuildReportFormat
生成的统计结果格式,"html"或者"xhtml"。
比如:
BuildReportFormat=html
SaveDatabaseFilesWithPermissionsForEveryone
数据库文件是否对所有人可写,可选值为0或1。如果我们想在浏览器上直接更新,这个值我们得设成1。
比如:
SaveDatabaseFilesWithPermissionsForEveryone=0
PurgeLogFile
是否清除已经分析过的日志文件,可选值为0或1。
比如:
PurgeLogFile=0
ArchiveLogRecords
是否将日志文件归档,可选值为0或1。归档文件放在DirData里。
如果PurgeLogFile设为0,则这个选项将不起作用。
ArchiveLogRecords=0
KeepBackupOfHistoricFiles
是否将历史文件备份,可选值为0或1。
AWStats更新时,将覆盖旧文件,如果这期间机器出了故障的话(比如硬盘满了),我们的历史文件就会丢了。可以将这个选项设为1来备份旧文件(备份文件以.bak结尾)
比如:
KeepBackupOfHistoricFiles=0
DefaultFile
默认的index页面的文件名。
比如:
DefaultFile="index.html"
SkipHosts
分析时跳过的主机,主机之间用空格隔开。
如果日志已经做了DNS反查,这里必须写主机名,否则得写IP地址。可以使用正则表达式。
比如:
SkipHosts="127.0.0.1 192.168.0.1"
SkipUserAgents
分析时跳过的UserAgent,即浏览器的型号,不区分大小写,型号之间用空格隔开,可以使用正则表达式。
如果你想跳过某个机器人访问,应该更新robots.pm文件而不这个选项。
比如:
SkipUserAgents="wget curl"
SkipFiles
分析时跳过的URL,URL之间用空格隔开,可以使用正则表达式。
是否区分大小写,由URLNotCaseSensitive决定。
比如:
SkipFiles="test.html"
OnlyHosts
SkipHost的反义词。
比如:
OnlyHosts=""
OnlyUserAgents
SkipUserAgents的反义词。
比如:
OnlyUserAgents=""
OnlyFiles
OnlyFiles的反义词。
比如:
OnlyFiles=""
NotPageList
这个列表保存一些URL(文件扩展名),带这些扩展名的URL将被看做 "Hit Only"而不是"Hit"和"Page/Download",因此将不被包括在"TOP Pages/URL report"里。
比如:
NotPageList="css js class gif jpg jpeg png bmp"
ValidHTTPCodes
有效的HTTP返回状态码,在该列表之外的均列在错误报告的表中。
比如:
ValidHTTPCodes="200 304"
HTTP的返回状态码见这里
ValidSMTPCodes
有效的SMTP状态码。
比如:
ValidSMTPCodes="1 250"
AuthenticatedUsersNotCaseSensitive
认证的用户名不区分大小写,可选值为0或1。
比如:
AuthenticatedUsersNotCaseSensitive=0
URLNotCaseSensitive
URL不区分大小写,可选值为0或1。
比如:
URLNotCaseSensitive=0
URLWithAnchor
是否保留URL中的锚。
比如:
URLWithAnchor=0
URLQuerySeparators
URL中的查询分隔符(QuerySeparators)。
比如:
URLQuerySeparators="?;"
URLWithQuery
是否在统计结果中保留查询字符串,可选值为0或1。
如果保留,则"mypage.html?id=x"和"mypage.html?id=y"将被当作两个不同的 URL。
比如:
URLWithQuery=0
URLWithQueryWithOnlyFollowingParameters
仅保留本列表里的查询字符串的参数。
只有当URLWithQuery=1时才起作用,并且不能和 URLWithQueryWithoutFollowingParameters共同使用。
比如:
URLWithQueryWithOnlyFollowingParameters="param"
URLWithQueryWithoutFollowingParameters
去掉在本列表里的查询字符串的参数。
只有当URLWithQuery=1时才起作用,并且不能和 URLWithQueryWithOnlyFollowingParameters共同使用。
比如:
URLWithQueryWithoutFollowingParameters=""
URLRefererWithQuery
是否在统计结果中的Referer页面中保留查询字符串,可选值为0或1。
如果保留,则"mypage.html?id=x"和"mypage.html?id=y"将被当作两个不同的 Referer页面。
比如:
URLReferrerWithQuery=0
WarningMessages
是否打开AWStats的提醒消息,这些消息可以帮你找出设置的问题或者帮你更好地使用AWStats,所以打开比较好。 比如:
WarningMessages=1
ErrorMessages
当有错误发生时,AWStats根据所发生的错误输出信息。也可以自定义输出的信息。
比如:
ErrorMessages=""
DebugMessages
是否打开Debug功能。如果打开的话,当参数含debug=x时,AWStats将输出很多相关信息来帮助我们解决问题。
比如:
DebugMessages=0
NbOfLinesForCorruptedLog
检查日志格式是否正确时查看前文件的多少行。如果这些行的日志都是不符和格式的, AWSTats就认为这个日志文件的格式是不对的。
比如:
NbOfLinesForCorruptedLog=50
WrapperScript
CGI下访问的脚本名。
比如:
WrapperScript="awstats.pl"
DecodeUA
如果web服务器为Roxen,则设为1,否则,设为0
比如:
DecodeUA=
MiscTrackerUrl
比如:
AWStats可以用一个js脚本检测很多浏览器相关的选项,包括:
Screen size
Screen color depth
Java enabled
Macromedia Director plugin
Macromedia Shockwave plugin
Realplayer G2 plugin
QuickTime plugin
Mediaplayer plugin
Acrobat PDF plugin

« 上一篇 下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。