/ 中存储网

Apache服务器日志文件的配置和管理

2013-10-25 22:34:01 来源:IT技术网
1.安全警告:

任何人只要对Apache存放日志文件的目录具有写权限,也就当然地可以获得启动Apache的用户(通常是root)的权限,绝对不要随意给予任何人存放日志文件目录的写权限。

2.错误日志(Error Log)

Apache httpd将在这个文件中存放诊断信息和处理请求中出现的错误,由于这里经常包含了出错细节以及如何解决,如果服务器启动或运行中有问题,首先就应该查看这个错误日志

错误日志通常被写入一个文件(unix系统上一般是error_log ,Windows和OS/2上一般是error.log)。在unix系统中,错误日志还可能被重定向到syslog或通过管道操作传递给一个程序。

3.访问日志(Access Log)

记录服务器所处理的所有请求,其文件名和位置取决于CustomLog指令,LogFormat指令可以简化日志的内容。

不同版本的Apache httpd使用了不同的模块和指令来控制对访问的记录,包括mod_log_referer, mod_log_agent和TransferLog指令。现在,CustomLog指令包含了旧版本中相关指令的所有功能。

通用日志格式(Common Log Format),下面是一个典型的记录格式:

LogFormat “%h %l %u %t ”%r” %>s %b” common

CustomLog logs/access_log common

它定义了一种特定的记录格式字符串,并给它起了个别名叫common ,其中的”%”指示服务器用某种信息替换,其他字符则不作替换。引号(”)必须加反斜杠转义,以避免被解释为字符串的结束。格式字符串还可以包含特殊的控制符,如换行符”n” 、制表符”t”。

CustomLog指令建立一个使用指定别名的新日志文件,除非其文件名是以斜杠开头的绝对路径,否则其路径就是相对于ServerRoot的相对路径。

组合日志格式(Combined Log Format),形式如下:

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

CustomLog log/access_log combined

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

多文件访问日志:

可以简单地在配置文件中用多个CustomLog指令来建立多文件访问日志。如下例,既记录基本的CLF信息,又记录提交网页和浏览器的信息,最后两行CustomLog示范了如何模拟ReferLog和AgentLog指令的效果。

LogFormat “%h %l %u %t ”%r” %>s %b” common

CustomLog logs/access_log common

CustomLog logs/referer_log “%{Referer}i -> %U”

CustomLog logs/agent_log “%{User-agent}i”

此例也说明了,记录格式可以直接由CustomLog指定,而并不一定要用LogFormat起一个别名。

条件日志:

许多时候,根据与请求特征相关的环境变量来有选择地记录某些客户端请求会带来便利。首先,需要使用SetEnvIf指令来设置特定的环境变量以标识符合某种特定条件的请求,然后用CustomLog指令的 env= 子句,根据这些环境变量来决定记录或排除特定的请求。例如:

# 不记录本机发出的请求

SetEnvIf Remote_Addr “127.0.0.1″ dontlog

# 不记录对robots.txt文件的请求

SetEnvIf Request_URI “^/robots.txt$” dontlog

# 记录其他请求

CustomLog logs/access_log common env=!dontlog

4.日志滚动

由于Apache会保持日志文件的打开,并持续写入信息,因此服务器运行期间不能执行滚动操作。移动或者删除日志文件以后,必须重新启动服务器才能让它打开新的日志文件。

用优雅的(graceful)方法重新启动,可以使服务器启用新的日志文件,而不丢失原来尚未写入的信息。为此,有必要等待一段时间,让服务器完成正在处理的请求,并将记录写入到原来的日志文件。以下是一个典型的日志滚动和为节省存储空间而压缩旧日志的例子:

mv access_log access_log.old

mv error_log error_log.old

apachectl graceful

sleep 600

gzip access_log.old error_log.old

5.管道日志

Apache httpd可以通过管道将访问记录和出错信息传递给另一个进程,而不是写入一个文件,由于无须对主服务器进行编程,这个功能显著地增强了日志的灵活性。只要用管道操作符”|”后面跟一个可执行文件名,就可以使这个程序从标准输入设备获得事件记录。Apache在启动时,会同时启动这个管道日志进程,并且在运行过程中,如果这个进程崩溃了,会重新启动这个进程(所以我们称这个技术为”可靠管道日志”)。

管道日志进程由其父进程Apache httpd产生,并继承其权限,这意味着管道进程通常是作为root运行的,所以保持这个程序简单而安全极为重要。(yes)

管道日志的一种重要用途是,允许日志滚动而无须重新启动服务器。为此,服务器提供了一个简单的程序rotatelogs 。每24小时滚动一次日志的例子如下:

CustomLog “|/usr/local/apache/bin/rotatelogs /var/log/access_log 86400″ common

注意:引号用于界定整个管道命令行。虽然这是针对访问日志的,但是其用法对于其他日志也一样。

在其他站点,有一个类似但更灵活的日志滚动程序叫cronolog 。

如果有较简单的离线处理日志的方案,就不应该使用条件日志和管道日志,即使它们非常强大。

6.虚拟主机日志

如果服务器配有若干虚拟主机,那么还有几个控制日志文件的功能。首先,可以把日志指令放在段之外,让它们与主服务器使用同一个访问日志和错误日志来记录所有的请求和错误,但是这样就不能方便的获得每个虚拟主机的信息了。

如果把CustomLog或ErrorLog指令放在段内,所有对这个虚拟主机的请求和错误信息会被记录在其私有的日志文件中,那些没有在段内使用日志指令的虚拟主机将仍然和主服务器使用同一个日志。这种方法对虚拟主机较少的服务器很有用,但虚拟主机非常多时,就会带来管理上的困难,还经常会产生文件描述符短缺的问题。

7.其他日志文件

略。。。