http://9ng.cn/1/viewspace-27213
本文遵循创作共用版权协议,转载请保留原文链接和原文作者
本文链接:http://9ng.cn/1/viewspace-27213
本文作者:九尾银狐
1. 关于本文
本文将以AWStats 6.7为例,以 5为平台,讲述AWStats的安装和配置。
2. 关于AWStats
AWStats是一个免费、功能强大、特性丰富的日志分析工具,它能分析由WEB、STREAMING、FTP、MAIL等服务生成的日志,并生成先进的统计图表。AWStats作为CGI或从命令行运行,在数个图形网页中显示你日志中包含的所有可能信息。它利用一部分档案资料就能经常很快地处理大量日志档案。它能分析的日志文件来自从各大服务器工具,如 Apache日志文件 (NCSA combined/XLF/ELF log format or common/CLF log format)、WebStar、IIS (W3C日志格式)及许多其他Web、Proxy(代理服务器)、Wap、流服务器、邮件服务器和一些FTP服务器。
3. AWStats的安装
3.1 下载最新稳定发行版(GA)的AWStats软件
访问AWStats网站http://awstats.sourceforge.net/?seenIEPage=1#DOWNLOAD下载最新稳定发行版的AWStats软件包。本文使用的是6.7版本,在linux系统下用下面的命令下载:
wgethttp://nchc.dl.sourceforge.net/sourceforge/awstats/awstats-6.7.tar.gz
3.2 解压缩下载的软件包
首先建立一个工作目录( 笔者建议的目录为/usr/local/src/awstats ) :
mkdir -p /usr/local/src/awstats
将下载的软件包移至工作目录:
mv awstats-6.7.tar.gz /usr/local/src/awstats
进入工作目录并用tar命令解压源码包:
cd /usr/local/src/awstats
tar zxvf awstats-6.7.tar.gz
命令执行结束后,当前工作目录下将生成一个新的子目录awstats-6.7。
3.3 安装并生成默认配置
首先将上一步生成的awstats-6.7目录移动到欲安装的目录,本文示例为/usr/local/awstats :
mv /usr/local/src/awstats/awstats-6.7 /usr/local/awstats
更改文件属主为运行awstats的用户和组,本文示例为root:
chown -R root:root /usr/local/awstats
更改文件权限:
chmod -R 755 /usr/local/awstats
进入awstats目录下的tools目录:
cd /usr/local/awstats/tools
运行perl脚本awstats_configure.pl生成默认配置:
perl awstats_configure.pl
脚本运行过程中会询问以下问题:
-----> Check for web server install
Enter full config file path of your Web server.
Example: /etc/httpd/httpd.conf
Example: /usr/local/apache2/conf/httpd.conf
Example: c:/Program files/apache group/apache/conf/httpd.conf
Config file path ('none' to skip web server setup):
>/usr/local/apache-2.2.6/conf/httpd.conf
此处是询问你web服务的配置文件路径,如果输入none,则跳过更新web服务配置文件,以后手动更新。因为仅当此perl脚本识别apache配置文件指令CustomLog指定的格式为common且指令前没有空格时才更新apache配置文件,笔者推荐此处输入none,以后手工配置。本文示例为 /usr/local/apache-2.2.6/conf/httpd.conf 。
-----> Check and complete web server config file '/usr/local/apache-2.2.6/conf/httpd.conf'
Warning: You Apache config file contains directives to write 'common' log files
This means that some features can't work (os, browsers and keywords detection).
Do you want me to setup Apache to write 'combined' log files [y/N] ? y
此处为检测到apache配置文件中定制日志格式(CustomLog)为common格式,建议更改为combined格式,输入 y 接受建议。
-----> Need to create a new config file ?
Do you want me to build a new AWStats config/profile
file (required if first install) [y/N] ? y
此处是询问你是否要建立一个新的AWStats配置文件,如果是第一次安装,则输入 y ,以建立一个新的配置文件
-----> Define config file name to create
What is the name of your web site or profile analysis ?
Example:www.mysite.com
Example: demo
Your web site, virtual server or profile name:
>www.entage.net
此处是询问你的站点或虚拟主机或配置文件的名称,将生成一个awstats.此处输入的名称.conf的配置文件,如果只分析一个站点,直接用站点域名就好了,如果要分析多个站点,可以把此处生成的文件做为公用的模板,取个易理解的名字好了,本文示例为www.entage.net 。
-----> Define config file path
In which directory do you plan to store your config file(s) ?
Default: /etc/awstats
Directory path to store config file(s) (Enter for default):
>
此处是询问AWStats配置文件的存放路径,必须为/etc/awstats,、/usr/local/etc/awstats、 /etc 或者与awstats.pl文件同一目录,默认为/etc/awstats,直接回车接受默认值。
3.4 设置apache日志精确的按天分割
使用AWStats进行日志分析需要尽可能准确的按天保存日志,这样可以提高AWStats的处理速度。
本文推荐使用日志分割工具cronolog,安装方法请参阅本文作者另外一篇文章“日志分割工具cronolog”,这里不再详述。
本文示例为:
CustomLog "|/usr/local/cronolog/sbin/cronolog /usr/local/apache-2.2.6/logs/access_log.%Y%m%d" combined
3.5设置apache配置文件
如果3.3节中正确检测到CustomLog指定的格式为common,则awstats_config.pl脚本已经正确更新了apache配置文件,可以跳过此步。
编辑apache配置文件,以便能通过web查看统计报表,本文示例为:
vi /urs/local/apache-2.2.6/conf/httpd.conf
按下面的要求进行更改:
修改CustomLog指令,设置定制日志格式为combined,本文示例为:
CustomLog "/usr/local/cronolog/sbin/cronolog /usr/local/apache-2.2.6/logs/access_log.%Y%m%d" combined
或者,此时你尚未安装cronolog,可按下面的示例更改:
CustomLog logs/access_log combined
增加下面的行:
#
# Directives to allow use of AWStats as a CGI
#
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
3.6 重启apache服务,以使设置生效
如果apache是直接rpm安装或yum方式安装,使用下面的命令重启服务:
service httpd restart
如果apache是源码方式安装,使用安装目录bin目录下的apachectl脚本重启服务,本文示例为:
/usr/local/apache-2.2.6/bin/apachectl restart
4. AWStats的配置
4.1 配置文件及指令说明
AWStats配置文件为awstats.virtualhostname.conf(其中virualhostname为你指定的配置名)或awstats.conf,必须在 /etc/awstats、 /usr/local/etc/awstats、 /etc目录或与awstats.pl脚本文件在同一目录,具体位置由执行3.3节中awstats_configure.pl脚本时指定。
AWStats安装完毕会生成一个配置模板文件,在安装目录的wwwroot/cgi-bin目录,文件名为awstats.model.conf,可以把此文件另存为你的配置文件并按实际进行修改。
AWStats配置文件中使用的指令非常多,一般而言默认值即可满足需要,本文重点介绍以下常用指令,完全的指令说明请查看AWStats配置指令官方文档:LogFile、LogType、LogFormat、LogSeparator、SiteDomain、HostAliases、DNSLookup、DirData、DirCgi、DirIcons、AllowToUpdateStatsFromBrowser、 AllowFullYearView、EnableLockForUpdate、LoadPlugin、Include。
每条指令都可以重复多次指定,先前的值被后面的值覆盖,最后一个指定的值有效。
下面是常用指令的说明:
LogFile:指定要分析的日志文件。
格式:LogFile="filename"
filename可以有多种格式:
a. 绝对路径文件名或相对awstats.pl的相对路径文件名
比如:
"/var/log/apache/access.log"
"../log/mycombinedlog.log"
b. 文件名模板,即使用基于日期时间的AWStats标签的动态文件名,下面是这些AWStats标签的含意:
%YYYY-n n小时以前的带世纪的4位数字表示的年
%YY-n n小时以前的不带世纪的2位数字表示的年
%MM-n n小时以前的2位数字表示的月
%MO-n n小时以前的3个字符表示的缩写形式表示的月
%DD-n n小时以前的2位数字表示的日期
%HH-n n小时以前的2位数字表示的小时
%NS-n Unix时间戳
%WM-n 当月的第几周(1-5)
%Wm-n 当月的第几周(0-4)
%WY-n 当年的第几周(01-52)
%Wy-n 当年的第几周(00-51)
%DW-n 一周的第几天(1-7, 1=sunday) ,如果需要(1-7,1=monday) , n用24替换 .
%Dw-n 一周的第几天(0-6, 0=sunday) ,如果需要(0-6,0=monday) ,n用24替换 .
以上标签中,n为数字,如果需要使用当前的年、月、日、时等,n用0替换
例如:
"/var/log/access_log.%YYYY-0%MM-0%DD-0.log"
"/var/log/access_log.%YY-24%MM-24%DD-24.log"
c. 日志来自于一个管道(pipe)
例如:
使用gzip压缩格式的日志文件:
"gzip -d 合并负载均衡的多台服务器日志文件:
"/pathtotools/logresolvemerge.pl *.log |"
本文示例为用4小时前的年、月、日拼出文件名的日志文件:
LogFile="/usr/local/apache-2.2.6/logs/access_log.%YYYY-4%MM-4%DD-4"
LogType:指定要分析的日志文件的类型。
格式:LogType=typename
typename为下面的值:
W - web日志,默认值
M - mail日志
F - ftp日志
本文示例为:
LogType=W
LogFormat:指定日志的格式,必须与你的日志格式匹配。
格式:LogFormat=number|"your_own_personalized_log_format"
number为预定义的格式号:
1 - Apache 或 Lotus Notes/Domino native combined格式 (NCSA combined/XLF/ELF日志格式)
2 - IIS 或 ISA 格式 (IIS W3C 日志格式)
3 - Webstar native 日志格式
4 - Apache 或 Squid native common 日志格式 (NCSA common/CLF日志格式)
当LogFormat=4时, 部分属性(browsers, os, keywords...) 功能不能工作。
your_own_personalized_log_format为自定义日志格式,如果日志格式不属于以上4种预定义格式,则需要使用下面的关键词tag自定义日志格式:
%host 客户端主机名或IP地址(对于mail日志,为发送主机)
%host_r 接收的主机名或IP地址 (仅用于mail日志)
%lognamequot 带双引号的 经认证的 登录/用户 格式为: "alex"
%logname 经认证的 登录/用户 格式为: 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 or Mon dd hh:mm:ss yyyy
%time4 日期和时间 格式为unix时间戳: dddddddddd
%methodurl 请求方式和URL 格式为: "GET /index.html HTTP/x.x"
%methodurlnoprot 请求方式和URL 格式为: "GET /index.html"
%method 请求方式 格式为: GET
%url 请求的URL 格式为: /index.html
%query 查询字符串(被URLWithQuery选项使用)
%code 返回的状态代码(web日志的格式为: 999)
%bytesd 档案的大小,以字节bytes为单位
%refererquot Referer页面 格式为: "http://from.com/from.htm"
%referer Referer页面 格式为: http://from.com/from.htm
%uaquot User agent 格式为: "Mozilla/4.0 (compatible, ...)"
%ua User agent 格式为: Mozilla/4.0_(compatible...)
%gzipin mod_gzip压缩输入的字节(bytes) 格式为: In:XXX
%gzipout mod_gzip压缩输出的字节和压缩比率(bytes & ratio) 格式为: Out:YYY:ZZpct.
%gzipratio mod_gzip压缩比率(ratio) 格式为: ZZpct.
%deflateratio mod_deflate压缩比率(ratio) 格式为: (ZZ)
%email EMail发送者 (仅用于mail日志)
%email_r EMail接收者 (for mail log)
%virtualname web服务器虚拟主机名.当同一日志文件中包含多个虚拟主机的数据时使用,AWStats会抛弃虚拟主机名不在SiteDomain或HostAliases指令中的记录
%cluster 如果日志文件来自不同的主机(使用logresolvemerge.pl合并的), 这个tag定义cluster id
%extraX X为数字,你计划使用ExtraSection属性来生成个性化报告的一个字段
如果日志中有一些字段不包括在上面列表的关键词tag中,使用
%other 其它不使用双引号的字段 格式为: other
%otherquot 其它使用双引号的字段 格式为:"other"
本文示例为:
LogFormat=1
等效的自定义格式为:
LogFormat = "%host %other %logname %time1 %methodurl %code %bytesd %refererquot %uaquot"
LogSeparator:日志字段的分隔符。
格式:LogSeparator="separator"
AWStats默认的日志字段分隔符是空格,如果日志文件不是以空格为字段分隔符,则需要使用此指令指定特定的字段分隔符。如果LogFormat指令的值为预定义的(1、2、3、4),此指令将被忽略。
separator可以是空格、任意字符、以反斜线开始的转义字符(/t 、/| 等)。
默认值及本文示例为:
LogSeparator=" "
SiteDomain:指定站点的主域名或虚拟主机名。
格式:SiteDomain="DomainName"
示例:SiteDomain="www.domain.com"
DomainName默认为空,如果为空,AWStats将拒绝执行。
如果多个虚拟主机使用同一个日志文件(日志格式包括%virtualname字段),此指令告诉AWStats只分析%virtualname字段的值为DomainName的记录;对于单主机日志文件,当ShowLinksOnUrl选项被设置为1时,此指令用来产生完全的URL链接。
本文示例为:
SiteDomain="www.entage.net"
HostAliases:站点的别名,用来访问站点的所有域名、IP地址、虚拟主机名。
格式:HostAliases="AliasesList"
示例:HostAliases="www.myserver.com localhost 127.0.0.1 REGEX[mydomain/.(net|org)$] @/tmp/domainlist.txt"
这个指令用来分析日志文件的refere字段,帮助AWStats区分一个refere字段的URL是同一站点的自身URL还是其它外站的URL。
AliasesList是空格分隔的别名列表,可以使用下面形式的正则表达式值:REGEX[value] ,如果别名列表在一个文件中,也可以使用@/mypath/myfile形式加载文件内容。
本文示例:
HostAliases="www.entage.net 127.0.0.1 localhost"
DNSLookup:是否将访问者的IP地址反向解析为完整的主机名。
格式:DNSLookup=TypeValue
TypeValue 的值为:
0 - 不进行DNS反向解析
1 - 完全启用DNS反向解析,会大大降低处理速度,不要用于访问量非常大的站点
2 - 仅通过静态DNS缓存文件(如果存在)进行DNS反向解析,为默认值
本文示例:
DNSLookup=2
DirData:指定AWSTATS生成数据的存放目录。
格式:DirData="DirName"
DirName为执行AWStats脚本的用户可读写目录,如果启用AllowToUpdateStatsFromBrowser,则运行WEB服务的用户也需要对此目录的读写权限。
本文示例:
DirData="/var/lib/awstats"
DirCgi:指定AWStats的cgi-bin目录的相对或绝对URL。
此指令仅用于AWStats从命令行带-output参数运行时,目的是产生HTML报告页面的链接。
本文示例:
DirCgi="/awstats"
DirIcons:指定AWStats的图标目录的相对或绝对URL。
如果你要生成静态报告("... -output > outputpath/output.html"),指定相对于outputpath的相对路径。
本文示例及默认值:
DirIcons="/awstatsicons"
AllowToUpdateStatsFromBrowser:指定是否允许从浏览器更新数据。
格式:AllowToUpdateStatsFromBrowser=value
value为:
0 - 只允许从命令行或计划任务执行更新
1 - 在报告页面上增加一个update按钮,允许从浏览器更新数据,不建议
本文示例及默认值:
AllowToUpdateStatsFromBrowser=0
AllowFullYearView:是否允许以年为单位分析日志。
格式:AllowFullYearView=value
AWStats默认是以月为单位分析日志数据,此指令设置哪种方式可以按年为单分析日志。
value为以下值之一:
0 - 不允许以年为单位分析日志
1 - 仅允许从命令行以年为单位分析日志,-Year- 值在combo中不可见
2 - 仅允许从命令行以年为单位分析日志,-Year- 值在combo中可见但不可用
3 - 允许从命令行和CGI以年为单位分析日志
本文示例及默认值:
AllowFullYearView=2
EnableLockForUpdate:指定AWStats进行update操作时是否建立锁。
格式:EnableLockForUpdate=value
value为:
0 - 不建锁,可以任意多个进程同时进行update操作
1 - 建立锁,同一时间只能一个进程进行update操作
本文示例及默认值:
EnableLockForUpdate=0
LoadPlugin:加载AWStats插件
格式:LoadPlugin "PluginName PluginOptions"
插件是保存在AWStats安装目录中wwwroot/cgi-bin/plugins目录中的扩展名为.pm的perl模块。
Include:把其它配置文件包括到配置文件中
格式:Include "ConfigFileName"
ConfigFileName为任何有效的AWStats配置文件。
这个指令对于有大量虚拟主机的用户非常有用,可以把所有虚拟主机共同的配置存为一主配置文件,每个虚拟主机的配置文件首行通过此指令把主配置文件包括进来,接下来只需要在虚拟主机配置文件中用少量的需要单独配置的指令来覆盖主配置文件中的指令即可。
4.2 分析Apache服务器日志配置
下面以apache日志为例介绍AWStats的基本配置。
如果只分析一个站点的日志,只需修改3.3节安装时指定的awstats.virtualhostname.conf文件,本文示例为/etc/awstats/awstats.www.entage.net.conf 。
如果有很多虚拟主机的日志需要分析,可以从配置模板生成共用的主配置文件,再单独配置每个虚拟主机。
下面以独立站点为例进行说明:
1) 建立AWStats数据目录并设置相应权限
mkdir /var/lib/awstats
chmod 755 /var/lib/awstats
2) 生成配置文件(如果3.3节指定了配置名,本文示例为www.entage.net ,跳过此步):
cp /usr/local/awstats/wwwroot/cgi-bin/awstats.model.conf /etc/awstats/awstats.www.entage.net.conf
3) 修改配置文件(本文示例为/etc/awstats/awstats.www.entage.net.conf)
vi /etc/awstats/awstats.www.entage.net.conf
按下面的内容修改相应指令:
LogType=W LogFormat=1 LogSeparator=" " DNSLookup=2 DirData="/var/lib/awstats" DirCgi="/awstats" DirIcons="/awstatsicons" AllowToUpdateStatsFromBrowser=0 AllowFullYearView=2 EnableLockForUpdate=0 LogFile="/usr/local/apache-2.2.6/logs/access_log.%YYYY-4%MM-4%DD-4" SiteDomain="www.entage.net" HostAliases="www.entage.net" |
LogType=W LogFormat=1 LogSeparator=" " DNSLookup=2 DirData="/var/lib/awstats" DirCgi="/awstats" DirIcons="/awstatsicons" AllowToUpdateStatsFromBrowser=0 AllowFullYearView=2 EnableLockForUpdate=0 |
Include "/etc/awstats/common.conf" LogFile="/usr/local/apache-2.2.6/logs/access_log.%YYYY-4%MM-4%DD-4" SiteDomain="www.entage.net" HostAliases="www.entage.net 127.0.0.1 localhost" |
Include "/etc/awstats/common.conf" LogFile="/usr/local/apache-2.2.6/logs/bbs_access_log.%YYYY-4%MM-4%DD-4" SiteDomain="bbs.entage.net" HostAliases="bbs.entage.net" |
DirData="/var/lib/awstats" LogType=M LogFormat="%time2 %email %email_r %host %host_r %method %url %code %bytesd" LevelForBrowsersDetection=0 LevelForOSDetection=0 LevelForRefererAnalyze=0 LevelForRobotsDetection=0 LevelForWormsDetection=0 LevelForSearchEnginesDetection=0 LevelForFileTypesDetection=0 ShowMenu=1 ShowSummary=HB ShowMonthStats=HB ShowDaysOfMonthStats=HB ShowDaysOfWeekStats=HB ShowHoursStats=HB ShowDomainsStats=0 ShowHostsStats=HBL ShowAuthenticatedUsers=0 ShowRobotsStats=0 ShowEMailSenders=HBML ShowEMailReceivers=HBML ShowSessionsStats=0 ShowPagesStats=0 ShowFileTypesStats=0 ShowFileSizesStats=0 ShowBrowsersStats=0 ShowOSStats=0 ShowOriginStats=0 ShowKeyphrasesStats=0 ShowKeywordsStats=0 ShowMiscStats=0 ShowHTTPErrorsStats=0 ShowSMTPErrorsStats=1 |
DirData="/var/lib/awstats" LogFile="/var/log/xferlog" LogType=F LogFormat="%time1 %host %logname %method %url %code %bytesd" LogSeparator="/t" NotPageList="" LevelForBrowsersDetection=0 LevelForOSDetection=0 LevelForRefererAnalyze=0 LevelForRobotsDetection=0 LevelForWormsDetection=0 LevelForSearchEnginesDetection=0 ShowLinksOnUrl=0 ShowMenu=1 ShowSummary=UVHB ShowMonthStats=UVHB ShowDaysOfMonthStats=HB ShowDaysOfWeekStats=HB ShowHoursStats=HB ShowDomainsStats=HB ShowHostsStats=HBL ShowAuthenticatedUsers=HBL ShowRobotsStats=0 ShowEMailSenders=0 ShowEMailReceivers=0 ShowSessionsStats=1 ShowPagesStats=PBEX ShowFileTypesStats=HB ShowFileSizesStats=0 ShowBrowsersStats=0 ShowOSStats=0 ShowOriginStats=0 ShowKeyphrasesStats=0 ShowKeywordsStats=0 ShowMiscStats=0 ShowHTTPErrorsStats=0 ShowSMTPErrorsStats=0 |
DirData="/var/lib/awstats" LogFile="/var/log/xferlog" LogType=F LogFormat="%time3 %other %host %bytesd %url %other %other %method %other %logname %other %code %other %other" LogSeparator="/s" NotPageList="" LevelForBrowsersDetection=0 LevelForOSDetection=0 LevelForRefererAnalyze=0 LevelForRobotsDetection=0 LevelForWormsDetection=0 LevelForSearchEnginesDetection=0 ShowLinksOnUrl=0 ShowMenu=1 ShowSummary=UVHB ShowMonthStats=UVHB ShowDaysOfMonthStats=HB ShowDaysOfWeekStats=HB ShowHoursStats=HB ShowDomainsStats=HB ShowHostsStats=HBL ShowAuthenticatedUsers=HBL ShowRobotsStats=0 ShowEMailSenders=0 ShowEMailReceivers=0 ShowSessionsStats=1 ShowPagesStats=PBEX ShowFileTypesStats=HB ShowFileSizesStats=0 ShowBrowsersStats=0 ShowOSStats=0 ShowOriginStats=0 ShowKeyphrasesStats=0 ShowKeywordsStats=0 ShowMiscStats=0 ShowHTTPErrorsStats=0 ShowSMTPErrorsStats=0 |
DirData="/var/lib/awstats" LogFile="/pathtomediaserverlog/mediaserverlog" LogType=S LogFormat="%host %other %logname %time1 %methodurl %code %bytesd %uabracket %other %other %other %other %other %other %other %other" LogSeparator="/s+" ShowMenu=1 ShowSummary=UHB ShowMonthStats=UHB ShowDaysOfMonthStats=HB ShowDaysOfWeekStats=HB ShowHoursStats=HB ShowDomainsStats=HB ShowHostsStats=HBL ShowAuthenticatedUsers=0 ShowRobotsStats=0 ShowEMailSenders=0 ShowEMailReceivers=0 ShowSessionsStats=0 ShowPagesStats=PB ShowFileTypesStats=HB ShowFileSizesStats=0 ShowBrowsersStats=1 ShowOSStats=1 ShowOriginStats=H ShowKeyphrasesStats=0 ShowKeywordsStats=0 ShowMiscStats=0 ShowHTTPErrorsStats=1 ShowSMTPErrorsStats=0 |
Update for config "/etc/awstats/awstats.www.entage.net.conf" With data in log file "/usr/local/apache-2.2.6/logs/access_log.20080424"... 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 qualified records. |