httpd的日志格式有两种,分别是:
通用日志(Common Log Format)
组合日志(Combined Log Format)
工作当中一般会使用组合日志,因为组合日志记录的日志内容较多,便于进行后续的日志分析。
4.1 配置组合日志
在主配置文件的lon_config模块中,定义了两种类型的日志格式,combined和common:
[root@http-2 conf]# cat httpd.conf
<IfModule log_config_module>
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
一般情况下,需要使用默认格式的日志即可。当然,httpd支持日志格式的改动,添加一些日志参数,可以得到更详细的日志。
如果要使用组合日志,只需要在CustomLog中,添加combined参数即可:
[root@http-2 extra]# vi httpd-vhosts.conf
<VirtualHost *:80>
ServerAdmin 164767965@qq.com
DocumentRoot "/web/www/"
ServerName 192.168.235.83
ErrorLog "logs/www-error_log"
CustomLog "logs/www-access_log" combined
</VirtualHost>
重启服务:
[root@httpd-2 ~]# apachectl -t
Syntax OK
[root@httpd-2 ~]# apachectl graceful
查看访问日志:
通用日志格式:
[root@http-2 conf]# tail -l /var/log/httpd/www-access_log
192.168.235.1 - - [06/Jul/2019:19:53:20 +0800] "GET /favicon.ico HTTP/1.1" 404 209
组合日志格式:
[root@http-2 conf]# tail -l /var/log/httpd/www-access_log
192.168.235.1 - - [07/Jul/2019:03:51:08 +0800] "GET /favicon.ico HTTP/1.1" 404 209 "http://192.168.235.83/" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36"
4.2 日志轮询配置
日志轮询是干什么用的?
网站访问量都是很大的,一直将日志存放到一个文件中,会导致这个文件很大,备份或者查询都不方便。日志轮询的工作就是可以按照设定的时间切割日志,比如每过一个小时就把日志自动切割开,生成一个新的日志文件,未来一个小时将日志存放到这个新日志文件当中,一直这样循环下去。日志轮询访问用户少的话可以不用配置,多的话需要配置。
安装日志切割软件cronolog:
[root@http-2 ~]# yum -y install cronolog
切割日志配置:
[root@http-2 ~]# which cronolog
/usr/sbin/cronolog
[root@http-2 ~]# vi /etc/httpd/conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
ServerAdmin 164767965@qq.com
DocumentRoot "/web/www/"
ServerName 192.168.235.83
ErrorLog "logs/www-error_log"
CustomLog "|/usr/sbin/cronolog /var/log/httpd/www-access_%Y%m%d.log" combined
#调用cronolog命令切割日志,使用命令的全路径
#以天为单位进行切割,以小时就是%Y%m%d%H,以周就是%w
#使用日志的全路径
</VirtualHost>
重启服务:
[root@httpd-2 ~]# apachectl -t
Syntax OK
[root@httpd-2 ~]# apachectl graceful
查看生成的日志文件:
[root@http-2 ~]# ll /var/log/httpd/
-rw-r--r-- 1 root root 155 Jul 7 04:10 www-access_20190707.log
[root@http-2 ~]# cat /var/log/httpd/www-access_20190707.log
192.168.235.1 - - [07/Jul/2019:04:10:40 +0800] "GET / HTTP/1.1" 304 - "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:67.0) Gecko/20100101 Firefox/67.0"
4.3 忽略网站元素日志
在工作中,保留日志,很多时候是为了计算访问量,而不需要计算图片等访问元素的日志。因为打开一个页面才算是一个访问量,可以使用mod_setenvif模块,将js、css图片等元素的日志忽略。
访问网页时,标题处总是有个小图片。当你打开网页时,除了有访问页面的日志,还有这个图片元素的访问日志。因此日志文件中的访问数量=真实访问数量+网站元素访问数量。
[root@http-2 ~]# vi /etc/httpd/conf/httpd.conf
在文件最后插入三行:
<FilesMatch "\.(css|js|gif|jpg|ico|swf)">
setEnv IMAG 1
</FilesMatch>
在虚拟主机配置文件中,调用IMAG:
[root@http-2 ~]# vi /etc/httpd/conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
ServerAdmin 164767965@qq.com
DocumentRoot "/web/www/"
ServerName 192.168.235.83
ErrorLog "logs/www-error_log"
CustomLog "|/usr/sbin/cronolog /var/log/httpd/www-access_%Y%m%d.log" combined env=!IMAG
</VirtualHost>
重启服务:
[root@httpd-2 ~]# apachectl -t
Syntax OK
[root@httpd-2 ~]# apachectl graceful
这样就只记录访问量的访问日志,不会记录ico文件的日志:“GET /favicon.ico HTTP/1.1” 404 209。
4.4 忽略健康检查日志
在实际工作用,httpd服务器前端都有负载均衡设备,负载均衡设备会定期向httpd服务器发送健康检查的请求,httpd服务器默认也会记录这些健康检查日志,而这些日志没有实际参考价值。因此,需要将健康检查日志过滤掉。
因为实验没有负载均衡设备,看不出效果。
修改虚拟主机配置文件:
[root@http-2 ~]# cat /etc/httpd/conf/extra/httpd-vhosts.conf
SetEnvIf Request_URI "^check\.txt$" lbnolog # 最上边加一句
<VirtualHost *:80>
ServerAdmin 164767965@qq.com
DocumentRoot "/web/www/"
ServerName 192.168.235.83
ErrorLog "logs/www-error_log"
CustomLog "|/usr/sbin/cronolog /var/log/httpd/www-access_%Y%m%d.log" combined env=!{IMAG,lbnolog} #调用lbnolog
</VirtualHost>
重启服务:
[root@httpd-2 ~]# apachectl -t
Syntax OK
[root@httpd-2 ~]# apachectl graceful