AWstats日志分析格式总结

星期三, 五月 13th, 2009

awststs是一个非常好用的日志统计工具,下面我对其他主要Web Server/proxy(nginx,squid,lighttpd,httpd)的日志如何进行分析展开说明。
在awstats配置修改最小的前提说明如何如何进行修改,希望对有需要的朋友能够提供帮助。

awstats日志分析之apache
apache:
修改%apache%/conf/httpd.conf
修改为:
CustomLog logs/access_log combined
awstats:
awstats.xxx.conf
LogFile="%apache%/logs/access_log"即可
LogType=W
LogFormat=1

awstats日志分析之tomcat
修改%tomcat%/conf/server.xml
<!--
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log." suffix=".txt" pattern="common" resolveHosts="false"/>
-->
修改为:
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log." suffix=".log" pattern="combined" fileDateFormat="yyyy-MM-dd" resolveHosts="false"/>
awstats.xxx.conf
LogFile="%tomcat%/logs/access_log.%yyyy%mm%dd.log"即可
LogType=W
LogFormat=1

awstats日志分析之nginx
修改:%nginx%/conf/nginx.conf

#log_format  main  '$remote_addr - $remote_user [$time_local] $request '
#                  '"$status" $body_bytes_sent "$http_referer" '
#                  '"$http_user_agent" "$http_x_forwarded_for"';

#access_log  logs/access.log  main;
修改为:
log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" $http_x_forwarded_for';

access_log  logs/access.log  main;
awstats.xxx.conf
LogFile="%nginx%/logs/access.log."即可
LogType=W
LogFormat=1

awstats日志分析之squid
修改:%squid%/etc/squid.conf

access_log /usr/local/opt/squid//var/logs/access.log squid
修改为:

logformat combined %>a %ui %un [%tl] "%rm %ru HTTP/%rv" %Hs %<st "%{Referer}>h" "%{User-Agent}>h" %Ss:%Sh
access_log /usr/local/opt/squid/var/logs/access.log combined
LogFile="%squid%/var/log/access.log."即可
LogType=W
LogFormat=1

awstats日志分析之lighttpd
awstats直接支持lighttpd默认的日志输出格式。

使用awstats分析squid日志

星期三, 五月 13th, 2009

前言
生产环境中使用多台squid加速网站,而且每台squid服务器加速多个网站;如何统计squid中的具体某个站点日志呢?对比了几款统计工具,决定使用awstats。AWStats是一个免费、功能强大、特性丰富的日志分析工具,它能分析由WEB、 STREAMING、FTP、MAIL等服务生成的日志,并生成先进的统计图表...

要让awstats能直接分析squid产生的日志,需要修改squid日志格式;并且需要将多台squid服务器上的日志汇总,筛出需要统计的域名日志;然后再交给awstats来分析。OK,下面开始操作

一、squid配置
1. 修改squid日志格式
vi squid.conf

logformat combined %>a %ui %un [%tl] "%rm %ru HTTP/%rv" %Hs %h" "%{User-Agent}>h" %{host}>h
cache_access_log /var/log/squid/access.log combined

2.squid日志截断、汇总
稍后补充

二、AWStats的配置
1 下载awstats
cd /usr/local/src
wget http://prdownloads.sourceforge.net/awstats/awstats-6.95.tar.gz

2. 创建awstats文件
tar zxvf awstats-6.95.tar.gz
mv awstats-6.95 /usr/local/awstats
chown -R root:root /usr/local/awstats
cd /usr/local/awstats/tools
perl awstats_configure.pl #这一步的目的是为要分析的网站创建配置文件,如省略请参照1.2.1。

2.1 如果没有执行perl awstats_configure.pl;参照下列操作,否则略过。
拷贝awstats模板
mkdir /etc/awstats
cp /opt/awstats/wwwroot/cgi-bin/awstats.model.conf /etc/awstats/awstats.common.conf

3. 让apache支持awstats
注:如果是使用perl awstats_configure.pl命令创建配置文件,下面的配置将自动添加到apache的配置文件上。

# 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.

<Directory "/usr/local/awstats/wwwroot">
 Options None
 AllowOverride None
 Order allow,deny
 Allow from all
</Directory>

重启httpd服务
/usr/local/apache/bin/apachectl restart

4. 编辑awstats主配置文件
如果有多个站点要统计,很多配置选项是重复的,如果每个配置文件都修改维护起来会很麻烦,AWStats从5.4版本开始提供了配置文件包含的功能,所以我们可以配置一个通用配置,比如:awstats.common.conf,然后其他站点的配置可以通过后面的选项覆盖和缺省不一致的配置。
cd /etc/awstats
mkdir /var/lib/awstats
vi awstats.common.conf

LogFile=""  默认为空;在要分析的域名配置文件里设置具体日志文件
LogType=W
LogFormat=1
DirData="/var/lib/awstats"
DNSLookup=0

5. 创建虚拟主机域名配置文件
以ai77.org域名为例
vi awstats.ai77.org.conf

Include "awstats.common.conf"
LogFile="zcat /logs/awstats/access_log.gz |"
#日志文件最好是压缩的,因为日志超过2G,文件系统可能会出问题。尽量还是压缩日志后,通过zcat管道给awstats进行统计
SiteDomain="ai77.com"
HostAliases="ai77.com 127.0.0.1 localhost"

6. 增大AWStats的$LIMITFLUSH,减少磁盘临时文件读写
vi awstats.pl
$LIMITFLUSH=100000; # Nb of records in data arrays after how we need to flush data on disk
其实内存够用的话,将这个值设置的更高也是没有问题的。

7.  生成报表
/usr/bin/perl /usr/local/awstats/wwwroot/cgi-bin/awstats.pl -config=ai77.org -update now
如果需要分析的域名很多,awstats自带了一个批处理工具:tools/awstats_updateall.pl,可以批量地遍历一个目录下所有地配置文件并运行统 计。因此剩下的工作就主要是日志的同步问题了。

三、awstats后续配置

1、开启以下几个插件,可显示一些额外提示、把 IP 转换为国家和城市信息。
(方法:打开 awstats.common.conf,找到如下插件,去掉前面的注释,把 GeoIP.dat 和 GeoLiteCity.dat 的路径改为自己实际的)

LoadPlugin="tooltips"
LoadPlugin="decodeutfkeys"
LoadPlugin="geoip GEOIP_STANDARD /usr/local/awstats/wwwroot/cgi-bin/plugins/GeoIP.dat"
LoadPlugin="geoip_city_maxmind GEOIP_STANDARD/usr/local/awstats/wwwroot/cgi-bin/plugins/GeoLiteCity.dat"

提示:需要先在 (mt) 上安装 Geo::IP::PurePerl 模块才能使用 GeoIP,到这里下载。
GeoIP.dat下载 GeoLiteCity.dat下载

2. 安装纯真版 IP 数据库来分析 IP

GeoLiteCity.dat 对中国城市的统计不准确,在国内还是珊蝴虫和纯真版 IP 数据库比较好,Albert 做了一个显示来访者位置的插件 qqhostinfo,使用纯真版 IP 数据库。

1) 下载 纯真版 IP 数据库,解压后得到 QQWry.Dat。
2) 下载 qqhostinfo.pm
3) 下载 分析 QQWry.dat 的 perl 脚本,得到 qqwry.pl,打开修改一下,把 ./QQWry.Dat 修改为/usr/local/awstats/wwwroot/cgi-bin/plugins/QQWry.Dat。
4) 把 QQWry.Dat, qqhostinfo.pm, qqwry.pl 放在 /usr/local/awstats/wwwroot/cgi-bin/plugins 下面。
5) 打开 awstats.common.conf,在 # PLUGINS 部分加上一句 LoadPlugin=”qqhostinfo”。

提示:使用 qqhostinfo 插件需要安装 Net::XWhois 模块,到这里下载。

3. 解决AWStats搜索关键词中文乱码问题
vi awstats.common.conf
在配置文件中找到:
#LoadPlugin="decodeutfkeys"
去掉前面的#就可以了。

提示:打开这个plugin 需要perl模块儿Encode和URI::Escape的支持;到这里下载

4、如果你的网站访问量达到千万级,可以使用 “AWStats 的千万级日志解决方案”。

命令行统计增加: -databasebreak=day
报表输出时增加: &databasebreak=day&day=DD
即可按天进行统计, 解决按月统计,归档数据过大导致统计过慢/失败的问题。

附录: 统计指标、配置文件及指令说明
1. 统计指标说明
参观者:按来访者不重复的IP统计,一个IP代表一个参观者;
参观次数:一个参观者可能1天之内参观多次(比如:上午一次,下午一次),所以按一定时间内(比如:1个小时),不重复的IP数统计,参观者 的访问次数;
网页数:不包括图片,CSS, JavaScript文件等的纯页面访问总数,但如果一个页面使用了多个帧,每个帧都算一个页面请求;
文件数:来自浏览器客户端的文件请求总数,包括图片,CSS,JavaScript等,用户请求一个页面是,如果页面中包含图片等,所以对服 务器会发出多次文件请求,文件数一般远远大于文件数;
字节:传给客户端的数据总流量;
来自REFERER中的数据:日志中的参考(REFERER)字段,记录了访问相应网页之前地址,因此如果用户是通过搜索引擎的搜索结果点击 进入网站的,日志中就会有用户在相应搜索引擎的查询地址,这个地址中就可以通过解析将用户查询使用的关键词提取出来:

2. 配置文件说明
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 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配置文件。
这个指令对于有大量虚拟主机的用户非常有用,可以把所有虚拟主机共同的配置存为一主配置文件.

参考文章:
AWStats简介:Apache/Windows IIS的日志分析工具的下载,安装,配置样例和使用(含6.9中文定义补丁)
AWStats的千万级日志解决方案:日报表 databasebreak=day + Canlendar.php 日历浏览

squid + awstats 多站点日志配置

星期三, 十二月 3rd, 2008

翻看了Google网上也没有这样的配置说明,自己摸索了一下,证实可行。
配置:
squid: /etc/squid/squid.conf

代码:

logformat combined %>a %ui %un [%tl] "%rm %ru HTTP/%rv" %Hs %<st "%{Referer}>h" "%{User-Agent}>h" %Ss:%Sh %{host}>h
access_log /var/log/squid/access.log combined

awstats: /etc/awstats/awstats.conf.local

代码:

LogFormat = "%host %other %logname %time1 %methodurl %code %bytesd %refererquot %uaquot %other %virtualname"
LogFile="/var/log/squid/access.log"

关键点:
squid 的日志需要加上虚拟主机名: %{host}>h
awstats的读取参数指出 %virtualname

 

还有一种方法,我觉得也是比较理想的,直接修改apache的日志格式:
原:
#LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
修改为:
LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
这样也可以将apache的日志转为正常的日志。