玩转apache之日志
作者:张逸群
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 |
1、除特别说明外,本博客内容皆为原创,可以自由转载传播,但请署名及注明出处,不尊重别人劳动成果的不欢迎;
2、本博客内容遵守“署名-非商业性使用-禁止演绎 2.5 中国大陆”协议;