玩转apache之日志【转帖】
来源:互联网 发布:双十一数据调查报告 编辑:程序博客网 时间:2024/05/22 15:42
本文原出处 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
- 玩转apache之日志【转帖】
- 玩转apache之日志【转帖】
- 玩转 Nginx 日志
- 菜鸟玩转Apache之配置使用篇
- 试玩Apache Commons之IMAPMail
- [转]Apache 日志管理
- 玩转Nodejs日志管理log4js
- 纯手工玩转 Nginx 日志
- 纯手工玩转 Nginx 日志
- 玩转Nodejs日志管理log4js
- 玩转Nodejs日志管理log4js
- 8.玩转Spring Boot 日志配置
- 玩转Nodejs日志管理log4js
- 日志操作之JAVA-Apache
- 日志操作之JAVA-Apache
- 日志操作之JAVA-Apache
- Apache学习笔记之日志文件
- Apache Log4j 架构之二 日志输出
- Python多进程并发(multiprocessing)
- android:评分条RatingBar
- MySQL主从服务器数据一致性的核对与修复
- GitHub托管代码
- python发送HTTP请求
- 玩转apache之日志【转帖】
- Android MediaRecorder录音
- Bitmap那些事(2)
- 成绩转换
- Spring mvc注解的学习以及配置文件的解释
- codeforces 592 D. Super M
- Android网络编程五:(7)Volley之ImageCache
- 4.php session vs cookie 和File操作相关
- redis 数据类型详解 以及 redis适用场景场合