使用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.com
和www.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.com
和www.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/stats
和www.test.tld / stats
以查看浏览器中的统计信息
。 使用.htaccess / .htpasswd密码保护stats
目录是个好主意。
4链接
- vlogger: http : //n0rp.chemlab.org/vlogger
- webalizer: http : //www.mrunix.net/webalizer
- Debian: http : //www.debian.org