本申请涉及实时计算技术领域,特别是涉及一种指标统计方法和一种指标统计装置。
背景技术:
伴随着信息科技日新月异的发展,信息呈现出爆发式的膨胀,人们获取信息的途径也更加多样、更加便捷,同时对于信息的时效性要求也越来越高。举个搜索场景中的例子,当电子商务网站中一个卖家发布了一条商品信息时,该卖家当然希望是这个商品信息马上就可以被买家搜索出来、点击、购买,相反,如果这个商品信息要等到第二天或者更久才可以被搜出来,对于卖家来说,其信息太滞后,特别影响该商品信息的实时性。基于该需求,产生了实时计算系统,比如jstorm/storm等分层的实时计算系统。
其中,Storm是apache社区下的分布式开源实时计算系统,采用clojure语言(Clojure是一种运行在Java(Java是一种可以撰写跨平台应用程序的面向对象的程序设计语言)平台上的Lisp语言(Lisp是一种以表达性和功能强大著称的编程语言))开发。Storm可被用于“流处理”之中,实时处理消息;也可被用于“连续计算(continuous computation)”,对数据流做连续处理,在计算时就将结果以流的形式输出给用户;它还可被用于“分布式RPC(Remote Procedure Call Protocol,远程过程调用协议)”,以并行的方式执行运算。JStorm是基于Storm开发的实时计算系统,其兼容Storm。
在实时计算系统中,为了衡量应用的运行状况和性能,通常需要对应用的各项指标进行测量和统计。如应用的发送消息量(Emitted),每秒发送量(TPS)等指标。
在jstorm/storm这种分层的实时计算系统下,由于很多实时计算系统都具有层级结构。但是传统的统计方法,对于一个指标来说,只能统计一个层级的数据。如果需要统计所有层级的数据,需要在特定层级上单独定义指标;不同层级间的指标的数据汇总、合并也需要额外的复杂逻辑来实现,其计算 过程复杂、系统资源消耗大。
技术实现要素:
鉴于上述问题,提出了本申请实施例以便提供一种克服上述问题或者至少部分地解决上述问题的一种指标统计方法和相应的一种指标统计装置。
为了解决上述问题,本申请公开了一种指标统计方法,其特征在于,包括:
对于一拓扑作业的一指标,针对对应所述指标各层级节点创建结构化指标名称;其中,通过结构化指标名称确定各层级节点之间的层级关系;
当监控到所述指标所对应的最底层的数据后,在相应最底层的结构化指标名称下进行统计;
基于最底层的结构化指标名称下的统计数据,根据各结构化指标名称之间的层级关系,逐级汇总至上一层级的结构化指标名称下。
本申请还公开了一种指标统计装置,包括:
结构化标识创建模块,用于对于一拓扑作业的一指标,针对对应所述指标各层级节点创建结构化指标名称;其中,通过结构化指标名称确定各层级节点之间的层级关系;
底层指标监控模块,用于当监控到所述指标所对应的最底层的数据后,在相应最底层的结构化指标名称下进行统计;
逐层汇总模块,用于基于最底层的结构化指标名称下的统计数据,根据各结构化指标名称之间的层级关系,逐级汇总至上一层级的结构化指标名称下。
本申请实施例包括以下优点:
本申请实施例对于实时计算系统的拓扑作业的待统计的指标,针对对应所述指标各层级节点创建结构化指标名称,而该结构化指标名称用来确定各个层级节点之间的层级关系。然后本申请实施例监控该指标的最底层的数据,在最底层的结构化指标名称下统计该数据,然后根据各结构化指标名称之间的层级关系,基于最底层的统计数据,逐级汇总至上一 层级的结构化指标名称下。如此,本申请实施例可以通过结构化指标名称的层级关系,简单的对各个层级的指标进行统计,逻辑简单,能够降低系统消耗,并且由于是按照结构化指标名称构建的层级关系,可以很方便的添加或者删除某个或者某几个层级,方便扩展。
附图说明
图1是本申请的一种指标统计方法实施例的步骤流程图;
图2是本申请的一种指标统计方法实施例的步骤流程图;
图3是本申请的一种指标统计装置实施例的结构框图;
图4是本申请的一种指标统计系统实施例的结构框图。
具体实施方式
为使本申请的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本申请作进一步详细的说明。
为了更方便的描述本申请实施例,以jstorm或storm实时计算系统为例,介绍本申请实施例涉及的相关术语。
topology:拓扑作业,其为运行于jstorm或storm系统上的应用程序。一个拓扑作业提交到storm或jstorm实时计算系统中后,可不间断运行。
component:一个topology由多个组件组成,每个组件称之为component。storm和jstorm的component分为spout和bolt两种。其中spout组件表示处理的数据的来源,如一个spout可以从外部的消息组件中获取数据,也可以从数据库获取数据,广义地说,spout可以从任何外部数据源中不间断地获取数据,并将数据发送至下游,该下游比如bolt,Bolt从Spout中接收数据并进行处理。
Task:任务。一个Task表示一个逻辑处理单元,也就是实现的spout/bolt实例。一个component可能包括多个Task。
Stream:数据流。Stream是jstorm和storm中进行指标统计的最小单位。一个Task可能包括多个Stream。
在实际应用中,jstorm和storm实时计算系统中具有层级结构,如stream→task→component→topology。在stream中统计各指标的数据。
本申请实施例的核心构思之一在于,对于实时计算系统,由于其处理数据时具备层级结构,而为了实时计算系统能够快捷的对所有层级的指标进行统计,对于一个指标的各个层级的层级节点,本申请实施例为各个层级节点创建了结构化指标名称,通过结构化指标名称本身确定各层级节点之间的层级关系。从而只需要统计最底层的结构化指标名称的数据,即可按照结构化指标名称之间的层级关系逐级进行汇总,得到对应该指标的各个层级的数据。从而本申请实施例可以通过结构化指标名称的层级关系,简单的对各个层级的指标进行统计,逻辑简单,能够降低系统消耗,并且由于是按照结构化指标名称构建的层级关系,可以很方便的添加或者删除某个或者某几个层级,方便扩展。
实施例一
参照图1,示出了本申请的一种指标统计方法实施例的步骤流程图,具体可以包括如下步骤:
步骤110,对于一拓扑作业的一指标,针对对应所述指标各层级节点创建结构化指标名称;其中,通过结构化指标名称确定各层级节点之间的层级关系;
在本申请实施例中,以jstorm对数据进行实时处理的过程为例,jstorm首先可接收某个拓扑作业topology,即启动某个应用程序。那么本申请实施例则需要统计topology处理过程中各个层级的各种指标,比如各个层级的发送消息量(Emitted),各个层级每秒发送量(TPS)等等。那么本申请实施例则可针对对应所述指标各层级节点创建结构化指标名称,并通过结构化指标名称确定各层级节点之间的层级关系。
比如前述的层级结构stream→task→component→topology。本申请可预先定义结构化指标名称的结构如:
topology@component@Task@Stream@name
其中topology、component、task、stream表示节点标识所在位置,name表示指标标识所在位置。
假设topology这个层级节点为tp1。topology包括一个层级节点component,该component的节点标识为spout。component包括两个层级节点Task0、Task1。Task0下包括两个层级节点Steam0、Steam1。Task0下包括两个层级节点Steam2、Steam3。统计的指标标识为Emitted。
那么,可以为各个层级节点创建结构化指标名称如:
对应Steam0的结构化指标名称为:
tp1@spout@Task0@Stream0@Emitted;表示统计Stream0的Emitted值。
对应Steam1的结构化指标名称为:
tp1@spout@Task0@Stream1@Emitted;表示统计Stream1的Emitted值。
对应Task0的结构化指标名称为:
tp1@spout@Task0@@Emitted;表示统计Task0的Emitted值。
对应Steam2的结构化指标名称为:
tp1@spout@Task1@Stream2@Emitted;表示统计Stream2的Emitted值。
对应Steam3的结构化指标名称为:
tp1@spout@Task1@Stream3@Emitted;表示统计Stream3的Emitted值。
对应Task1的结构化指标名称为:
tp1@spout@Task1@@Emitted;表示统计Task1的Emitted值。
对应spout的结构化指标名称为:
tp1@spout@@@Emitted;表示统计spout的Emitted值。
对应tp1的结构化指标名称为:
tp1@@@@Emitted;表示统计tp1的Emitted值。
那么对应Task0的结构化指标名由对应Steam0和Steam1的结构化指标名称缩减而来,有明确的上下级关系。而tp1@spout@Task0@Stream0@Emitted和tp1@spout@Task0@Stream1@Emitted是平级关系。同理,tp1@spout@@@Emitted由Task0和Task1的结构化指标名称缩减而来,有明 确的上下级关系。而tp1@spout@Task0@@Emitted和tp1@spout@Task1@@Emitted是平级关系。上述结构化指标名称可以明确各个层级节点之间的层级关系。
在本申请优选的另外一个实施例中,步骤110包括:
子步骤A11,对于一拓扑作业的一指标,将最顶层层级节点到最底层层级节点的节点标识和所述指标的指标标识,按序组合为最底层的结构化指标名称;
在本申请实施例中,为了计算方便,对于一个topology的指标,首先按照预先定义的结构化指标名称的结构,将最底层的将最顶层层级节点到最底层层级节点的节点标识和所述指标的指标标识,按序组合为最底层的结构化指标名称。如上述Steam0是最底层的层级节点,优先设置其结构化指标名称:tp1@spout@Task0@Stream0@Emitted。其他几个最底层的层级节点类似。
该最底层的结构化指标名称表示了从最顶层到最底层的层级路径。
子步骤A12,基于最底层的结构化指标名称,对每一层级的结构化指标名称,将所述结构化指标名称中的当前层级的层级节点设置为空,得到上一层级的结构化指标名称。
在设置了最底层的结构化指标名称后,再逐级向上计算每个层级节点对于的结构化指标名称。
比如Stream的上一级是Task,那么本申请实施对于Stream上一级中相同的Task进行归并。如将tp1@spout@Task0@Stream0@Emitted中的Stream0设置为空,或者将tp1@spout@Task0@Stream1@Emitted,得到层级节点Task0的结构化指标名称tp1@spout@Task0@@Emitted。同理得到Task1的结构化指标名称tp1@spout@Task1@@Emitted。然后基于Task层级节点向上一层级,将tp1@spout@Task0@@Emitted中的Task0或者tp1@spout@Task1@@Emitted中的Task1置为空,得到spout的结构化指标名称tp1@spout@@@Emitted。以此类推,直到最上层的结构化指标名称生成。
可以理解,上述示例中,符号@作为分隔符,是为了更方便的对结构化 指标名称进行归并,以生成上一层级的结构化指标名称。在实际应用中,也可以不设置类似@的符号,此时,可以将各层级节点的节点标识及所属层级提供给实时计算系统,使实时计算系统可以根据各层级的节点标识执行子步骤A12。
优选的,在本申请另一优选的实施例中,子步骤A11包括:
A111,基于最底层的结构化指标名称,对每一层级的结构化指标名称,将所述结构化指标名称中,当前层级的分隔符所对应的层级节点设置为空,得到上一层级的结构化指标名称。
在本申请实施例中,为了防止采用各层级节点的节点标识以及指标标识直接组合所得到全名,出现重名和歧义,本申请实施例在任意个层级的节点标识之间添加了分隔符,在最底层的节点标识和指标标识之间也添加了分隔符。如前述的tp1@spout@Task0@Stream0@Emitted中的@,即为添加的分隔符。在生成上一层级的结构化指标名称时,可以只将指标标识置为空,保留分隔符,以更方便的确定各结构化指标名称之间的层级关系。因为,比如由tp1@spout@Task0@Stream0@Emitted生成的上一层的tp1@spout@Task0@@Emitted,从而在后续归并时,只需要判断第3、4分隔符之间为空,就可以确定tp1@spout@Task0@@Emitted名称是统计Task0之下的所有Steam的Emitted的值。
当然,本申请实施例的分隔符还可采用其他的符号,本申请实施例不对其加以限制。
优选的,在本申请另一优选的实施例中,步骤110之前,还包括:
B11,向系统注册对应最底层的层级节点的指标标识。
在实际应用中,调度服务器在将topology分配到各个计算节点执行时,每个计算节点执行的worker可根据需求在本计算节点的系统注册对应最底层的层级节点的指标标识。比如注册Stream层级的各层级节点的指标标识Emitted。然后本申请实施例的计算节点可以在应最底层的层级节点的指标标识被注册后,根据前述结构化指标名称的结构定义,自动生成各层级的层级节点的结构化指标名称,比如对于stream层级的Stream0,在步骤A11生成 如前述tp1@spout@Task0@Stream0@Emitted等,然后进入步骤A12,生成直到生成各层级节点的结构化指标名称。
上述只通知计算节点向系统注册对应最底层的层级节点的指标标识的方式,可以只给计算节点一个简单的通知,不用向计算节点各层级节点的结构化指标数据,减少传输开销。
在本发明实施例中,结构化指标名称的结构定义可以在实时计算系统的调度服务器中配置,然后再由调度服务器传输给各计算节点。技术人员可以根据需要更改调度服务器中配置的结构化指标名称的结构定义,从而更改层级结构,相应更改各层级节点的结构化指标名称。
比如,对于正常的层级,需要加上在指标标识之上加上指标分组group,那么可以定义结构化指标名称的结构为:
topology@component@Task@Stream@group@name。
以Emitted为例,该group如根据不同业务的需求对Emitted的统计进行分组,比如业务A需求发10条消息,结构化指标名称+1,而业务B需求发1条消息,结构化指标名称+1。那么不同的group,相应的结构化指标的值不同。
可以理解,上述结构化指标名称的结构定义可以更新到调度服务器,然后由调度服务器分发到各个计算节点。当然也可以与原有的结构化指标定义一起使用。
当然,本发明实施例还可以根据实际需要更改上述结构化指标名称的结构定义,本申请不对其加以限制。
步骤120,当监控到所述指标所对应的最底层的数据后,在相应最底层的结构化指标名称下进行统计;
在本发明实施例中,以jstorm的实时计算系统为例,在jstorm中创建了一个topology,那么jstorm的被调度系统可将该topology划分成多个worker,每个worker代表一个执行具体任务的进程。上述worker分布在jstorm的计算集群的不同计算节点上,并行地执行,所有实际的数据处理工作最后都在worker中执行完成。因此,对于每个计算节点来说,对topology按层级结构 进行处理,从而本申请实施例,每个计算节点都会获取上述的对应所述指标各层级节点的结构化指标名称,然后在各个结构化指标名称之下对指标进行统计。
在实际应用中,每个worker可运行至少一个spout和/或至少一个bolt。在worker中,将spout或bolt划分给task执行,task以stream的形式处理数据。
那么本申请实施例监控stream中出现的与指标相关的数据,比如对于发送消息量(Emitted),监控到stream层级节点stream0传递一次Tuple(Tuple:一次消息传递的基本单元),则在对应Steam0的结构化指标名称tp1@spout@Task0@Stream0@Emitted值更新为1。
可以理解,本申请实施例中,可以通知系统监控最底层的层级节点的指标,最底层之上的不用监控。
步骤130,基于最底层的结构化指标名称下的统计数据,根据各结构化指标名称之间的层级关系,逐级汇总至上一层级的结构化指标名称下。
假设是第一次记录,最底层之上的各层的结构化指标名称的初始值都为0,那么基于上述记录:tp1@spout@Task0@Stream0@Emitted:1则可以根据tp1@spout@Task0@Stream0@Emitted的结构,则查找到与该结构化名称对应的各层结构化名称为:tp1@spout@Task0@@Emitted,tp1@spout@@@Emitted,tp1@@@@Emitted,那么将该三者的值更新为1。
又假设在步骤120中,监控到stream层级节点stream0传递一次Tuple(Tuple:一次消息传递的基本单元),则在对应Steam1的结构化指标名称tp1@spout@Task0@Stream0@Emitted值更新为2。
此时在步骤130中,则根据层级关系,逐级向上层汇总,其汇总顺序和结果如下:
tp1@spout@Task0@@Emitted:2
tp1@spout@@@Emitted:2
tp1@@@@Emitted:2
又假设在步骤120中,监控到stream层级节点stream3传递一次Tuple (Tuple:一次消息传递的基本单元),则在对应Steam0的结构化指标名称tp1@spout@Task1@Stream3@Emitted值更新为1。
此时在步骤130中,则根据层级关系,逐级向上层汇总,其汇总顺序和结果如下:
tp1@spout@Task1@@Emitted:1
tp1@spout@@@Emitted:3
tp1@@@@Emitted:3
在本申请实施例中,由于实时计算系统各自都以各层级节点的结构化指标名称进行了相应的统计。
而为了得到整个实时计算系统的各层级的整体的统计数据,本申请实施例则会将各个计算节点的结构化指标名称下的记录进行汇总。
比如有两个计算节点1、2,对于计算节点1的记录为:
tp1@spout@Task0@Stream0@Emitted:10
tp1@spout@Task1@Stream3@Emitted:10
tp1@spout@Task0@@Emitted:10
tp1@spout@Task1@@Emitted:10
tp1@spout@@@Emitted:20
tp1@@@@Emitted:20
比如对于计算节点2的记录为:
tp1@spout@Task0@Stream1@Emitted:20
tp1@spout@Task1@Stream3@Emitted:10
tp1@spout@Task0@@Emitted:20
tp1@spout@Task1@@Emitted:10
tp1@spout@@@Emitted:30
tp1@@@@Emitted:30
那么汇总得到整个实时计算系统对于tp1的各层级的Emitted的统计记录为:
tp1@spout@Task0@Stream0@Emitted:10
tp1@spout@Task0@Stream1@Emitted:20
tp1@spout@Task1@Stream3@Emitted:20
tp1@spout@Task0@@Emitted:30
tp1@spout@Task1@@Emitted:20
tp1@spout@@@Emitted:50
tp1@@@@Emitted:50
在实际应用中,实时计算系统对于各结构化指标,统计一分钟内的数据。然后可以不断将每分钟的统计数据输出。比如以日志的形式数据。
优选的,在本申请另一实施例中,在步骤130之后,还包括:
步骤140,将各个结构化指标名称下的统计数据,导出到数据库中进行存储。
在本申请实施例中,由于实时计算系统不具备数据库的功能,其统计结果不方便查询。
并且,由于该结构化指标名称的结构化的方式,适合很多大数据处理工具和框架来处理,如HBase、Hadoop、Hive等,因此,本申请可以将各个结构化指标名称下的统计数据导出到HBase、Hadoop、Hive等数据库中。
优选的,在本申请另一优选的实施例中,步骤140包括:
子步骤C11,将各个结构化指标名称下的统计数据,导出到数据库中,以结构化指标名称和时间戳为关键字并以统计数据为关键值进行存储。
在实际应用中,实时计算系统对于各结构化指标,其是统计一个时间周期内的数据,比如1分钟,到达时间周期后,后该结构化指标名称下的记录将会被刷新,重新记录。因此,实际上对于每个结构化指标名称,在上述时间周期结束时,其会有一个时间戳,本申请实施例则在时间周期结束时,将结构化指标名称及其统计数据,以结构化指标名称和时间戳为关键字key,以统计数据为关键值value,存入到数据库中,比如HBase数据库中。那么可以通过时间戳,很方便的查出一段时间内的各层级的指标值。该时间戳为每个时间周期结束时的系统时间。
为了进一步说明本申请实施例的优点。以一个jstorm的topology为例, topology的层级标识为tp1;tp1有一个component,层级标识为spout;该component下面有5个task,每个task都有一个id与之对应,相应的层级标识分别为Task0~Task4;同时,每个task下都有2个stream,相应的层级标识分别为Stream0,Stream1。那么其层次关系为:
Stream[0~1]→Task[0~4]→spout→tp1
传统技术中如果要统计spout的消息量,则需要定义一个指标,名为SpoutEmitted,并在每次发送消息的时候,更新这个值;如果需要统计task0的消息量,则需要定义名为Task0Emitted,同样地更新这个值;如果需要统计task0中stream0的消息量,则需要定义名为Stream0Emitted,其他情况,依次类推。但是,SpoutEmitted实际上跟Task0Emitted~Task4Emitted是有层次关系的,相当于SpoutEmitted=Task0Emitted+Task1Emitted+Task2Emitted+Task3Emitted+Task4Emitted;类似地,Task0Emitted=Stream0Emitted+Stream1Emitted。而传统指标统计方法并没有体现上述层次关系以及计算逻辑,如果需要实现这种分层的逻辑,需要做许多额外的复杂逻辑判断和计算。同时,传统的方法还需要小心地选择指标名称,以避免重复而导致数据不准确。
而本申请实施例,于实时计算系统,由于其处理数据时具备层级结构,而为了实时计算系统能够快捷的对所有层级的指标进行统计,对于一个指标的各个层级的层级节点,本申请实施例为各个层级节点创建了结构化指标名称,通过结构化指标名称本身确定各层级节点之间的层级关系,从而确定了汇总关系。从而只需要统计最底层的结构化指标名称的数据,即可按照结构化指标名称之间的层级关系逐级进行汇总,得到对应该指标的各个层级的数据。从而本申请实施例可以通过结构化指标名称的层级关系,简单的对各个层级的指标进行统计,逻辑简单,能够降低系统消耗,并且由于是按照结构化指标名称构建的层级关系,可以很方便的添加或者删除某个或者某几个层级,方便扩展。
实施例二
参照图2,示出了本申请的优选的一种指标统计方法实施例的步骤流程 图,具体可以包括如下步骤:
步骤210,各计算节点向本计算节点的系统对应最底层的层级节点的指标标识。
在本申请实施例中,实时计算系统可以采用分布式计算系统,该分布式计算系统包括调度服务器、各计算节点。
其中,可以将结构化指标名称的结构定义可以在实时计算系统的调度服务器中配置,然后再由调度服务器配置给各计算节点,以使各个计算节点可以按照上述定义对最底层的结构化指标名称进行处理。
在本申请实施例中,以Jstorm为例,调度服务器在将topology分配到各个计算节点执行时,每个计算节点执行的worker可根据需求在本计算节点的系统注册对应最底层的层级节点的指标标识。
而对于一个topology的指标,实际上可以分为两部分:1.Jstorm计算框架内部已经定义好的系统指标;2.用户自定义的业务相关指标。
那么如果用户选择了系统指标,则可以在worker初始化时在计算节点的系统中进行注册。如果用户选择了用户自定义的业务指标,则可以在worker将用户代码初始化时在计算节点的系统中进行注册。
在每个计算节点上注册指标,以jstorm为例,对于一个stream,调用jstorm提供的worker内一个全局静态方法:registerStreamMetrics(metric相关参数),然后即可在系统内部根据metric相关参数,注册该stream的指标标识。然后即可进入步骤220,逐层生成各层的结构化指标名称。
步骤220,各计算节点对于一拓扑作业的指标,采用分隔符将最顶层到最底层的层级节点的节点标识和所述指标的指标标识,按序拼接为最底层的结构化指标名称;
各计算节点在注册了最底层的指标标识后,计算节点即可根据结构化的指标名称,和在系统中记录的各层级节点的上下层级关系,生成最底层的结构化指标名称。
步骤230,各计算节点基于最底层的结构化指标名称,对每一层级的结构化指标名称,将所述结构化指标名称中的当前层级的层级节点设置为空, 得到上一层级的结构化指标名称。
步骤240,各计算节点当监控到所述指标所对应的最底层的数据后,在相应最底层的结构化指标名称下进行统计;
步骤250,各计算节点基于最底层的结构化指标名称下的统计数据,根据各结构化指标名称之间的层级关系,逐级汇总至上一层级的结构化指标名称下。
各计算节点按时间周期统计各结构化指标名称下的数据,比如以1分钟为周期,在时间周期结束时,将周期的各结构化指标名称的统计数据发送给调度服务器。
步骤260,调度服务器从各计算节点获取各结构化指标名称的统计数据,并进行汇总。
调度服务器获取到各计算节点获取各结构化指标名称的统计数据,然后可以进行汇总。
步骤270,调度服务器将汇总后的各个结构化指标名称下的统计数据,导出到数据库中,以结构化指标名称和时间戳为关键字并以统计数据为关键值进行存储。
在实际应用中,各个计算节点的各层级的指标统计数据,可以汇总到集群的调度服务器上。而由于实际应用中,各计算节点每隔1个时间周期,比如1分钟,将指标统计数据汇总到调度服务器,而由于调度服务器并不充当存储服务器,数据会不断被新的指标统计数据覆盖,因此只能看到最近一个时间周期的汇总的指标统计数据。
那么,为了能够看到更长时间甚至所有历史的指标统计数据,本申请实施例的调度服务器将汇总的指标统计数据存储到外部的数据库中。如对于汇总后的各个结构化指标名称下的统计数据,以结构化指标名称+时间戳为key,统计数据为value,存储到数据库中。
而本申请实施例,具备以下优点:
1、本申请由于是从最顶层到最底层的层级节点路径,将该层级节点路径中的各层级节点的层级标识,以及指标标识,结合分隔符组合为了结构化 指标名称的层级关系,简单的对各个层级的指标进行统计,逻辑简单,能够降低系统消耗。
2、由于上述的结构化指标名称的结构化形式,由于实际上每个topology的标识不同,各层级节点的层级节点也不尽相同,因此用户在定义指标名称时,不需要小心选择指标名称,降低出错几率。
3、本申请由于是按照结构化指标名称构建的层级关系,可以很方便的添加或者删除某个或者某几个层级,方便扩展。
4、本申请只需向计算机节点的系统注册对应最底层的层级节点的指标标识,即可自动生成对应各层级的各层级节点的结构化指标名称,传输开销小,操作简单。
需要说明的是,对于方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请实施例并不受所描述的动作顺序的限制,因为依据本申请实施例,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作并不一定是本申请实施例所必须的。
实施例三
参照图3,示出了本申请的一种指标统计装置实施例的结构框图,具体可以包括如下模块:
结构化标识创建模块310,用于对于一拓扑作业的一指标,针对对应所述指标各层级节点创建结构化指标名称;其中,通过结构化指标名称确定各层级节点之间的层级关系;
底层指标监控模块320,用于当监控到所述指标所对应的最底层的数据后,在相应最底层的结构化指标名称下进行统计;
逐层汇总模块330,用于基于最底层的结构化指标名称下的统计数据,根据各结构化指标名称之间的层级关系,逐级汇总至上一层级的结构化指标名称下。
在本申请另一优选的实施例中,所述结构化标识创建模块310包括:
底层指标创建子模块,用于对于一拓扑作业的一指标,将最顶层层级节 点到最底层层级节点的节点标识和所述指标的指标标识,按序组合为最底层的结构化指标名称;
上层指标创建子模块,用于基于最底层的结构化指标名称,对每一层级的结构化指标名称,将所述结构化指标名称中的当前层级的层级节点设置为空,得到上一层级的结构化指标名称。
在本申请另一优选的实施例中,所述底层指标创建子模块包括:
底层指标分隔创建子模块,用于对于一拓扑作业的指标,采用分隔符将最顶层到最底层的层级节点的节点标识和所述指标的指标标识,按序拼接为最底层的结构化指标名称。
在本申请另一优选的实施例中,所述上层指标创建子模块包括:
上层指标分隔创建子模块,用于基于最底层的结构化指标名称,对每一层级的结构化指标名称,将所述结构化指标名称中,当前层级的分隔符所对应的层级节点设置为空,得到上一层级的结构化指标名称。
在本申请另一优选的实施例中,所述结构化标识创建模块310之前,还包括:
注册模块,用于向系统注册对应最底层的层级节点的指标标识。
在本申请另一优选的实施例中,在逐层汇总模块330之后,还包括:
数据存储模块,用于将各个结构化指标名称下的统计数据,导出到数据库中进行存储。
在本申请另一优选的实施例中,所述数据存储模块,包括:
数据存储子模块,用于将各个结构化指标名称下的统计数据,导出到数据库中,以结构化指标名称和时间戳为关键字并以统计数据为关键值进行存储。
而本申请实施例,于实时计算系统,由于其处理数据时具备层级结构,而为了实时计算系统能够快捷的对所有层级的指标进行统计,对于一个指标的各个层级的层级节点,本申请实施例为各个层级节点创建了结构化指标名称,通过结构化指标名称本身确定各层级节点之间的层级关系,从而确定了汇总关系。从而只需要统计最底层的结构化指标名称的数据,即可按照结构 化指标名称之间的层级关系逐级进行汇总,得到对应该指标的各个层级的数据。从而本申请实施例可以通过结构化指标名称的层级关系,简单的对各个层级的指标进行统计,逻辑简单,能够降低系统消耗,并且由于是按照结构化指标名称构建的层级关系,可以很方便的添加或者删除某个或者某几个层级,方便扩展。
实施例四
参照图4,示出了本申请的一种指标统计系统实施例的结构框图,具体可以包括:
调度服务器410,各计算节点420,数据库430。
图4中示例性的展示了各计算机节点420,实际应用中计算机节点可能根据集群需要进行设置。每个计算机节点包括注册模块421、底层指标分隔创建模块422、上层指标分隔创建模块423、底层指标监控模块424、逐层汇总模块425。调度服务器包括汇总模块411和数据存储子模块412。当然各计算机节点还可包括其他需求的模块,本申请实施例不对其加以限制。
上述调度服务器410包括:
汇总模块411,用于从各计算节点获取各结构化指标名称的统计数据,并进行汇总
数据存储子模块412,用于将各个结构化指标名称下的统计数据,导出到数据库430中,在数据库430中以结构化指标名称和时间戳为关键字并以统计数据为关键值进行存储。
每个计算节点420包括:
注册模块421,用于向本计算节点的系统注册对应最底层的层级节点的指标标识。
底层指标分隔创建模块422,用于对于一拓扑作业的指标,采用分隔符将最顶层到最底层的层级节点的节点标识和所述指标的指标标识,按序拼接为最底层的结构化指标名称。
上层指标分隔创建模块423,用于基于最底层的结构化指标名称,对每 一层级的结构化指标名称,将所述结构化指标名称中,当前层级的分隔符所对应的层级节点设置为空,得到上一层级的结构化指标名称。
底层指标监控模块424,用于当监控到所述指标所对应的最底层的数据后,在相应最底层的结构化指标名称下进行统计;
逐层汇总模块425,用于基于最底层的结构化指标名称下的统计数据,根据各结构化指标名称之间的层级关系,逐级汇总至上一层级的结构化指标名称下。
本申请实施例,具备以下优点:
1、本申请由于是从最顶层到最底层的层级节点路径,将该层级节点路径中的各层级节点的层级标识,以及指标标识,结合分隔符组合为了结构化指标名称的层级关系,简单的对各个层级的指标进行统计,逻辑简单,能够降低系统消耗。
2、由于上述的结构化指标名称的结构化形式,由于实际上每个topology的标识不同,各层级节点的层级节点也不尽相同,因此用户在定义指标名称时,不需要小心选择指标名称,降低出错几率。
3、本申请由于是按照结构化指标名称构建的层级关系,可以很方便的添加或者删除某个或者某几个层级,方便扩展。
4、本申请只需向计算机节点的系统注册对应最底层的层级节点的指标标识,即可自动生成对应各层级的各层级节点的结构化指标名称,传输开销小,操作简单。
对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
本领域内的技术人员应明白,本申请实施例的实施例可提供为方法、装置、或计算机程序产品。因此,本申请实施例可采用完全硬件实施例、完全 软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD@ROM、光学存储器等)上实施的计算机程序产品的形式。
在一个典型的配置中,所述计算机设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD@ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括非持续性的电脑可读媒体(transitory media),如调制的数据信号和载波。
本申请实施例是参照根据本申请实施例的方法、终端设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理终端设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理终端设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理 终端设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理终端设备上,使得在计算机或其他可编程终端设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程终端设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本申请实施例的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请实施例范围的所有变更和修改。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者终端设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者终端设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者终端设备中还存在另外的相同要素。
以上对本申请所提供的一种指标统计方法、一种指标统计装置和一种指标统计系统,进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均可有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。