LogFormat "%h %l %u %t ""%r"" %>s %b" common LogFormat "%h %l %u %t ""%r"" %>s %b" ""%{Referer}i"" ""%{User-agent}i""" combined |
192.168.200.4 - someuser [12/Jun/2005:08:33:34 +0500] "GET /example.png HTTP/1.0" 200 1234 |
192.168.200.4 - someuser [12/Jun/2005:08:33:34 +0500] "GET /example.png HTTP/1.0" 200 1234 http://www.example.com/index.html "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.7)" |
CustomLog logs/access_log common TransferLog logs/sample.log |
TransferLog "|bin/rotatelogs /var/logs/apachelog 86400" |
你也可以用CustomLog或TransferLog将日志的输出重导向(输出)到一个外部的程序,而不是一个文件。要做到这一点,首先您需要以输出字 符 "|"开头,跟着是接收日志标准输入信息的程序之路经。本例运用Apache自带的rotatelogs程序,在稍后的章节中会对其有所介绍。服务器配置
当有一个外部程序被使用,它将作为启动httpd的用户被运行。如果服务器是被超级管理员所启动,它就会是超级管理员,完全确保这个程序是安全的。并且, 当进入一个非Unix平台上的一个文件路径时,需要小心确保只有正斜杠被使用,即使这个平台可能是允许使用反斜杠的。总的来说,在整个配置文件中总是使用 正斜杠是个好主意。
有条件的日志请求
SetEnvIf Request_URI "(.gif|.jpg)$" image CustomLog logs/access_log common env=!image SetEnvIf Remote_Addr 192.168.200.5 specialmachine CustomLog logs/special_access_log common env=specialmachine |
SetEnvIfNoCase Referer www.example.com internalreferral LogFormat "%{Referer}i -> %U" referer CustomLog logs/referer.log referer env=!internalreferral |
SetHandler server-status Order Deny,Allow Deny from all Allow from 192.168.0 |
Apache 服务器中可以使用的功能模块很多,有服务器内置的也有外挂的,这些模块工作的状态和性能就是通过mod_status参数来记录的,记录的内容有“哪些模 块参与了网站应答服务、哪些模块处于空闲状态、服务器的开启/关闭时间。正在处理的连接请求数和访问者数量(需要指定ExtendedStatus记号) -该模块记录对高负荷网站服务器性能有很大影响”。
通过SNMP协议来监视Apache服务器
SNMP 是简单网管协议,支持SNMP的服务器或网络设备可以被OpenView、Tivoli等网管软件统一管理,目前有很多开源的SNMP模块可以加装到 Apache网站服务器之上,对于Apache 1.3版来讲,mod_snmp模块可以支持第1版和2版的SNMP协议;对于Apache 2版来讲,mod_apache_snmp模块可以编译成Apache的DSO直接支持第1版、第2版和第3版的SNMP协议。有了SNMP模块,外部网 管软件就可以对Apache网站服务器的各种实时性能参数进行查看了,这些参数包含“服务器连续在线时间、平均负载、一段时间内的错误数、提供网站服务的 字节数和连接请求数”。SNMP模块遇到突然激增的并发连接请求数时会向控制台报警。管理SNMP资源的开源工具软件有:“net-snmp, OpenNMS,Najios等”。
用开源工具分析日志
有很多开源和商业版的工具软件可以对产生的Apache日志文件做分析和处理,通常的步骤是:
1.选取一个日志文件。 2.分析日志文件内容。 3.生成包含不同类别内容的统计信息网页输出。 |
Webalizer和AWStats是较为流行的日志文件分析工具;还有一些工具可以记录来访者具体访问路线,比如Vistors和Pathalizer 工具新站长网
实时监视日志
使用apachetop命令行工具来显示apache服务器当前的运行状态,类似于Unix等系统下的top命令工具。对流量比较低的Unix- Apache网站也可以使用tail命令来记录实时日志信息,tail -f /logfile/。通过扫描错误日志文件中的记录,分析出恶意连接请求,常用的错误日志文件扫描工具有Logscan和ScanErrLog。
将连接请求日志记录到数据库
Apache 本身没有将记录转发到数据库的功能,必须要第三方脚本和模块来支持。这里列举几个:mod_log_sql模块允许将连接请求直接记入MySQL数据库, 然后用Apache LogView SQL工具来参看库中的记录;pglogd工具可以记录日志到PostgreSQL数据库中。
将日志文件转存和归档
CustomLog "|bin/rotatelogs /var/logs/apachelog 86400" common |
#!/bin/bash if [ 'ps -waux | grep -v grep | grep -c httpd' -lt 1 ]; then apachectl restart; fi |
在windows 平台下以服务方式启动的Aapche遇到意外退出后可以由服务管理器自动自动,Unix平台下需要借助watchdog脚本来实现自动启动功能, watchdog程序专门用来监视其他程序的运行状态,发现被监视的程序退出或停止后可以重新将他们启动。例子中简单的linux脚本将监视系统的进程 表,如果网站服务器httpd进程消失,则负责将它重新启动,使用该脚本的条件有2个,首先保证该脚本文件具备可执行权限,第二必须将该文件设置到 cron文件中,使之可以在预定的时间间隔内运行,如果使用Solaris系统,需要将例子中的ps -waux改成ps -ef。
日志文件的分割和合并
如果用户的网站环境是用服务器集群来搭建的,通常需要将所有服务器上的日志做合并成单个文件后,才可以进行分析和处理。相似的道理,如果在单台服务器上运 行多个虚拟网站,则需要将单个日志文件分割成多个部分供不同的虚拟网站用户去分析。在Apache服务器源码的support/文件夹下可以找到相应的脚 本工具split-logfile等。比如 vlogger工具就可以替代cronologs来对单个服务器上的虚拟网站日志进行分别处理。
为虚拟网站保存独立的日志文件
ServerName vhost1.example.com CustomLog logs/vhost1.example.com_log combined ErrorLog logs/vhost2.example.com_log ....... |
LogFormat "%v %h %l %u %t ""%r"" %>s %b" common_virtualhost CustomLog logs/access_log common_virtualhost |
"SEARCH /x90x02xb1x02xb1x02xb1x02 ..." "GET /scripts/..%252f../winnt/system32/cmd.exe?/ c+dir HTTP/1.0..." "GET /default.ida?NNNNNNN NNNNNNNNNNNNNNNNNN ..." |