十一、Apache日志切割

于2022年4月3日重新编辑

一、Apache日志切割

Apache日志默认按周进行切割,但是如果实际访问量过大,日志文件也会变大,不利于后期日志查找跟分析。

生产环境中一般会按天进行日志切割。

1.1 日志切割方式

  1. 使用脚本
  2. Apache自带工具rotatelogs
  3. 第三方工具cronolog

1.2 Apache的日志格式

[root@lamp apache2]# egrep -v "^.*#|^$" conf/httpd.conf
<IfModule log_config_module>
#apache提供了两种日志格式的模板,即combined模板跟common模板
    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
    LogFormat "%h %l %u %t \"%r\" %>s %b" common
    <IfModule logio_module>
      LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
    </IfModule>
    CustomLog "logs/access_log" common #访问日志默认使用是common模板
</IfModule>


1.3 日志格式参数说明

按下/log_config_module搜索,可查看日志默认记录格式

%h 是来源ip,用户使用代理服务器,此处会显示代理IP。
如果如下配置则使用common可显示真实ip
LogFormat "%h %l %u %t "%r" %>s %b "%{X-FORWARDED-FOR}i"" common
%u 访问的user
%t 时间
%r 动作

来自《Linux系统运维指南》

二、配置日志切割

2.1 切割所有网站日志

1、编辑主配置文件httpd.conf

vim /usr/local/apache2/conf/httpd.conf
#记录日志会使用该模块,需要去掉注释
LoadModule log_config_module modules/mod_log_config.so 
#输入/ErrorLog并修改为如下行所示
ErrorLog "|/usr/local/apache2/bin/rotatelogs logs/error_log-%Y_%m_%d 86400 480"

#输入/CustomLog并修改为如下行所示
CustomLog "|/usr/local/apache2/bin/rotatelogs logs/access_log-%Y_%m_%d 86400 480" common

/usr/local/apache2/logs/access_log-%Y%m%d:指定日志文件以及文件名

86400:指定日志分割时间,默认单位秒,86400表示一天分割一次

480:指定分区时差,默认单位分钟,480表示8小时

common:使用的模板文件名

2、重启服务

#检查配置文件语法
apachectl -t

#重新加载配置文件不重启服务
apachectl graceful

3、修改服务器时间,访问apache查看日志文件是否发生变化

#产生访问日志
curl http://10.154.0.110
date

#修改时间为2021年5月4日
date -s '05/04/2021'

[root@lamp ~]# ll /usr/local/apache2/logs/
total 40
-rw-r--r--. 1 root root   70 May  4 00:00 access_log-2021_05_03
-rw-r--r--. 1 root root   70 Jun  4 00:00 access_log-2021_05_04

2.2 切割虚拟主机日志

1、编辑主配置文件httpd.conf

vim /usr/local/apache2/conf/httpd.conf
#记录日志使用的该模块,需要去掉注释
107 LoadModule log_config_module modules/mod_log_config.so 
272 ErrorLog "logs/error_log" #错误日志文件路径
301 CustomLog "logs/access_log" common #访问日志文件路径,common为定义的日志格式名

#去掉该行注释启用虚拟主机httpd-vhosts.conf配置文件
479 Include conf/extra/httpd-vhosts.conf 

2、编辑虚拟主机配置文件

vim /usr/local/apache2/conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
        DocumentRoot "/www/tz"
        ServerName www.tz.com
        CustomLog "|/usr/local/apache2/bin/rotatelogs -l /usr/local/apache2/logs/tz.com-access_%Y%m%d_log 86400" combined
</VirtualHost>

%Y%m%d 规定年月日
86400秒 即为按天切割日志文件
combinedio 为使用的日志格式名

3、编写测试页面

mkdir -p /www/tz
echo 'This is tz page!' > /www/tz/index.html

4、修改hosts文件

vim /etc/hosts
10.154.0.113 www.tz.com

5、生效配置文件

apachectl -t #检查配置文件语法
apachectl graceful #使配置文件生效,可以不重启服务

6、修改服务器时间,访问apache查看日志文件是否发生变化

#产生访问日志
curl http://10.154.0.110
date

#修改时间为2021年5月10日
date -s '05/10/2021'

2.3 不记录指定文件类型的日志

如果我们不记录对图片等访问的日志,可以如下配置

1、编辑虚拟主机配置文件

vim /usr/local/apache2/conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
	DocumentRoot "/www/tz"
	ServerName www.tz.com
	ErrorLog "logs/test.com-error_log" 
	SetEnvIf Request_URI ".*\.gif$" image-request
	SetEnvIf Request_URI ".*\.jpg$" image-request 
	SetEnvIf Request_URI ".*\.png$" image-request 
	SetEnvIf Request_URI ".*\.bmp$" image-request 
	SetEnvIf Request_URI ".*\.swf$" image-request 
	SetEnvIf Request_URI ".*\.js$" image-request 
	SetEnvIf Request_URI ".*\.css$" image-request 
	CustomLog "|/usr/local/apache2/bin/rotatelogs -l /usr/local/apache2/logs/tz.com-access_%Y%m%d_log 86400" combined env=!image-request
</VirtualHost>

env=!image-request #不记录做过标记的文件
image-request #image-request为标记名

三、参考资料

posted @ 2021-05-10 15:43  努力吧阿团  阅读(326)  评论(0编辑  收藏  举报