• 先下载最新版本的AWStats。

    wget http://ncu.dl.sourceforge.net/project/awstats/AWStats/7.0/awstats-7.0.tar.gz

    安装AWStats,我这里是安装到/opt/awstats目录下

    tar zxvf awstats-7.0.tar.gz

    mv awstats-7.0 /opt/awstats

    cd awstats/

    创建配置文件

    ./awstats_configure.pl

    这里大部分都可以选择默认回答,询问域名的时候你可以填写自己网站的域名,询问配置文件位置的时候你可以使用默认,也可以自己指定配置文件存放的位置。

    接下来,我们修改刚才生成的配置文件,修改如下地方:

    LogFile="/opt/nginx/logs/access.log"

    我这里有多台web服务器,log也有好多,我必须先进行log文件的每日分隔,每天00时截取,然后再将log文件进行合并,再交给awstat进行分析。

    log截取脚本:

    logs_path="/opt/nginx/logs"
    awstats_server="192.168.0.1"
    rsync -avzP ${logs_path}/access.log ${awstats_server}:/opt/awstats/nginx_log/`hostname`_access.log
    mkdir -p ${logs_path}/$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")/
    mv ${logs_path}/access.log ${logs_path}/$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")/access_$(date -d "yesterday" +"%Y%m%d").log
    mv ${logs_path}/error.log ${logs_path}/$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")/error_$(date -d "yesterday" +"%Y%m%d").log
    kill -USR1 `cat /opt/nginx/logs/nginx.pid`

    配置文件中使用logresolvemerge.pl这个脚本进行日志的合并。

    LogFile="/opt/awstats/tools/logresolvemerge.pl /opt/awstats/nginx_log/*access.log |"

    修改用于存放数据的目录,这个目录我手工创建的。

    DirData="/opt/awstats/data"

    接下来就可以进行测试了

    /opt/awstats/wwwroot/cgi-bin/awstats.pl -update -config=/opt/awstats/awstats.conf

    如果没有报错的话,就说明配置成功了。

    写一个每天00时运行的脚本来进行日志的分析:

    #!/bin/bash
    /opt/awstats/tools/awstats_buildstaticpages.pl -update \
    -config=domain.com -lang=cn -dir=/opt/awstats/data/ \
    -awstatsprog=/opt/awstats/wwwroot/cgi-bin/awstats.pl

    该脚本设置为每天日志文件更新之后运行即可。

    这样一个基本的awstat日志分析就算完成了。下面再介绍一下几个有用的插件。

    安装GeoIP,分析IP位置的

    wget http://geolite.maxmind.com/download/geoip/api/c/GeoIP-1.4.8.tar.gz

    wget http://geolite.maxmind.com/download/geoip/api/perl/Geo-IP-1.40.tar.gz

    wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz

    GeoIP是GeoIP C Library

    Geo-IP是Geo::IP Perl Module

    GeoLiteCity是IP库

    tar zxvf GeoIP-1.4.8.tar.gz

    cd GeoIP-1.4.8

    ./configure&&make&&make install

    添加/usr/local/lib/etc/ld.so.conf,然后执行

    ldconfig

    tar zxvf Geo-IP-1.40.tar.gz

    cd Geo-IP-1.40

    perl Makefile.PL(或者perl Makefile.PL PP=1)

    make&&make install

    tar zxvf GeoLiteCity.dat.gz

    cp -rf GeoLiteCity.dat /usr/local/share/GeoIP/

    修改配置文件,增加:

    LoadPlugin="geoip GEOIP_STANDARD /usr/local/share/GeoIP/GeoIP.dat"

    LoadPlugin="geoip_city_maxmind GEOIP_STANDARD /usr/local/share/GeoIP/GeoLiteCity.dat"

    这个插件是国外人做的,有些IP地址信息并不准确,也可以使用“qqhostinfo”这个插件,这个插件使用的是QQWry.Dat地址库。

    点这里下载 ,解压到plugins目录。注意:附件中不包含QQWry.Dat,这个IP库可以到http://www.cz88.net/fox/ipdat.shtml这里下载最新版。

    修改qqhostinfo.pm的第13行为:

    push @INC, "/opt/awstats/wwwroot/cgi-bin/plugins";

    修改qqhostinfo.pm的第17行为:

    require "/opt/awstats/wwwroot/cgi-bin/plugins/qqwry.pl";

    修改qqwry.pl的第18行为:

    my $ipfile="/opt/awstats/wwwroot/cgi-bin/plugins/QQWry.Dat";

    修改配置文件,增加:

    LoadPlugin="qqhostinfo"

    然后,修改权限:

    chmod 777 -R /opt/awstats/wwwroot/cgi-bin/plugins/

    这样基本就完成了,观察效果吧。使用该文档安装有问题的欢迎留言,我会继续完善。

  • 找到匹配字符后如何在该行的行首插入特定字符

    cp -f ./mail/web/portal/wfs/img/style2/??.shs /mail/web/portal/wfs/img/style2/??.shs

    cp -f ./mail/web/portal/wfs/img/style2/ç~I~G段.shs /mail/web/portal/wfs/img/style2/ç~I~G段.shs

    找到非正常字符,然后注释掉:

    sed '/[^ -_.a-zA-Z0-9]/s/^/#/'


  • 我有一段内容:
    2011-03-10 22:33:11 ROBOT1025%#!@$^50608160%#!@$^HC6CJEV3%#!@$^0%#!@$^?%#!@$^你妈妈喊你回家吃饭了
    2011-03-10 22:33:15 ROBOT1009%#!@$^50607932%#!@$^HCQCJET6%#!@$^0%#!@$^?%#!@$^玩神仙传送美女了~~~
    2011-03-10 22:33:33 ROBOT1008%#!@$^50607928%#!@$^HCPCJET2%#!@$^0%#!@$^?%#!@$^你妈妈喊你回家吃饭了
    2011-03-10 22:33:34 ROBOT1023%#!@$^50608103%#!@$^HC4CJEVU%#!@$^0%#!@$^?%#!@$^玩神仙传送美女了~~~
    2011-03-10 22:33:40 ROBOT1019%#!@$^50608003%#!@$^HC0CJEVD%#!@$^0%#!@$^?%#!@$^信春哥不挂科
    2011-03-10 22:33:44 ROBOT1012%#!@$^50607944%#!@$^HCTCJEUI%#!@$^0%#!@$^?%#!@$^大婶,你钱包掉了
    2011-03-10 22:33:46 ROBOT1033%#!@$^50608394%#!@$^HDECJEW2%#!@$^0%#!@$^?%#!@$^这是猪吗
    2011-03-10 22:33:50 ROBOT1034%#!@$^50608421%#!@$^HDFCJEW6%#!@$^0%#!@$^?%#!@$^崩了~
    字段之间的分隔符是%#!@$^

    我如何使用AWK来定义这样的分隔符呢?

    [root@~]# awk -F"%#!@$^" '{print $1}'  a.log
    -bash: !@$^": event not found

    [root@~]# awk -F\%\#\!\@\$\^ '{print $1}' a.log
    2011-03-10 22:33:11 ROBOT1025%#!@$^50608160%#!@$^HC6CJEV3%#!@$^0%#!@$^?%#!@$^你妈妈喊你回家吃饭了
    会打印整行内容

    [root@~]# awk -F\%\#\!\@ '{print $1}' a.log
    2012-03-10 22:31:22 ROBOT1001
    2012-03-10 22:31:28 ROBOT1002
    2012-03-10 22:31:35 ROBOT1004
    这样是有效的,分隔符是%#!@

    [root@~]# awk -F\%\#\!\@\$ '{print $1}' a.log
    2011-03-10 22:33:11 ROBOT1025%#!@$^50608160%#!@$^HC6CJEV3%#!@$^0%#!@$^?%#!@$^你妈妈喊你回家吃饭了
    加了$以后就变成打印整行了。
    也就是说最多只能到@符号,后面的加上就不行了。

    方法一:

    -vFS='%#!@\\$\\^'

    方法二:

    -F'%#!@\\$\\^'

    方法三:

    -F'[%#!@$^]+'