怎样使用Cronnolog对Apache进行日志切割

2016年2月18日 | 分类: 【技术】

CentOS中编译安装Apache默认日志是不切割的,一个整文件过大既不易于管理,也不易于分析统计。

可以使用工具Cronnolog进行日志切割,按时间分割,易于管理和分析。

参考资料:http://bbs.chinaunix.net/archiver/tid-1838594
参考资料:http://wenku.baidu.com/view/70a1c6d86f1aff00bed51eb3
参考资料:http://www.68idc.cn/help/mysqldata/Access/20150926563678
参考资料:http://bbs.chinaunix.net/thread-1942325-1-1
参考资料:http://blog.csdn.net/cjwid/article/details/1690101

1. 下载及安装

官网:http://cronolog.org/ (不知何故,目前无法访问)
下载:http://download.chinaunix.net/download.php?id=3457&ResourceID=1851
版本:1.6.2 (stable) 2002-01-24

wget http://down1.chinaunix.net/distfiles/cronolog-1.6.2.tar.gz
tar zxvf cronolog-1.6.2.tar.gz && cd cronolog-1.6.2
./configure
make && make install

用which命令查看路径验证安装:

which cronolog

默认路径为:

/usr/local/sbin/cronolog

安装完毕后,将在先前指定的目标路径中生成下列目录:

./info      cronolog信息文件(.info)目录
./man    cronolog帮助文件(man)目录
./sbin     cronolog二进制文件目录

2. 配置日志格式

虚拟主机配置文件路径:

/usr/local/apache2/conf/extra/httpd-vhosts.conf

将Web日志设置 CustomLog 修改为以下格式:

CustomLog "|/usr/local/sbin/cronolog /www/logs/example_%Y%m%d.log" combined

错误日志设置 ErrorLog 也可以利用 cronolog 分割,设置为:

ErrorLog "|/usr/local/sbin/cronolog /www/logs/error_%Y%m%d.log"

更复杂的写法,比如:

CustomLog "|/usr/local/apache/bin/rotatelogs /usr/local/apache/logs/accesslog.%Y-%m-%d-%H_%M_%S 2M +480" common

意义如下:

accesslog.%Y-%m-%d-%H_%M_%S为生成日志的格式,类似于这样:accesslog.2010-04-15-11_32_30 ,以年月日时分秒为单位的,
2M 为日志的大小,即为日志达到多大后生成新的日志文件,支持的单位为K,M,G,本处为2M
+480 为时差,文件的时间为美国时间,中国的时差要比美国多8个小时也就是480分钟,所以要加上480分钟

%A 星期名全称(本地的)
%a 3个字符的星期名(本地的)
%B 月份名的全称(本地的)
%b 3个字符的月份名(本地的)
%c 日期和时间(本地的)
%d 2位数的一个月中的日期数
%H 2位数的小时数(24小时制)
%I 2位数的小时数(12小时制)
%j 3位数的一年中的日期数
%M 2位数的分钟数
%m 2位数的月份数
%p am/pm12小时制的上下午(本地的)
%S 2位数的秒数
%U 2位数的一年中的星期数(星期天为一周的第一天)
%W 2位数的一年中的星期数(星期一为一周的第一天)
%w 1位数的星期几(星期天为一周的第一天)
%X 时间(本地的)
%x 日期(本地的)
%Y 4位数的年份
%y 2位数的年份
%Z 时区名
%% 符号”%”本身

如果服务器上只有一个站点(当然这种情况比较少),直接按上面所说格式修改 httpd.conf 文件日志设置部分。

如果使用虚拟机可以使用以下配置 httpd-vhosts.conf

保存配置文件后,重新加载或重启apache服务即可生效。

3. 日志处理

编写脚本dellogs.sh,可以定时删除过期的日志(如下10天前):

#!/bin/bash
find /usr/local/apache2.2.22/logs -mtime +10 -name "innodb.com-*" -exec rm -rf {} \;

加入crontab,每天凌晨2点执行脚本:

crontab -e
* 2 * * * /usr/local/bin/dellogs.sh > /dev/null

4. cronolog与rotatelogs还有logrotate相比,哪个更好?

来自网上的说法:

rotatelogs是apache自带的日志分割工具 据专家说在进行日志切割时容易丢日志。

rotatelogs功能不是很多,根据时间切割和根据容量切割。如果需求紧紧是这些,那可以使用。

但是如果需求还要:1、压缩;2、控制保存日志总量,例如1个月或半年。;3、在保证上个功能基础上,控制日志切割单位时间。推荐使用logrotate,更加专业,功能方面给予很大满足。