日志存储方法及装置与流程

文档序号:21848044发布日期:2020-08-14 17:16阅读:304来源:国知局
日志存储方法及装置与流程

本申请涉及计算机技术领域,尤其涉及日志存储方法及装置。



背景技术:

在电子设备的日常运行过程中,通常会生成日志,以记录电子设备的运行状态等。目前在对日志进行存储时,通常采用数据表将大量的日志存储于其中,使得在对日志进行查询时,需要从大量日志中进行筛查,导致效率较低。



技术实现要素:

本申请实施例所提供的日志存储方法及装置,能够用于解决现有技术的日志存储所导致的查询效率低的问题。

本申请实施例提供了一种日志存储方法,其特征在于,预先生成环形存储数据表组,其中所述环形数据表组中包括多个数据表,所述方法包括:

获取当前时间与基准时间的时间间隔;

根据所述时间间隔与换表周期确定所述环形存储数据表组中目标数据表所对应的唯一标识;

根据所述唯一标识将所获取的日志存储至所述目标数据表。

优选的,所述方法还包括:

根据日志的保存期限和所述换表周期确定数据表的总数量;

生成包含所述总数量的数据表的环形存储数据表组。

优选的,所述换表周期具体包括:1个月;所述时间间隔具体包括年时间间隔和月时间间隔;则,

根据所述时间间隔与换表周期确定所述环形存储数据表组中目标数据表所对应的唯一标识,具体包括:

根据所述年时间间隔和所述月时间间隔,确定已换表的次数;

根据所述已换表的次数和所述环形存储数据表组中数据表的总数量,确定所述唯一标识。

优选的,根据所述已换表的次数和所述环形存储数据表组中数据表的总数量,确定所述唯一标识,具体包括:

将所述已换表的次数加1后,与所述总数量进行求余运算,并根据求余运算的结果确定所述唯一标识。

优选的,所述方法还包括:利用java反射机制对操作日志进行解析,以获取所述日志。

优选的,所述方法还包括:

将日志收集器所收集的日志对象添加到云消息队列;

将所述云消息队列中的日志对象进行处理后存入中间数据库。

本申请实施例还提供了一种日志存储装置,其特征在于,包括:生成单元、获取单元、确定单元和存储单元,其中:

生成单元,用于预先生成环形存储数据表组,其中,所述环形数据表组中包括多个数据表;

获取单元,用于获取当前时间与基准时间的时间间隔;

确定单元,用于根据所述时间间隔与换表周期确定所述环形存储数据表组中目标数据表所对应的唯一标识;

存储单元,用于根据所述唯一标识将所获取的日志存储至所述目标数据表。

优选的,所述生成单元具体包括总数量确定子单元和生成子单元,其中:

总数量确定子单元,用于根据日志的保存期限和所述换表周期确定数据表的总数量;

生成子单元,用于生成包含所述总数量的数据表的环形存储数据表组。

优选的,所述确定单元具体包括:次数确定子单元和唯一标识确定子单元,其中:

次数确定子单元,用于根据年时间间隔和月时间间隔,确定已换表的次数,其中,所述换表周期具体包括:1个月;所述时间间隔具体包括年时间间隔和月时间间隔;

唯一标识确定子单元,用于根据所述已换表的次数和所述环形存储数据表组中数据表的总数量,确定所述唯一标识。

优选的,唯一标识确定子单元,具体包括:唯一标识确定子模块,用于将所述已换表的次数加1后,与所述总数量进行求余运算,并根据求余运算的结果确定所述唯一标识。

本申请实施例采用的上述至少一个技术方案能够达到以下有益效果:

采用本申请实施例所提供的日志存储方法,预先生成环形存储数据表组,该环形数据表组中包括多个数据表,在使用时获取当前时间与基准时间的时间间隔,然后根据该时间间隔与换表周期确定环形存储数据表组中目标数据表所对应的唯一标识,然后可以根据该唯一标识将所获取的日志存储至目标数据表中。这样一方面由于超过换表周期周期后会在新的数据表中存储日志,使得环形存储数据表组中的各个数据表中并不会存储过多的日志,提高后期的查询效率;另一方面,在环形存储数据表组中,对于超过一定时间(如保存期限)的日志,可以通过环形存储数据表组的环形存储来进行自动覆盖,从而进行无限循环的日志存储,从而在保证各数据表中日志的数量可控的前提下,通过自动覆盖超期日志,从而无需进行扩容,方便定位及数据分析挖掘。

附图说明

此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:

图1为本申请实施例提供的日志存储方法的具体流程示意图;

图2为本申请实施例提供的环形存储数据表组的具体结构示意图;

图3为本申请实施例提供的日志服务平台的具体结构示意图;

图4为本申请实施例提供的日志存储装置的具体结构示意图。

具体实施方式

为使本申请的目的、技术方案和优点更加清楚,下面将结合本申请具体实施例及相应的附图对本申请技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

以下结合附图,详细说明本申请各实施例提供的技术方案。

如前所示,目前通常将大量的日志存储于同一张数据表中,从而使得在进行日志查询时,需要从大量日志中进行筛查,导致效率较低。基于此,本申请提供一种志存储方法,能够用于解决现有技术中的问题。

为了便于理解,这里可以先对本申请中的发明构思进行简要说明。考虑到日志通常不会长期包括,即使较为重要的日志也通常有一定的保存期限(可能保存期限相对较长),因此在本申请中采用环形存储数据表组对日志进行存储,在该环形存储数据表组中包括多个数据表,可以根据当前时间距基准时间的时间间隔,并结合换表周期来确定目标数据表所对应的唯一标识,并将日志存储在该目标数据表中,其中,每间隔一个换表周期,从环形存储数据表组中选取一张新的数据表进行日志的存储。这样即使日志的数量较多,这些日志通常会存储于环形存储数据表组中的不同的数据表中,从而便于日志的查询;另外,采用环形存储数据表组的方式,这些数据表可以进行循环存储,从而防止数据表的数量较多,也可以便于查询。

如图1所示为本申请实施例所提供的日志存储方法的流程示意图,该方法包括如下步骤:

步骤s11:根据日志的保存期限和换表周期确定数据表的总数量,并生成包含该总数量的数据表的环形存储数据表组。

其中,日志的保存期限通常可以为5年、3年、1年等,对于重要性不同的日志,保存期限通常并不相同,这里可以只将相同保存期限的日志存储于同一个环形存储数据表组中(可能存储于不同的数据表)。

对于换表周期,也即每间隔一个换表周期,从环形存储数据表组中选取一张新的数据表进行日志的存储。其中,换表周期可以为1年、1个月、1周、10天或其他时长,其通常可以根据实际需要来设定。

根据日志的保存期限和换表周期确定数据表的总数量时,可以计算保存期限内包括多少个换表周期,从而确定数据表的总数量。比如,换表周期为1个月,对于保存期限为5年的日志,由于5年包括60个月,因此所确定的数据表的总数量可以大于或等于60,比如为60、62、63或其他值。

在确定数据表的总数量之后,可以生成相应总数量的数据表,从而构建环形存储数据表组。如图2所示为所创建的环形存储数据表组的结构示意图,在该环形存储数据表组中包括36个数据表,各个数据表分别对应一个唯一标识,该环形存储数据表组通常可以用于存储保存期限为3年(36个月)的日志,相应的可以将换表周期设置为1个月,每过1个月更换新的数据表,在36个月之后,第一个数据表中的日志超过保存期限,新的日志可以直接存储于该第一个数据表中,从而覆盖原有的日志。

步骤s12:获取当前时间与基准时间的时间间隔。

其中,该基准时间可以根据产品上线的初始时间来确定,其通常反映从某个时间开始进行日志的存储。

当前时间与基准时间的时间间隔,能够反映出当前时间距基准时间的“多久”。比如,当前时间为2020年2月,基准时间为2019年1月,则当前时间与基准时间的时间间隔为1年零1个月,当然根据具体需要也可以以天为单位来表示。

步骤s13:根据时间间隔与换表周期确定环形存储数据表组中目标数据表所对应的唯一标识。

在获取当前时间与基准时间的时间间隔之后,可以计算该时间间隔内有多少数量的换表周期,即为已换表的次数。通常可以将时间间隔除以换表周期,并将得到的值取整,从而得到该已换表的次数。

比如,换表周期为1个月,该时间间隔中包括年时间间隔和月时间间隔。将年时间间隔乘以12(1年除以1个月为12),然后加上月时间间隔,从而得到已换表的次数。或者,该时间间隔为233天,换表周期为10天,则将233除以10后取整,得到已换表的次数为23。

在得到已换表的次数之后,可以将其与环形存储数据表组中数据表的总数量进行求余运算,或者将已换表的次数加上某个正整数(比如1),然后再与环形存储数据表组中数据表的总数量进行求余运算,从而将求余运算的结果作为目标数据表所对应的唯一标识。

比如,换表周期为1个月,时间间隔以年时间间隔和月时间间隔来表示时,可以通过如下公式来计算目标数据表所对应的唯一标识。

mc=((log_year-log_baseyear)*12+log_month-log_basemonth+1)%log_mount

其中:

mc目标数据表所对应的唯一标识,如第8张数据表。

log_year为当前时间中的年份,如2020年。

log_month为当前时间中的月份,如3月。

log_baseyear为基准时间中的年份,如2019年。

log_basemonth为基准时间中的月份,如8月。

log_mount为环形存储数据表组中数据表的总数量,如保存期限为5年的日志,按1个月的换表周期,则该总数量可以为60,即该环形存储数据表组中包括数据表1、数据表2、……、数据表60。

假设当前时间为2020年3月,基准时间为2019年8月,换表周期为1个月,环形存储数据表组中数据表的总数量为60。则,此时mc=((2020-2019)×12+3-8+1)/60=8,即目标数据表所对应的唯一标识为8,此时所获取的日志可以存储于第8张数据表;如果当前时间为2024年7月,则mc=((2024-2019)×12+7-8+1)/60=0,此时代表已循环至最后一数据表,即第60张数据表;则从2024年8月开始一个新的循环,则在8月初的0点0分1秒将过期日志(超过保存期限)清空或备份至文档文件中,重新开始在数据表1,数据表2,......,数据表60中循环存储。

步骤s14:根据该唯一标识将所获取的日志存储至目标数据表中。

在确定唯一标识之后,可以将所获取的日志存储至目标数据表中。

采用本申请实施例所提供的该日志存储方法,预先生成环形存储数据表组,该环形数据表组中包括多个数据表,在使用时获取当前时间与基准时间的时间间隔,然后根据该时间间隔与换表周期确定环形存储数据表组中目标数据表所对应的唯一标识,然后可以根据该唯一标识将所获取的日志存储至目标数据表中。这样一方面由于超过换表周期周期后会在新的数据表中存储日志,使得环形存储数据表组中的各个数据表中并不会存储过多的日志,提高后期的查询效率;另一方面,在环形存储数据表组中,对于超过一定时间(如保存期限)的日志,可以通过环形存储数据表组的环形存储来进行自动覆盖,从而进行无限循环的日志存储,从而在保证各数据表中日志的数量可控的前提下,通过自动覆盖超期日志,从而无需进行扩容,方便定位及数据分析挖掘。

需要说明的是,在实际应用中还可以结合云消息队列、java反射机制等技术来应用于日志服务平台,进行日志的管理。

如图3所示,日志服务平台包括日志收集(loggenerate)、日志解析(typeresolution)和日志存储(loggingstored),其中在日志存储中可以采用本申请实施例中所提供的日志存储方法。

在日志收集过程中,在日志收集器端只需提供对应的日志对象,页面操作成功时,将必要参数放入日志对象中,将日志收集器所收集的日志对象添加到云消息队列(cloudmessagequeue,cmq)即可结束日志的收集。

日志微服务进行日志的消费时,读取cmq队列中的日志消息,将获取到的日志信息经过处理后存储到中间数据库。

其中,cmq是一种分布式消息队列服务,它能够提供可靠的基于消息的异步通信机制,能够将分布式部署的不同应用(或同一应用的不同组件)之间的收发消息,存储在可靠有效的cmq队列中,防止消息丢失。cmq支持多进程同时读写,收发互不干扰,无需各应用或组件始终处于运行状态。

日志解析过程中,由于日志中的操作日志涉及各种操作类型,操作对象也各不相同,并且需要支持后续的日志扩展。因此可以利用java反射机制对操作日志进行解析,以获取所述日志。利用java反射机制来解析不同操作对象的字段,并拼装相关操作描述,从而实现不同操作日志使用相同代码解析的功能。

基于与本申请实施例所提供的日志存储方法相同的发明构思,本申请实施例还提供了一种日志存储装置,对于该装置实施例,如有不清楚之处,可以参考方法实施例中的相应部分。如图4所示为该装置40的结构示意图。该装置40包括:生成单元401、获取单元402、确定单元403和存储单元404,其中:

生成单元401,用于预先生成环形存储数据表组,其中,所述环形数据表组中包括多个数据表;

获取单元402,用于获取当前时间与基准时间的时间间隔;

确定单元403,用于根据所述时间间隔与换表周期确定所述环形存储数据表组中目标数据表所对应的唯一标识;

存储单元404,用于根据所述唯一标识将所获取的日志存储至所述目标数据表。

由于该装置40采用与本申请实施例中的日志存储方法相同的发明构思,因此也能够解决现有技术中的问题,这里对此不再赘述。另外,在实际应用中,通过将该装置40与具体硬件的结合,比如通过集群或分布式的方式来实现该装置40的功能,从而所取得的其他技术效果,也在本申请的保护范围之内。

在实际应用中,生成单元401还可以具体包括总数量确定子单元和生成子单元,其中:总数量确定子单元,用于根据日志的保存期限和所述换表周期确定数据表的总数量;生成子单元,用于生成包含所述总数量的数据表的环形存储数据表组。

确定单元403还可以具体包括:次数确定子单元和唯一标识确定子单元,其中:次数确定子单元,用于根据年时间间隔和月时间间隔,确定已换表的次数,其中,所述换表周期具体包括:1个月;所述时间间隔具体包括年时间间隔和月时间间隔;唯一标识确定子单元,用于根据所述已换表的次数和所述环形存储数据表组中数据表的总数量,确定所述唯一标识。

唯一标识确定子单元,具体包括:唯一标识确定子模块,用于将所述已换表的次数加1后,与所述总数量进行求余运算,并根据求余运算的结果确定所述唯一标识。

需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括要素的过程、方法、商品或者设备中还存在另外的相同要素。

以上仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1