多服务器的日志合并统计(2)

服务器|统计

比较简便不影响服务的方法是:先复制,后清空

  cp /path/to/apache/log/access_log /path/to/apache/log/access_log_yesterday
  echo >/path/to/apache/log/access_log

  严肃的分析员会这样做发现一个问题:

  但cp不可能严格保证严格的0点截断。加入复制过程用了6秒,截断的access_log_yesterday日志中会出现复制过程到00:00:06期间的日志。对于单个日志统计这些每天多出来几百行日志是没有问题的。但对于多个日志在跨月的1天会有一个合并的排序问题:

  [31/Mar/2002:59:59:59 +0800]
  [31/Mar/2002:23:59:59 +0800]
  [01/Apr/2002:00:00:00 +0800]
  [01/Apr/2002:00:00:00 +0800]

  要知道[01/Apr/2002:00:00:00 这个字段是不可以进行"跨天排序"的。因为日期中使用了dd/mm/yyyy,月份还是英文名,如果按照字母排序,很有可能是这样的结果:排序导致了日志的错误

  [01/Apr/2002:00:00:00 +0800]
  [01/Apr/2002:00:00:00 +0800]
  [01/Apr/2002:00:00:00 +0800]
  [01/Apr/2002:00:00:00 +0800]
  [01/Apr/2002:00:00:00 +0800]
  [01/Apr/2002:00:00:00 +0800]
  [01/Apr/2002:00:00:00 +0800]
  [31/Mar/2002:59:59:59 +0800]
  [31/Mar/2002:59:59:59 +0800]
  [31/Mar/2002:23:59:59 +0800]
  [31/Mar/2002:59:59:59 +0800]
  [31/Mar/2002:23:59:59 +0800]

  这些跨天过程中的非正常数据对于webalizer等分析工具来说简直就好像是吃了一个臭虫一样,运行的结果是:它可能会把前一个月所有的数据都丢失!因此这样的数据会有很多风险出现在处理上月最后一天的数据的过程中。

  问题的解决有几个思路:

  1) 事后处理

  所以一个事后的处理的方法是:用grep命令在每月第1天将日志跨月的日志去掉,比如:

  grep -v "01/Apr" access_log_04_01 > access_log_new

  修改SORT后的日志:所有跨天的数据去掉。也许对日志的事后处理是一个途径,虽然sort命令中有对日期排序的特殊选项 -M(注意是:大写M),可以让指定字段按照英文月份排序而非字母顺序,但对于apache日志来说,用SORT命令切分出月份字段很麻烦。(我尝试过用 "/"做分割符,并且使用"月份" "年:时间"这两个字段排序)。虽然用一些PERL的脚本肯定可以实现,但最终我还是放弃了。这不符合系统管理员的设计原则:通用性。 并且你需要一直问自己:有没有更简单的方法呢?还有就是将日志格式改成用TIMESTAMP(象SQUID的日志就没有这个问题,它的日志本身就是使用TIMESTAMP做时间戳的),但我无法保证所有的日志工具都能识别你在日期这个字段使用了特别的格式。

  2) 优化数据源

  最好的办法还是优化数据源。将数据源保证按天轮循,同一天的日志中的数据都在同一天内。这样以后你无论使用什么工具(商业的,免费的)来分析日志,都不会因为日志复杂的预处理机制受到影响。

  首先可能会想到的是控制截取日志的时间:比如严格从0点开始截取日志,但在子夜前1分钟还是后一分钟开始截取是没有区别的,你仍然无法控制一个日志中有跨2天记录的问题,而且你也无法预测日志归档过程使用的时间。

  因此必须要好好考虑一下使用日志轮循工具的问题,这些日志轮循工具要符合:

  1) 不中断WEB服务:不能停apache=>移动日志=>重启apache;
  2) 保证同一天日志能够按天轮循:每天一个日志00:00:00-23:59:59;
  3) 不受apache重启的影响:如果apache每次重启都会生成一个新的日志是不符合要求的;
  4) 安装配置简单。

  首先考虑了apache/bin目录下自带的一个轮循工具:rotatelogs 这个工具基本是用来按时间或按大小控制日志的,无法控制何时截断和如何按天归档。

  然后考虑logrotate后台服务:logrotate是一个专门对各种系统日志(syslogd,mail)进行轮循的后台服务,比如SYSTEM LOG,但其配置比较复杂,放弃,实际上它也是对相应服务进程发出一个-HUP重启命令来实现日志的截断归档的。

时间: 2024-11-03 04:46:06

多服务器的日志合并统计(2)的相关文章

多服务器的日志合并统计(1)

服务器|统计 本文介绍了一种将apache日志的cronolog轮循和webalizer合并统计的方法. 关键词:你完全不必耐心地看完下面的所有内容,因为结论无非以下2点: 1 用 cronolog 干净,安全地轮循apache"日"志: 2 用 sort -m 合并排序多个日志: 根据个人的使用经历: 1) 先介绍apache日志的合并方法: 2) 然后根据由此引出的问题说明日志轮循的必要性和解决方法,介绍如何通过cronolog对apache日志进行轮循: 中间有很多在设计日志合并

服务器iis日志的作用身为站长的你懂么

对于一个Seor而言,服务器IIS日志是一个非常重要的优化参考日志,因为我们可以从这里看到搜索引擎蜘蛛爬行的状况,并且也可以了解到网站自身的一些情况,也可以分析到一些用户的来路渠道,并非一定要采用一些第三方代码来进行统计的,当然有些IIS日志受到IDC空间商们的限制,必须要开通才可以查看否则的话就无法查看,如果是这样的话建议大家在网上下载一些源代码来进行安装,方可.下面笔者就具体的与大家讲解一些服务器IIS对网站的帮助吧! (一)查看蜘蛛爬行的次数. 搜索引擎蜘蛛是用来抓取我们站点内容的一个机器

《构建高可用Linux服务器 第3版》—— 1.4 Linux服务器的日志管理

1.4 Linux服务器的日志管理 从安全的角度来说,Linux服务器的日志非常重要,它记录了系统每天所发生的各种各样的事情,如果服务器受到攻击,就可以根据它来进行分析.同时,它更是很重要的排障依据,可以通过它来检查错误发生的原因,所以我们必须了解和熟悉其运作机制. 1.4.1 系统日志syslog.conf的配置详解 目前,Linux依旧使用syslog作为日志监控进程,对其进行必要的配置能减少很多麻烦,并且可更有效地从系统日志监控到系统的状态.理解并完善一个syslog的配置,对于系统管理员

sqlserver-SQLserver服务器错误日志这个如何解决

问题描述 SQLserver服务器错误日志这个如何解决 最近在使用sqlserver基本上每个月服务器会出现两次这样的错误,导致用户无法连接,不知道是什么原因,请论坛老师帮忙看看,我使用的是SQLserver2008. 错误如下截图: 日期,源,严重性,消息 07/05/2013 15:40:05,,信息,[098] SQLServerAgent 已终止(一般) 07/05/2013 15:40:04,,错误,[382] 无法登录到服务器"D1H310W1LLY"(DisableAge

dns服务器-DNS服务器的日志信息请教。

问题描述 DNS服务器的日志信息请教. Oct 8 09:36:17 WCentos named-sdb[7778]: managed-keys-zone ./IN: Unable to fetch DNSKEY set '.': timed outOct 8 09:36:17 WCentos named-sdb[7778]: managed-keys-zone ./IN: Unable to fetch DNSKEY set 'dlv.isc.org': timed out 新搭建的DNS服务

python 从远程服务器下载日志文件的程序_python

复制代码 代码如下: import osimport sysimport ftplibimport socket ################################################################### sign in the ftp server and download the log file. # 登陆生产服务器下载日志##############################################################

将远程服务器的日志和本地的日志汇总快速定位错误

问题描述 将远程服务器的日志和本地的日志汇总快速定位错误,求建议

Windows Server 2008实现服务器事件日志的转发和订阅

事件日志管理是服务器维护中的一项非常重要的日常工作,当然也是一项耗费精力.体力的工作,特别是当局域网中有非常多的http://www.aliyun.com/zixun/aggregation/15818.html">应用服务器时更是如此.一个好的管理方案是,部署一个专门用于事件日志管理的中央服务器,然后将其他服务器上的日志转发到该中央服务器上实施集中管理.不过,这需要利用第三方软件来实现.在Windows Server 2008中提供了一项新功能,通过它我们可以实现服务器事件日志的转发和订

10分钟精通Nginx访问日志分析统计

简介 很多个人站长在搭建网站时使用nginx作为服务器,为了了解网站的访问情况,一般有两种手段: 使用CNZZ之类的方式,在前端页面插入js,用户访问的时候触发js,记录访问请求. 利用流计算.或离线统计分析nginx的access log,从日志中挖掘有用信息. 两种方式各有优缺点: CNZZ使用起来比较简单,各种指标定义清楚.但这种方式只能记录页面的访问请求,像ajax之类的请求是无法记录的,还有爬虫信息也不会记录. 利用流计算.离线计算引擎可以支持个性化需求,但需要搭建一套环境,并且在实时