Apche日志系列(5):高级技术

转载 2007年10月13日 13:08:00
 这是《Apache日志》系列文章的最后一篇,除了补充说明前面几篇文章之外,另外讨论了三个问题:如何将日志记录写入指定的程序而不是日志文件,如何轮换日志防止磁盘空间不足,多虚拟主机环境下的日志文件管理。

一、把日志记录写入到指定程序

   在这个《Apache日志》系列文章的前一篇中,我们讨论了几种日志文件分析工具。应当补充说明的是,它并没有列出全部的分析工具。在Google上简单地搜索一下“apache log reporting”或类似的关键词,返回有关该主题的页面多达数百个,有许多供应商在为这个相对简单的问题推销自己特有的方案。 

   日志记录并非只能写入到文件,它还可以写入到指定的进程。当我们想要把日志信息写入数据库、或者是某些能够实时显示网站流量统计信息的程序时,这一点是非常有用的。 

   那么,如何实现这一点呢?使用TransferLog或者CustomLog指令,我们能够指定“|”,后面再加上接收日志信息的程序名字。例如: 



        CustomLog |/usr/bin/apachelog.pl common

   
 


   其中/usr/bin/apachelog.pl是一个程序,这个程序知道如何处理Apache日志文件的记录。事实上,这个程序非常简单,比如它可以是一个按照某种方式处理日志记录的Perl程序,或者是一个将日志记录写入数据库的程序。 

   在采用这种记录日志数据的方法时,安全问题是最必须关注的问题。日志文件是以启动服务器的用户所具有的权限打开的,通常是root。对于将日志记录写入数据库的程序,这一点也同样有效,所以应当确保用于记录日志数据的程序具有充分的安全保证。 

   如果日志数据通过一个不安全的程序记录(这个程序可能被非root用户侵入和修改),那么系统就面临着日志记录程序被其他怀有恶意的程序替换的危险。例如,如果/usr/bin/apachelog.pl可被全世界的用户修改,那么任何用户都将能够编辑这个文件关闭Web服务器,把密码文件发送到某个信箱,或者删除某些重要的文件,因为root用户具有进行所有这些操作的权限。 

   如果你要把日志记录写入到某个程序,建议先找找是否有现成的具备自己想要功能的模块。请访问http://modules.apache.org/,该网站收集了许多面向Apache完成各类实际任务的模块。

二、轮换日志

   日志文件会越来越大,如果不小心把日志文件放到了/var之类位置,日志文件可能写满分区,从而导致服务器被迫停止运行。这种事情确实曾经发生过。 

   防止出现这种问题的办法是,在日志文件变得太大之前把它们移到其他具有足够空间的位置。这可以通过几种方法实现。某些Unix变种提供一个logrotate脚本,它能够帮助我们完成这个任务。例如RedHat就已经预先配置,它会根据日志文件的大小或者日志文件的使用时间,每隔几日轮换日志文件。 

   如果要自己实现这方面的功能,我们可以使用称为Logfile::Rotate的Perl模块(可从CPAN下载)。下面的代码就具有这种功能,它由cron按照一定的间隔周期(比如一星期)运行,为了节省空间。每一个备份的日志文件都经过压缩。 



        use Logfile::Rotate;

        $logfile = new Logfile::Rotate(

             File => &single;/usr/local/apache/logs/access_log&single;,

             Count => 5,

             Gzip => &single;/bin/gzip&single;,

             Signal => sub {

                  `/usr/local/apache/bin/apachectl restart`;

                  }

             );

   
 


   代码不多,Perl模块Logfile::Rotate负责了所有具体操作任务。运行这个程序,我们将得到名为access_log.1.gz、 access_log.2.gz等的文件。它可以帮助我们避免磁盘空间的不足,使得我们能够保存任意多的档案文件。 

三、多个虚拟主机的日志

   曾经有好几个人问起,当同一台机器上运行着多个虚拟主机时应该如何分析日志?我想,他们是先把所有虚拟主机的日志记录都保存到了同一台机器,然后又企图把这个日志文件按照虚拟主机的不同分割成多个部分。 

   彻底解决这个问题的方法是一开始就不要把所有虚拟主机的日志记录都写入到同一个文件。虽然我知道确实存在这样的工具,它们能够把多个虚拟主机混合的日志记录根据虚拟主机配置分开,指出哪些请求针对哪个虚拟主机发出,然后分别生成报表。然而,这种方法看起来实在是太麻烦了。 

   为每一个虚拟主机分别指定日志文件时,我们只需在每个VirtualHost区域指定该主机的日志文件。此后,当需要制作报表时,我们就可以分别地处理各个日志文件。 

   但这里必须注意一下可用文件句柄的问题。也就是说,如果某台服务器上运行的虚拟主机多达数百个,每个虚拟主机都有单独的日志文件,系统可能会出现可用文件句柄不足的问题,它可能导致系统不稳定甚至导致系统崩溃。然而,只有当服务器上运行的虚拟主机数量非常庞大时,我们才有关注这个问题的必要。 

   《Apache日志》系列文章到此已经全部结束。在这五篇文章中,我们讨论了Apache日志功能的方方面面,从标准日志(访问日志,错误日志)到定制日志、日志分析等等,希望这些内容能够对你有所帮助。 

apache kafka技术分享系列(目录索引)

目录安排:apache kafka技术分享系列(目录索引),关于kafka分布式日志或消息队列的一系列文章和blog分享。从使用,配置,管理,源码分析等。 而且还建立了一个kafka技术群,目前有20...
  • lizhitao
  • lizhitao
  • 2014年09月23日 16:03
  • 50749

技术实现(1)之业务日志和监控日志的设计与实现

APDPlat提供了业务日志和监控日志,以便对用户操作进行审计、对系统性能进行调优。   业务日志主要包括数据的增删改日志、备份恢复日志以及用户登录注销日志。监控日志主要包括用户请求响应时间、内存使用...
  • zmx729618
  • zmx729618
  • 2016年11月29日 10:25
  • 2383

Java性能优化攻略详解

如何让Java应用程序运行是一回事,但让他们跑得快就是另外一回事了。在面对对象的环境中,性能问题就像来势凶猛的野兽。但JVM的复杂性将性能调整的复杂程度增加了一个级别。这里Refcard涵盖了JVM ...
  • hj7jay
  • hj7jay
  • 2016年05月19日 10:22
  • 5632

Apche日志系列(5):高级技术

原文链接:  这是《Apache日志》系列文章的最后一篇,除了补充说明前面几篇文章之外,另外讨论了三个问题:如何将日志记录写入指定的程序而不是日志文件,如何轮换日志防止磁盘空间不足,多虚拟主机环境下...
  • u013634961
  • u013634961
  • 2014年08月23日 16:11
  • 446

Apche日志系列(3):定制日志

原文链接:http://fanqiang.chinaunix.net/a6/b1/20010516/09150097.html 有时候我们需要定制Apache默认日志的格式和内容,比如增加或减少日志...
  • u013634961
  • u013634961
  • 2014年08月23日 16:05
  • 427

Apche日志系列(1):访问日志

原文链接:http://fanqiang.chinaunix.net/a6/b1/20010516/11000199.html
  • u013634961
  • u013634961
  • 2014年08月23日 15:52
  • 464

Apche日志系列(4):日志分析

yuanwen 尽管日志文件中包含着大量有用的信息,但这些信息只有在经过深入挖掘之后才能够最大限度地发挥作用。本文首先讨论了能够从日志文件获得的信息以及不能从日志文件获得的信息,然后介绍了几种优秀的...
  • u013634961
  • u013634961
  • 2014年08月23日 16:08
  • 422

Apche日志系列(1):访问日志

本文分五个部分:访问日志、错误日志、定制日志、日志分析、其他用法。摘自永远的Linux,做了一些修整。  想要知道什么人在什么时候浏览了网站的哪些内容吗?查看Apache的访问日志就可以知道。访问日志...
  • maclechan
  • maclechan
  • 2015年01月09日 15:35
  • 202

win7下apche+mysql+php安装日志

2015年3月8日由于以前都是用wamp集成包,而都没有安装过独立的环境,此篇文章用于记录安装的过程。 1.安装软件包的版本httpd-2.4.12-win32-VC11.zip 注意:2.4.12...
  • qq_16146611
  • qq_16146611
  • 2015年03月08日 21:21
  • 152

J2EE系列之Hibernate4学习笔记(十八)--hibernate高级配置(配置日志框架log4j)

hibernate自带的是简单的日志框架。我们这里要引入一个功能强大的日志框架log4j。百度百科关于log4j的介绍非常好,一下的大部分内容拷贝百度百科。 一、log4j简介(百度百科) Log...
  • feidie436
  • feidie436
  • 2017年05月25日 17:04
  • 400
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Apche日志系列(5):高级技术
举报原因:
原因补充:

(最多只允许输入30个字)