免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1582 | 回复: 0
打印 上一主题 下一主题

apache的日志轮询 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-07-07 15:23 |只看该作者 |倒序浏览
   web服务器日志轮循  
  web服务器日志轮循比较好的方式有三种:第一种方法是利用Linux系统自身的日志文件轮循机制:logrotate;第二种方法是利用apache自带的日志轮循程序rotatelogs;第三种是使用在apache的FAQ中推荐发展已经比较成熟的一个日志轮循工具cronolog。  
  对于大型的WEB服务来说,其往往使用实用负载均衡技术提高web站点服务能力,这样后台有多个服务器提供WEB服务,这大大方便了服务的分布规划和扩展性,但多个服务器的分布就需要对日志进行合并统一进行统计分析。因此为了保证统计的精确性就需要严格按照每天的时段来自动生成日志文件。  
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重启命令来实现日志的截断归档的,这样会影响服务的连续性。  
2 使用apache自带的rotatelogs实现日志轮循  
  apache提供了将不把日志直接写入文件,而是通过管道发送给另外一个程序的能力,这样就大大的加强了对日志进行处理的能力,这个通过管道得到的程序可以是任何程序:如日志分析,压缩日志等。要实现将日志写到管道只需要将配置中日志文件部分的内容替换为“|程序名“即可,例如:  
  # compressed logs
  CustomLog "|/usr/bin/gzip -c >;>; /var/log/access_log.gz" common
  这样就可以实用apache自带的轮循工具:rotatelogs来对日志文件进行轮循。rotatelogs基本是用来按时间或按大小控制日志的。  
  CustomLog "|/www/bin/rotatelogs /www/logs/secfocus/access_log 86400" common
  上面的示例中apache访问日志被发送给程序rotatelogs,rotatelogs将日志写入/www/logs/secfocus/access_log,并每隔86400秒(一天)对日志进行一次轮循。轮循以后的文件名为/www/logs/secfocus/access_log.nnnn,这里nnn是开始记录日志的时间。因此为了将日志按天对齐就需要在凌晨00:00启动服务,使得每天轮循得到的日志刚好是完整一天的日志,以提供给访问统计分析程序进行处理。如果是00:00开始生成新的日志,那么轮循得到的日志就是access_log.0000。  
3 使用cronolog实现日志轮循  
      aptitude install安装cronolog这个软件。
然后修改:
      
ErrorLog logs/error_log
     CusomLog logs/access_log
    修改apache日志配置命令如下所示:  
  CustomLog "|/usr/bin/cronolog /home/logs/%Y/%m/%d/access_log" combined
   
ErrorLog "|/usr/bin/cronolog /home/logs/%Y/%m/%d/error_log"  
        注意:后面那个目录一定要是绝对路径才能识别。然后写的那个目录,他是自动生成的。这样就是实现了日志的分类。
        debian:~# ls -al /home/logs/2008/07/06/
total 16
drwxr-xr-x 2 root root 4096 2008-07-06 17:29 .
drwxr-xr-x 3 root root 4096 2008-07-06 17:15 ..
-rw-r--r-- 1 root root  773 2008-07-06 17:15 access_log
-rw-r--r-- 1 root root  228 2008-07-06 17:29 error_log
  
    对于使用负载均衡技术的大型站点,就存在多个服务器的访问日志的合并处理问题.对于这种情况,各个服务器定义或移动日志文件时就不能使用access_log_yesterday了,就应该带上服务器编号了,例如服务器IP地址等信息以区分。然后在各个服务器上运行网站镜像和备份服务rsyncd(参考文章” 用rsync实现网站镜像和备份”,ttp://www.linuxaid.com.cn/engineer/ideal/article/rsync.htm),然后将每个服务器每天的安装配置文件通过rsync下载到专门进行访问统计分析的服务器上进行合并。  
  合并多个服务器的日志文件,例如:log1 log2 log3并输出到log_all中的方法是:  
  sort -m -t " " -k 4 -o log_all access_log1 access_log2 access_log3
  -m: 使用 merge优化算法,-k 4表示根据时间进行排序,-o表示将排序结果存放到指定的文件中
  这样的话,就把3个日志文件归档于一个文件中了哈。

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/50921/showart_1075081.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP