-
2011-11-07
AWStats的安装 - [关于技术]
先下载最新版本的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/
这样基本就完成了,观察效果吧。使用该文档安装有问题的欢迎留言,我会继续完善。
-
2011-10-29
找到匹配字符后如何在该行的行首插入特定字符 - [关于技术]
找到匹配字符后如何在该行的行首插入特定字符
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-10-29
如何在AWK中定义“%#!@$^”这样的分隔符 - [关于技术]
我有一段内容:
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'[%#!@$^]+'






