AWStats网站日志分析

安装

# 安装AWStats
mkdir -p /data/soft && cd /data/soft/ \
&& wget https://prdownloads.sourceforge.net/awstats/awstats-7.4.tar.gz \
&& cd /usr/local \
&& tar zxvf /data/soft/awstats-7.4.tar.gz \
&& mv awstats-7.4 awstats

# 创建数据和html目录
mkdir /data/awstatsData
mkdir /data/www/awstats

# 安装GeoIP(在CentOS 6.5源中已有)
yum -y install GeoIP perl-Geo-IP

# 下载GeoIP数据文件
cd /data/soft
wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz
wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz

# 将GeoIP数据文件放到指定目录(与后面的配置文件一致)
cd /data/awstatsData
cp /data/soft/Geo*.gz .
gzip -d Geo*.gz

初次配置

执行以下命令,按照提示选择和输入对应信息,生成第一个站点配置文件,作为配置文件模版。

我因为没有安装Apache Web Server、也不想安装php环境,因此选择Web服务器位置时,均是选择的No。

cd /usr/local/awstats/tools
perl awstats_configure.pl

中文乱码修正

当设置Lang="cn"时,生成的html文件charset与lang文件不匹配,造成显示中文为乱码。

cd /usr/local/awstats/wwwroot/cgi-bin/lang
cp awstats-cn.txt awstats-cn.txt.bak
iconv -f GBK -t UTF-8 awstats-cn.txt.bak > awstats-cn.txt
sed -i 's/PageCode=GBK/PageCode=UTF-8/g' awstats-cn.txt
file awstats-cn.txt
#awstats-cn.txt: UTF-8 Unicode text, with CRLF line terminators
file awstats-cn.txt.bak
#awstats-cn.txt.bak: ISO-8859 text, with CRLF line terminators

robots.pm修改

取消Java Agent屏蔽,方便内部接口调用统计。

/usr/local/awstats/wwwroot/cgi-bin/lib/robots.pm

# 注释以下两行,避免屏蔽java客户端
'^java\/[0-9]'   # put at end to avoid false positive
'^java\/[0-9]','<a href="http://www.projecthoneypot.org/harvester_useragents.php" title="Bot home page [new window]" target="_blank">Java (Often spam bot)</a>', # put at end to avoid false positive

配置文件

针对多个站点,很多配置选项是重复的,如果每个配置文件都修改维护起来会很麻烦,AWStats从5.4开始提供了配置文件包含的功能,所以我们可以配置一个通用配置,比如:awstats.model.conf,然后其他站点的配置设置为:可以通过后面的选项覆盖和缺省不一致的配置。

日志分析及html生成

将下面的脚本加到/etc/crontab设置中来每日定时完成日志分析和html生成。

也可直接使用awstats_buildstaticpages.pl的-update选项来自动完成/etc/awstats中配置的所有站点的日志分析和html生成,详见:

http://www.awstats.org/docs/awstats_tools.html#awstats_buildstaticpages

#!/bin/sh
#0 5 * * * root /data/awstats_cron.sh >> /data/www/awstats/awstats.txt 2>&1

SITES="mysite"
OUTDIR=/data/www/awstats
export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
AWSTATS=/usr/local/awstats/wwwroot/cgi-bin/awstats.pl
AWSTATS_UPDATEALL=/usr/local/awstats/tools/awstats_updateall.pl
AWSTATS_BUILD=/usr/local/awstats/tools/awstats_buildstaticpages.pl
DAY=$(date +'%d' -d '-1 day')
MONTH=$(date +'%m' -d '-1 day')
YEAR=$(date +'%Y' -d '-1 day')
for site in $SITES;do
    echo "$(date) Update Data $site"
    perl $AWSTATS -update -config=$site

    echo "$(date) Create Html $site"
    out=$OUTDIR/$site
    [ ! -d "$out" ] && mkdir -p "$out"
    perl $AWSTATS_BUILD -awstatsprog=$AWSTATS -config=$site -dir=$out
    cd $out 
    ln -sfT awstats.${site }.html index.html
    cd -

    if [ "$DAY" = "01" ];then
        out_month="$OUTDIR/$site/${YEAR}${MONTH}"
        [ ! -d "$out_month" ] && mkdir -p "$out_month"
        perl $AWSTATS_BUILD -awstatsprog=$AWSTATS -config=$site -dir=$out_month -month=$MONTH -year=$YEAR
        cd $out_month
        ln -sfT awstats.${site}.html index.html
        cd -
    fi
done

其它

指标说明

多节点日志分析

当使用多台WebServer负载均衡时,需要将日志合并后,再进行计算。

LogFile="/usr/local/awstats/tools/logresolvemerge.pl /var/log/nginx/site[12]/access.log-%YYYY-0%MM-0%DD-0.gz|"