发明内容
本发明的目的在于提供一种日志实时监控预警方法及其装置,通过连续的实时增量的计算方式,实现了时效性高、准确度高、计算成本低的监控预警。
为解决上述技术问题,本发明的实施方式公开了一种日志实时监控预警方法,以增量计算的方式控制了计算复杂度,该方法包括以下步骤:
对服务器日志进行采集;
将采集到的服务器日志按照预定时间和业务进行聚合汇总;
每隔预定时间按照聚合汇总后的服务器日志进行增量计算;以及
参照预先设置的阈值,根据增量计算的结果判断是否进行预警。
本发明的实施方式还公开了一种日志实时监控预警装置,包括:
采集单元,用于对服务器日志进行采集;
汇总单元,用于将将采集到的服务器日志按照预定时间和业务进行聚合汇总;
计算单元,用于每隔预定时间按照聚合汇总后的服务器日志进行增量计算;以及
预警单元,用于参照预先设置的阈值,根据增量计算的结果判断是否进行预警。
本发明实施方式与现有技术相比,主要区别及其效果在于:
增量计算的方式相对于以往所采用的时间切片的方式来说,将计算复杂度控制在了O(3),使得计算复杂度与时间切片的大小无关,成本极低,实用性极强。
进一步地,预定时间为一秒,通过每秒进行连续的计算与阈值比较,无论时间切片的大小为多少,都可以做到秒级监控,将时效性提升到了实时级别。
进一步地,增量计算采用固定长度的时间段的流式增量计算,解决了自然时间切片带来的不均匀的服务流量所导致的预警误差大的问题,提升了预警精度。
具体实施方式
在以下的叙述中,为了使读者更好地理解本申请而提出了许多技术细节。但是,本领域的普通技术人员可以理解,即使没有这些技术细节和基于以下各实施方式的种种变化和修改,也可以实现本申请各权利要求所要求保护的技术方案。
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明的实施方式作进一步地详细描述。
本发明第一实施方式涉及一种日志实时监控预警方法。图3是该日志实时监控预警方法的流程示意图。
具体地说,该日志实时监控预警方法以增量计算的方式控制了计算复杂度,降低了计算成本。如图3所示,该日志实时监控预警方法包括以下步骤:
在步骤S101中,对服务器日志进行采集。例如应用(App)服务器来对日志源服务器集群进行采集,由数据采集引擎从多个应用(App)获取日志。采集的日志的格式例如可以是“{timestamp}-{bizcode}-{val}”这样的格式。
此后进入步骤S102,将采集到的服务器日志按照预定时间和业务进行聚合汇总。聚合汇总可以采用任意形式的聚合汇总,例如可以先对日志进行切分后重新映射,以上述的“{timestamp}-{bizcode}-{val}”格式的日志为例,以{timestamp}+{bizcode}作为key,放入value容器中,然后将每个key对应的容器中所有的{val}数据进行聚合,最终得到单位时间{timestamp}的一个{bizcode}的一个值,例如:“2014-01-0112:13:14,A业务,合计服务量10w”。
此后进入步骤S103,每隔预定时间按照聚合汇总后的服务器日志进行增量计算。增量计算可以采用任意形式的增量计算,例如可以是固定长度的时间段的流式增量计算,连续地对一段时间的计算,可以看作一个定长的时间管道(先入先出队列),随着时间的不断流动,统计固定时间段的数据汇总,可以看做就是这个管道中所有数据的汇总。该计算需要通过调度预留一个时间n,来做t-n启动定时任务,并且认为当前时间t这一刻,所有t-n时刻的秒汇总日志数据都已经生成好了。
在步骤S104中,参照预先设置的阈值,根据增量计算的结果判断是否进行预警。
此后结束本流程。
由此可见,这种增量计算的方法没有固定的开始与结束时间点,而是从当前时间到当前时间之前的一个时间范围内的实时计算,判断是否超过阈值。当这个连续的时间段内的数据超过了阈值的话能实时预警。例如设定60分钟的阈值为10万,那么只要是在最近60分钟的时间范围内,任意时刻超过作为阈值的10万,都会实时预警。
可选地,预定时间为一秒,设为一秒的话,通过每秒进行连续的计算与阈值比对,做到了秒级监控,将时效性提升到了实时级别。可以理解的是,预定时间并不限于一秒,根据监控的需求,也可以设定为一毫秒等等。
可选地,以下述方式进行流式增量计算
sumlog(time,n)=sumlog(time-1,n)+log(time)-log(time-n),
其中,sumlog(time,n)表示时间点time到time向前推n个单位时间的所有日志的计算结果,sumlog(time-1,n)表示时间点time的前一秒的所有日志的计算结果,log(time)表示时间点time的增量日志,log(time-n)表示时间点time的n个单位时间前的增量日志。作为与以往的监控方法的比较,现以对连续1小时监控100个时间切片长度为60分钟的数据所需要的成本进行计算作为比较。
设复杂度为线性时间计算复杂度O(n),A表示业务,Time1和Time2分布表示监控预警的开始时间和结束时间,在日常的监控中,计算是持续不停止的,此时Time2是正无穷大。在每个时间切片内再根据时间切片的大小,循环每个单元时间点(从t1到t2)的日志数据,从存储中获取这些数据做汇总计算。load函数表示从存储中获取一个单位时间点的日志数据的方法。根据这些定义,我们可以得到以往的监控方法中的计算式:
按照该计算式对连续1小时监控100个时间切片长度为60分钟的数据所需要的成本进行计算,其成本为60×60(连续监控1小时即监控3600秒)×100(监控维度即100个切片长度)×3600(每个维度每秒要计算的切片秒数),结果大概是12亿9千6百万的load量,可见成本非常高。
然而例如以本发明的上述方式来计算的话,由于每次只计算sumlog(time-1,n)、log(time)、log(time-n)这三个量,无须遍历所有数据,将原来的线性复杂度O(n)优化为了常量复杂度O(3),大幅优化了实时监控的成本,同样以上述定义为例,计算式简化为:
还是以上述的连续一小时监控100个时间切片长度为60分钟的数据为例,此时的计算成本仅仅是60×60×100×3,大概是108万的load量,两者相除结果为108万/12亿9千6百万=0.08%。也就是说,相比于以往的监控预警方法,本发明的实施方式的计算成本仅为原来的0.08%。
本发明的各方法实施方式均可以以软件、硬件、固件等方式实现。不管本发明是以软件、硬件、还是固件方式实现,指令代码都可以存储在任何类型的计算机可访问的存储器中(例如永久的或者可修改的,易失性的或者非易失性的,固态的或者非固态的,固定的或者可更换的介质等等)。同样,存储器可以例如是可编程阵列逻辑(ProgrammableArrayLogic,简称“PAL”)、随机存取存储器(RandomAccessMemory,简称“RAM”)、可编程只读存储器(ProgrammableReadOnlyMemory,简称“PROM”)、只读存储器(Read-OnlyMemory,简称“ROM”)、电可擦除可编程只读存储器(ElectricallyErasableProgrammableROM,简称“EEPROM”)、磁盘、光盘、数字通用光盘(DigitalVersatileDisc,简称“DVD”)等等。
本发明第二实施方式涉及一种日志实时监控预警装置。图4是该日志实时监控预警装置的结构示意图。本发明的实际结构可以根据实际需要做出必要的调整,并不局限于图4中的结构。
具体地说,该日志实时监控预警装置以增量计算的方式控制了计算复杂度,降低了计算成本。如图4所示,该日志实时监控预警装置100包括:
采集单元101,用于对服务器日志进行采集;
汇总单元102,用于将将采集到的服务器日志按照预定时间和业务进行聚合汇总;
计算单元103,用于每隔预定时间按照聚合汇总后的服务器日志进行增量计算;以及
预警单元104,用于参照预先设置的阈值,根据增量计算的结果判断是否进行预警。
第一实施方式是与本实施方式相对应的方法实施方式,本实施方式可与第一实施方式互相配合实施。第一实施方式中提到的相关技术细节在本实施方式中依然有效,为了减少重复,这里不再赘述。相应地,本实施方式中提到的相关技术细节也可应用在第一实施方式中。
需要说明的是,本发明各设备实施方式中提到的各单元都是逻辑单元,在物理上,一个逻辑单元可以是一个物理单元,也可以是一个物理单元的一部分,还可以以多个物理单元的组合实现,这些逻辑单元本身的物理实现方式并不是最重要的,这些逻辑单元所实现的功能的组合才是解决本发明所提出的技术问题的关键。此外,为了突出本发明的创新部分,本发明上述各设备实施方式并没有将与解决本发明所提出的技术问题关系不太密切的单元引入,这并不表明上述设备实施方式并不存在其它的单元。
需要说明的是,在本专利的权利要求和说明书中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
虽然通过参照本发明的某些优选实施方式,已经对本发明进行了图示和描述,但本领域的普通技术人员应该明白,可以在形式上和细节上对其作各种改变,而不偏离本发明的精神和范围。