|
本文原出处 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
| Request timeout
| 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
|
|
|
|