首页 > 代码库 > apache日志管理

apache日志管理


一.apache日志类型

1.apache日志共分为:访问日志,错误日志

2.日志信息的级别

严重程度等级 说明
1emerg系统不可用
2alert需要立即引起注意的情况
3crit 危急情况
4error错误信息
5warn警告信息
6notice需要引起注意的情况
7info一般信息
8debug由运行于debug模式的程序输出的信息

说明:

       如果用户把错误日志设置成warn级别,则严重程度由1~5的所有错误信息都会被记录下来


二.apache访问日志

apache访问日志的格式

    Apache内建了记录服务器活动的功能,这就是它的日志功能。

  如果Apache的安装方式是默认安装,服务器一运行就会有两个日志文件生成。这两个文件是access_log和error_log。位于/var/log/httpd/下;如果采用源代码编译安装方式时,位于/usr/local/apache/logs; 

   正如其名字所示,访问日志access_log记录了所有对Web服务器的访问活动。下面是访问日志中一个典型的记录: 

   

 192.168.254.191 - - [01/Sep/2014:14:06:49 +0000] "GET / HTTP/1.1" 200 44
 从记录上可以看出,日志分为7项,上面例子中有两项空白,但是整体是7项
第一项:192.168.254.191 是客户端自身的ip

第二项:- 用一个“-”占位符代替 实际上绝大多数时候这一项都是如此。这个位置用于记录浏览者的标识,这不只是浏览者的登录名字,而是浏览者的email地址或者其他唯一标识符。这个信息由identd返回,或者直接由浏览器返回。但是基本上现在浏览器都淘汰了这项功能

第三项:-用一个“-”占位符代替。实际用来记录浏览者进行身份验证时提供的名字

第四项:[01/Sep/2014:14:06:49 +0000]  记录访问时间。这个信息用方括号包围,而且采用所谓的“公共日志格式”或“标准英文格式”。+0000表示服务器所在时区和UTC所差的时区

第五项:"GET / HTTP/1.1"  告诉我们服务器收到的是一个什么样的请求,该项信息的典型格式是“METHOD RESOURCE PROTOCOL”,即“方法 资源 协议”

第六项:200 表示信息状态码。即用户请求的结果是否成功。200表示服务器成功响应浏览器的请求。但一般地说,以2开头的状态代码表示成功,以3开头的状态代码表示由于各种不同的原因用户请求被重定向到了其他位置,以4开头的状态代码表示客户端存在某种错误,以5开头的状态代码表示服务器遇到了某个错误。
  
第七项:44 示发送给客户端的总字节数。它告诉我们传输是否被打断(即,该数值是否和文件的大小相同)。把日志记录中的这些值加起来就可以得知服务器在一天、一周或者一月内发送了多少数据。
 
【总结】:日志名字段所代表的内容:   1.远程主机、2.空白(E-mail)、3.空白(登录名)、4.请求时间、5.方法+资源+协议、6.状态代码、7.发送字节数
配置访问日志

决定日志存放位置的是在httpd.conf中的下面这个语句

CustomLog "logs/access_log" common


CustomLog指定了保存日志的具体位置以及格式,上面这个语句指定是common日志格式(标准的日志格式)

注意:对于较早的apache服务器,这能不是CustomLog,而是用transferlog指定


三.apache错误日志

错误日志内容及格式

错误日志记录了服务器运行期间遇到的各种错误,以及一些普通的诊断信息。内容一般分为文档错误和CGI错误,还有一些配置文件报错及服务的开启关闭等信息

[Mon Sep 01 15:21:03 2014] [error] [client 192.168.254.191] File does not exist: /usr/local/httpd-2.2.9/htdocs/aa
第一项: 日期/时间标记,注意它们的格式和access_log中日期/时间的格式不同。access_log中的格式被称为“标准英文格式”,
   
第二项:当前记录的级别,它表明了问题的严重程度。这个级别信息可能是LogLevel指令的文档中所列出的任一级别(参见前面LogLevel的链接),error级别处于warn级别和crit级别之间。404属于error错误级别,这个级别表示确实遇到了问题,但服务器还可以运行。
  
第三项:表示用户发出请求时所用的IP地址。  

第四项:真正的错误信息。对于404错误,它还给出了完整路径指示服务器试图访问的文件。

位置

错误日志的位置由httpd.conf文件中下面语句指定

ErrorLog "logs/error_log" 指定错误日志文件位置     

LogLevel warn     指定记录错误日志的级别


四.apache日志的定制

定义访问日志的格式

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

LogFormat指令定义格式并为格式指定一个名字,以后我们就可以直接引用这个名字。CustomLog指令设置日志文件,并指明日志文件所用的格式(通常通过格式的名字)。  

LogFormat "%h %l %u %t \"%r\" %>s %b" common

CustomLog "logs/access_log" common


LogFormat指令创建了名为“common”日志格式,引号中间的每个字符串定义了日志的格式,表示特定的信息,这些信息按照格式串规定的次序写入日志文件。


常见的格式串变量

%...a:     远程IP地址  
 %...A:     本地IP地址  
 %...B:     已发送的字节数,不包含HTTP头  
 %...b:     CLF格式的已发送字节数量,不包含HTTP头。  
           例如当没有发送数据时,写入‘-’而不是0。  
 %...{FOOBAR}e: 环境变量FOOBAR的内容  
 %...f:     文件名字  
 %...h:     远程主机  
 %...H      请求的协议  
 %...{Foobar}i: Foobar的内容,发送给服务器的请求的标头行。  
 %...l:     远程登录名字(来自identd,如提供的话)  
 %...m      请求的方法  
 %...{Foobar}n: 来自另外一个模块的注解“Foobar”的内容  
 %...{Foobar}o: Foobar的内容,应答的标头行  
 %...p:     服务器响应请求时使用的端口  
 %...P:     响应请求的子进程ID。  
 %...q      查询字符串(如果存在查询字符串,则包含“?”后面的  
           部分;否则,它是一个空字符串。)  
 %...r:     请求的第一行  
 %...s:     状态。对于进行内部重定向的请求,这是指原来的请求  
           的状态。如果用%...>s,则是指后来的请求。  
 %...t:     以公共日志时间格式表示的时间(或称为标准英文格式)  
 %...{format}t: 以指定格式format表示的时间  
 %...T:     为响应请求而耗费的时间,以秒计  
 %...u:     远程用户(来自auth;如果返回状态(%s)是401则可能是伪造的)  
 %...U:     用户所请求的URL路径  
 %...v:     响应请求的服务器的ServerName  
 %...V:     依照UseCanonicalName设置得到的服务器名字
 
"%{Referer}i" --此项指明了该请求是从被哪个网页提交过来的。
"%{User-Agent}i" --此项是客户浏览器提供的浏览器识别信息


 在所有上面列出的变量中,“...”表示一个可选的条件。如果没有指定条件,则变量的值将以“-”取代。分析前面来自默认httpd.conf文件的LogFormat指令示例,可以看出它创建了一种名为“common”的日志格式,其中包括:远程主机,远程登录名字,远程用户,请求时间,请求的第一行代码,请求状态,以及发送的字节数。  


   有时候我们只想在日志中记录某些特定的、已定义的信息,这时就要用到“...”。如果在“%”和变量之间放入了一个或者多个HTTP状态代码,则只有当请求返回的状态代码属于指定的状态代码之一时,变量所代表的内容才会被记录。例如,如果我们想要记录的是网站的所有无效链接,那么可以使用:  

   LogFormat %404{Referer}i BrokenLinks  


   反之,如果我们想要记录那些状态代码不等于指定值的请求,只需加入一个“!”符号即可: 

   LogFormat %!200U SomethingWrong  

举例

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" combined    

CustomLog "log/access_log" combined   

这种格式与通用日志格式类似,但是多了两个 %{header}i 项,其中的header可以是任何请求头。这种格式的记录形如:


127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gif HTTP/1.0" 200 2326 "http://www.example.com/start.html" "Mozilla/4.08 [en] (Win98; I ;Nav)"


其中,多出来的项是:


"http://www.example.com/start.html" (\"%{Referer}i\")

"Referer"请求头。此项指明了该请求是被从哪个网页提交过来的,这个网页应该包含有/apache_pb.gif或者其连接。


"Mozilla/4.08 [en] (Win98; I ;Nav)" (\"%{User-agent}i\")

"User-Agent"请求头。此项是客户端提供的浏览器识别信息

五.apache日志轮询

什么是日志轮询?

默认情况下apache的日志是写入到一个文件中的,这对日志的备份和分析造成不便。日志轮询就是可以把apache的日志根据时间进行分开,例如按天轮询:即apache会把当天的日志写入到一个独立的文件中。


下载并安装日志轮询工具

wget http://cronolog.org/download/cronolog-1.6.2.tar.gz
tar zxf cronolog-1.6.2.tar.gz 
cd cronolog-1.6.2
./configure 
make 
make install


配置轮询

<VirtualHost *:80>

 DocumentRoot "/usr/local/httpd-2.2.9/htdocs/sr1/"

 ServerName www.sr1.com

 ServerAlias www.sr1.com

ErrorLog "logs/www.sr1.com_error_log"

# CustomLog "logs/www.sr1.com_access_log" jie

CustomLog "|/usr/local/sbin/cronolog /usr/local/httpd/logs/sr1_%Y%m%d_access_log" jie

</VirtualHost>


注意日志的文件要写绝对路径

%Y%m%d是按天轮询

%Y%m%d%H是按小时轮询


查看结果:可以发现在logs下sr1的日志会按天来创建

wKioL1SSjVGQrPN0AAGmdO-54jI859.jpg

 

本文出自 “Study-Everyday” 博客,请务必保留此出处http://studys.blog.51cto.com/9736817/1591434

apache日志管理