您的位置:首页 > 运维架构 > Apache

监控并记录Apache网站服务器的运行

2010-05-18 11:38 239 查看
监控并记录Apache网站服务器的运行

在Apache下的日志简介
Apache提供了广泛记录运行时各方面信息的工具。比如有条件性的记录日志,日志循环,确定IP地址等时普遍会碰到的问题。还讲解很多用于检测您的Apache服务器状态连同分析其日志的捆绑的第三方模块和工具。
默认的Apache日志文档
Apache提供很多检测和日志工具来追踪服务器的正确运行。默认的Apache配置提供两个日志文档,放置在安装目录下的日志目录里面。
access_log 这个文档(在windows下对应access.log文档)包含了服务器已处理过的请求的信息,比如说请求的URL,客户端的IP地址,请求是否被成功完成等。error_log 这个文档(在windows下对应error.log文档)包含了和错误情况相关的信息,连同服务器生命周期中不同的大事件。
创建日志格式 LogFormat "%h %l %u %t /"%r/" %>s %b" common
LogFormat "%h %l %u %t /"%r/" %>s %b"
/"%{Referer}i/" /"%{User-agent}i/"" combined

LogFormat 指令允许您告诉Apache您想要记录请求的哪些方面。而您仍需附加的指令来告诉Apache在哪里记录那些信息,这在下一章中将会介绍。下面的例子显示了两种最受欢迎的格式的配置:普通日志格式和整合日志格式。当Apache收到一个请求,他将会用相应的请求属性来替代以%为前缀的每一个域。假如您正在使用普通日志格式,您的日志文档里的每一项输入看起来都将是这样的: 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)"
尽管有附件提供日志格式的详尽索引,下表描述了一些最为重要的域:
# %h: 客户端(例如,浏览器)向服务器发出连接请求时自己的当时的IP地址或域名(需开启HostNameLookups)。
# %u: 使用HTTP方式认证用户时,记录下的用户的编号。
# %t: 服务器接受到连接请求的时间。
# %r: 客户端发出的原始连接请求中的文本信息,包含所使用的HTTP方法。
# %>s: 服务器应答浏览器后的返回状态代码,200表示请求成功。.
# %b: 服务器应答浏览器发出的单个请求的回传对象的内容大小(字节为单位),不统计数据包头部字节。
整合日志格式在普通日志格式的基础上扩展出了两个附加的域。定义为:
# %{Referer}i: 连接请求数据包包头,包含指向当前页面的文档关联信息。
# %{User-agent}i: 用户代理连接请求数据包包头,包含客户浏览器的信息。
创建一个自定义日志文档
CustomLog logs/access_log common
TransferLog logs/sample.log
您可能会想创建Apache自带以外的新的日志文档。下面的例子将运用CustomLog来创建一个新的日志文档,并保存由一个之前定义好的日志格式,即前一章提到的common,所定义的信息。您还能够用格式本身的定义来替换昵称。一个附加的,更为简单的指令是Transferlog,他只接受最后一个 LogFormat指令提供的定义。
重导向日志到一个外部的程式
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
您能够根据可变的环境决定是否记录一个请求。这种可变能够根据许多参数,比如客户端的IP地址或请求中某个头部的存在,事先配置好。正如本例中所显示, CustomLog指令能够将可变的环境作为第三个参数来接受。假如存在可变的环境,他就将被记录,否则就不会。假如这个可变的环境被一个"!"开头否定,那么不存在可变的环境将会被记录。本例将告诉您怎样避免在日志里以GIF和JPEG的格式记录图像,及怎样从一个特定的IP地址记录请求道一个单独的日志文档。另一个例子请参加下一节。
谁在连接您的网站
SetEnvIfNoCase Referer www/.example/.com internalreferral
LogFormat "%{Referer}i -> %U" referer
CustomLog logs/referer.log referer env=!internalreferral
能够通过记录Referer的值来检测哪些人连接了您的网站,Referer变量位于用户发送连接请求数据包的头部,数据包头中还包含了用户访问的目的网站的URL地址。通过这种方法能够记录下绝大部分网站访问者。也能够把来自特定网站(www/.example/.com)地址段的来访者排除出日志记录文档。
利用模块参数(mod_status)来监控Apache服务器

SetHandler server-status
Order Deny,Allow
Deny from all
Allow from 192.168.0

Apache 服务器中能够使用的功能模块很多,有服务器内置的也有外挂的,这些模块工作的状态和性能就是通过mod_status参数来记录的,记录的内容有“哪些模块参和了网站应答服务、哪些模块处于空闲状态、服务器的开启/关闭时间。正在处理的连接请求数和访问者数量(需要指定ExtendedStatus记号) -该模块记录对高负荷网站服务器性能有很大影响”。例子中记录的模块状态统计结果能够用浏览器访问http://www.example.com/server-status页面来查看。
通过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(http://www.mrunix.net/webalizer/)和AWStats(http://awstats.sf.net)是较为流行的日志文档分析工具;更有一些工具能够记录来访者具体访问路线,比如Vistors和Pathalizer工具,能够分别从http://www.hping.org/visitors/http://pathalizer.bzzt.net/下载。
实时监控日志
使用apachetop命令行工具来显示apache服务器当前的运行状态,类似于Unix等系统下的top命令工具。对流量比较低的Unix- Apache网站也能够使用tail命令来记录实时日志信息,tail -f /logfile/。通过扫描错误日志文档中的记录,分析出恶意连接请求,常用的错误日志文档扫描工具备Logscan和ScanErrLog,能够分别从http://www.garand.net/security.phphttp://www.librelogiciel.com/software/去下载这些工具。
将连接请求日志记录到数据库
Apache 本身没有将记录转发到数据库的功能,必须要第三方脚本和模块来支持。这里列举几个:mod_log_sql模块允许将连接请求直接记入MySQL数据库,然后用Apache LogView SQL工具来参看库中的记录;pglogd工具能够记录日志到PostgreSQL数据库中。
将日志文档转存和归档
CustomLog "|bin/rotatelogs /var/logs/apachelog
86400" common
假如网站流量较高,日志文档很容易就会变得很大,需要进行转存和归档处理。转存日志文档时需要压缩和保存,在线进行这项工作能够使用Apache提供的rotatelogs来完成,类似工具还能够在http://cronolog.org/上找到。例子中用rotatelogs工具将每天的日志做了转存和归档处理,一天共有86400秒。查看Apache帮助文档能够了解更多的rotatelogs工具参数。注意假如rotatelogs工具所在的目录名含有空格,则需要用跳转符号/来指定。
IP地址和域名之间对应处理
将HostNameLookups 配置成on,那么日志记录中将显示来访者所在的域名,配置成on可降低服务器性能。为了解决这一问题,Apache提供了一个事后分析IP地址域名信息的工具logresolve,例如$ logresolve < access_log > resolved_log
假如用代理服务器或网关设备来完成的网站访问,Apache服务器将只能记录到代理服务器和网关的IP地址和域名。
怎样自动启动Apache服务器
#!/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。用户能够访问http://perl.apache.org/docs/general/control/control.html网页发现更多高级的watchdog类脚本工具,大多数linux发行版自带一些用于Apache的脚本工具。
日志文档的分割和合并
假如用户的网站环境是用服务器集群来搭建的,通常需要将任何服务器上的日志做合并成单个文档后,才能够进行分析和处理。相似的道理,假如在单台服务器上运行多个虚拟网站,则需要将单个日志文档分割成多个部分供不同的虚拟网站用户去分析。在Apache服务器源码的support/文档夹下能够找到相应的脚本工具split-logfile等。在http://www.coker.com.au/logtools/网页能够找到一些其他的日志工具。比如vlogger工具就能够替代cronologs来对单个服务器上的虚拟网站日志进行分别处理,该工具在http://n0rp.chemlab.org/vlogger/下载。
为虚拟网站保存单独的日志文档

ServerName vhost1.example.com
CustomLog logs/vhost1.example.com_log combined
ErrorLog logs/vhost2.example.com_log
.......

使用CustomLog标志段在Apache配置文档的区块内实现虚拟网站日志文档的单独处理。
LogFormat "%v %h %l %u %t /"%r/" %>s %b" common_virtualhost
CustomLog logs/access_log common_virtualhost
在Apache全局配置中配置方法,其中的v%负责把提供服务的虚拟网站记录下来,对于配置了很多虚拟网站的单台服务器来说,这种配置不错。假如不想记录虚拟服务器的日志只需要在配置文档中加入"CustomLog /dev/null"就能够了。
日志文档中常见的条目
缺少favicon.ico文档,该文档可在浏览器的标题栏显示网站的个性图案;
缺少robots.txt文档,利于站点复制工具和搜索引擎使用;
覆写httpd.pid文档,网站服务器不正常退出后遗留的PID记录文档;
陌生的长记录条,
"SEARCH //x90/x02/xb1/x02/xb1/x02/xb1/x02 ..."
"GET /scripts/..%252f../winnt/system32/cmd.exe?/
c+dir HTTP/1.0..."
"GET /default.ida?NNNNNNN NNNNNNNNNNNNNNNNNN ..."
类似的记录条表示访问者请求了网站上根本没有的cmd.exe,root.exe或dir等文档。
日志文档中的一些条目经常反映了那些自动探测网站服务器漏洞的动作,多数来源于针对IIS网站服务器的蠕虫和恶意程式。有时候也会发现一些针对Apache的漏洞,所以为了确保Apache的正常运行,用户应保持经常更新Apache软件。



注:LINUX下可安装mrtg来监控主机流量
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: