本文原出处 http://www.zhangyiqun.cn/26.html
原作者 作者:张逸群
Mail:jeantoe@gmail.com
引言
要有效地管理Web服务器,就有必须了解服务器的状态、性能以及出现的问题。Apache提供了非常全面而灵活的日志记录功能。本文将阐述如何配置文件以及如何理解日志内容。
1.使用combined获取更详细的日志
编辑httpd.conf文件(下面几乎都是更改这个文件),搜索CustomLog
CustomLog logs/access_log combined
用这个格式不会有什么损失,而且还能获得一些额外的信息(referer和user-agent)。
2.让错误信息更全面
通过定义loglevel来实现
搜索LogLevel
日志级别如下。(debug产生的信息最多。emerg产生的信息最少)
Level | 描述 | 例子 |
emerg | 紧急(系统无法使用) | “Child cannot open lock file. Exiting” |
alert | 必须立即采取措施 | “getpwuid: couldn’t determine user name from uid” |
crit | 致命情况 | “socket: Failed to get a socket, exiting child” |
error | 错误情况 | “Premature end of script headers” |
warn | 警告情况 | “child process 1234 did not exit, sending another SIGHUP” |
notice | 一般重要情况 | “httpd: caught SIGBUS, attempting to dump core in …” |
info | 普通信息 | “Server seems busy, (you may need to increase StartServers, or Min/MaxSpareServers)…” |
debug | 调试信息 | “Opening config file …” |
3.记录以POST方式传送的数据
使用mod_secutiry,增加如下配置
SecAuditLogType Concurrent
SecAuditLogStorageDir /var/www/audit_log/data/
SecAuditLog /var/www/audit_log/index
SecAuditLogParts ABCFHZ
注:
post方式与get方式
1、采用post方式传输数据时,不需要在URL中显示出来,而get方式要在URL当中进行显示(不安全性).
2、post方式的传输数据量较大,理论上来说是没有限制的,而get方式由于受到UEL长度的限制,只能传递GET方式提交的数据最多只能有1024字节.
3、post顾名思义,就是为了将数据传送到服务器端,Get就是为了从服务器端取得数据.而Get之所以也能传送数据,只是用来设计告诉服务器,你到底需要什么样的数据.post的信息作为http请求的内容,而Get是在Http头部传输的。
我们的form表单的method方法,post,get.它在页面传值的时候的区别也就是上面提到的三点.
4.记录cookie
记录从客户端收到的cookie
CustomLog logs/cookies_in.log “%{UNIQUE_ID}e %{Cookie}i”
CustomLog logs/cookies2_in.log “%{UNIQUE_ID}e %{Cookie2}i”
记录由服务器发送的cookie
CustomLog logs/cookies_out.log “%{UNIQUE_ID}e %{Set-Cookie}o”
CustomLog logs/cookies2_out.log “%{UNIQUE_ID}e %{Set-Cookie2}o”
注:本方法记录所有的cookie ,如何区分是个问题。我只在实验的时候用,真实生产环境用的不多。
cookie与Set-cookie标头字段是最常用到的。cookie2与set-cookie对应的字段比较新。
5.忽略来自本站的请求
追踪盗链的时候比较有用。
定义后缀
SetEnvIfNoCase Referer “^http://www.example.com/” 你的网站 local_referrer=1
CustomLog logs/access_log combined env=!local_referrer
注:SetEnvIfNoCase与SetEnvIf相同,但是前者无视大小写。
6.按时间生产日志
有时需要间隔N小时生产一次日志。
CustomLog “| /path/to/rotatelogs /path/to/logs/access_log.%Y-%m-%d 86400″ combined
注:使用了CustomLog和rotatelogs (red hat默认就有)。
使用秒来控制间隔时间。
7.在每月的第一天更新日志文件
在每月的第一天结束上个月的日志文件,同时开始新的记录。
CustomLog "|/usr/bin/cronolog /www/logs/access%Y%m.log" combined
注:需要使用cronolog,十分好用的工具,下载地址请google之。
8.为虚拟主机建立各自的日志
首先,需要将虚拟主机的信息放入日志中。
LogFormat “%v %h %l %u %t /”%r/” %>s %b” vhost
CustomLog logs/multiple_vhost_log vhost
这将用日志的普通格式来创建一个日志文件。但会在每条记录前加上正式的虚拟主机名(就是在ServerName指令中定义的那个)。
现在将日志文件分开(每个虚拟主机一个日志文件)
split-logfile < /logs/multiple_vhost_log
注:split-logfile不是自动安装的,而是在配置过程以后,装在”support”目录下的
附表
9.记录响应请求的ip地址
当服务器有多个ip时想知道是哪个ip响应了请求。
CustomLog logs/served-by.log “%A”
10.记录访客来源
知己知彼,了解访客是从哪个网站过来的。
%{Referer}i
注:默认已经包含在logformat
11.记录访客使用的浏览器
%{User-Agent}i
注:默认已经包含在logformat
12.使用syslog记录apache日志
第一步:配置syslog
/etc/syslog.conf是syslog的配置文件。
里面的每一行都用一个或者多个空格或者TAB隔开,分成两个段
如:
mail.info /var/log/maillog
意思是把日志对象mail的info级别及以上级别的日志记录到/var/log/maillog中去
在这里,前面一段是 : 日志对象.日志级别。后面一段是:日志的记录位置,这个位置可以是文件(如/var/log/maillog),可以是某个TTY(如/dev/tty1)可以是某个登录的用户的控制台 (如用户名jean)也可以是当前所有的下在登录的用户所在的控制台(用*号表示所有用户)还可以是一台远程的主机(@remote_host_ip)
现在加入这一行
local0.info /var/log/apache.log
然后重新启动syslog。service syslog restart
第二步
在apache配置中加入
CustomLog “|logger -t apache -p local0.info” combined
补充
HTTP状态码
编码 | 描述 |
Informational 1xx | |
100 | Continue |
101 | Switching protocols |
Successful 2xx | |
200 | OK |
201 | Created |
202 | Accepted |
203 | Nonauthoritative information |
204 | No content |
205 | Reset content |
206 | Partial content |
Redirection 3xx | |
300 | Multiple choices |
301 | Moved permanently |
302 | Found |
303 | See other |
304 | Not modified |
305 | Use proxy |
306 | (Unused) |
307 | Temporary redirect |
Client error 4xx | |
400 | Bad request |
401 | Unauthorized |
402 | Payment required |
403 | Forbidden |
404 | Not found |
405 | Method not allowed |
406 | Not acceptable |
407 | Proxy authentication required |
408 | |
409 | Conflict |
410 | Gone |
411 | Length required |
412 | Precondition failed |
413 | Request entity too large |
414 | Request-URI too long |
415 | Unsupported media type |
416 | Requested range not satisfiable |
417 | Expectation failed |
Server error 5xx | |
500 | Internal server error |
501 | Not implemented |
502 | Bad gateway |
503 | Service unavailable |
504 | Gateway timeout |
505 | HTTP version not supported |