Apache日志管理

it2023-05-03  73

Apache日志管理

前言

本试验由于日志格式有多种设置格式,导致篇幅过长,因此单独整理一篇文档以作记录,如有偏差处,欢迎大家指正批评。

基本理论说明

日志管理概述

日志分割

我们每访问一次网站,那么就会记录若干条日志。如果日志不去管理,时间长了日志文件会越来越大,如何避免产生大的日志文件?其实apache有相关的日志轮替工具,使日志按照我们的需求进行归档,比如每天一个新日志,或者每小时一个新的日志。

日志筛选

如果一个网站访问量特别大,那么访问日志就会很多,但有一些访问日志我们其实是可以忽略掉的,比如网站的一些图片,还有js、css等静态对象。而这些文件的访问往往是巨量的,而且即使记录这些日志也没有什么用,apache也可以通过设置参数使其不记录无用信息。

apache日志记录格式的设置

定制日志文件的格式涉及到三个指令,即LogFormat指令和CustomLog指令和ErrorLog指令,默认httpd.conf文件提供了关于这两个指令的几个示例。

LogFormat

LogFormat指令定义格式并为格式指定一个名字,以后我们就可以直接引用这个名字。

详细设置见Apache配置文件-LogFormat配置详解

CustomLog

CustomLog指令定义访问日志文件,并指明日志文件所用的格式。

ErrorLog

ErrorLog指令定义错误日志,并指明日志文件所用日志文件所用的格式。

日志管理工具-rotatelogs

rotatelogs基本是按时间或大小来控制日志的。

例如用时间控制日志文件

|就是管道符,意思是把产生的日志交给rotatelog这个工具,而这个工具就是apache自带的切割日志的工具。-l的作用是校准时区为UTC,也就是北京时间。86400,单位是秒,正好是一天,那么日志会每天切割一次。而最后面的combined为日志的格式,在httpd.conf中有定义。

例如使用文件大小控制日志文件

上述大致一样,最后结尾5M意指日志文件达到5M时自动分割文件。

下列给出了所有可用于日志分割格式串的变量以及含义。

%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 时区名 %% 符号"%"本身

实验步骤

一、设置日志储存路径

vim /usr/local/apache/conf/httpd.conf

搜索关键字"ErrorLog"。

搜索关键字"CustomLog"。

本试验使用默认参数。

ps:还原配置文件或者还原快照再做次试验。

二、设置apache日志分割

分别将错误日志和访问日志交给apache自带的日志切割工具rotatelogs处理。

错误日志设置分割 |/usr/local/apache/bin/rotatelogs -l /usr/local/apache/logs/error_%Y%m%d%H%M.log 60

ps:此条命令意思为使用rotatelogs分割位于/usr/local/apache/logs目录下的日志文件,日志格式为error_20xx年xx月xx日xx时xx分.log文件,每60秒分割一次,方便之后的验证过程。真实生产环境中通常使用天作为单位分割,即86400秒。

访问日志设置分割 |/usr/local/apache/bin/rotatelogs -l /usr/local/apache/logs/access_%Y%m%d%H%M.log 60

注意:若开启了https,则需要修改http-ssl.conf配置文件中的日志记录条目

三、访问测试

配置好之后,重启服务器后,去访问网页之后才会生成CustomLog,但是是不会生成ErrorLog的,只有你访问出现错误(例如你访问一个此网站上不存在的资源时)才会生成错误日志。

cd /usr/local/apache/logs

成功以分钟为单位分割了日志。

四、添加日志记录筛选

如果一个网站访问量特别大,那么访问日志就会很多,但有一些访问日志我们其实是可以忽略掉的,比如网站的一些图片,还有js、css等静态对象。

vim /usr/local/apache/conf/httpd.conf

在Customlog指令上添加筛选匹配,日志格式为combined。

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

在原来的访问日志配置基础上,增加了一些image-request的定义,比如把gif、jpg、bmp、swf、js、css等结尾的全标记为image-request,然后在配置日志后加一个标记env=!image-request,表示取反。即不记录上述种类访问日志。

测试配置文件是否出错

/usr/local/apache/bin/apachectl -t

创建测试文件,分别创建.jpg格式文件与普通.html文件。

重启服务

/usr/local/apache/bin/apachectl stop /usr/local/apache/bin/apachectl start

开始监测访问日志

tailf /usr/local/apache/logs/access_202008010000.log

浏览器访问测试

http://192.168.10.10/index.html

监测到访问index.html的日志。

http://192.168.10.10/test.jpg

并无检测到test.jpg的访问记录日志。

本文于2020年10月19日由Vonmerlot重新整理。

最新回复(0)