掌桥专利:专业的专利平台
掌桥专利
首页

一种审计日志的全文索引处理方法和系统

文献发布时间:2024-04-18 20:01:55


一种审计日志的全文索引处理方法和系统

技术领域

本申请涉及到软件领域,具体而言,涉及一种审计日志的全文索引处理方法和系统。

背景技术

全文搜索技术能够进行全文检索,但是并不是所有情况都适用于全文检索,还可以使用数据库搜索来进行。全文检索是数据库的有力补充,全文检索并不能替代数据库在应用系统中的作用。当应用系统的数据以大量的文本信息为主时,采用全文检索技术可以极大的提升应用系统的价值。

数据库搜索,如果搜索范围包括全部正文数据,往往性能很低,用户响应时间长(分钟级,经常超时);而全文检索可以在0.x秒(毫秒级)的时间内将结果反馈给用户;数据库搜索,一个用户在搜索,往往影响其他用户的对应用系统进行操作;全文检索可以同时支持多个用户并发搜索,其他对应用系统进行操作的用户不受影响;数据库搜索很难实现多个关键字的复合搜索;而全文检索可以实现多个关键词的复合搜索,包括 “和(AND)”、“或(OR)”、“否(NOT)” 等; 数据库搜索难于对结果进行相关度排序,当检索结果多时,用户往往难于找到最恰当的文档;而全文检索通过统计的研究成果,可以将文档进行相关度排序后,再返回给用户,提高用户的效率全文检索还可以对检索结果的数据进行聚类分析,增进用户对数据分布情况的了解;全文检索需要用户定期执行建立索引的动作,比直接使用数据库搜索增加了维护的工作;优秀的全文检索系统支持按照文档的不同字段分配不同的检索权重,根据应用的不同动态的改变结果的排序。

在进行数据库审计的时候,需要将审计日志入库,审计日志是基于SQL的,因此,为全文检索建立索引的时候需要使用SQL数据源,即指定数据库及获取数据的sql语句。

但在审计量比较大时,入库压力会比较大,此时再运行sql获取数据会增加数据库的压力,而且建索引也会滞后。

发明内容

本申请实施例提供了一种审计日志的全文索引处理方法和系统,以至少解决使用SQL数据源建立全文索引会导致增加数据库压力以及建立索引之后的问题。

根据本申请的一个方面,提供了一种审计日志的全文索引处理方法,包括:获取待入库的审计日志;将所述审计日志作为文档进行处理,将所述文档转换成二进制文件;对于所述二进制文件,读取所述二进制文件从所述二进制文件中获取内容;根据从所述二进制文件中获取到的内容建立索引。

进一步地,从所述二进制文件中获取的内容包括词,在读取所述二进制文件之前,所述方法还包括:将所述日志文件中的字段名+字段值作为所述词;获取所述日志文件的序列号;将所述日志文件的序列号、以及字段名+字段值写入到文件中,以生成所述二进制文件。

进一步地,从所述二进制文件中获取所述内容包括:从所述二进制文件中读取出所述字段名+字段值;根据从所述二进制文件中获取到的内容建立索引包括:使用所述字段名+字段值建立全文索引。

进一步地,还包括:将所述待入库的审计日志保存到数据库中,其中,保存到数据库的过程与根据从所述二进制文件中获取到的词建立索引的过程可以同步或者异步进行。

根据本申请的另一个方面,还提供了一种审计日志的全文索引处理系统,包括:第一获取模块,用于获取待入库的审计日志;转换模块,用于将所述审计日志作为文档进行处理,将所述文档转换成二进制文件;第二获取模块,用于对于所述二进制文件,读取所述二进制文件从所述二进制文件中获取内容;建立模块,用于根据从所述二进制文件中获取到的内容建立索引。

进一步地,从所述二进制文件中获取的内容包括词,在读取所述二进制文件之前,还包括:生成模块,用于将所述日志文件中的字段名+字段值作为所述词;获取所述日志文件的序列号;将所述日志文件的序列号、以及字段名+字段值写入到文件中,以生成所述二进制文件。

进一步地,所述第二获取模块,用于从所述二进制文件中读取出所述字段名+字段值;所述建立模块,用于使用所述字段名+字段值建立全文索引。

进一步地,还包括:保存模块,用于将所述待入库的审计日志保存到数据库中,其中,保存到数据库的过程与根据从所述二进制文件中获取到的词建立索引的过程可以同步或者异步进行。

根据本申请的另一个方面,还提供了一种电子设备,包括存储器和处理器;其中,所述存储器用于存储一条或多条计算机指令,其中,所述一条或多条计算机指令被所述处理器执行以实现上述的方法步骤。

根据本申请的另一个方面,还提供了一种可读存储介质,其上存储有计算机指令,其中,该计算机指令被处理器执行时实现上述的方法步骤。

在本申请实施例中,采用了获取待入库的审计日志;将所述审计日志作为文档进行处理,将所述文档转换成二进制文件;对于所述二进制文件,读取所述二进制文件从所述二进制文件中获取内容;根据从所述二进制文件中获取到的内容建立索引。通过本申请解决了使用SQL数据源建立全文索引会导致增加数据库压力以及建立索引滞后的问题,从而提高了索引的建立速度,减轻了审计日志的入库压力。

附图说明

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

图1是根据本申请实施例的审计日志的全文索引处理方法的流程图;

图2是根据本申请实施例的入库和建立索引同步进行的示意图。

具体实施方式

需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本申请。

需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。

建立全文索引可以使用各种工具、软件或者组件,例如,可以使用sphinx组件建立全文索引。指定的数据源一般为:SQL数据源,即指定数据库及获取数据的sql语句;Xmlpipe数据源,将数据以自定义格式写入xml文件;Python数据源,即使用python脚本获取数据。

审计日志是存储在数据库中,Xmlpipe和python数据源是不适用的,使用SQL数据源是一个选择,但在审计量比较大时,入库压力会比较大,此时再运行sql获取数据会增加数据库的压力,而且建索引也会滞后。

需要说明的是,以下实施方式也适用于其他全文索引建立软件,下文仅仅是以sphinx为例进行说明的。下面首先对sphinx组件进行说明。

Sphinx是一个基于SQL的全文检索引擎,可以结合MySQL、PostgreSQL做全文搜索,它可以提供比数据库本身更专业的搜索功能,使得应用程序更容易实现专业化的全文检索。Sphinx特别为一些脚本语言设计搜索API接口,如PHP、Python、Perl、Ruby等,同时为MySQL也设计了一个存储引擎插件。

Sphinx 单一索引最大可包含1亿条记录,在1千万条记录情况下的查询速度为0.x秒(毫秒级)。Sphinx创建索引的速度为:创建100万条记录的索引只需 3~4分钟,创建1000万条记录的索引可以在50分钟内完成,而只包含最新10万条记录的增量索引,重建一次只需几十秒。

sphinx优点:高速索引、高速搜索(2-4G的文本量中平均查询速度不到0.1秒)、高可用性(单CPU上最大可支持100 GB的文本,100M文档)、提供良好的相关性排名、支持分布式搜索、提供文档摘要生成、提供从MySQL内部的插件式存储引擎上搜索、支持每个文档多个全文检索域(默认最大32个)、支持每个文档多属性、支持断词、支持单字节编码与UTF-8编码等等。

考虑到审计日志中字段格式都是比较固定的,需要建立全文索引的表只有一个,根据这个特点,可以将入库的日志数据以二进制格式写入一个文件,修改sphinx的创建索引组件,增加二进制文件源的处理,直接对文件中的数据做全文索引,即省略了查询语句的过程,相当于直接处理语句查询结果。

这种方式可以不必担心字符集的影响,因为在审计日志入库时,都做了统一的字符转换,所以在二进制文件中的字符是统一的字符集。

图1是根据本申请实施例的审计日志的全文索引处理方法的流程图,如图1所示,下面对图1中的方法所涉及到的步骤进行说明。

步骤S102,获取待入库的审计日志。

步骤S104,将所述审计日志作为文档进行处理,将所述文档转换成二进制文件。

步骤S106,对于所述二进制文件,读取所述二进制文件从所述二进制文件中获取内容(例如,词)。

在一个可选的实施方式中,从所述二进制文件中获取的内容包括词,在读取所述二进制文件之前,所述方法还包括:

将所述日志文件中的字段名+字段值作为所述词;

获取所述日志文件的序列号;

将所述日志文件的序列号、以及字段名+字段值写入到文件中,以生成所述二进制文件。

作为另一个优选的方式,在生成所述二进制文件之后,从所述二进制文件中获取所述内容包括:从所述二进制文件中读取出所述字段名+字段值,然后,根据从所述二进制文件中获取到的内容建立索引包括:使用所述字段名+字段值建立全文索引。

步骤S108,根据从所述二进制文件中获取到的内容建立索引。

通过上述步骤,解决了使用SQL数据源建立全文索引会导致增加数据库压力以及建立索引滞后的问题,从而提高了索引的建立速度,减轻了审计日志的入库压力。

作为一个可选的实施方式,需要说明的是,上述图1中建立索引的过程,可以审计日志入库的过程同步进行。即优选地,上述方法还包括:将所述待入库的审计日志保存到数据库中,其中,保存到数据库的过程与根据从所述二进制文件中获取到的词建立索引的过程可以同步或者异步进行。

作为一个可以增加的实施方式,建立索引可以使用建立索引的进程实现,所述建立索引的进程间隔预定时间段(例如几秒钟)启动一次,每次启动后会获取该时间段内的二进制文件,然后对这个时间段内的所有二进制文件建立索引,其中,在该时间段内建立的索引生成一个索引文件。通过该方式可以减少索引文件的数量。

对于在预定时间段内建立的索引,获取该时间段内所有日志文件,其中,每条入库的日志均为一个日志文件,将每个日志文件的序列号作为该文件的标识信息,将每个日志文件中的字段名+字段值作为词;将日志入库后,将每次入库的日志,按以下格式写入一个文件:信息总长度+文件1的序列号+文件1的长度+字段1_值+字段2_值......+文件2的序列号+文件2的长度+字段1_值+字段2_值......+文件n的序列号+文件n的长度+字段1_值+字段2_值......;其中,n为所述时间段内的日志文件的数量。

对于所述时间段的长度的设置,可以提供一个配置信息,该配置信息由用户进行配置,用户输入索引文件的大小或者在一段时长内的希望生成的索引文件的数量;根据所述索引文件的大小和所述索引文件的数量生成所述时间段的长度。

图2是根据本申请实施例的入库和建立索引同步进行的示意图,如图2所示,在入库过程中,包括两个过程,一个是审计日志入库的过程,即将审计日志保存到数据库中;另一个是建立索引的过程,在建立索引的过程中首先得到审计日志的二进制文件,然后建立索引的进程读取二进制文件,并根据读取到的内容建立索引(如,全文索引)。

下面对该过程进行分步骤说明。

步骤A,把入库的每条日志看作一个文档,将日志的序列号作为文档id,日志中的字段名+字段值作为词;

步骤B,审计日志入库程序将日志入库后,将每次入库的日志,按以下格式写入一个文件:信息总长度+文档1序列号+文档1长度+字段1_值+字段2_值......+文档2序列号+文档2长度+字段1_值+字段2_值。

注意每个写入的数据之间需要有特定的分隔符,创建索引的进程在解析该文件时需要以分隔符来确认数据是否结束,以便获取下一个数据。

步骤C,创建Indexer进程(即建立索引的进程)读取每个文档以及文档中的词,建立索引;

步骤D,建立完索引后,删除相关的二进制文件。

需要注意的是,为防止资源持续被占用,indexer进程(即建立索引的进程)不会一直启动,而是隔一段时间(几秒钟)启动一次,每次启动后会获取一个时间段内的二进制文件,例如1s获取一次共获取10次,然后对这个时间段内的所有二进制文件建立索引,尽量避免对单个文件建立索引,否则索引文件会非常多。

上述实施方式中,涉及到审计日志,审计日志的生成有多种方式,无论哪种方式生成的审计日志均能够使用上述索引建立方式。下面通过一个例子对审计日志的生成进行说明。

例如,接收数据库操作请求,解析得到数据库操作语句;对所述数据库操作语句进行拦截;根据所述数据库操作语句对应的操作对象和操作类型,确定对应的日志记录规则;根据所述日志记录规则获取操作前和操作后的目标对象;生成本次操作的日志信息(即审计日志),所述日志信息包括操作前和操作后的目标对象。

所述步骤1中,所述数据库操作请求可以是对表结构的操作,也可以是对指定表内数据的操作。接收数据库操作请求后,根据所述拦截规则对需记录操作前后变化的数据库操作请求进行标记,需拦截数据库操作即需要进行日志记录的操作。所述预设拦截规则用于定义需拦截用户、需拦截的表、需拦截数据库操作或其他拦截规则,根据企业需求具体确定。

本实施例中,针对表结构操作的拦截规则主要面向字段修改操作和表结构修改操作,具体包括需记录或不需记录操作前后变化的字段。一般而言,公共字段的变化不需要记录,加密的字段不需要记录,当然,根据具体需求还可以配置表中其他不需要记录操作前后变化的字段。针对表数据操作的拦截规则主要面向记录的操作。将审计日志保存在关系数据库时,审计相关的表不需要进行记录表数据操作,防止出现死循环。

可选地,所述根据所述拦截规则对需记录操作前后变化的数据库操作请求进行标记包括:对所述数据库操作请求中的操作对象和操作类型进行识别;其中,所述操作对象包括针对的数据表,以及表结构或表数据,对应表结构的操作类型包括字段的插入、删除和更新;对表数据的操作类型包括对数据记录的插入、删除和更新;根据预设拦截规则依次判断所述数据库操作请求针对的数据表、字段或记录的操作前后变化是否需要记录,若需要,对所述数据库操作请求进行标记。

上述生成审计日志仅仅是一种例子,其他生成审计日志的方式也能使用上述实施方式,在此不再一一赘述。

在本实施例中,提供一种电子装置,包括存储器和处理器,存储器中存储有计算机程序,处理器被设置为运行计算机程序以执行以上实施例中的方法。

上述程序可以运行在处理器中,或者也可以存储在存储器中(或称为计算机可读介质),计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存 (PRAM)、静态随机存取存储器 (SRAM)、动态随机存取存储器 (DRAM)、其他类型的随机存取存储器 (RAM)、只读存储器 (ROM)、电可擦除可编程只读存储器 (EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘 (DVD) 或其他光学存储、磁盒式磁带,磁带磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。

这些计算机程序也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤,对应与不同的步骤可以通过不同的模块来实现。

该本实施例中就提供了这样的一种装置或系统。该系统包括:审计日志的全文索引处理系统,包括:第一获取模块,用于获取待入库的审计日志;转换模块,用于将所述审计日志作为文档进行处理,将所述文档转换成二进制文件;第二获取模块,用于对于所述二进制文件,读取所述二进制文件从所述二进制文件中获取内容;建立模块,用于根据从所述二进制文件中获取到的内容建立索引。

该系统或者装置用于实现上述的实施例中的方法的功能,该系统或者装置中的每个模块与方法中的每个步骤相对应,已经在方法中进行过说明的,在此不再赘述。

可选地,从所述二进制文件中获取的内容包括词,在读取所述二进制文件之前,还包括:生成模块,用于将所述日志文件中的字段名+字段值作为所述词;获取所述日志文件的序列号;将所述日志文件的序列号、以及字段名+字段值写入到文件中,以生成所述二进制文件。

可选地,所述第二获取模块,用于从所述二进制文件中读取出所述字段名+字段值;所述建立模块,用于使用所述字段名+字段值建立全文索引。

可选地,还包括:保存模块,用于将所述待入库的审计日志保存到数据库中,其中,保存到数据库的过程与根据从所述二进制文件中获取到的词建立索引的过程可以同步或者异步进行。

可选地,建立模块可以使用建立索引的进程实现,所述建立索引的进程间隔预定时间段(例如几秒钟)启动一次,每次启动后会获取该时间段内的二进制文件,然后对这个时间段内的所有二进制文件建立索引,其中,在该时间段内建立的索引生成一个索引文件。通过该方式可以减少索引文件的数量。

可选地,上述系统还可以包括:生成模块,用于生成所述审计日志。

通过上述实施方式,解决了使用SQL数据源建立全文索引会导致增加数据库压力以及建立索引滞后的问题,从而提高了索引的建立速度,减轻了审计日志的入库压力

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

技术分类

06120116566284