一、安装配置AWStats

1、安装Awstats
如果YUM里已经添加了rpmforge的源就比较简单了,直接yum install即可,如果没有:

# yum install perl-libwww-perl.noarch
# wget http://prdownloads.sourceforge.net/awstats/awstats-7.0-1.noarch.rpm
# rpm -ivh awstats-7.0-1.noarch.rpm
# cd /usr/local/awstats/tools/
# ./awstats_configure.pl


2、Awstats设置
因为往往要分析多个站点的日志,为了简化操作

cp awstats.model.conf common.conf

修改其中几个选项:

#vi common.conf

DNSLookup=0 #关闭DNSLookup可以提升99%的效率
DirData="/data/awstats/data" #指定统计数据存放的目录
SkipFiles="REGEX[^*\.gif] REGEX[^*\.jpg] REGEX[^*\.css] REGEX[^*\.js]" #不分析图片/样式表和js文件
NotPageList="css js class gif jpg jpeg png bmp ico rss xml swf" #非页面文件

LoadPlugin="tooltips" #显示每个统计项目的提示
LoadPlugin="decodeutfkeys" #UTF8编码问题
LoadPlugin="qqhostinfo" #加装的利用纯真IP库判断方可归属地

修改LIMITFLUSH加快处理速度,有效提高统计的速度(减少磁盘IO),并避免按月汇总数据导致的统计文件过大

#vi /usr/local/awstats/wwwroot/cgi-bin/awstats.pl

$LIMITFLUSH =
  50000;   # Nb of records in data arrays after how we need to flush data on disk

一个统计示例:

#vi /etc/awstats/awstats.crsay.conf

Include "common.conf"
LogFormat=1 #指定日志格式,×nix为1,iis为2
LogFile="zcat /var/log/nginx/days/crsay.com_access.log-%YYYY-24-%MM-24-%DD-24.tar.gz |"
#LogFile="/var/log/iislogs/v/ex%YY-24%MM-24%DD-24.log"
#LogFile="/var/log/nginx/crsay.com_access.log-%YYYY-24-%MM-24-%DD-24"
SiteDomain="www.crsay.com"
HostAliases="crsay.com"
DefaultFile="index.html"
DirData="/data/awstats/data/"
AllowAccessFromWebToAuthenticatedUsersOnly=1
AllowAccessFromWebToFollowingAuthenticatedUsers="kuka crsay"

二、配置Nginx处理日志

1、设置nginx日志格式

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

2、配置Nginx日志按天截断

2.1日志rotate


/var/log/nginx/*.log {
    daily
#   dateext
    rotate 1
    missingok
    ifempty
    nocompress
    olddir /var/log/nginx/days
    sharedscripts
    postrotate
        [ ! -f /var/run/nginx.pid ] || kill -USR1 `cat /var/run/nginx.pid`
    endscript
}

logrotate方式比mv有很多优势,不细说

2.2编写日志处理脚本

#vi nginxlogcut.sh

#!/bin/bash
/usr/sbin/logrotate -vf /etc/logrotate.d/nginx
time=$(date -d "yesterday" +"%Y-%m-%d")
cd /var/log/nginx/days
for i in $(ls ./ | grep "^\(.*\)\.[[:digit:]]$")
do
mv ${i} ./$(echo ${i}|sed -n 's/^\(.*\)\.\([[:digit:]]\)$/\1/p')-$(echo $time)
done
for i in $(ls ./ | grep "^\(.*\)\-\([[:digit:]-]\+\)$")
do
tar zcvf ${i}.tar.gz ./${i}
/bin/rm -rf ./${i}
done

find /var/log/nginx/days/* -name "*.tar.gz" -mtime 30 -type f -exec /bin/rm -rf {} \;

简单说明:执行Logrotate,把日志存放到/var/log/nginx/days目录,文件名末尾加上昨天的日期,打包成tar.gz格式,超过30天的文件自动删除

2.3添加cron1 0 * * * /www/shs/nginxlog.sh > /dev/null 2>&1

#crontab -e

1 0 * * * /path/nginxlogcut.sh > /dev/null 2>&1

三、日志分析

3.1编写日志分析脚本:

#vi awstats.sh

#!/bin/bash
ilog=/data/awstats/awstats_cron.log
awscripts=/usr/local/awstats/wwwroot/cgi-bin/awstats.pl
echo "">>$ilog
echo Starting Awstats on: $(date) >>$ilog

perl $awscripts -update -config=crsay
#perl $awscripts -update -config=crsay -databasebreak=day

perl $awscripts -update -config=site2
#perl $awscripts -update -config=site2 -databasebreak=day

perl $awscripts -update -config=site3
#perl $awscripts -update -config=site3 -databasebreak=day


echo Ending Awstats on: $(date) >>$ilog
echo "------------------------------" >>$ilog

把此脚本添加到cron内即可

附:
AWStats统计指标说明:

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