快捷搜索:

网站日志处理工具Awstats:处理多Apache日志

在linux情况下,开源对象Awstats是一个异常受迎接的网站日志处置惩罚对象。在linux情况安装和设置设置设备摆设摆设Awstats对照轻易成功,但要同时处置惩罚多个Apache日志(比如web集群的情况),照样有许多事情必要做的。

平台情况

1、 办事器3个,2个运行Apache的web 办事器,一个专门处置惩罚日志的Awstats办事器。

2、 运行平台:整个为redhat AS 4。

设计思路

日志处置惩罚办事器天天按期从2个Apache办事器获取日志文件,对取得的压缩文件解压,接着把2个零丁的日志文件合并成一个,再用Awstats处置惩罚天生申报。下面我们就按照这个思路来进行详细的支配。

一、 Apache日志的天生和处置惩罚

1、 Apache日志天生:

经由过程改动Apache的设置设置设备摆设摆设文件 httpd.conf来达到这个目的,下面是某个Apache办事器的设置设置设备摆设摆设文件关于日志记录的改动部分:

SetEnvIf Request_URI \.gif image-request

SetEnvIf Request_URI \.jpg image-request

SetEnvIf Request_URI \.png image-request

SetEnvIf Request_URI \.js image-request

SetEnvIf Request_URI \.css image-request

SetEnvIf Request_URI \.swf image-request

ErrorLog /var/log/web/sery.com-error_log

CustomLog "|/opt/Apache2/bin/rotatelogs /var/log/web/sery.com-access%Y%m%d.log.%H 28800 480" combined env=!image-request

在这里简单阐明一下上面各个项目的意义。SetEnvIf Request_URI设置判断情况变量"image-request","CustomLog "|/opt/Apache2/bin/rotatelogs /var/log/web/sery.com-access%Y%m%d.log.%H 28800 480" combined env=!image-request

"表示不记图片哀求所孕育发生的日志,并且应用Apache的日志轮转对象rotatelogs对日志进行瓜分,以年月日及小时要领命名文件,这样用脚本处置惩罚日志时就异常方便了。这个CustomLog有点分外,不要把敕令前面的"|"等符号写丢了。经由过程运行Apache办事,将在目录/var/log/web/天生日志文件sery.com-access20071120.log.00.

因为应用了日志轮转功能,从上图可以望见2个日志文件。

2、 日志备份和压缩:

进入日志所在的目录,把同一天不合光阴段的日志合并成一个文件,压缩后移动到别的的一个位置/var/log/weblog-backup。为什么要把它放在别的的位置并且压缩呢?主要的缘故原由是为了在传输时节省光阴。当然我们弗成能天天手动来履行这个操作,自然而言,用shell脚原先干这个工作了。下面给出脚本的内容:

#!/bin/sh

lastlogdate=`date "+%Y%m%d"-d yesterday`

touch /var/log/web/sery.com-access$lastlogdate.log

for i in /var/log/web/sery.com-access$lastlogdate.log.*;

do cat $i >> /var/log/web/sery.com-access$lastlogdate.log

rm -f $i

done

touch /var/log/web/sery.com-access$lastlogdate.log

gzip /var/log/web/sery.com-access$lastlogdate.log

if [ -f /var/log/web/sery.com-access$lastlogdate.log.gz ];

then

mv /var/log/web/sery.com-access$lastlogdate.log.gz /var/log/weblog-backup/

fi

rm -rf `find /var/log/weblog-backup/ -atime 7`

把这个脚本命名为merge_log.sh,放在目录/usr/local/bin下面,并付与履行权限。然后在自动义务里加入这个义务,让它天天自动履行一次。运行crontab -e 把下面的行加入此中:

5 0 * * * /usr/local/bin/merge_log.sh

为反省脚本的精确性,至少手动履行一遍脚本merge_log.sh,看是否在目录/var/log/weblog_backup天生压缩文件。假如如愿天生类似 sery.com-access20071119.log.gz这样的文件,注解脚本精确地按照我们的意图事情了。

3、 容许Awstats取得Apache的日志文件:

支配ftp办事,创建一个ftp用户,然后把这个ftp的用户目录定位到"/var/log/weblog-backup",即第2步天生压缩文件的目录。应用下列的敕令孕育发生ftp用户和指定目录:

[root@www1 ~]# useradd -d /var/log/weblog-backup-s/sbin/nologin sery

[root@www1 ~]# passwd sery

[root@www1 ~]# chmod 755 -R /var/log/weblog-backup

因为vsftpd设置设置设备摆设摆设异常轻易,这里就不再多说。启用ftp办事,用刚才创建的用户测试一下,看是否可以望见"/var/log/weblog_back"里的文件。

到这一步,我们必要在Apache办事器长进行的操作就停止了。多个Apache办事器,只必要重复上面的操作即可。当然,为了适应你自己的情况,请自行改动相关的目录和文件。

二、 获取日志文件

是Awstats办事器从Apache办事器取得日志文件,在本案中,我将从2个Apache办事器取得日志文件。取日志也是天天自动进行一次。有一点必须留意,那便是必须要等"第二步"操作正常停止后再进行取日志;回偏激去看"第二步"的"/usr/local/bin/merge_log.sh"履行光阴在00:05分,斟酌履行法度榜样的开销,预计1小时阁下可以完成这个操作,以是在早晨2点去取文件是应时的。下面给出取日志的脚本:

#!/bin/bash

wget --active-ftp -m --directory-prefix=/root/logs/web1/ --tries=3\ --output-file=/root/script/weblog-get.log\ ftp://sery:heufgewUQc@www1.sery.com/sery*.gz

wget --active-ftp -m --directory-prefix=/root/logs/web2/ --tries=3\

--output-file=/root/script/weblog-get.log \

ftp://sery: heufgewUQc@www2.sery.com/sery*.gz

脚本成功运行后,将把第一个Apache办事器的日志文件放在"/root/logs/web1"目录,第2个Apache办事器的日志文件放在"/root/logs/web2"目录,并且把操作日志记录到文件"/root/script/weblog-get.log",以方便反省脚本履行的状况。把这个脚本放在目录/usr/local/bin下,命名为weblog-get.sh,付与履行权限,然背工动运行脚本/usr/local/bin/weblog-get.sh,看是否取得了远程Apache办事器的2个压缩日志文件。精确无误后,把它加在crontab 里。

crontab -e

00 02 * * * /usr/local/bin/weblog-get.sh

天天早晨2点,Awstats所在的办事器就会主动从2个远程的Apache办事器取翌日未来志文件。

三、 日志合并(在Awstats办事器长进行):

因为用ftp取得的日志文件有多个(本案是2个),不便于处置惩罚,是以很有需要对日志进行解压和合并。处置惩罚应用下面的脚原先完成:

#!/bin/bash

#define variables

AwsLogDir=/root/logs/Awstats_log

Web1Log=/root/logs/web1

Web1OrigLog=$Web1Log/sery.com-access$(date +%Y%m%d --date='1 days ago').log.gz

Web2Log=/root/logs/web2

Web2OrigLog=$Web1Log/sery.com-access$(date +%Y%m%d --date='1 days ago').log.gz

OldFile=/root/logs/Awstats_logs/sery.com-access$(date +%Y%m%d --date='4 days ago').log*

#########################################################################

#get logfiles

cd $Web1Log

if [[ -f $Web1OrigLog ]]

then

gunzip-d $Web1OrigLog

fi

FileLog1=sery.com-access$(date +%Y%m%d --date='1 days ago').log

if [[ -f $FileLog1 ]]

then

mv sery.com-access$(date +%Y%m%d --date='1 days ago').log$AwsLogDir/17k.com-access$(date +%Y%m%d --date='1 days ago').log.1

fi

cd $Web2Log

if [[ -f $Web2OrigLog ]]

then

gunzip-d $Web2OrigLog

fi

FileLog2=sery.com-access$(date +%Y%m%d --date='1 days ago').log

if [[ -f $FileLog2 ]]

then

mv sery.com-access$(date +%Y%m%d --date='1 days ago').log$AwsLogDir/sery.com-access$(date +%Y%m%d --date='1 days ago').log.2

fi

#########################################################################

# conbine two web logs to one

cd $AwsLogDir

File1Log=sery.com-access$(date +%Y%m%d --date='1 days ago').log.1

File2Log=sery.com-access$(date +%Y%m%d --date='1 days ago').log.2

if [[ -f $File1Log && -f $File2Log ]]

then

cat $File1Log $File2Log >sery.com-access.log

fi

if [[ -f $OldFile ]]

then

rm $OldFile

fi

上述脚本正常运行后,将在/root/logs/Awstats目录天生文件sery.com-access.log,这个文件恰是Awstats所必要的。假如从更多Apache办事器取来更多日志文件,上述脚本必要变动才能简洁高效。措施是-用轮回要领天生那个sery.com-access.log文件。

四、 设置设置设备摆设摆设Awstats系统

1、 安装Awstats。

(1) 下载Awstats

wget http://downloads.sourceforge.net/Awstats/Awstats-6.7.tar.gz?modtime=1183813789&

big_mirror=0

(2) 解压

tarxvfwstats-6.7.tar.gz

mv Awstats-6.7/usr/local/Awstats

Awstats必要Apache协同事情,请自行安装之。Apache安装好今后,运行敕令/usr/local/Apache/bin/httpd -l | grep mod_cgi.c 看是否把模块编译进来,这个模块是必须的。接着再反省perl对象是否被安装到系统,假如没有安装,请手动安装。

2、 设置设置设备摆设摆设Awstats。

cd /usr/local/Awstats/tools

履行设置设置设备摆设摆设脚本,这是一个交互法度榜样,可根据自己的实际环境回答

perl Awstats_configure.pl

----- Awstats Awstats_configure 1.0 (build 1.7) (c) Laurent Destailleur -----

This tool will help you to configure Awstats to analyze statistics for

one web server. You can try to use it to let it do all that is possible

in Awstats setup, however following the step by step manual setup

documentation (docs/index.html) is often a better idea. Above all if:

- You are not an administrator user,

- You want to analyze downloaded log files without web server,

- You want to analyze mail or ftp log files instead of web log files,

- You need to analyze load balanced servers log files,

- You want to 'understand' all possible ways to use Awstats...

Read the Awstats documentation (docs/index.html).

-----> Running OS detected: Linux, BSD or Unix

-----> Check for web server install

Found Web server Apache config file '/usr/local/Apache2/conf/httpd.conf'

-----> Check and complete web server config file '/usr/local/Apache2/conf/httpd.conf'

-----> Update model config file '/usr/local/Awstats/wwwroot/cgi-bin/Awstats.model.conf'

File Awstats.model.conf updated.

-----> Need to create a new config file ?

Do you want me to build a new Awstats config/profile

file (required if first install) [y/N] ?

履行完设置设置设备摆设摆设后,将天生设置设置设备摆设摆设文件/etc/aswstats/ Awstats.sery.conf,改动

LogFile=/root/logs/Awstats_log/17k.com-access.log

然后再履行 perl /usr/local/Awstats/wwwroot/cgi-bin/Awstats.pl -config=sery.com -update 假如没有差错的话,在浏览器输入Awstats办事器的ip地址即可获得造访日志申报。我们不想无关的人望见日志申报,用Apache用户验证功能来完成,把下面的内容加入到Apache设置设置设备摆设摆设文件httpd.conf即可:

lias /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/"

AuthType Basic

Options ExecCGI

AllowOverride None

Order allow,deny

Allow from all

AuthName "17k Awstats Access"

AuthUserFile /usr/local/Awstats/.htpasswd

Require valid-user

把Awstats更新加入 crontab,让它天天自动履行一次。

crontab -e

00 06 * * * /usr/local/bin/Awstats_update.sh

脚本/usr/local/bin/Awstats_update的内容:

#!/bin/bash

perl /usr/local/Awstats/wwwroot/cgi-bin/Awstats.pl -config=17k.com -update >> /usr/local/Awstats/Awstats_update.log

天天早上6点会自动履行一次更新操作,对日志文件进行处置惩罚,着末在浏览器里读出所需数据。

输入精确的用户名和密码

您可能还会对下面的文章感兴趣: