一种项目运行指标度量方法及装置与流程

文档序号:11386187阅读:304来源:国知局
一种项目运行指标度量方法及装置与流程

本发明涉及软件技术领域,尤其涉及一种项目运行指标度量方法及装置。



背景技术:

当利用c++开发一些服务或者组件时,要监控或统计一些运行计算指标现有的技术是通过写日志的方式,异步的计算分析日志来计算统计或监控指标,通过写日志离线计算统计指标的方式存在不能达到实时、日志传输对网络带宽的影响的问题,而且开发维护成本高。

现有的技术通过落地日志的方式离线计算各种统计监控指标,存在日志传输中网络资源消耗、实际项目中耦合太强、维护开发成本高的技术问题。



技术实现要素:

本发明实施例提供一种项目运行指标度量方法及装置,以降低开发成本,提升开发效率。

一方面,本发明实施例提供了一种项目运行指标度量方法,所述方法包括:

当需要对某一软件项目的运行进行统计监控时,获取所述软件项目的统计监控类型;

根据所述软件项目的统计监控类型,确定所述统计监控类型对应的度量方式;

调用所述统计监控类型对应的度量方式,对所述项目的运行进行度量,获取度量结果。

另一方面,本发明实施例提供了一种项目运行指标度量装置,所述装置包括:

类型获取单元,用于当需要对某一软件项目的运行进行统计监控时,获取所述软件项目的统计监控类型;

度量方式管理单元,用于根据所述软件项目的统计监控类型,确定所述统计监控类型对应的度量方式;

度量调用单元,用于调用所述统计监控类型对应的度量方式,对所述项目的运行进行度量,获取度量结果。

上述技术方案具有如下有益效果:将统计监控需要的度量指标高度的抽象化,使得服务模块化;降低了项目真正的业务与监控统计间的耦合性;较传统的做法可以免去传输统计日志带来的网络开销;减少很多编码的工作量,提升开发效率,降低了开发维护成本。

附图说明

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

图1为本发明实施例一种项目运行指标度量方法流程图;

图2为本发明实施例一种项目运行指标度量装置结构示意图;

图3为本发明实施例度量方式管理单元结构示意图;

图4为本发明应用实例项目运行指标度量方案示意图。

具体实施方式

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

如图1所示,为本发明实施例一种项目运行指标度量方法流程图,所述方法包括:

101、当需要对某一软件项目的运行进行统计监控时,获取所述软件项目的统计监控类型;

102、根据所述软件项目的统计监控类型,确定所述统计监控类型对应的度量方式;

103、调用所述统计监控类型对应的度量方式,对所述项目的运行进行度量,获取度量结果。

优选地,所述软件项目的统计监控类型包括:统计瞬时状态值,统计软件项目的运行次数,度量某个时间段的平均处理次数,统计数据的分布情况,统计代码段某时间段内执行次数、或代码段单位时间内执行平均次数、或代码段单次执行时间的分布情况。

优选地,所述根据所述软件项目的统计监控类型,确定所述统计监控类型对应的度量方式包括:

若所述软件项目的统计监控类型为统计瞬时状态值,则确定的所述统计监控类型对应的度量方式为返回指标绝对数值gauges;

若所述软件项目的统计监控类型为统计软件项目的运行次数,则确定的所述统计监控类型对应的度量方式为累加计数器counter;

若所述软件项目的统计监控类型为度量某个时间段的平均处理次数,则确定的所述统计监控类型对应的度量方式为统计速率相关的指标meters;

若所述软件项目的统计监控类型为统计数据的分布情况,则确定的所述统计监控类型对应的度量方式为直方图分布相关的指标histograms;

若所述软件项目的统计监控类型为统计代码段某时间段内执行次数、或代码段单位时间内执行平均次数、或代码段单次执行时间的分布情况,则确定的所述统计监控类型对应的度量方式为速率和直方图综合的相关指标timer。

优选地,所述方法还包括:获取度量结果后,将度量结果数据格式化成javascript对象标记语言json进行输出。

优选地,所述将度量结果数据格式化成javascript对象标记语言json进行输出,具体包括:基于超文本传输协议http,或者基于分布式的高速缓存系统memcache网络协议将度量结果数据格式化成javascript对象标记语言json进行输出。

对应于上述方法实施例,如图2所示,为本发明实施例一种项目运行指标度量装置结构示意图,所述装置包括:

类型获取单元21,用于当需要对某一软件项目的运行进行统计监控时,获取所述软件项目的统计监控类型;

度量方式管理单元22,用于根据所述软件项目的统计监控类型,确定所述统计监控类型对应的度量方式;

度量调用单元23,用于调用所述统计监控类型对应的度量方式,对所述项目的运行进行度量,获取度量结果。

优选地,所述软件项目的统计监控类型包括:统计瞬时状态值,统计软件项目的运行次数,度量某个时间段的平均处理次数,统计数据的分布情况,统计代码段某时间段内执行次数、或代码段单位时间内执行平均次数、或代码段单次执行时间的分布情况。

如图3所示,为本发明实施例度量方式管理单元结构示意图,优选地,所述度量方式管理单元22包括:

第一确定模块221,用于若所述软件项目的统计监控类型为统计瞬时状态值,则确定的所述统计监控类型对应的度量方式为返回指标绝对数值gauges;

第二确定模块222,用于若所述软件项目的统计监控类型为统计软件项目的运行次数,则确定的所述统计监控类型对应的度量方式为累加计数器counter;

第三确定模块223,用于若所述软件项目的统计监控类型为度量某个时间段的平均处理次数,则确定的所述统计监控类型对应的度量方式为统计速率相关的指标meters;

第四确定模块224,用于若所述软件项目的统计监控类型为统计数据的分布情况,则确定的所述统计监控类型对应的度量方式为直方图分布相关的指标histograms;

第五确定模块225,用于若所述软件项目的统计监控类型为统计代码段某时间段内执行次数、或代码段单位时间内执行平均次数、或代码段单次执行时间的分布情况,则确定的所述统计监控类型对应的度量方式为速率和直方图综合的相关指标timer。

优选地,所述装置还包括:格式化单元24,用于获取度量结果后,将度量结果数据格式化成javascript对象标记语言json进行输出。

优选地,所述格式化单元24,进一步用于获取度量结果后,基于超文本传输协议http,或者基于分布式的高速缓存系统memcache网络协议将度量结果数据格式化成javascript对象标记语言json进行输出。

上述技术方案具有如下有益效果:将统计监控需要的度量指标高度的抽象化,使得服务模块化;降低了项目真正的业务与监控统计间的耦合性;较传统的做法可以免去传输统计日志带来的网络开销;减少很多编码的工作量,提升开发效率,降低了开发维护成本。

以下通过应用实例对本发明实施例上述技术方案进行详细说明:

本发明应用实例技术方案解决上述一系列问题通过用c++实现的度量方式,将通常监控统计的指标抽象为五类度量方式来满足大部分统计度量需求,使用时仅仅需要在代码中调用即可,而且是非阻塞的,基本上度量方式本身不会影响业务程序的性能的。这五类度量方式分别是:gauges(返回指标绝对数值)、counter(累加计数器)、meters(统计速率相关的指标)、histograms(直方图分布相关的指标)、timer(速率和直方图综合的相关指标)。该方案在使用上大大降低了开发成本,在使用度量方式时仅仅需要创建对应类型的度量方式并设置其当前状态值即可,对于最终输出通过配置即可完成,可以将结果输出到标准输出也可以通过http或者memcache网络协议来获取最终的度量结果,大大的提升了开发效率。

如图4所示,为本发明应用实例项目运行指标度量方案示意图,由管理各个类型的度量方式的metrics(度量)对象、具体实现各个度量方式的各个对象、定时合并计算度量指标的mergedata、输出数据格式化处理模块、processdata组成。

metrics度量方式管理模块是在一个进程中仅有一个对象的单例类,用来管理各个度量方式计算设置的常驻内存的数据已经各个指标对象指针,如图一所示,开发者使用度量方式时仅仅通过这个单例对象中的接口就可以自动创建需要的度量对象。由于在多线程环境中如果做数值计算需要加锁来完成,那么为了提升效率将这些需要计算的操作都抽象到一个数据处理队列中,由专门的负责数值计算的单线程来做数值计算,这样可以避免数值计算中加锁操作。该模块除了会保存度量对象外还会保存度量的计算结果和度量方式计算的中间数据。换句话说就是该模块负责度量方式库的数据对象管理,负责数值处理计算、对象创建、数据暂存等工作。

gauges度量类型是最简单的计量,一般用来统计瞬时状态值,比如当前系统的运行状态等,该模块实现是通过注册回调函数的方式实现,当需要该类型的度量时,仅需获取一个gauges对象并注册回调函数、和设置度量时间间隔即可,metrics对象会保存刚刚创建的gauges对象在一个hashmap中,并且会将通过运行回调得到的值存储到hashmap中。多个gauges计量指标通过计量名称和计量模块来区别,上述的hashmap的key正是计量名称和计量模块组成的。

counter是维护一个计数器,可以通过add和dec方法分别加减计数器,当调用add和dec方法时会将该数值计算抽象成一个结构体push到metrics对象的队列中,供metrics下一步计算数值线程计算,最终将计算结果存储到metrics对象中的counter专有的hashmap中,存储结构和gauges类似。

meters用来度量某个时间段的平均处理次数,一分钟、五分钟、十五分内的平均处理次数,有点类似于系统中cpu负载统计。比如一个service的请求数,通过metrics::getmeters()方法获取该度量类型的对象,调用该对象中mark方法来统计软件项目的运行次数,度量方式内部会计算上述的平均处理次数。meters内部其实是利用上面的counter度量方式实现的数值计算,只是在创建meters对象时同时会创建1、5、15分钟3个定时器,用来将该度量数据合并操作,每一分钟的合并后的数据会存储到一个中间hashmap中,5、15分钟定时器合并操作是基于1分钟合并后的数据做合并操作,最终将1、5、15合并后计算的平均值存储到一个meters专有的hashmap中,key规则和counter、gauges一样都是度量名称和度量模块的组合。例如度量一个server的请求次数最终在输出是得到的结果如下:

histograms主要使用来统计数据的分布情况,最大值、最小值、平均值、中位数,百分比(75%、90%、95%、98%、99%和99.9%),通过metrics::gethistograms()方法获取histograms对象,在计量直方图分布是仅仅需要将当前的值调用该对象的update(val)设置进来即可,度量内部会将该值存储到一个数组中用来计算多个值的分布情况。在创建对象的同时会创建一个以某个时间间隔的定时器,这个时间取决于开发者设定的统计时间间隔,该定时器会从数组中取出数据计算出上述的分布情况,最终将计算好的结果存储到histograms专有的hashmap中,hashmap的存储方式和meters类似,该度量方式的应用场景一般是统一一个实体在一定范围内的分布情况,例如统计一个server处理一个事务需要消耗的时间,最终统计结果输出如下:

timers主要是用来统计代码段某时间段内的执行次数(或代码段单位时间内执行平均次数)和单次执行时间的分布情况,具体实现是结合meters和histograms来实现的,通过metrics::gettimers()获取度量对象,当开始执行时调用该对象中的start方法,当代码段执行完成后调用stop方法即可完成统计。最终输出的结果如下:

最后说明一下度量出来的结果输出的方式,目前默认从metrics中获取度量的数据,将数据格式化成javascript对象标记语言json来输出的,输出的协议是http或memcache网络协议,开发者可以通过绑定回调函数来自己定义输出的格式和方式。

与现有技术相比,本申请有如下技术优点:将统计监控需要的度量指标高度的抽象化,使得服务模块化;降低了项目真正的业务与监控统计间的耦合性;较传统的做法可以免去传输统计日志带来的网络开销;减少很多编码的工作量,提升开发效率,降低了开发维护成本。

应该明白,公开的过程中的步骤的特定顺序或层次是示例性方法的实例。基于设计偏好,应该理解,过程中的步骤的特定顺序或层次可以在不脱离本公开的保护范围的情况下得到重新安排。所附的方法权利要求以示例性的顺序给出了各种步骤的要素,并且不是要限于所述的特定顺序或层次。

在上述的详细描述中,各种特征一起组合在单个的实施方案中,以简化本公开。不应该将这种公开方法解释为反映了这样的意图,即,所要求保护的主题的实施方案需要比清楚地在每个权利要求中所陈述的特征更多的特征。相反,如所附的权利要求书所反映的那样,本发明处于比所公开的单个实施方案的全部特征少的状态。因此,所附的权利要求书特此清楚地被并入详细描述中,其中每项权利要求独自作为本发明单独的优选实施方案。

为使本领域内的任何技术人员能够实现或者使用本发明,上面对所公开实施例进行了描述。对于本领域技术人员来说;这些实施例的各种修改方式都是显而易见的,并且本文定义的一般原理也可以在不脱离本公开的精神和保护范围的基础上适用于其它实施例。因此,本公开并不限于本文给出的实施例,而是与本申请公开的原理和新颖性特征的最广范围相一致。

上文的描述包括一个或多个实施例的举例。当然,为了描述上述实施例而描述部件或方法的所有可能的结合是不可能的,但是本领域普通技术人员应该认识到,各个实施例可以做进一步的组合和排列。因此,本文中描述的实施例旨在涵盖落入所附权利要求书的保护范围内的所有这样的改变、修改和变型。此外,就说明书或权利要求书中使用的术语“包含”,该词的涵盖方式类似于术语“包括”,就如同“包括,”在权利要求中用作衔接词所解释的那样。此外,使用在权利要求书的说明书中的任何一个术语“或者”是要表示“非排它性的或者”。

本领域技术人员还可以了解到本发明实施例列出的各种说明性逻辑块(illustrativelogicalblock),单元,和步骤可以通过电子硬件、电脑软件,或两者的结合进行实现。为清楚展示硬件和软件的可替换性(interchangeability),上述的各种说明性部件(illustrativecomponents),单元和步骤已经通用地描述了它们的功能。这样的功能是通过硬件还是软件来实现取决于特定的应用和整个系统的设计要求。本领域技术人员可以对于每种特定的应用,可以使用各种方法实现所述的功能,但这种实现不应被理解为超出本发明实施例保护的范围。

本发明实施例中所描述的各种说明性的逻辑块,或单元都可以通过通用处理器,数字信号处理器,专用集成电路(asic),现场可编程门阵列或其它可编程逻辑装置,离散门或晶体管逻辑,离散硬件部件,或上述任何组合的设计来实现或操作所描述的功能。通用处理器可以为微处理器,可选地,该通用处理器也可以为任何传统的处理器、控制器、微控制器或状态机。处理器也可以通过计算装置的组合来实现,例如数字信号处理器和微处理器,多个微处理器,一个或多个微处理器联合一个数字信号处理器核,或任何其它类似的配置来实现。

本发明实施例中所描述的方法或算法的步骤可以直接嵌入硬件、处理器执行的软件模块、或者这两者的结合。软件模块可以存储于ram存储器、闪存、rom存储器、eprom存储器、eeprom存储器、寄存器、硬盘、可移动磁盘、cd-rom或本领域中其它任意形式的存储媒介中。示例性地,存储媒介可以与处理器连接,以使得处理器可以从存储媒介中读取信息,并可以向存储媒介存写信息。可选地,存储媒介还可以集成到处理器中。处理器和存储媒介可以设置于asic中,asic可以设置于用户终端中。可选地,处理器和存储媒介也可以设置于用户终端中的不同的部件中。

在一个或多个示例性的设计中,本发明实施例所描述的上述功能可以在硬件、软件、固件或这三者的任意组合来实现。如果在软件中实现,这些功能可以存储与电脑可读的媒介上,或以一个或多个指令或代码形式传输于电脑可读的媒介上。电脑可读媒介包括电脑存储媒介和便于使得让电脑程序从一个地方转移到其它地方的通信媒介。存储媒介可以是任何通用或特殊电脑可以接入访问的可用媒体。例如,这样的电脑可读媒体可以包括但不限于ram、rom、eeprom、cd-rom或其它光盘存储、磁盘存储或其它磁性存储装置,或其它任何可以用于承载或存储以指令或数据结构和其它可被通用或特殊电脑、或通用或特殊处理器读取形式的程序代码的媒介。此外,任何连接都可以被适当地定义为电脑可读媒介,例如,如果软件是从一个网站站点、服务器或其它远程资源通过一个同轴电缆、光纤电缆、双绞线、数字用户线(dsl)或以例如红外、无线和微波等无线方式传输的也被包含在所定义的电脑可读媒介中。所述的碟片(disk)和磁盘(disc)包括压缩磁盘、镭射盘、光盘、dvd、软盘和蓝光光盘,磁盘通常以磁性复制数据,而碟片通常以激光进行光学复制数据。上述的组合也可以包含在电脑可读媒介中。

以上所述的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

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