Web服务器日志统计分析完全解决方案( 三 )


4.1 logrotate实现日志轮循
首先我们讨论采用Linux系统自身的日志文件轮循机制:logrotate的方法 。Logrotate是Linux系统自身带的一个日志轮循程序,是专门对各种系统日志(syslogd,mail)进行轮循的程序 。该程序是由运行程序的服务crond来每天凌晨4:02运行的,可以在/etc/cron.daily目录下可以看到logrotate文件,其内容如下:
#!/bin/sh
/usr/sbin/logrotate /etc/logrotate.conf
可以看到每天清晨crond都会启动/etc/cron.daily目录下的logrotate脚本来进行日志轮循 。
而在/etc/logrorate.conf中可以看到内容如下:
# see "man logrotate" for details
# rotate log files weekly
weekly
# keep 4 weeks worth of backlogs
rotate 4
# create new (empty) log files after rotating old ones
create
# uncomment this if you want your log files compressed
#compress
# RPM packages drop log rotation information into this directory
include /etc/logrotate.d
# no packages own wtmp -- we"ll rotate them here
/var/log/wtmp {
monthly
create 0664 root utmp
rotate 1
}
# system-specific logs may be also be configured here.
从logrotate的配置文件中可以看到除了wtmp以外,需要滚动的日志的配置都保存在/etc/logroate.d目录下 。因此我们只需要在该目录下创建一个名为apache的配置文件,来指示logrotate如何轮循web服务器的日志文件即可,下面是一个示例:
/www/log/secfocus {
rotate 2
daily
missingok
sharedscripts
postrotate
/usr/bin/killall -HUP httpd 2> /dev/null || true
endscript
}
/www/log/tomorrowtel {
rotate 2
daily
missingok
sharedscripts
postrotate
/usr/bin/killall -HUP httpd 2> /dev/null || true
endscript
}
这里“rotate 2表示轮循时只包括两个备份文件,也就是只有:access_log、access_log.1、access_log.2三个日志备份文件 。就这样就实现了对两个虚拟主机的日志文件的轮循 。后面我们会讨论如何使用日志统计分析软件对日志文件进行处理 。
这种方法的优点是不需要其他第三方工具就可以实现日志轮循,但是对于重负载的服务器和使用负载均衡技术的web服务器来说这种方法就不是很实用 。因为它是对相应服务进程发出一个-HUP重启命令来实现日志的截断归档的,这样会影响服务的连续性 。
4.2 使用apache自带的rotatelogs实现日志轮循
apache提供了将不把日志直接写入文件,而是通过管道发送给另外一个程序的能力,这样就大大的加强了对日志进行处理的能力,这个通过管道得到的程序可以是任何程序:如日志分析,压缩日志等 。要实现将日志写到管道只需要将配置中日志文件部分的内容替换为“|程序名“即可,例如:
# compressed logs
CustomLog "|/usr/bin/gzip -c >> /var/log/access_log.gz" common
这样就可以实用apache自带的轮循工具:rotatelogs来对日志文件进行轮循 。rotatelogs基本是用来按时间或按大小控制日志的 。
CustomLog "|/www/bin/rotatelogs /www/logs/secfocus/access_log 86400" common
上面的示例中apache访问日志被发送给程序rotatelogs,rotatelogs将日志写入/www/logs/secfocus/access_log,并每隔86400秒(一天)对日志进行一次轮循 。轮循以后的文件名为/www/logs/secfocus/access_log.nnnn,这里nnn是开始记录日志的时间 。因此为了将日志按天对齐就需要在凌晨00:00启动服务,使得每天轮循得到的日志刚好是完整一天的日志,以提供给访问统计分析程序进行处理 。如果是00:00开始生成新的日志,那么轮循得到的日志就是access_log.0000 。
4.3 使用cronolog实现日志轮循
首先需要下载和安装cronolog,可以到http://www.cronolog.org下载最新版本的cronolog 。下载完毕以后,解压安装即可,方法如下所示:

推荐阅读