1、为什么使用日志滚动
由于Apache 进程本身不负责对日志文件进行滚动,因此必须使用其他程序配置日志滚动。所有的日志文件都会随着时间的推移和访问次数的增加而迅速增长,因此必须对日志文件进行定期清理以免造成磁盘空间的不必要的浪费。同时也加快了管理员查看日志所用的时间,因为打开小文件的速度比打开大文件的速度要快。
2、使用命令使用空的日志文件
要使系统重新使用空的日志文件,可以执行如下的命令:
cd /opt/coolstack/apache2/log
mv access_log access_log.old
mv error_log error_log.old
/opt/coolstack/apache2/bin/apachectl graceful
sleep 800
gzip access_log.old error_log.old
上面的指令片断是进行日志滚动的基础,用户可以自行编制脚本让cron 执行。下面介绍两种常用的日志滚动配置方法。
3、使用 rotatelogs 实现日志滚动
Apache 自带的 rotatelogs 程序可以实现日志滚动。rotatelogs是一个配合 Apache 管道日志功能使用的简单程序。为了使用 rotatelogs 程序,需要在 Apache 配置文件中使用管道日志的配置。
rotatelogs 命令的格式如图4:
rotatelogs 命令的格式
rotatelogs 命令的格式
其中:
-l:使用本地时间代替GMT时间作为时间基准。
logfile:日志文件名。有两种格式表示新的日志开始使用的时间。
如果 logfile中包含”%”,则它会被视为用于strftime()的格式字符串;常用的有:
%Y:4位数的年份
%m:2位数的月份
%d:2位数的一个月中的日期数
%H:2位数的小时数(24小时制)
%M:2位数的分钟数
%S:2位数的秒数
%U:2位数的一年中的星期数(星期天为一周的第一天)
%W:2位数的一年中的星期数(星期一为一周的第一天)
%w:1位数的星期几(星期天为一周的第一天)
否则它会被自动加上以秒为单位的”.nnnnnnnnnn”后缀,这里 nnnnnnnnnn 是开始记录日志的格林威治时间距离 1970年1月1日 的秒数。
rotationtime:日志文件滚动的以秒为单位的间隔时间。
offset:相对于UTC的时差的分钟数。如果省略,则假定为”0″并使用UTC时间。比如,要指定UTC时差为”-5小时”的地区的当地时间,则此参数应为”-300″。
filesizeM:指定以 filesizeM 文件大小滚动,而不是按照时间来滚动日志。
使用举例:
例1:每过一天滚动日志 ,修改apache配置文件如下:
TransferLog "| /opt/coolstack/apache2/bin/rotatelogs / opt/coolstack/apache2/log /access.log 86400" combined
其中 86400(秒)是日志滚动的时间。86400 秒就是 1 天。滚动以后的文件名为/ opt/coolstack/apache2/log /access.log /access_log.nnnnnnnnnn,这里 nnnnnnnnnn 是开始记录日志的格林威治时间距离 1970年1月1日 的秒数。当日志滚动一次后将生成一个新的日志文件,后缀为前一个日志文件的后缀值加 86400。
例2:在日志文件大小增长到指定字节时滚动日志 ,修改apache配置文件如下:
TransferLog "|/opt/coolstack/apache2/bin/rotatelogs / opt/coolstack/apache2/log/apache2/access.log 20M" combined
此配置会在日志文件大小增长到 20M 字节时滚动该日志。
例3:使用logrotate 实现日志滚动
logrotate 是Unix、Linux系统实现日志滚动的通用程序。Linux下可以直接使用,Solaris 10 下要进行安装配置。
#wegt ftp://ftp.sunfreeware.com/pub/freeware/intel/10/logrotate-3.7.1-sol10-x86-local.gz
#gunzip ftp://ftp.sunfreeware.com/pub/freeware/intel/10/logrotate-3.7.1-sol10-x86-local.gz
#pkgadd –d logrotate-3.7.1-sol10-x86-local
图5是logrotate安装配置完成界面
logrotate安装配置完成界面
logrotate安装配置完成界面
可以把配置文件/usr/local/doc/logrotate/examples/ logrotate-default复制为配置文件/etc/logrotate.conf
可以把配置文件/usr/local/doc/logrotate/examples/ logrotate.cron复制到文件目录/etc/cron.d/
下面看看配置文件如图6。
配置文件
配置文件
logrotate的配置文件中可以看到,除了wtmp以外,需要滚动的日志的配置都保存在/etc/logroate.d目录下。因此只需要在该目录下创建一个名为apache的配置文件,来指示logrotate如何轮循Web服务器的日志文件即可。下面是一个示例:
/ opt/coolstack/apache2/log {
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:使用使用 cronolog 实现日志滚动
cronolog (http://cronolog.org/ )是基于 rotatelogs 的一个第三方工具软件。cronolog 可以非常整齐的将日志按天轮循存储,即每个日志文件存储的是 00:00:00 到 23:59:59 时间之内的所有日志。
1.准备gcc for solaris10 编译器,这里用的版本:gcc-3.3.2-sol10-intel-local.gz
2.下载解压缩文件
#wegt ftp://ftp.sunfreeware.com/pub/freeware/intel/10/gcc-3.3.2-sol10-intel-local.gz
#gizip –d gcc-3.3.2-sol10-intel-local.gz
3.安装
#pkgadd -d gcc-3.3.2-sol10-intel-local
接下来的安装,是一个交互安装过程
默认安装路径/usr/local/bin
4.设置PATH变量
# PATH=$PATH:/usr/local/bin
#PATH=$PATH:/usr/ccs/bin
# export PATH
5. 准备coronolog,版本:cronolog-1.6.2.tar.gz
6.下载安装:
#wegt http://cronolog.org/download/cronolog-1.6.2.tar.gz
# tar zxvf cronolog-1.6.2.tar.gz
# cd cronolog-1.6.2
# ./configure
# make
# make install
cronolog安装配置完成界面
cronolog安装配置完成界面
可以看到默认是安装在/usr/local/sbin/下 。下面是一个使用 cronolog 的例子:
CustomLog "|/usr/local/sbin/cronolog / opt/coolstack/apache2/log /access.log.%Y-%m-%d" combined
他将按日志依次生成日志文件,如:
access.log.2008-09-18
access.log.2008-09-19
access.log.2008-09-20
access.log.2008-09-21
access.log.2008-09-22
若要压缩旧的日志文件或清除无用的日志文件,可以使用 find 等命令 配合系统 crond 来实现。
总结:到此为止笔者介绍了Solaris 10 web服务器日志配置,本文使用的Apache版本是CoolStack http://cooltools.sunsource.net/coolstack/工具,apache版本2.2.9 。后边笔者会介绍使用PHPMyVisites、apachetop、analog三个工具进行web日志分析。