使用vlogger拆分Apache日志

使用vlogger拆分Apache日志

版本1.0
作者:Falko Timme

Vlogger是一个小工具,您可以使用虚拟主机和日期分解的Apache日志。 使用vlogger,我们需要将一个CustomLog指令放入我们全球的Apache配置中,并为每个虚拟主机和一天写入访问日志。 因此,您不必每天将Apache的整体访问日志分成每个虚拟主机的访问日志,您不必配置Apache为每个虚拟主机写入一个访问日志(这可能会使文件描述符的运行速度非常快) )。

在本教程末尾,我将向您展示如何使用webalizer从Apache访问日志创建统计信息。

我不会保证这将为您工作!

1初步说明

我已经在Debian Etch系统上测试了vlogger,其中Apache2已经安装并工作。

2安装和配置vlogger

要安装vlogger,我们只需运行

apt-get install vlogger

之后,我们必须更改LogFormat行(有多个LogFormat行 - 至少更改一个名为combined的组合/etc/apache2/apache2.conf 。 我们必须在其开头添加字符串%v

vi /etc/apache2/apache2.conf
[...]
#LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%v %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
[...]

然后将以下CustomLog行添加到同一个文件(您可以直接在LogFormat行之后):

vi /etc/apache2/apache2.conf
[...]
CustomLog "| /usr/sbin/vlogger -s access.log /var/log/apache2" combined
[...]

这是我们整个Apache配置中唯一需要的CustomLog指令。 请禁用所有其他CustomLog指令,特别是在您的虚拟主机配置中!

编写一个访问日志的优点是,这会降低服务器上的负载,特别是如果您的服务器上有一些高流量站点。

现在重新启动Apache:

/etc/init.d/apache2 restart

Vlogger现在将在/ var / log / apache2目录中创建一个子目录,每个虚拟主机一个,它将创建包含文件名当前日期的访问日志。 它还将创建一个名为access.log的符号链接,指向当前日志文件。

假设我们有两个虚拟主机www.example.comwww.test.tld 。 那么这就是/ var / log / apache2目录的样子:

/var/log/apache2/
                 www.example.com/
                                 06042007-access.log
                                 06052007-access.log
                                 06062007-access.log
                                 access.log -> 06062007-access.log
                 www.test.tld/
                                 06042007-access.log
                                 06052007-access.log
                                 06062007-access.log
                                 access.log -> 06062007-access.log

要了解可以将其添加到CustomLog行中的其他vlogger命令行指令,请查看

man vlogger

3使用webalizer创建统计信息

在本章中,我将介绍如何使用webalizer从分割的日志文件中创建统计信息。 再次,我假设您有两个虚拟主机www.example.comwww.test.tld ,这些虚拟主机的文件根源为/var/www/www.example.com/web/ var / www /www.test.tld/web (服务器名称在文档根路径中非常重要,否则以下过程将无法正常工作)。 我想将统计数据放到目录/var/www/www.example.com/web/stats/var/www/www.test.tld/web/stats中 ,所以这些必须已经存在。

首先,我们来安装webalizer:

apt-get install webalizer

看一眼

man webalizer

看看webalizer的工作原理。 基本上,要从昨天的访问日志创建www.example.com的统计信息,可以使用以下命令:

/usr/bin/webalizer -c /etc/webalizer/webalizer.conf -n www.example.com \
-s www.example.com -r www.example.com -q -T -o /var/www/www.example.com/web/stats \
/var/log/apache2/www.example.com/`/bin/date -d "1 day ago" +%m%d%Y`-access.log

/etc/webalizer/webalizer.conf是Debian的默认webalizer.conf。/ bin / date -d“1天前”的位置+%m%d%Y按照我们需要的方式打印昨天的日期,以便我们可以通过昨天的access.log到webalizer,而不需要知道确切的日期。)

当然,我们不想为每个虚拟主机手动运行这样一个命令,因此我们编写一个可读取/ var / log / apache2目录的 shell脚本,并为该目录中具有日志的每个虚拟主机创建统计信息。 我命名脚本webstats并将其放在/ usr / local / sbin目录中:

vi /usr/local/sbin/webstats
#!/bin/sh

logdir=/var/log/apache2
webalizerconf=/etc/webalizer/webalizer.conf
yesterdaysdate=`/bin/date -d "1 day ago" +%m%d%Y`

cd ${logdir}
for directory in *
do
  if [ -d ${directory} ]; then
    /usr/bin/webalizer -c ${webalizerconf} -n ${directory} \
    -s ${directory} -r ${directory} -q -T -o /var/www/${directory}/web/stats \
    ${logdir}/${directory}/${yesterdaysdate}-access.log
  fi
done

exit 0

我们必须使脚本可执行:

chmod 755 /usr/local/sbin/webstats

最后,我们创建一个cron工作,每天晚上在04:00时调用/ usr / local / sbin / webstats脚本:

crontab -e
0 4 * * * /usr/local/sbin/webstats &> /dev/null

在cron工作第一次运行之后,您可以访问www.example.com/statswww.test.tld / stats以查看浏览器中的统计信息 。 使用.htaccess / .htpasswd密码保护stats目录是个好主意。

4链接

赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏