一种数据处理方法以及服务器与流程

文档序号:12719732阅读:200来源:国知局
一种数据处理方法以及服务器与流程

本发明涉及通信技术领域,特别涉及一种数据处理方法。本发明同时还涉及一种服务器。



背景技术:

布控是安防监控行业应用广泛的一项业务,其主要功能是根据特定规则对流式数据进行实时监控,若出现符合规则的数据则立即向操作人员产生告警。以过车数据为例,通过布控能够对时间、卡口、车牌、车型等规则进行监控,当发现指定车牌或车型的车辆在某一时刻经过特殊的卡口时,即产生告警信息。

随着安防行业的不断发展,布控数据类型趋向多样化,并被广泛应用在刑侦、交通违法、车辆限行等场景。除了最早的对车辆进行布控之外,目前还新增了MAC、RFID、旅馆登记等多种类型,在可预见的将来,还会有更多数据类型的加入,这也对布控业务的设计提出了新的要求。

在现有技术中,布控业务以布控规则为单元进行设计,即针对每一种数据类型以及每一种规则编写特定的判断逻辑。然而,发明人在实现本发明的过程中发现,现有技术在执行布控业务的过程中,前端设备所采集到的任意一条数据都需要尝试和所有正在布控的规则进行匹配,如果当前有n条布控规则,则每条数据就需要匹配n次。当面对海量的数据时,需要通过规则处理的数据流量基数很大,这样会给服务器造成很大的压力。此外,当新增或修改布控对象或布控规则时,现有技术需要修改相关代码,重新测试并发布版本。由于用户需求的多样性和多变性,技术人员不可能一开始就考虑到所有的情况。因此采用传统布控实现就不够灵活,无法快速响应需求。



技术实现要素:

本发明提供了一种数据处理方法,用以解决现有技术中在布控数据时所出现处理效率低的问题,该方法应用于监控系统中的服务器,所述监控系统还包括前端设备以及客户端,包括如下步骤:

获取各布控规则的时间配置参数;

根据所述时间配置参数从所述布控规则中去除在当前的周期时间段非生效的布控规则,并将剩余的布控规则作为待布控规则;

当在所述周期时间段内接收到所述前端设备发送的监控数据时,利用所述监控数据以及与所述待布控规则对应的规则表达式确定是否产生告警。

优选的,所述时间配置参数包含所述布控规则的布控时段以及例外时段,根据所述时间配置参数从所述布控规则中去除在当前的周期时间段非生效的布控规则,并将剩余的布控规则作为待布控规则,具体为:

根据所述布控时段从所述布控规则中筛选适用于当前的周期时间段的待布控规则;

根据所述待布控规则的布控时段获取所述待布控规则在所述周期时间段中的生效时段;

根据所述生效时段以及所述例外时段的时段补集设置所述待布控规则的有效时段。

优选的,在将剩余的布控规则作为待布控规则之后,还包括:

生成与所述待布控规则对应的规则下发消息以及规则删除消息,所述规则下发消息包含所述待布控规则的标识ID、所述规则表达式以及所述有效时段的起始时刻,所述规则删除消息包含所述待布控规则的标识ID、所述规则表达式以及所述有效时段的结束时刻;

分别将所述规则下发消息以及所述规则删除消息添加至规则消息队列;

按照预设的周期对所述规则消息队列进行轮询,并在当前的时间点到达所述规则消息队列中的消息的生效时间时将所述规则下发消息中的规则表达式添加至规则表达式列表,或从所述规则表达式列表中删除所述规则删除消息中的规则表达式;

其中,所述规则下发消息的生效时间为所述起始时刻,所述规则删除消息的生效时间为所述结束时刻。

优选的,利用所述监控数据以及与所述待布控规则对应的规则表达式确定是否产生告警,具体为:

对所述监控数据的数据字段进行解析;

根据解析结果从所述规则表达式列表中获取与所述监控数据匹配的规则表达式,并在在将解析后的数据字段绑定至与所述监控数据匹配的规则表达式的变量后对所述规则表达式进行求值;

若所述求值结果为真值,将所述监控数据作为告警数据添加至预设的告警队列中,以使所述客户端在监听到所述告警队列发生变化后对所述告警数据进行处理;

若所述求值结果非真值,丢弃所述监控数据以及所述求值结果。

优选的,所述规则表达式由括号、运算符以及运算数组成,并根据所述待布控规则的布控逻辑生成,将所述规则下发消息中的规则表达式添加至规则表达式列表,具体为:

将所述规则表达式的中缀形式转换为后缀形式;

获取所述转换后的规则表达式中所存在的集合的类型;

若所述规则表达式中所存在的集合的类型为SQL语句形式,将所述SQL语句的集合转换成列表形式的集合,并在将转换为所述列表形式的集合进一步转换为哈希表后将所述规则表达式添加至所述规则表达式列表;

若所述规则表达式中所存在的集合的类型为列表形式,在将所述集合转换为哈希表后将所述规则表达式添加至所述规则表达式列表;

若所述规则表达式中不存在所述集合,将所述规则表达式添加至所述规则表达式列表。

相应的,本申请还提出了一种服务器,应用于监控系统中的服务器,所述监控系统还包括前端设备以及客户端,包括:

获取模块,获取各布控规则的时间配置参数;

设置模块,根据所述时间配置参数从所述布控规则中去除在当前的周期时间段非生效的布控规则,并将剩余的布控规则作为待布控规则;

确定模块,当在所述周期时间段内接收到所述前端设备发送的监控数据时,利用所述监控数据以及与所述待布控规则对应的规则表达式确定是否产生告警。

优选的,所述时间配置参数包含所述布控规则的布控时段以及例外时段,所述设置模块具体用于:

根据所述布控时段从所述布控规则中筛选适用于当前的周期时间段的待布控规则;

根据所述待布控规则的布控时段获取所述待布控规则在所述周期时间段中的生效时段;

根据所述生效时段以及所述例外时段的时段补集设置所述待布控规则的有效时段。

优选的,还包括:

生成模块,生成与所述待布控规则对应的规则下发消息以及规则删除消息,所述规则下发消息包含所述待布控规则的标识ID、所述规则表达式以及所述有效时段的起始时刻,所述规则删除消息包含所述待布控规则的标识ID、所述规则表达式以及所述有效时段的结束时刻;

添加模块,分别将所述规则下发消息以及所述规则删除消息添加至规则消息队列;

轮询模块,按照预设的周期对所述规则消息队列进行轮询,并在当前的时间点到达所述规则消息队列中的消息的生效时间时将所述规则下发消息中的规则表达式添加至规则表达式列表,或从所述规则表达式列表中删除所述规则删除消息中的规则表达式;

其中,所述规则下发消息的生效时间为所述起始时刻,所述规则删除消息的生效时间为所述结束时刻。

优选的,所述确定模块具体用于:

对所述监控数据的数据字段进行解析;

根据解析结果从所述规则表达式列表中获取与所述监控数据匹配的规则表达式,并在在将解析后的数据字段绑定至与所述监控数据匹配的规则表达式的变量后对所述规则表达式进行求值;

若所述求值结果为真值,将所述监控数据作为告警数据添加至预设的告警队列中,以使所述客户端在监听到所述告警队列发生变化后对所述告警数据进行处理;

若所述求值结果非真值,丢弃所述监控数据以及所述求值结果。

优选的,所述规则表达式由括号、运算符以及运算数组成,并根据所述待布控规则的布控逻辑生成,所述确定模块将所述规则下发消息中的规则表达式添加至规则表达式列表,具体为:

将所述规则表达式的中缀形式转换为后缀形式;

获取所述转换后的规则表达式中所存在的集合的类型;

若所述规则表达式中所存在的集合的类型为SQL语句形式,将所述SQL语句的集合转换成列表形式的集合,并在将转换为所述列表形式的集合进一步转换为哈希表后将所述规则表达式添加至所述规则表达式列表;

若所述规则表达式中所存在的集合的类型为列表形式,在将所述集合转换为哈希表后将所述规则表达式添加至所述规则表达式列表;

若所述规则表达式中不存在所述集合,将所述规则表达式添加至所述规则表达式列表。

由此可见,通过应用本申请的技术方案,在获取各布控规则的时间配置参数后,删除布控日期与周期时间段的日期属性不符合的布控规则,将剩余的布控规则作为待布控规则,并设置各个待布控规则在周期时间段中的有效时段,这样在当在有效时段内接收到前端设备发送的监控数据时,能够及时利用监控数据以及与待布控规则对应的规则表达式确定是否产生告警,因此能够在保证规则能够被准备匹配的同时减少单条数据的运算量,从而提高了数据匹配吞吐量和系统响应速度。

附图说明

图1为本申请提出的一种数据处理方法的流程示意图;

图2为本申请具体实施例中的数据流示意图;

图3为本申请具体实施例中时间处理的示意图;

图4为本申请提出的一种服务器的结构示意图。

具体实施方式

如背景技术所述,现有技术中的数据布控方案不仅在扩展性上无法满足技术人员快速进行修改以及配置的需求,并且在利用布控规则对数据进行处理的过程中,数据必须一一与众多规则进行对应,在数据处理量非常大的情况下,会对服务器形成极大的压力。有鉴于此,本申请提出了一种数据处理方法,该方法能够在保证布控规则均能够在需要使用时被准确匹配到的前提下,减少服务器针对单条数据所要匹配的布控规则的数量,从而减轻设备负荷。

如图1所示,为本申请提出的一种数据处理方法的流程示意图,该方法应用于监控系统中的服务器,该监控系统同时还包括多个前端设备,这些前端设备负责采集各种监控数据,并将这些监控处理传输至服务器处理。具体地,本申请技术方案包括如下步骤:

S101,获取各布控规则的时间配置参数。

由于本申请所要解决的技术问题之一为减少单条数据所要匹配的规则的数量,因此在针对前端设备所发送的监控数据进行处理之前,本申请首先需要对已有的布控规则进行时间上的整合,该整合通过将时间规则从布控规则中抽取出来控制规则下发时间。为此本申请需要获取布控规则的一些相关时间配置参数,其中包括布控规则的布控时段以及例外时段,布控时段指示了该布控规则生效的日期以及具体的时间,而例外时段则为该布控规则失效的时间段。

举例来说,布控时段在10月工作日7:00-17:00表明该布控规则仅在10月的每一个周一至周五的7:00-17:00生效,例外时段12:00-13:00表明该布控规则在7:00-17:00之间的12:00-13:00不用于匹配数据,以此类推。

S102,根据所述时间配置参数从所述布控规则中去除在当前的周期时间段非生效的布控规则,并将剩余的布控规则作为待布控规则。

为了根据各个布控规则的时间配置参数设置各个待布控规则在所述周期时间段中的有效时段,本申请首先需要从已有的布控规则中筛选适用于当前的周期时间段(例如当天、上午、下午、午夜或者技术人员制定的小时数量内)的布控规则,将这些布控规则作为待布控规则,从而能够初步减少针对单条监控数据所要匹配的规则的数量。

针对S101中筛选出的待布控规则,本步骤精确计算这些待布控规则在当前的周期时间段中生效的时刻以及失效的时刻,实现仅在有效时间段中应用这些待布控规则对监控数据进行处理,从而进一步减少不必要的布控规则的匹配操作。在本申请的优选实施例中,该步骤包含以下流程:

步骤a)根据所述布控时段从所述布控规则中筛选适用于当前的周期时间段的待布控规则;

步骤b)根据所述待布控规则的布控时段获取所述待布控规则在所述周期时间段中的生效时段;

步骤c)根据所述生效时段以及所述例外时段的时段补集设置所述待布控规则的有效时段。

需要说明的是,以上流程仅为本申请为达到以上技术目的所提出的一个优选实施方案,在能够取得减少监控数据所要匹配的布控规则数量且不影响数据布控工作的前提下,其他能够达到相同目的的技术方案均属于本申请的保护范围。

上述优选实施例实现了针对布控规则的筛选以及布控规则的时间分配,由于现有技术中均是通过从列表中读取规则的方式应用布控规则,因此本申请的优选实施例提出了相应的实现方案,具体流程如下:

步骤a)生成与所述待布控规则对应的规则下发消息以及规则删除消息,所述规则下发消息包含所述待布控规则的标识ID、所述规则表达式以及所述有效时段的起始时刻,所述规则删除消息包含所述待布控规则的标识ID、所述规则表达式以及所述有效时段的结束时刻;

步骤b)分别将所述规则下发消息以及所述规则删除消息添加至规则消息队列;

步骤c)按照预设的周期对所述规则消息队列进行轮询,并在当前的时间点到达所述规则消息队列中的消息的生效时间时将所述规则下发消息中的规则表达式添加至规则表达式列表,或从所述规则表达式列表中删除所述规则删除消息中的规则表达式;

需要说明的是,由于上述流程中存在规则下发消息以及规则删除消息两种不同功能的消息,因此依据消息类型的不同,生效时间所对应的时刻也存在区别:规则下发消息的生效时间为所述起始时刻,规则删除消息的生效时间为所述结束时刻。

S103,当在所述有效时段内接收到所述前端设备发送的监控数据时,利用所述监控数据以及与所述待布控规则对应的规则表达式确定是否产生告警。

为了解决布控业务开发的扩展性问题,本申请的技术方案针对布控规则的形式以及处理方式进行了改进,以通过对规则处理流程的优化减少单条数据匹配次数,进而提高数据吞吐量。具体的,本申请技术方案利用扩展运算符的四则运算表达式描述布控规则。这个改进一方面优化了规则表达式的解释执行流程,使其匹配效率不亚于硬编码;另一方面,相对于以往修改或新增一个布控规则通常需要一个版本周期的情况,现在只需要运维人员对布控规则的表达式进行修改,然后重新下发布控即可。

因此,在本申请的技术方案中,布控规则的表达式由括号、运算符以及运算数组成,并根据所述待布控规则的布控逻辑生成,通过扩展该规则表达式的操作符可以描述绝大多数规则,技术人员能够通过客户端可以对布控规则的逻辑进行灵活的配置。

基于四则运算表达式的特性,本申请的优选实施例所获取的确定结果是一个布尔值,即真或者假,当整个表达式求出的值为真时,代表这条记录匹配成功,产生告警消息。具体的,该步骤的实现流程如下:

步骤a)对所述监控数据的数据字段进行解析;

步骤b)根据解析结果从所述规则表达式列表中获取与所述监控数据匹配的规则表达式,并在在将解析后的数据字段绑定至与所述监控数据匹配的规则表达式的变量后对所述规则表达式进行求值;

步骤c)若所述求值结果为真值,将所述监控数据作为告警数据添加至预设的告警队列中,以使所述客户端在监听到所述告警队列发生变化后对所述告警数据进行处理;

步骤d)若所述求值结果非真值,丢弃所述监控数据以及所述求值结果。

基于以上优选实施例中的方案,用户可以通过自行配置规则表达式,将多个判断条件排列组合,描述绝大多数业务逻辑。在新增和修改规则表达式的同时无需对后端代码做修改。在此需要说明的是,本申请的技术方案并不仅限于已有的表达式方案,技术人员能够针对后端层面表达式的运算符自行扩展的,除了常见数学运算符符、比较运算符和逻辑运算符,开发者可以通过简单代码实现自定义运算符,从而实现一些复杂的业务逻辑,这些都属于本申请的保护范围之内。

在目前的规则表达式中,同时存在列表形式以及SQL语句形式的类型的集合,其中列表形式的集合能够直接转换成哈希表以提高查询效率,而SQL语句形式的集合则需要预先进行转换,因此为了使设备能够清楚识别本申请技术方案中布控规则的规则表达式,在本申请的优选实施例中,当需要将规则下发消息中的规则表达式添加至规则表达式列表时,首先将所述规则表达式的中缀形式转换为后缀形式,随后获取所述转换后的规则表达式中所存在的集合的类型,并依据以下情况进行处理:

(1)规则表达式中存在类型为SQL语句形式的集合

在此情况下,本优选实施例将所述SQL语句的集合转换成列表形式的集合,并在将转换为所述列表形式的集合进一步转换为哈希表后将所述规则表达式添加至所述规则表达式列表;

(2)规则表达式中仅存在类型为列表形式的集合

在此情况下,本优选实施例在将所述集合转换为哈希表后将所述规则表达式添加至所述规则表达式列表;

(3)规则表达式中不存在集合

在此情况下,本优选实施例将所述规则表达式添加至所述规则表达式列表。

通过应用本申请的技术方案,在根据各个布控规则的时间配置参数设置各个待布控规则在周期时间段中的有效时段后,当在有效时段内接收到前端设备发送的监控数据时,利用监控数据以及与待布控规则对应的规则表达式确定是否产生告警,由于待布控规则为适用于当前的周期时间段的布控规则,且规则表达式根据待布控规则的布控逻辑生成,因此能够在提高布控业务开发的扩展性的同时减少单条数据的运算量,从而提高了数据匹配吞吐量和系统响应速度。

为了进一步阐述本发明的技术思想,现结合如图2所示的数据流示意图对本发明的技术方案进行说明。在介绍本申请的具体实施例的方案之前,首先对该数据流示意图中的主要模块进行介绍:

(1)Spark Streaming框架

Spark Streaming构建在Spark上处理Stream数据的框架,基本的原理是将Stream数据分成小的时间片断(几秒),以类似batch批量处理的方式来处理这小部分数据。Spark Streaming构建在Spark上,一方面是因为Spark的低延迟执行引擎(100ms+),虽然比不上专门的流式数据处理软件,也可以用于实时计算,另一方面相比基于Record的其它处理框架(如Storm),一部分窄依赖的RDD数据集可以从源数据重新计算达到容错处理目的。此外小批量处理的方式使得它可以同时兼容批量和实时数据处理的逻辑和算法。方便了一些需要历史数据和实时数据联合分析的特定应用场合。

(2)Kafka系统

Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据。这种动作(网页浏览,搜索和其他用户的行动)是在现代网络上的许多社会功能的一个关键因素。这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。对于像Hadoop的一样的日志数据和离线分析系统,但又要求实时处理的限制,这是一个可行的解决方案。Kafka的目的是通过Hadoop的并行加载机制来统一线上和离线的消息处理,也是为了通过集群机来提供实时的消费。

(3)Rule Dispacher(规则调配)模块

Rule Dispacher负责从数据库中拉取所有布控规则,并对这些规则通过布控时间和例外时间进行预先裁剪,过滤掉暂时不必要的规则,保证规则在真正生效时才会下发到Rule Queue(规则序列)。同时可以对布控规则进行预处理,以提高对数据进行规则匹配的效率。

(4)Rule Matcher(规则匹配)模块

Rule Dispacher用于从RuleQueue中获取规则变更消息,并对其内部维护的规则进行更新(增加或删除);接受前端设备输入的结构化数据,并其进行规则匹配,最终产生告警消息。

基于上述框架、系统以及模块,本申请主要利用Rule Dispatcher将规则经过处理和筛选后交给基于Spark Streaming的中Rule Matcher,这些规则将会被用来匹配从前端设备流入的结构化数据。因此Rule Dispatcher模块和Rule Matcher模块为本具体实施例的核心,在此基础上,技术人员也可以选取其他的框架或是系统搭载这两个模块实现本发明的目的,这些均属于本申请的保护范围。

由于本申请旨在通过将时间规则从布控规则中抽取出来控制规则下发时间来减少单条数据的运算量,以及利用扩展运算符的四则运算表达式描述布控规则,因此根据上述数据流需要实现时间裁剪以及规则处理两个功能。以下分别对这两个功能进行介绍:

一、时间裁剪

考虑到布控规则中包括布控日期段、布控时间段、布控时间类型:按天、按周、按月,以及布控例外时段(同样也支持按天、周、月)。而实际上,由于布控时段、例外等条件的限制,可能某段时间可能根本就不需要布控。而传统方案中,每一条待布控数据进来,都会先检查是否在布控时段、再检查是否不在例外时段,会造成大量不必要的计算。时间裁剪的根本目的是精确计算规则下发和删除时间,减少实际匹配次数,简化布控规则。

为了达到以上技术目的,本具体实施例通过Rule Dispatcher进程将较为复杂但是又相对通用的时间的规则从布控规则中抽取出来单独处理,具体的处理步骤如下:

步骤a)读取所有规则的及其布控日期段、时间段、和布控时间类型。

步骤b)为了尽量缩短规则判断周期,同时又不对布控业务产生影响。在本具体实施例中设置规则分发模块只负责处理当天的规则,以便按照当天的实际情况对时间信息进行裁剪处理,并删除不符合条件的时间规则。

举例来说,假设规则是按周布控,布控时段是每周二周四的10点到15点,如果今天不是周二或周四,则这条时间规则将会被忽略,按天、按月的处理方式也同上。

步骤c)按照与步骤b)类似的方式获取当天的例外时间段。

步骤d)将步骤b)和步骤c)阶段所获得的布控时段和例外时段取补集,从而得到这条规则在今天中真正需要布控的时间段。该具体实施例的时间处理示意图如图3所示,从中可知布控规则在经过上述流程被裁剪后所产生的真正有效的时段。

步骤e)按照步骤d)中裁剪出的时间段的开始和结束时间预先生成规则,对于每个有效时间段的开始时间,生成一条规则下发消息,该消息内容包括消息生效时间、规则ID、规则表达式(表达式会在后面讲);结束时间点则生成一条规则删除的消息,删除消息只包含生效时间和规则ID。消息生成完毕后按照时间顺序存放在规则消息队列,等待消息下发的线程取用。

步骤f)Rule Dispatcher中有一个线程负责消息下发,它会轮询从列首检查规则消息队列,查看当前时间点是否即将到达消息的生效时间,如果是,将会该消息下发给规则匹配模块。

二、规则处理

由于通过扩展其操作符可以描述绝大多数规则,因此在本具体实施例中利用一个类四则运算表达式来描述规则,据此技术人员可以利用客户端对其进行灵活配置。在本具体实施例中,规则表达式的最终结果是一个布尔值,即真或者假,当整个表达式求出的值为真时,代表这条记录匹配成功,产生告警消息。

由于表达式语法规则和优先级规则与四则运算完全相同,由括号、运算符、运算数组成,因此非常易于理解和编写。本具体实施例通过了一套可扩展运算符的四则运算解释器来处理规则匹配,具体的规则表达式的形式如下表1所示:

表1

以单双号限行的三种需求为例(假设尾号为双号违规),结合上表可以编写如下表达式来过滤违规车辆:

(1)字母结尾的车牌作单号处理

($plateCode lastNumber%2=0)&&($plateCode endWithNumber);

(2)字母结尾的车牌作双号处理

($plateCode lastNumber%2=0)||(!$plateCode endWithNumber)

(3)字母结尾的车牌以最后一位数字为准

$plateCode lastNumber%2=0

(4)如果需要尾号为字母时:A到M算单号而N到Z算双号

(($plateCode lastNumber%2=0)&&($plateCode endWithNumber))||($plateCode lastChar between[‘M’,’Z’])

由上可见,对于大部分情况,用户都可以通过自行配置规则表达式来将多个判断条件排列进行组合,以此描述绝大多数业务逻辑。新增和修改规则无需对后端代码做修改。同时后端层面表达式的运算符是可以自行扩展的,除了常见数学运算符符、比较运算符和逻辑运算符,开发者可以通过简单代码实现自定义运算符,从而实现一些复杂的业务逻辑,而这些代码跟其他模块也是解耦的,用户无需关系业务的其他部分。

由于不同的公司以及不同的对象下发的规则表达式存在着差异,因此在具体的应用场景中,本具体实施例在规则表达式下发前对表达式进行解析,具体的解析流程如下:

步骤a)将表达式的中缀形式转换为后缀形式;

步骤b)通过以下两步进行集合处理:

首先,如果有SQL语句表示的集合,通过数据库查询将SQL语句转换成元素集合,在针对各个元素集合转换为哈希表,当集合数量较大时,匹配性能可以提高几十到数百倍。

处理完成后的规则表达式会附在规则新增消息中插入Kafka,等待Rule Matcher模块进行处理。在本具体实施例中,Rule Matcher基于分布式框架Spark Streaming,支持容错与线性扩展。虽然Spark Streaming并不是流处理,但对于传统布控业务来说,作为低延迟的批处理框架,Spark Streaming的秒级或分钟级的延迟几乎可以忽略。

相应地,Rule Matcher模块的处理流程如下:

步骤a)Rule Matcher维护以一个当前正在布控的规则表达式列表L,每一个批处理周期去轮询检查Kafka中的Rule Queue是否更新,如果有,则更新列表L(添加新的规则或者删除失效的规则)。

步骤b)对于每条待匹配的数据,Rule Matcher解析数据字段,将其绑定到所有匹配的规则表达式变量中

步骤c)对每条规则表达式求值,若为真,将该数据ID添加到到Alarm Queue列尾。本具体实施例中,对规则求值算法中的逻辑运算的流程进行了如下优化:

Exp1&&Exp2:如果Exp1为假,则不再计算Exp2,整个表达式为假;

Exp1||Exp2:如果Exp1为真,则不再计算Exp1,整个表达式为真;

步骤d)客户端监听Alarm Queue变化,如有新增告警,取出数据做对应处理。

通过采用以上具体实施例的方案,时间处理从规则匹配流程中抽取出来做统一处理,即必要时才下发规则的策略,另外,本具体实施例优化了规则表达式的解释执行流程,使其匹配效率不亚于硬编码,这些工作提高了数据匹配吞吐量和系统响应速度。

为达到以上技术目的,本申请还提出了一种服务器,应用于监控系统中的服务器,所述监控系统还包括前端设备以及客户端,如图4所示,该服务器包括:

获取模块410,获取各布控规则的时间配置参数;

设置模块420,根据所述时间配置参数从所述布控规则中去除在当前的周期时间段非生效的布控规则,并将剩余的布控规则作为待布控规则;

确定模块430,当在所述周期时间段内接收到所述前端设备发送的监控数据时,利用所述监控数据以及与所述待布控规则对应的规则表达式确定是否产生告警。

在具体的应用场景中,所述时间配置参数包含所述布控规则的布控时段以及例外时段,所述设置模块具体用于:

根据所述布控时段从所述布控规则中筛选适用于当前的周期时间段的待布控规则;

根据所述待布控规则的布控时段获取所述待布控规则在所述周期时间段中的生效时段;

根据所述生效时段以及所述例外时段的时段补集设置所述待布控规则的有效时段。

在具体的应用场景中,还包括:

生成模块,生成与所述待布控规则对应的规则下发消息以及规则删除消息,所述规则下发消息包含所述待布控规则的标识ID、所述规则表达式以及所述有效时段的起始时刻,所述规则删除消息包含所述待布控规则的标识ID、所述规则表达式以及所述有效时段的结束时刻;

添加模块,分别将所述规则下发消息以及所述规则删除消息添加至规则消息队列;

轮询模块,按照预设的周期对所述规则消息队列进行轮询,并在当前的时间点到达所述规则消息队列中的消息的生效时间时将所述规则下发消息中的规则表达式添加至规则表达式列表,或从所述规则表达式列表中删除所述规则删除消息中的规则表达式;

其中,所述规则下发消息的生效时间为所述起始时刻,所述规则删除消息的生效时间为所述结束时刻。

在具体的应用场景中,所述确定模块具体用于:

对所述监控数据的数据字段进行解析;

根据解析结果从所述规则表达式列表中获取与所述监控数据匹配的规则表达式,并在在将解析后的数据字段绑定至与所述监控数据匹配的规则表达式的变量后对所述规则表达式进行求值;

若所述求值结果为真值,将所述监控数据作为告警数据添加至预设的告警队列中,以使所述客户端在监听到所述告警队列发生变化后对所述告警数据进行处理;

若所述求值结果非真值,丢弃所述监控数据以及所述求值结果。

在具体的应用场景中,所述规则表达式由括号、运算符以及运算数组成,并根据所述待布控规则的布控逻辑生成,所述确定模块将所述规则下发消息中的规则表达式添加至规则表达式列表,具体为:

将所述规则表达式的中缀形式转换为后缀形式;

获取所述转换后的规则表达式中所存在的集合的类型;

若所述规则表达式中所存在的集合的类型为SQL语句形式,将所述SQL语句的集合转换成列表形式的集合,并在将转换为所述列表形式的集合进一步转换为哈希表后将所述规则表达式添加至所述规则表达式列表;

若所述规则表达式中所存在的集合的类型为列表形式,在将所述集合转换为哈希表后将所述规则表达式添加至所述规则表达式列表;

若所述规则表达式中不存在所述集合,将所述规则表达式添加至所述规则表达式列表。

由此可见,通过应用本申请的技术方案,在获取各布控规则的时间配置参数后,删除布控日期与周期时间段的日期属性不符合的布控规则,将剩余的布控规则作为待布控规则,并设置各个待布控规则在周期时间段中的有效时段,这样在当在有效时段内接收到前端设备发送的监控数据时,能够及时利用监控数据以及与待布控规则对应的规则表达式确定是否产生告警,因此能够在保证规则能够被准备匹配的同时减少单条数据的运算量,从而提高了数据匹配吞吐量和系统响应速度。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到本发明可以通过硬件实现,也可以借助软件加必要的通用硬件平台的方式来实现。基于这样的理解,本发明的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是CD-ROM,U盘,移动硬盘等)中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施场景所述的方法。

本领域技术人员可以理解附图只是一个优选实施场景的示意图,附图中的模块或流程并不一定是实施本发明所必须的。

本领域技术人员可以理解实施场景中的装置中的模块可以按照实施场景描述进行分布于实施场景的装置中,也可以进行相应变化位于不同于本实施场景的一个或多个装置中。上述实施场景的模块可以合并为一个模块,也可以进一步拆分成多个子模块。

上述本发明序号仅仅为了描述,不代表实施场景的优劣。

以上公开的仅为本发明的几个具体实施场景,但是,本发明并非局限于此,任何本领域的技术人员能思之的变化都应落入本发明的保护范围。

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