软讯网络 > 网络安全 > 黑客技术 > Web服务器日志统计分析完全解决方案(2)
【标 题】:Web服务器日志统计分析完全解决方案(2)
【关键字】:
Web,服务器,服务,统计,Web
【来 源】:网络
Web服务器日志统计分析完全解决方案(2)
Web服务器日志统计分析完全解决方案(2)
三、apache日志的配置和管理
本文中我们假设我们的apache运行有两个虚拟主机:www.secfocus.com和www.tomorrowtel.com。我们需要对这两个虚拟主机分别进行访问日志分析和统计。
Apache配置文件中,我们需要关心的和日志相关的配置有两个:
CustomLog /www/logs/access_log common
ErrorLog /www/logs/error_log |
CustomLog用来指示apache的访问日志的存放位置(这里保存在/www/logs/access_log中)和格式(这里为common);ErrorLog用来指示apache错误信息日志的存放位置。
对于不配置虚拟主机的服务器来说,只需要直接在httpd.conf中查找CustomLOg的配置进行修改即可;而对于具有多个虚拟服务器的web服务器来说,需要分离各个虚拟服务器的访问日志,以便对各个虚拟服务器进行访问统计和分析。因此这就需要在虚拟服务器配置中进行独立的日志配置,示例:
NameVirtualHost 75.8.18.19
ServerName www.secfocus.com
ServerAdmin secfocus@secfocus.com
DocumentRoot /www/htdocs/secfocus/
CustomLog "/www/log/secfocus" combined
Alias /usage/ "/www/log/secfocus/usage/"
ServerName www.tomorrowtel.com
ServerAdmin tomorrowtel @ tomorrowtel.com
DocumentRoot /www/htdocs/ tomorrowtel
CustomLog "/www/log/tomorrowtel " combined
Alias /usage/ "/www/log/tomorrowtel/usage/" |
这里需要注意的是每个虚拟主机的定义都有一个CustomLog命令,用来指定该虚拟主机访问日志的存放文件;而Alias命令用来让日志分析生成的报表能通过www.secfocus.com/usage/的方式来访问。通过上面的配置就完成了日志文件的保存。
但是下来遇到的一个问题就是日志文件的轮循,因为日志是一直在增大的,如果不进行处理那么日志文件会越来越大,会影响web服务器运行效率;速率,还可能过大耗尽服务器硬盘空间,导致服务器无法正常运行,另外如果单个日志文件大于操作系统单文件尺寸的的限制,从而更进一步影响web服务的运行。而且日志文件如果不进行轮循也不变于日志统计分析程序的运行,因为日志统计分析都是以天为单位进行统计分析的,跨越很长时间日志会使得日志统计分析程序运行特别慢。因此这里就需要对web服务器日志文件每天进行轮循。
四、web服务器日志轮循
web服务器日志轮循比较好的方式有三种:第一种方法是利用Linux系统自身的日志文件轮循机制:logrotate;第二种方法是利用apache自带的日志轮循程序rotatelogs;第三种是使用在apache的FAQ中推荐发展已经比较成熟的一个日志轮循工具cronolog。
对于大型的WEB服务来说,其往往使用实用负载均衡技术提高web站点服务能力,这样后台有多个服务器提供WEB服务,这大大方便了服务的分布规划和扩展性,但多个服务器的分布就需要对日志进行合并统一进行统计分析。因此为了保证统计的精确性就需要严格按照每天的时段来自动生成日志文件。
4.1 logrotate实现日志轮循首先我们讨论采用Linux系统自身的日志文件轮循机制:logrotate的方法。Logrotate是Linux系统自身带的一个日志轮循程序,是专门对各种系统日志(syslogd,mail)进行轮循的程序。该程序是由运行程序的服务crond来每天凌晨4:02运行的,可以在/etc/cron.daily目录下可以看到logrotate文件,其内容如下:
#!/bin/sh
/usr/sbin/logrotate /etc/logrotate.conf |
可以看到每天清晨crond都会启动/etc/cron.daily目录下的logrotate脚本来进行日志轮循。
而在/etc/logrorate.conf中可以看到内容如下:
# see "man logrotate" for details
# rotate log files weekly
weekly
# keep 4 weeks worth of backlogs
rotate 4
# create new (empty) log files after rotating old ones
create
# uncomment this if you want your log files compressed
#compress
# RPM packages drop log rotation information into this directory
include /etc/logrotate.d
# no packages own wtmp -- we'll rotate them here
/var/log/wtmp {
monthly
create 0664 root utmp
rotate 1
}
# system-specific logs may be also be configured here. |
从logrotate的配置文件中可以看到除了wtmp以外,需要滚动的日志的配置都保存在/etc/logroate.d目录下。因此我们只需要在该目录下创建一个名为apache的配置文件,来指示logrotate如何轮循web服务器的日志文件即可,下面是一个示例:
/www/log/secfocus {
rotate 2
daily
missingok
sharedscripts
postrotate
/usr/bin/killall -HUP httpd 2> /dev/null || true
endscript
}
/www/log/tomorrowtel {
rotate 2
daily
missingok
sharedscripts
postrotate
/usr/bin/killall -HUP httpd 2> /dev/null || true
endscript
} |
这里“rotate 2”表示轮循时只包括两个备份文件,也就是只有:access_log、access_log.1、access_log.2三个日志备份文件。就这样就实现了对两个虚拟主机的日志文件的轮循。后面我们会讨论如何使用日志统计分析软件对日志文件进行处理。
这种方法的优点是不需要其他第三方工具就可以实现日志轮循,但是对于重负载的服务器和使用负载均衡技术的web服务器来说这种方法就不是很实用。因为它是对相应服务进程发出一个-HUP重启命令来实现日志的截断归档的,这样会影响服务的连续性。
|