一种监控数据实时存储方法、系统、电子设备及存储介质与流程

文档序号:20699963发布日期:2020-05-12 15:32阅读:118来源:国知局
一种监控数据实时存储方法、系统、电子设备及存储介质与流程

本发明涉及大数据领域,尤其涉及一种监控数据实时存储方法、系统、电子设备及存储介质。



背景技术:

zabbix为基于web界面具有分布式系统监视及网络监视功能的监控工具,可以对服务器进行cpu、内存、网络、硬盘灯状况进行监控。一台监控设备(如服务器)存在多个监控指标,对每个监控指标会按固定周期采集数据,所以对于zabbix监控而言产生的数据量非常庞大,无疑对数据存储分析提出了更高要求。

通常使用mysql存储监控数据的方案,难以满足大规模数据存储、分析的要求,而使用opentsdb等时序数据库,虽然可以满足大批量的数据存储要求,但时序数据库结构较为复杂,查询效率低,不便于数据分析使用。



技术实现要素:

有鉴于此,本发明实施例提供了一种监控数据实时存储方法、系统、电子设备及存储介质,以解决的现有大规模数据存储方法数据查询效率低的问题。

在本发明实施例的第一方面,提供了一种监控数据实时存储方法,包括:

通过zabbix采集监控设备的监控数据,并将所述监控数据实时推送至kafka监控项队列;

sparkstreaming获取所述监控项队列数据并进行流处理后,存储至hbase预定数据分区,所述数据分区为根据调度周期设定的不同时长分段的存储表。

在本发明实施例的第二方面,提供了一种监控数据实时存储系统,包括:

接入模块,用于通过zabbix采集监控设备的监控数据,并将所述监控数据实时推送至kafka监控项队列;

存储模块,用于sparkstreaming获取所述监控项队列数据并进行流处理后,存储至hbase预定数据分区,所述数据分区为根据调度周期设定的不同时长分段的存储表。

在本发明实施例的第三方面,提供了一种电子设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器运行的计算机程序,所述处理器执行所述计算机程序时实现如本发明实施例第一方面所述方法的步骤。

在本发明实施例的第四方面,提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现本发明实施例第一方面提供的所述方法的步骤。

本发明实施例中,通过zabbix采集监控设备的监控数据,并将所述监控数据实时推送至kafka监控项队列;存储模块,用于sparkstreaming获取所述监控项队列数据并进行流处理后,存储至hbase预定数据分区,所述数据分区为根据调度周期设定的不同时长分段的存储表,从而解决了现有大规模监控数据查询效率低的问题,实现数据高并发写入的同时提高数据读取能力,方便数据查询。基于hbase中数据分区,根据数据调用周期的不同,将不同时间段获取的数据存储到不同分区中,方便检索查询,提高数据读取性能,实现快速存取,为后续数据分析提供可靠依托,保障数据的实时处理。

附图说明

为了更清楚地说明本发明实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单介绍,显而易见地,下面描述的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获取其他附图。

图1为本发明的一个实施例提供的监控数据实时存储方法的流程示意图;

图2为本发明的一个实施例提供的监控数据实时存储系统的结构示意图;

图3为本发明的一个实施例提供的监控数据实时存储系统的另一结构示意图。

具体实施方式

为使得本发明的发明目的、特征、优点能够更加的明显和易懂,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,下面所描述的实施例仅仅是本发明一部分实施例,而非全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围以下结合附图对本发明的原理和特征进行描述,所举实例只用于解释本发明,并非用于限定本发明的范围。

本发明的说明书或权利要求书及上述附图中的术语“包括”以及其他相近意思表述,意指覆盖不排他的包含,如包含一系列步骤或单元的过程、方法或系统、设备没有限定于已列出的步骤或单元。

请参阅图1,本发明实施例提供的一种监控数据实时存储方法的流程示意图,包括:

s101、通过zabbix采集监控设备的监控数据,并将所述监控数据实时推送至kafka监控项队列;

所述zabbix用于按固定周期采集监控数据,所述监控数据中以监控设备的监控指标不同,分为不同类别数据,如cpu监控数据、内存监控数据、网络监控数据等。zabbix将采集到的监控数据(或监控指标数据)实时传送至kafka队列。所述kafka是一种数据传输中间体,将接收到的数据放置于topic中,topic可以被多个消费者监听,每个消费者定时从topic中获取数据,并记录读取位置。基于kafka可以支持高并发、高吞吐量数据的实时处理。

在所述监控项队列中,将监控数据以其监控的数据类别或监控项,推送至kafka形成监控项队列,有sparkstreaming获取处理后进行存储。

具体的,通过zabbix采集服务器各项监控数据,在服务器端配置将监控数据实时存储到文件中;通过filebeat将监控数据的文件实时推送至kafka监控队列。

s102、sparkstreaming获取所述监控项队列数据并进行流处理后,存储至hbase预定数据分区,所述数据分区为根据调度周期设定的不同时长分段的存储表。

所述sparkstreaming为一种实时的流数据处理引擎,可以按固定周期从kafka的topic中获取数据,经处理后写入到hbase数据库,也可以回推至kafka其他topic。

在一个实施例中,数据分区为根据调度周期设定的不同时长分段的存储表,所述存储表对应的hbaserowkey由分区mod值、监控项id和反转时间组成,其中,所述分区mod值为hbase节点数对监控项id求模,所述反转时间为int最大值减去当前时间。

示例性的,在hbase的rowkey中,各组成部分数据类型及长度为:

其中,预分区mod值=监控项id%hbase节点数。

这样可以确保每一个监控项id都在一个hbase节点上读写,方便对应的监控项id连续高效的读取操作(命中单一节点,避免对节点数据合并影响读取效率)。同时,确保每个hbase节点都分担读写,多个节点可同时提供多个监控项的读写,弥补热点读写性能不足。

其中,反转时间=int最大值–当前日期,int最大值表示为-yyyymmddhh,而非传统long最大值–1970到当前时间的偏移量。短时长的存储表可使用分秒存储值(如5秒),长时长的存储表可采用时分存储值(如15分钟)。

基于以上rowkey设计,可以减少对memstore空间的占用,缓存更多rowkey,同时,可实现数据高效查询。

可选的,在每个存储表中至少设定4个列族,每个列族中分别存储监控项数据的最大值、最小值、平均值及中位数,可方便数据查询、分析读取。

对于kafka中缓存的监控项数据或监控项队列数据,当hbase完成存储后需要清除缓存数据。

具体的,kafka监控项队列对实时推送的监控数据进行缓存,当所述数据分区中最长时间分段存储表完成监控数据存储后,由kafka按照监控项队列中的监听机制将缓存数据清除。

优选的,在一个实施例中,将监控设备的监控项告警规则存储在hbase中,从kafka监控项队列中中获取监控项数据,根据所述告警规则判断所述监控项数据是否触发告警条件,并将触发告警条件的监控项数据推送至告警队列。

进一步的,按照告警规则中设定的预定周期t从监控项队列中获取监控项数据,进行告警条件判断:

步骤a1、判断监控项数据中的监控项id下是否存在周期为t的规则,若没有则pass淘汰,否则执行步骤a2;

步骤a2、判断当前告警列表中是否存在告警规则,且未恢复的告警,若不存在则执行步骤a4,否则执行步骤a3;

步骤a3、判断告警至当前时间是否在沉默周期内,若在沉默周期内则pass淘汰,否则执行步骤a4;

步骤a4、判断查看规则的连续周期是否为1,若为1,则执行步骤a5,若大于1则执行步骤a6;

步骤a5、判断监控指标数据是否满足告警规则表达式,若满足则执行步骤a10,若不满足则pass淘汰,并判断告警列表中是否存在未恢复的告警,存在则将恢复标识设为1;

步骤a6、判断标准类型若为1,判断监控指标数据是否满足告警规则表达式,不满足则pass淘汰,满足则执行步骤a10,若标准类型为0或2执行步骤a7;

步骤a7、查看告警中间表的剩余连续周期,若剩余连续周期为1则执行步骤a8,若不为1,则执行步骤a9;

步骤a8、根据判断标准类型和连续周期,判断当前监控指标值是否符合预定要求,若不符合则pass淘汰,并删除告警中间表,并判断告警列表中是否存在未恢复的告警,存在则将恢复标识设为1,若符合,则执行步骤a10;

其中,判断标准分为3个类型:总是(表示为0)、只要有一次(表示为1)、平均值(表示为2)。在连续周期和判断标准的基础上,结合告警规则设置的表达式,如>=、>、<=、<、=、!=等,判断当前的监控指标值是否触发了告警条件;

步骤a9、将数据存储至告警中间表,剩余连续周期减1;

步骤a10、清空告警中间表,并推送至告警队列。

通过设定告警规则可以实时检测预存储的监控项数据,方便及时发现问题或故障。

通过本实施例提供的方法,解决了数据查询读取效率低的问题,可以实现高并发、大规模监控数据存储,同时基于数据调度周期或使用频率的分区设计,可以提供数据读取效率,方便后续分析使用。

应理解,上述实施例中各步骤的序号大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本发明实施例的实施过程构成任何限定。

图2为本发明实施例提供的一种监控数据实时存储系统的结构示意图,该系统包括:

接入模块210,用于通过zabbix采集监控设备的监控数据,并将所述监控数据实时推送至kafka监控项队列;

可选的,所述通过zabbix采集监控设备的监控数据,并将所述监控数据实时推送至kafka监控项队列具体为:

通过zabbix采集服务器各项监控数据,在服务器端配置将监控数据实时存储到文件中;

通过filebeat将监控数据的文件实时推送至kafka监控队列。

存储模块220,用于sparkstreaming获取所述监控项队列数据并进行流处理后,存储至hbase预定数据分区,所述数据分区为根据调度周期设定的不同时长分段的存储表。

可选的,所述存储表对应的hbaserowkey由分区mod值、监控项id和反转时间组成,其中,所述分区mod值为hbase节点数对监控项id求模,所述反转时间为int最大值减去当前时间。

可选的,所述数据分区为根据调度周期设定的不同时长分段的存储表还包括:

在每个存储表中至少设定4个列族,每个列族中分别存储监控项数据的最大值、最小值、平均值及中位数。

可选的,所述sparkstreaming获取所述监控项队列数据并进行流处理后,存储至hbase预定数据分区包括:

kafka监控项队列对实时推送的监控数据进行缓存,当所述数据分区中最长时间分段存储表完成监控数据存储后,由kafka按照监控项队列中的监听机制将缓存数据清除。

可选的,所述存储模块220还包括:

告警模块,用于将监控设备的监控项告警规则存储在hbase中,从kafka监控项队列中中获取监控项数据,根据所述告警规则判断所述监控项数据是否触发告警条件,并将触发告警条件的监控项数据推送至告警队列。

可选的,所述根据所述告警规则判断所述监控项数据是否触发告警条件,将触发告警条件的监控项数据推送至告警队列包括:

按照告警规则中设定的预定周期t从监控项队列中获取监控项数据,进行告警条件判断:

步骤a1、判断监控项数据中的监控项id下是否存在周期为t的规则,若没有则pass淘汰,否则执行步骤a2;

步骤a2、判断当前告警列表中是否存在告警规则,且未恢复的告警,若不存在则执行步骤a4,否则执行步骤a3;

步骤a3、判断告警至当前时间是否在沉默周期内,若在沉默周期内则pass淘汰,否则执行步骤a4;

步骤a4、判断查看规则的连续周期是否为1,若为1,则执行步骤a5,若大于1则执行步骤a6;

步骤a5、判断监控指标数据是否满足告警规则表达式,若满足则执行步骤a10,若不满足则pass淘汰,并判断告警列表中是否存在未恢复的告警,存在则将恢复标识设为1;

步骤a6、判断标准类型若为1,判断监控指标数据是否满足告警规则表达式,不满足则pass淘汰,满足则执行步骤a10,若为0或2执行步骤a7;

步骤a7、查看告警中间表的剩余连续周期,若剩余连续周期为1则执行步骤a8,若不为1,则执行步骤a9;

步骤a8、根据判断标准,计算是否符合要求,若不符合则pass淘汰,并删除告警中间表,并判断告警列表中是否存在未恢复的告警,存在则将恢复标识设为1,若符合,则执行步骤a10;

步骤a9、将数据存储至告警中间表,剩余连续周期减1;

步骤a10、清空告警中间表,并推送至告警队列。

基于本发明实施提供系统,可以实现对大规模的监控数据存储,并实现高效读取分析。

在图2基础上,图3为本发明实施例提供的一种监控数据实时存储系统的另一结构示意图,该系统包括采集器310、消息队列320、流处理模块330、存储模块340和应用系统350。

所述采集器310中通过zabbix采集服务器的cpu、主机、网络、数据库、内存、虚拟化等各项性能监控指标,以监控类别不同,将各监控项数据在服务器端配置存储至文件中,通过filebeat将监控项数据的文件实时推送至监控项队列中。

所述消息队列320中包括监控项队列3201和告警队列3202,所述消息队列为基于kafka的发布订阅消息队列,所述监控项队列3201接收监控项数据进行缓存,由消费者定时从topic获取数据处理。所述告警队列3202可接收流处理模块330中告警模块3302推送告警信息。

所述流处理模块330为基于sparkstreaming流处理引擎的数据处理模块,可按固定时间周期从消息队列320中获取数据进行处理。所述流处理模块320中包括告警模块3302、5s处理模块、15min处理模块、30min处理模块和60min处理模块。其中,

所述告警模块3302用于按固定周期从kafka消息队列中获取监控项数据,根据告警规则对监控项数据进行检查。

所述5s处理模块,每5秒钟从数据接入系统中获取最近5秒钟未处理的数据,数据聚合后计算最大值、最小值、平均值、中位数存储进入5秒存储表,rowkey为数据当前的小时数,例如计算时数据时间为2019-10-2114:03:00,则rowkey为“预分区mod值”+监控项id+“int最大值-当前时间戳”,hbase表中的qualifiers设置为存储一小时监控数据的列族,其中每列的key为分秒,如1000(即对应14点10分0秒),value值为此时刻对应的监控项的监控值。

所述15min处理模块,每15分钟从数据接入系统中获取最近15分钟未处理的数据,数据聚合后计算最大值、最小值、平均值、中位数存储进入15分钟存储表,rowkey为预分区mod值+监控项id+时间反转(int最大值-yyyymmdd),例如计算时数据时间为2019-10-2114:00,则rowkey为“预分区值”+监控项id+“int最大值-20191021”,hbase表中的有4个列族,每个列族分别存储每15分钟监控数据的最大值、最小值、平均值、中位数,其中每个列族中列的key为时分,如1415(即对应2019年10月21日14点15分),value值为此时刻14点00分-14点15分这段时间的监控项的监控值的最大值、最小值、平均值、中位数。

所述30min处理模块,每30分钟从数据接入系统中获取最近30分钟未处理的数据,数据聚合后计算最大值、最小值、平均值、中位数存储进入30分钟存储表,rowkey为预分区mod值+监控项id+时间反转(int最大值-yyyymmdd),例如计算时数据时间为2019-10-2114:00,则rowkey为“预分区值”+监控项id+“int最大值-20191021”,hbase表中的有4个列族,每个列族分别存储每30分钟监控数据的最大值、最小值、平均值、中位数,其中每个列族中列的key为时分,如1430(即对应2019年10月21日14点30分),value值为此时刻14点00分-14点30分这段时间的监控项的监控值的最大值、最小值、平均值、中位数。

所述60min处理模块,每60分钟从数据接入系统中获取最近60分钟未处理的数据,数据聚合后计算最大值、最小值、平均值、中位数存储进入60分钟存储表,rowkey为预分区mod值+监控项id+时间反转(int最大值-yyyymmdd),例如计算时数据时间为2019-10-2114:00,则rowkey为“预分区值”+监控项id+“int最大值-20191021”,hbase表中的有4个列族,每个列族分别存储每60分钟监控数据的最大值、最小值、平均值、中位数,其中每个列族中列的key为时分,如1500(即对应2019年10月21日15点00分),value值为此时刻14点00分-15点00分这段时间的监控项的监控值的最大值、最小值、平均值、中位数。

所述存储模块340为基于hbase的海量数据存储数据库,存储模块340中包括告警规则、5s表、15min表、30min表和60min表,所述告警规则中包括:步骤1:查询获取的监控项数据的监控项id下是否存在周期为t的规则,没有直接pass;否则到步骤2;步骤2:判断告警列表中是否存在该规则且未恢复的告警。存在则到步骤3;不存在则到步骤4;步骤3:判断告警至当前时间是否在在沉默周期内,是则直接pass;否则到步骤4;步骤4:查看规则的连续周期,若连续周期为1,则到步骤5;大于1则到步骤6;步骤5:直接判断监控指标数据是否满足告警规则表达式,满足则到步骤10;不满足则pass,并判断告警列表中是否有未恢复的告警,有的话将是否恢复标识置1(已恢复);步骤6:判断标准若为1(只要有一次),判断监控指标数据是否满足告警规则表达式,不满足则pass淘汰,满足则到步骤10;0(总是)或者2(平均值)时,则到步骤7;步骤7:查看告警中间表的剩余连续周期,若为1,说明此次触发告警条件是最后一次,则到步骤8;否则到步骤9;步骤8:根据判断标准(0:总是,2:平均值)计算是否符合要求,不符合则pass并删除告警中间表,并判断告警列表中是否有未恢复的告警,有的话将是否恢复标识置1(已恢复);符合则到步骤10;步骤9:将数据存储至告警中间表,剩余连续周期减1;步骤10:清空告警中间表,推送至告警队列。

所述5s表、15min表、30min表和60min表对应存储5s处理模块、15min处理模块、30min处理模块和60min处理模块处理后的监控数据。

所述应用系统350提供监控面板,用于查询不同时间分段数据,1小时-最近12小时的数据查询5秒表,最近1天到最近7天的数据查询15分钟表,最近8天到最近14天的数据查询30分钟表,最近15天及以上的数据查询60分钟的表。

在本发明的一个实施例中提供了一种用于监控数据实时存储的电子设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器运行的计算机程序,所述处理器执行所述计算机程序时实现如本发明实施例中s101至s102步骤。

在本发明的一个实施例中还提供了一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现以执行上述实施例提供的监控数据实时存储方法,所述非暂态计算机可读存储介质包括如:rom/ram、磁碟、光盘等。

在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述或记载的部分,可以参见其它实施例的相关描述。

以上所述,以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

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