十一、Apache日志切割
于2022年4月3日重新编辑
一、Apache日志切割
Apache日志默认按周进行切割,但是如果实际访问量过大,日志文件也会变大,不利于后期日志查找跟分析。
生产环境中一般会按天进行日志切割。
1.1 日志切割方式
- 使用脚本
- Apache自带工具rotatelogs
- 第三方工具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为标记名
三、参考资料
- 《Linux系统运维指南》
- Apache日志格式说明
- 日志参数说明
- B站:千锋教育云计算650集-P143-144
今天的学习是为了以后的工作更加的轻松!