/ 中存储网

解决Apache服务器日志文件Access.LOG增长的问题

2013-12-08 08:47:02 来源:itjs.cn

httpd.conf中CustomLog logs/access.log common 改成

CustomLog "|/usr/local/apache/bin/rotatelogs /usr/local/apache/logs/%Y_%m_%d.access.log 86400 480" common

重启Apache

采取第三方软件进行日志分割和轮循

apache的默认方式的日志随着时间的增长,也越来越大,到了单个文件2G的时候(Linux文件系统的限制)开始影响到apache的运行速度。

采用轮循的方式可以避免这个现象的出现。

我使用的是第三方的日志轮循工具 cronolog

http://httpd.apache.org/docs/2.2/logs.html#piped

http://www.cronolog.org/

使用方式只要   configure -> make -> make install

访问日志文件的位置实际上是一个配置选项。如果我们检查httpd.conf配置文件,可以看到

该文件中有如下这两行内容:

说明一下:/home1/opt/apache2/是我的apache安装的位置

# vi /home1/opt/apache2/conf/httpd.conf

ErrorLog logs/error_log

CustomLog logs/access_log common

注意,对于版本较早的Apache服务器,这行内容可能略有不同。它使用的可能不是

CustomLog指令,而是TransferLog指令。

将其修改为:

ErrorLog “|/usr/local/sbin/cronolog /home1/opt/apache2/logs/%w/error_log”

CustomLog “|/usr/local/sbin/cronolog /home1/opt/apache2/logs/%w/access_log” common

如果有配置了虚拟主机,须:

在apache中修改每个虚拟主机中的配置,增加日志配置形式如下:

ErrorLog “|/usr/local/sbin/cronolog /home1/opt/apache2/logs/网址/%w/error_log”

CustomLog “|/usr/local/sbin/cronolog /home1/opt/apache2/logs/网址/%w/access_log” common

这里的/usr/local/sbin/cronolog是cronolog安装的主程序目录,/home1/opt/apache2/是我的

apache安装的位置

# /home1/opt/apache2/bin/apachectl restart                //重启apache服务器

这里我是按照一个星期7天轮循的方式构建的,那个%w就是周几,例如目录logs/1是周一,

logs/2是周二,logs/0是周日……我试了一下,如果到下一个周二,该天的日志会自动覆盖上一个周二的,从而实现轮循……还可以有多种方式。看日志增长情况了。。

本想定时自动删除前xx天的日志,但是用cron添加计划任务不成功……我想轮循也能实现

这个要求吧……

以下步骤未成功,省略:

保存7天的日志,用root用户添加cron为

/usr/bin/find /opt/apache2/logs -name *access_log -mtime +6 | xargs rm -rf

/usr/bin/find /opt/apache2/logs -name *error_log -mtime +6 | xargs rm -rf

其中 -mtime +6 表示 6×24小时前修改的文件找出来,然后删除掉。。

如果需要对日志用诸如webalizer这样的日志分析软件,可以在0点的时候把昨天的日志文件拷贝磁盘中的另外一个目录中,然后在负载较轻的时候分析即可。