首页> 中国专利> 从仪器化软件接收的数据流的实时处理

从仪器化软件接收的数据流的实时处理

摘要

分析系统接收由在外部系统上执行的仪器化软件的实例生成的数据流。分析系统在多个时间间隔中使用数据流的数据值评估表达式。例如,分析系统可聚合每个时间间隔的数据流的数据值。分析系统基于时间间隔中数据值何时到达确定是否在时间间隔中考虑数据流。分析系统确定正被处理的每个数据流的最大期望延迟值。分析系统使用在最大期望延迟值之前到达的数据值评估表达式。分析系统还确定数据流的故障阈值。如果数据流的数据值未能在故障阈值之前到达,则分析系统将该数据流标记为死的。

著录项

  • 公开/公告号CN112860518A

    专利类型发明专利

  • 公开/公告日2021-05-28

    原文格式PDF

  • 申请/专利权人 斯普兰克公司;

    申请/专利号CN202110184989.6

  • 发明设计人 P·刘;A·穆科赫基;R·拉曼;

    申请日2016-01-26

  • 分类号G06F11/30(20060101);G06F11/32(20060101);G06F11/36(20060101);G06F16/2455(20190101);

  • 代理机构11256 北京市金杜律师事务所;

  • 代理人王茂华

  • 地址 美国加利福尼亚州

  • 入库时间 2023-06-19 11:08:20

说明书

本申请是国际申请号为PCT/US2016/014957、申请日为2016年01月26日、申请号为201680016597.6、发明名称为“从仪器化软件接收的数据流的实时处理”的发明专利申请的分案申请。

本申请要求于2015年1月29日提交的第62/109,308号美国临时专利申请的优先权,该临时专利申请的全部内容通过引用并入本文。

技术领域

本公开一般涉及仪器化软件的分析,更具体地涉及从仪器化软件接收的数据流的实时处理。

背景技术

软件开发者通过对代码仪器化来监测他们开发的软件的不同方面。这些方面包括软件的性能、软件执行期间所遇到的错误、软件执行期间所遇到的重大事件、代码的正被执行的部分以及未被执行的部分等。用于对代码仪器化的传统技术包括代码中的用于记录信息以记录文件或在屏幕上打印信息的语句。这种类型的仪器化适于简单应用,例如具有在单个机器上执行的简单流的应用。然而,这些用于对软件仪器化的技术对于具有复杂的执行流的复杂应用(例如,分布在多个系统上的应用,其中每个系统执行多个执行进程或线程)是不够的。

处理由分布式系统的仪器化软件所生成的数据要求同化用于分析的数据。由于不同系统在相同时间发送的数据值可能遇到不同的网络延迟并且因此甚至花费不同量的时间以到达同化数据的系统的事实,同化和处理由在分布式系统上执行的仪器化软件发送的数据是复杂的。而且,执行仪器化软件的一个或多个系统可能发生故障。因此,同化数据的系统需要确定数据值是否因网络延迟而迟到或因数据源的故障而不能到达。做出这些确定导致处理数据值的延迟和/或所呈现的结果的不准确性。由此,用于基于软件的仪器化生成报告的传统系统对于分析运行仪器化软件的高度分布式系统常常是不够的。

发明内容

所描述的实施例处理由仪器化软件生成的数据。软件开发者常常将用于仪器化代码的代码片断包括在正被开发的软件中。分析系统接收由在外部系统上执行的仪器化软件所生成的数据流。分析系统对所接受的数据流执行分析。分析系统在多个时间间隔中使用数据流的数据值评估表达式。例如,分析系统可以对每个时间间隔的数据流的数据值进行聚合,并发送结果以用于经由实时更新的图表进行呈现。

分析系统基于时间间隔期间数据值到达的时间来确定数据流是否被考虑以用于时间间隔中的表达式的评估。分析系统将在时间间隔期间数据值到达较晚的数据流排除在外。分析系统确定针对正被处理的每个数据流的最大期望延迟值。分析系统将在时间间隔期间未能在最大期望延迟值之前到达的数据值排除在外。因此,分析系统评估针对该时间间隔的表达式,而不考虑这些数据流。分析系统发送针对每个时间间隔的表达式的评估结果以用于呈现。

在一些实施例中,分析系统基于数据流过去的数据值的延迟来确定最大期望延迟值。例如,分析系统可以基于数据流的大量数据值的移动平均来确定数据流的最大期望延迟值。分析系统周期性(例如,每时间间隔)地更新最大期望延迟值。

在一些实施例中,分析系统进一步确定针对数据流的故障阈值。如果数据流的数据值不能在数据流的故障阈值之前到达,则分析系统将该数据流标记为死的(dead)。因此,对于后续时间间隔中的表达式评估,分析系统不考虑该数据流。当数据流的下一数据值被接收到时,分析系统将数据流标记为活的(alive)。一旦数据流被标记为活的,则对于表达式的评估,分析系统开始考虑该数据流。

说明书中描述的特征和优点并非全部是包括性的,并且具体地,基于附图、说明书和权利要求书,很多附加的特征和优点对于本领域普通技术人员将是显而易见的。而且,应该注意,说明书中使用的语言主要是为了可读性和教示目的而被选择,并且不是被选择来描绘所公开主题的边界或限制所公开的主题。

附图说明

所公开的实施例具有从详细描述、所附的权利要求和附图(或图示)更显而易见的其它优点和特征。以下是对附图的简要介绍。

图1示出了根据实施例的用于基于从仪器化软件所接收的数据流生成实时报告的整体系统环境;

图2示出了根据实施例的用于基于从仪器化软件所接收的数据流生成实时报告的系统的架构;

图3示出了根据实施例的显示基于仪器化分析系统所接收的数据流的数据的实时更新的图表的用户界面的截屏;

图4示出了根据实施例的显示实时更新的并示出确定由数据中心分组的数据流的总和的表达式的图表的用户界面的截屏;

图5示出了根据实施例的数据值的到达延迟对仪器化分析系统处理数据流的影响;

图6示出了根据实施例的仪器化分析系统处理数据流的整体过程;

图7示出了根据实施例的基于仪器化分析系统所接收的数据流的数据值确定表达式的值的整体过程;以及

图8示出了根据实施例的标识发送数据流的数据源的故障的过程。

现在将详细参考其示例附图中所示出的若干实施例。注意,只要可行,附图中可以使用类似或相似的附图标号,并且类似或相似的附图标号可以指示类似或相似的功能。附图仅出于说明的目的描绘了所公开的系统(或方法)的实施例。本领域技术人员将从下面的描述中容易地认识到,在不背离本文中所描述的原理的情况下可以采用本文中所阐述的结构和方法的备选实施例。

具体实施方式

整体系统环境

图1示出了根据实施例的用于基于从仪器化软件所接收的数据流生成实时报告的整体系统环境。整体系统环境包括仪器化分析系统100、一个或多个开发系统120、管理系统160以及报告系统150。在其它实施例中,可以使用与图1中指示的部件相比更多或更少的部件。例如,开发系统120、管理系统160和报告系统150可以经由网络(图1中未示出)与仪器化分析系统100交互。此外,可以存在图1所示的每个系统的更多更少的实例,例如,可以存在多个报告系统150。

图1和其它附图使用相似的参考标号来标识相似的元件。如“130a”的参考标号之后的字母指示文本特别指具有该具体参考标号的元素。文本中没有后面字母的参考标号如“130”指代图中承载该参考标号的任一或所有元素(例如,“130”在文本中指代图中的参考标号“130a”和/或“130b”)。

仪器化分析系统100接收包括由外部系统(例如开发系统120)所发送的度量的值的数据(仪器化分析系统100在本文中也可被称为分析系统或数据分析系统)。开发系统120执行已经被仪器化的软件,例如应用130。尽管在图1中应用130被示为仪器化软件的示例,但是本文中所公开的技术不限于应用软件,而是可适用于其它类型的软件,例如服务器软件、在客户端设备上执行的软件、网站等。

在开发系统120上执行的软件被配置为将作为对软件仪器化的结果所生成的信息发送给仪器化分析系统100。例如,应用130可以周期性地向仪器化分析系统100发送数据。不同的应用130可以以不同的速率发送相同的度量或不同的度量。相同的应用可以以不同的速率发送不同的度量。应用130通过调用由仪器化分析系统100支持的应用编程接口(API)将数据发送给仪器化分析系统100。

应用130(或任何其它软件)可以被仪器化以向应用添加计数器或测量仪。计数器包括将特定事件发生时被递增的值存储在软件中的指令。计数器可以用于确定代码的具体部分(例如函数或方法、条件代码的具体分支、异常、循环等)被执行的次数。应用130是数据流的数据源的示例。

典型地,计数器值单调地变化,即,计数器值可以单调地增大/减小。可以比较计数器的值以确定在两个不同时间点的具体计数器值的变化。例如,可以通过计算从t1到t2的相应计数器值的变化来确定具体事件在时间t1和t2之间的时间间隔内发生的次数。仪器化分析系统100的API可以由应用130调用以将计数器的当前值发送给仪器化分析系统100。

以下是应用130的仪器化代码的示例。被仪器化的代码中所包括的以下指令创建用于跟踪动作或实体的计数的计数器对象。

counter1=createCounter(source="web1",metric="metric1");

上述指令创建计数器对象并且将其分配给变量counter1。计数器对象与源“web1”和度量“metric1”相关联。在实施例中,源值和度量值唯一地标识与计数器(或测量仪)相关联的数据流。在其它实施例中,可使用更多或更少的密钥值对来唯一地标识数据流。

当与计数器相对应的数据通过仪器化代码被发送给仪器化分析系统100时,在计数器创建期间规定的值的一个或多个被接收。例如,源值和度量值通常与在数据流中所接收的值的每个元组以及正被报告的数据值一起被接收。任选地,值的元组可包括时间戳,例如正被报告的数据值被仪器化软件捕获时的时间戳。

应用130的仪器化代码可以包括用于更新代码中的各个位置的计数器值的指令。例如,计数器counter1可以通过执行指令“counter1.increment()”来被递增。计数器可以被递增以跟踪与代码相关联的各种动作或实体。例如,每当具体的函数或方法被调用时计数器可以被递增、每当条件表达式的具体分支被执行时计数器可以被递增,每当具体类型的对象被创建时计数器可以被递增(例如通过在对象的构造函数中使计数器递增)。计数器的递增指令可以被有条件地调用(例如,在使用特定的参数组合调用函数的情况下)。应用130通过调用仪器化分析系统100的API将计数器值传送给仪器化分析系统100。

在仪器化代码中定义的计数器可以周期性地重置。例如,计数器可在可配置的特定时间间隔之后被重置。在这种情况下,接收的计数器值可能不会单调增大(或减小),因为该值可能会在间隔结束时被重置。计数器可以是累积的,即计数器不会重置除非提供明确的指令来重置它。在这种情况下,累积计数器的值单调地变化,即单调地增大(或减小),除非由用户明确地重置。

测量仪包括用于测量应用130的某些运行时特性(例如,堆大小、高速缓存未命中或命中的次数、所使用的活动存储器、CPU(中央处理单元)利用率、响应请求所花费的总时间、连接到服务所花费的时间等)的指令。还可以使用测量仪跟踪某些应用特定参数或业务相关值,例如事务数、用户数等。测量仪可以按可配置的间隔被周期性地调用。测量仪的值被周期性地发送给仪器化分析系统100。

管理系统160允许特权用户(例如,系统管理员)将数据流与元数据相关联。管理系统160包括向系统管理员提供用于规定元数据的用户界面的管理应用170。元数据包括多个属性,例如名称-值对(属性在本文中也被称为元数据标签或标签)。仪器化分析系统100接收描述数据流的元数据并且存储元数据。独立于从每个数据流接收的数据规定描述数据流的元数据的能力对基于数据流生成报告提供了若干益处。

作为示例,仪器化分析系统100可以接收对描述每个数据流的元数据的修改,而不需要对应用130的仪器化软件进行任何修改。因此,仪器化分析系统100接收新报告的规定和对现有报告的修改,并且基于新报告/已修改报告生成结果,而不需要开发者修改应用130。

仪器化分析系统100生成报告的结果,并且随着仪器化分析系统100从仪器化软件接收数据流而发送它们以进行实时呈现。仪器化分析系统100允许对现有报告进行修改而不需要对应用130的仪器化代码进行任何修改。此外,可以为先前接收的数据流定义新的元数据。因此,新的报告可以被生成,其中该报告基于作为数据流被接收的数据以及先前(在元数据与数据流相关联之前)存储的数据。例如,可以生成在大的时间间隔内提供移动平均的报告,该报告基于当前正被接收的数据以及先前(在报告中所使用的元数据与数据相关联之前)接收的数据计算移动平均。而且,这些新的报告可以被定义而不需要(通过对软件重新仪器化)修改仪器化软件也不需重新部署仪器化软件。

此外,仪器化分析系统100提供描述数据流的元数据与数据流的数据的分离。因此,需要从开发系统120被发送至仪器化分析系统100的数据量被减少。每个应用130仅发送度量的数据值和标识度量的信息。元数据信息从独立于数据流的数据源的源单独地接收。因此,可以引入任意量的元数据而不会增加每个数据流的数据量。

报告系统150可以是客户端设备。报告系统150包括允许用户与仪器化分析系统100交互的客户端应用140。在实施例中,客户端应用140是互联网浏览器,其可以包括用于访问仪器化分析系统100的客户端侧代码(例如,Java Script)。在其它实施例中,客户端应用140是被开发用于与仪器化分析系统100交互的专有应用。

报告系统150可以是传统的计算机系统(例如,台式或膝上型计算机)、平板电脑、或具有计算机功能的设备(例如个人数字助理(PDA)、移动电话、智能电话或另一合适的设备)。报告系统150经由网络与仪器化分析系统100交互。网络可以包括使用有线和/或无线通信系统的局域网和/或广域网的任何组合。在一个实施例中,网络使用标准的通信技术和/或协议。

仪器化分析系统100可以被托管在包括一个或多个处理器、存储器、辅助存储装置和输入/输出控制器的计算系统上。与例如用作报告系统150的典型计算系统相比,用于托管仪器化分析系统100的计算系统通常是使用强大处理器、大存储器和快速输入/输出系统的服务器级系统。

在实施例中,来自若干开发系统120的数据可以例如由服务器进行合并,并且经组合的数据被发送给仪器化分析系统100。例如,企业可以安装从不同的开发系统120内部接收数据流的服务器,并且将经组合的数据以批量形式周期性地发送给仪器化分析系统100。这支持来自企业的外部通信的效率。然而,该配置可能导致向仪器化分析系统100传送信息的延迟、以及由报告系统150报告数据的相对应延迟。

仪器化分析系统的系统架构

图2示出了根据实施例的用于基于从仪器化软件接收的数据流生成实时报告的系统的架构。仪器化分析系统100包括接口模块210、数据流处理器280、量化模块240、元数据模块220、元数据存储230、数据点路由模块250、分析引擎270、用户界面管理器290以及时间序列数据存储260。在其它实施例中,仪器化分析系统100可以包括本文中未描述的其它模块。所指示的由具体模块提供的功能可以由其它模块来代替实施。

接口模块210接收来自外部系统(例如,向仪器化分析系统100发送数据流的开发系统120)的请求。接口模块210支持外部系统可以调用的各种应用编程接口(API)。接口模块210接收和处理由应用130提供的数据。接口模块210可以接收和处理由使用由不同供应商提供的功能被仪器化的应用130所提供的数据,只要数据符合由接口模块210支持的API规定的格式即可。

接口模块210以数据流的形式从外部系统(例如开发系统120)接收数据。在实施例中,接口模块210将数据表示为元组。由接口模块接收的数据元组包括各种元素(包括度量标识符和度量的值)。度量标识符可以是度量的名称。数据元组可包括其它元素,例如与数据源(例如发送数据的应用130)生成数据的时间相对应的时间戳以及与数据相关联的属性。在实施例中,与元组相关联的时间戳表示仪器化分析系统100接收数据值的时间。与数据相关联的属性可以以名称-值对的形式被提供。这些属性可以提供描述所接收的数据的附加信息,例如描述数据源的信息(例如与源相关联的主机名、服务器名称、设备名称或服务名称)、与数据相关联的方法或功能名称、应用实例标识符等。

在实施例中,接口模块210生成标识符,并且将标识符分配给接口模块210所接收的记录。标识符在本文中被称为时间序列标识符(本文中也称为tsid)。唯一的时间序列标识符被分配给匹配度量名称的所有元组和随元组接收的属性集合。因此,元组(度量名称、属性、度量值、时间戳)被映射到元组(tsid、度量值、时间戳)。例如,如果元组提供度量名称m1和主机名h1,则度量名称为m1和主机名为h1的所有元组被被分配相同的时间序列标识符。因此,tsid唯一地标识由仪器化分析系统100接收的数据流的所有元组。接口模块210将数据流的数据值提供给数据流处理器280用于进一步的处理。

数据流处理器280处理不同数据流的数据以准备数据来用于由分析引擎270进行分析。数据流处理器280根据实时报告确定在时间间隔被处理的数据值和在该时间间隔被搜索引擎忽略的数据值。数据流处理器280基于数据值在时间间隔中到达的时间(或未能到达)来确定数据值被处理还是被忽略。一般地,数据流处理器280处理在时间间隔中到达早的数据值,而忽略在时间间隔中到达晚的数据值。

数据流处理器280确定针对数据流的最大期望延迟,并且比较数据值的到达时间与最大期望延迟值以确定是否在时间间隔内考虑数据值。被考虑的数据值被提供作为实时报告的表达式(例如,聚合数据流的数据值的表达式)的输入。

数据流处理器280还确定针对数据流的故障阈值。如果超过故障阈值并未从数据流接收到数据值,则数据流处理器280将该数据流标记为死的。数据流处理器280将每个数据流的状态存储在元数据存储230中。数据流处理器280在后续时间间隔停止考虑死的数据流。换句话说,数据流处理器280不等待死的数据流的最大期望延迟值。如果从数据流接收到数据值,则数据流处理器280将该数据流再次标记为活的。一旦数据流被标记为活的,则数据流处理器280在后续时间间隔再次重新开始考虑该数据流。

数据流处理器280将针对每个数据流的过去的数据值存储在存储器中,并且基于过去的数据值使用聚合值确定最大期望延迟的值。例如,可以基于N个数据值(例如,N=5或N=4)的移动平均获得数据流的最大期望延迟。数据流处理器280可以将移动平均值乘以因子(例如150%)来说明延迟值的波动。

在实施例中,数据流处理器280在每个时间间隔的开始或前一时间间隔的结束重新计算最大期望延迟值。在另一实施例中,数据流处理器280以比分析引擎270评估表达式的时间间隔大的时间间隔来周期性地重新计算最大期望延迟值。例如,数据流处理器280可以在每五个分析引擎270评估表达式的时间间隔重新计算最大期望延迟值一次。在实施例中,数据流处理器280接收针对数据流的用户可配置的固定值作为最大期望延迟值或故障阈值。数据流处理器280标识在此时间间隔应该考虑的数据值,并且将它们提供给量化模块240用于进一步的处理。

量化模块240处理接收到的数据值以将输入数据时间序列变换成其中数据以规则的时间间隔可用的时间序列,其中在输入时间序列中数据在任何时间间隔可用。例如,以输入时间序列接收的数据值可以以不规则的间隔出现,然而,量化模块240处理时间序列的数据以生成具有周期性地(例如每秒或每5秒或每15秒等)出现的数据的数据流。该过程在本文中被称为时间序列的量化。在实施例中,接口模块210创建多个线程或进程,每个线程或进程被配置为接收与数据流相对应的数据。每个线程或进程调用量化模块240,以在每个时间间隔对针对每个数据流接收的数据执行量化。

元数据模块220接收并且存储元数据信息,该元数据信息描述从开发系统120接收的各种数据流。在实施例中,存储在元数据模块220中的元数据从用户(例如,系统管理员)处被接收。元数据可被表示为名称-值对。在实施例中,元数据被表示为元数据对象,每个对象定义可以被表示为名称-值对的属性集合。数据流集合可以与元数据对象相关联。因此,由元数据对象所表示的所有属性都关联于和元数据对象相关联的每个数据流。

元数据数据存储230存储元数据对象及其与数据流的关联。元数据数据存储230存储针对每个元数据对象的标识符(ID)和由元数据对象表示的属性。在实施例中,每个数据流与唯一地标识数据流的时间序列标识符相关联。元数据数据存储230存储将每个元数据对象映射到时间序列标识符值集合的索引。元数据数据存储230存储将各种属性(或名称-值对或标签)映射到时间序列标识符值集合的索引。

元数据存储230可以基于所接收的指令修改元数据对象。例如,元数据存储230可以修改、添加或删除由元数据对象表示的一些属性。备选地,元数据存储230可以基于所接收的指令修改从元数据对象到数据流的映射。例如,元数据存储230可以将数据流与元数据对象相关联,或者删除元数据对象与数据流之间的关联。

在实施例中,元数据存储230被表示为关系数据库,但是可以被表示为任何其它类型的数据库或数据存储。元数据存储230可以是存储将元数据对象ID映射到标识数据流的时间序列ID的表的关系数据库。其它数据库表可存储与每个元数据对象相关联的属性,以作为从元数据对象ID到被表示为名称-值对的每个属性的映射。

分析引擎270基于元数据评估规定表达式的报告。表达式可基于各种操作,例如聚合和变换。表达式可通过以各种方式构成包括聚合和变换的各种函数,以及通过构成其它先前定义的表达式来获得。在实施例中,分析引擎270解析表达式,生成程序的可执行表示,并且执行所生成的表示。

时间序列数据存储260存储从各种源(例如,开发系统120)接收的数据流。在实施例中,时间序列数据存储260还在数据被量化之后存储时间序列数据。时间序列数据存储260还可以存储针对每个时间序列的累计数据。时间序列数据存储260还存储各种分析请求的结果,例如用户所请求的各种报告的结果。分析引擎270通过将存储在时间序列数据存储260中的数据与作为数据流从各种源获得的新数据组合来计算针对某些报告的结果(例如时间间隔内的移动平均)。

用户界面管理器290经由用户界面(例如,报告系统150的客户端应用140的用户界面)呈现用户所请求的报告。在实施例中,客户端应用140是互联网浏览器应用,并且用户界面管理器290使用客户端应用140生成用于显示的网页。在其它实施例中,客户端应用140使用合适的协议与用户界面管理器290通信。用户界面管理器将报告数据提供给客户端应用140用于(例如作为图表)呈现。

在实施例中,用户界面管理器290基于到达仪器化分析系统100的数据流的数据持续更新与经由客户端应用140显示的报告相对应的图表。仪器化分析系统100由系统管理员经由管理系统160进行配置以基于数据流的数据生成用于报告的数据。仪器化分析系统以特定速率更新被显示的报告。

仪器化分析系统100还经由报告系统150接收需要被显示的报告的定义。报告定义规定了与待显示的报告相对应的表达式。例如,表达式可以规定按某些元数据属性分组的所有数据流的聚合值需要被显示并且每T秒(例如,T=1秒)被更新。仪器化分析系统100经由报告系统呈现实时图表。实时图表指代随着接收到数据值而被更新的图表。相反,传统的报告是基于针对存储在数据库的永久存储装置中的数据而执行的查询所生成的。在实践中,只要数据是因所生成的数据从开发系统经由网络至仪器化分析系统100的传输延迟、数据的处理延迟等生成的,实时图表不立即更新。然而,仪器化分析系统的实施例使得数据源(即,在外部系统上执行的仪器化软件)生成数据值的时间与表达式基于所生成的数据值的评估结果呈现在报告系统150的用户界面上的时间之间的延迟最小化。

基于仪器化软件的实时报告

仪器化分析系统100的用户界面管理器290经由用户界面实时呈现由报告生成的数据。执行仪器化软件的开发系统120经由网络提供数据值。一旦数据值由外部系统生成和发送,网络将导致数据值在延迟之后到达仪器化分析系统100。图3和图4示出了由仪器化分析系统100在用户界面上呈现的报告的示例。

图3示出了根据实施例的显示基于仪器化分析系统所接收的数据流的数据实时更新的图表的用户界面的截屏。截屏示出了显示表示度量320(service.cache.hit)的数据流的若干图表310。度量表示从在开发系统120上执行的仪器化软件接收的高速缓存命中值。值被累计以1秒的时间间隔。因此,在每个1秒的时间间隔中接收的高速缓存命中值被加在一起。可以存在报告度量(service.cache.hit)的大量服务,因此大量图表310被显示。图3示出了允许用户采取行动(例如,选择由用户界面报告的度量、执行累计)的各种小部件。

大企业可以具有极大量的开发系统120。每个开发系统120可以执行多个服务,每个服务报告度量。因此,图3中显示的图表的数量可能非常大。如图4所示,用户可以通过对数据流进行分组来更深入地了解由数据流报告的数据。

图4示出了根据实施例的显示实时更新的并示出确定由数据中心分组的数据流的总和的表达式的图表的用户界面的截屏。图4示出了允许对数据流被分组所依据的属性进行规定和对针对每组执行聚合操作的小部件420。如图4所示,图表410示出了数据中心对数据流进行分组并针对每组求和。假设仅存在两个数据中心,则图表的数量减少为2个。每个图表410示出了从特定的数据中心接收的数据流的数据值的总和。

仪器化分析系统100收集各种数据流的数据值,并且计算表达式的值以作为报告进行显示。例如,仪器化分析系统100基于数据流确定数据值的分组,并且针对每个数据中心计算数据值的总和以呈现如图4所示的图表。仪器化分析系统100在后续时间间隔执行上述的计算。因此,对于每个时间间隔,仪器化分析系统100等待数据流的数据值到达。一旦仪器化分析系统100确定针对时间间隔的所有期望数据值已经到达,则仪器化分析系统100执行所需的计算并发送结果用于显示。

然而,来自不同数据源的各种数据值可能在时间间隔内的不同时间点到达。一些数据值可能甚至在时间间隔内不能到达(例如,它们可能在下一时间间隔到达或者甚至在更晚时候到达)。而且,某些数据源可能(例如,因系统崩溃)发生故障,并且可能甚至不在该时间间隔或若干后续时间间隔发送数据直到数据源重新启动。由于网络延迟、计算结果的延迟和系统故障,仪器化分析系统100仅能够在自数据由数据源生成起的特定延迟之后提供结果值用于显示。然而,仪器化分析系统100在时间间隔内能够越早地呈现结果,报告越接近实时报告。本发明的实施例允许仪器化分析系统基于每个时间间隔中较早的数据流呈现表达式的评估结果,同时使结果的精确性最大。

图5示出了根据实施例的数据值的到达延迟对仪器化分析系统处理数据流的影响。图5示出了四个数据源,即分别向仪器化分析系统100发送数据流d1、d2、d3和d4的应用130a、130b、130c和130d。数据流dx的数据值是dx1、dx2、dx3等,每个数据值在特定的时间间隔被发送。例如,数据流d1的数据值是d11、d12等。假设所有数据值由它们的数据源在时间间隔的起点生成。因此,图5中所示数据值在时间间隔上的时间点与时间间隔的起点相比的差表示数据值从在由数据源生成之后至到达仪器化分析系统100的延迟。

图5所示的时间线示出了两个时间间隔,I1(从时间t0至t2)和I2(从时间t2至t4)。仪器化分析系统100在时间间隔I1从数据流d1接收数据值d11并且在时间间隔I2从数据流d1接收数据值d12;在时间间隔I1从数据流d2接收数据值d21并且在时间间隔I2从数据流d2接收数据值d22;在时间间隔I1从数据流d3接收数据值d31并且在时间间隔I2从数据流d3接收数据值d32;以及在时间间隔I1从数据流d4接收数据值d41并且在时间间隔I2从数据值d4接收数据值d42。

如图5所示,所有数据值d11、d12、d13和d14在间隔I1中的时间t1之前到达。时间点t1在时间间隔I1中相对较早,例如,所有四个数据值在时间间隔I1的一小半完成之前到达。因此,仪器化分析系统100可以在实际t1之后尽快地计算所需的表达式并显示它们。相反,在间隔I2中,即使数据值d12、d22和d32在时间间隔I2较早地到达,数据值d42在几乎接近时间间隔I2的结束的t3到达。因此,仪器化分析系统100仅能够在几乎接近时间间隔I2的结束的时间t3之后计算任何需要的表达式和呈现结果。

因此,在时间间隔接收数据时的长延迟导致不期望的用户体验。这些结果远晚于数据源生成数据值的时间点被呈现。此外,由于时间间隔I1的结果在时间间隔内较早地被呈现,并且时间间隔I2的结果在时间间隔内较晚地被呈现,所以在实时图表中存在没有数据呈现给用户的间隙,即时间间隔I1的结果被呈现的时间与时间间隔I2的结果被呈现的时间之间的间隙。此间隙比结果被呈现的时间之间的典型间隙长。在期望实时更新的图表中,无数据呈现的长间隙的存在提供了不期望的用户体验。本发明的实施例允许仪器化分析系统100在时间间隔中较早地将结果呈现给用户,并且减小在两个连续时间间隔之间结果呈现之间的间隙。

整体过程

图6、图7和图8示出了仪器化分析系统用于处理从仪器化软件接收的数据而执行的各个过程。每个附图中的流程图中所示的步骤可以以不同于附图中所示顺序的顺序被执行。例如,某些步骤可以与其它步骤同时执行。此外,所指示地由某些模块执行的步骤可由其它模块执行。

图6示出了根据实施例的仪器化分析系统处理数据流的整体过程。在实施例中,仪器化分析系统100确定在多个时间间隔上表达式的值。例如,表达式可以聚合在时间间隔中作为数据流的一部分所接收的数据值。在这些实施例中,图6所示的过程由仪器化分析系统100执行以确定数据值是否应该用作针对该时间间隔评估表达式的输入。

如果仪器化分析系统100确定数据流的数据值在时间间隔中较早地到达,则仪器化分析系统100使用数据值作为用于在该时间间隔确定表达式的值的输入。如果仪器化分析系统100确定来自数据流的数据值在实际间隔较晚地到达或不可能到达,则仪器化分析系统100在不考虑较晚到达的数据值的前提下评估时间间隔的表达式。换句话说,仪器化分析系统100将较晚到达的数据值排除在评估该时间间隔的表达式的输入之外。

接口模块210从一个或多个外部系统接收(610)描述多个数据流的信息。描述数据流的信息可以由外部系统通过调用仪器化分析系统的API来提供。例如,外部系统可以调用仪器化分析系统的API,其中该API允许外部系统通过提供描述数据流的信息向仪器化分析系统100登记数据流。描述数据流的信息包括与数据流相关联的度量(例如,高速缓存命中、高速缓存未命中、CPU负载、存储器使用等)、描述数据源的属性(例如,服务名称)等。

数据流处理器280处理在后续时间间隔从多个数据流接收的数据值。数据流处理器280针对每个时间间隔和每个数据流执行下面的步骤(620、630和U40)。

数据流处理器280确定针对每个数据流的最大期望延迟。数据流处理器280可以使用与数据流相关联的固定阈值作为最大期望延迟。例如,仪器化分析系统100可以从系统管理员接收最大期望延迟作为用于数据流的配置参数。在一些实施例中,数据流处理器280基于针对数据流接收的先前数据值确定该数据流的最大期望延迟。例如,数据流处理器280可以基于移动聚合值确定数据值的最大期望延迟,其中该移动聚合值基于已接收的值的集合(在移动时间窗内接收的固定数量的过去值、或在移动时间窗内接收的所有的过去值)。作为另一示例,数据流处理器280可以基于从数据流接收的最后的数据值来确定针对该数据流的最大期望延迟。

在实施例中,数据流处理器280通过以某一因子(例如固定的百分数或固定的偏移)增大基于过去的数据值的聚合值所确定最大期望延迟值。例如,数据流处理器280可以确定数据流的最大期望延迟值为将过去4个数据值的平均放大150%。作为另一示例,数据流处理器280可以确定数据流的最大期望延迟值为将最后数据值增大固定值(例如5)(固定值的选择取决于数据流中接收的数据的类型)。

数据流处理器280将从数据流接收的数据值提供给仪器化分析系统100的软件模块,以进一步处理数据值(例如用于经由用户界面呈现为实时图表)。例如,在实施例中,数据流处理器280将数据值提供630给量化模块240以使用数据值执行量化。在另一实施例中,数据流处理器280将数据值提供(630)给分析引擎270,以使用数据值评估表达式(例如使用在时间间隔中所接收的数据值确定聚合值的表达式)。

如果数据流的数据值在最大期望延迟之前到达仪器化分析系统100,则数据流处理器280将数据流的数据值提供(630)给量化模块(或任意其它模块)用于进一步的处理。如果数据流的数据值未能在最大期望延迟之前到达仪器化分析系统100,则数据流处理器280提供(630)指示数据值未能到达的信息。在实施例中,数据流处理器280通过将特殊的数据值(例如,空数据值)提供给执行后续处理的模块来提供指示数据值未能到达的信息。

无论数据值在数据流的最大期望延迟之前还是在最大期望延迟之后到达,数据流处理器280将数据流的数据值存储(640)在永久存储(例如,时间序列数据存储260)中。换句话说,不论数据值何时到达仪器化分析系统100,数据流处理器280存储(640)数据值。数据流处理器280不将在最大期望延迟之后到达的数据流的数据值提供给量化模块240或分析引擎270用于执行数据的实时处理(例如呈现实时图表)。这样做的原因是数据流处理器280被设计为不因晚到的数据值而放慢实时图表中的数据的呈现。然而,即使数据值在最大期望延迟之后到达,数据流处理器280将数据值存储(640)在时间序列数据存储260中,从而处理针对该时间间隔的数据流的数据的后续查询使用数据值,而不管数据值是何时到达的。

图7示出了根据实施例的基于仪器化分析系统接收的数据流的数据值确定表达式的值的整体过程。图7所图示的过程示出了与图6所示类似的步骤,但是图7所图示的过程在评估表达式和将数据呈现为实时图表的上下文中。

类似于图6的步骤610,接口模块210从一个或多个外部系统接收(710)描述多个数据流的信息。分析引擎270针对时间间隔接收(720)基于数据流的数据的表达式。仪器化分析系统100为多个时间间隔的每个计算(例如,每秒、每2秒、或每5秒)表达式的值。表达式可以基于与时间间隔相关联的数据值计算聚合值。与时间间隔相关联的数据值对应于由外部系统(即,数据流的数据源)发送的用于在该时间间隔期间进行处理的数据值。数据值可以在与外部系统发送数据值相同的时间间隔内到达仪器化分析系统100,或者不能到达仪器化分析系统100。作为示例,表达式可以对与时间间隔相关联的所有数据值计算计数、总和、平均、中值、百分数、或任意其它聚合值。作为另一示例,表达式可以对由特定属性分组的数据值计算以上的聚合。例如,表达式可以计算由数据中心属性分组的数据值的总和,由此确定从每个数据中心所到达的数据值的总和。

类似于图6的步骤620,数据流处理器280确定(730)针对为评估表达式所考虑的每个数据流的最大期望延迟。与评估表达式相关的数据流的集合可以被指定为使用描述数据流的元数据的表达式的一部分。表达式可以通过规定描述数据流的一个或多个元数据属性的值来标识数据流的集合。例如,表达式可以基于来自特定数据中心的所有数据流评估聚合值,其中该特定数据中心由数据中心属性的特定值标识。另一表达式可以规定提供特定度量(例如高速缓存命中)的所有数据流。数据流处理器280监测(740)与表达式相关联的数据流的集合。在实施例中,数据流处理器280监测由仪器化分析系统接收的所有数据流,从而还监测与表达式相关联的集合。在实施例中,数据流处理器280通过创建等待数据流的数据值到达的进程或线程来监测数据流。

如果数据流的数据值到达晚,即在数据流的最大期望延迟之前未能到达,则数据流处理器280将该数据流从在用于评估时间间隔中的表达式所考虑的集合排除(750)。换言之,对于评估时间间隔中的表达式,数据流处理器280仅考虑在对应的数据流的最大期望延迟之前到达的数据值。数据流处理器280收集(760)(通过排除较晚到达的数据值获得的)数据值的集合的所有数据值,并且提供数据值用于进一步的处理(例如提供给量化模块240或分析引擎270)。

分析引擎270基于所收集的由数据流处理器280提供的值的集合确定(770)表达式的值。分析引擎270将表达式的评估结果提供给用户界面管理器290。用户界面管理器290发送(780)表达式的评估结果用于经由用户界面呈现为例如实时图表。仪器化分析系统100针对每个后续时间间隔重复步骤730、740、750、760、770和780。例如只要用户想要观看实时图表,这些步骤可以无限期地被重复。

数据流处理器280进一步维持故障阈值以确定提供流的数据源是否发生故障,例如由于发送数据流的仪器化软件或提供数据流的外部系统崩溃或发生故障。用于确定数据流是否故障的故障阈值通常长于数据流的最大期望延迟值。例如,故障阈值可以为若干时间间隔长。相反,数据流的最大期望延迟值小于时间间隔的长度。在实施例中,仪器化分析系统100经由管理系统160从系统管理员接收数据流的故障阈值。仪器化分析系统100可以将故障阈值用于数据流的集合,例如,用于从数据中心到达的所有数据流或从一类外部系统、在外部系统上运行的一类操作系统、或提供数据流的一类仪器化软件到达的所有数据流。

如果数据流处理器280确定数据流的数据值在故障阈值之前未能到达,则数据流处理器280将数据流标记为死的。在实施例中,仪器化分析系统100将每个数据流的状态(死的或活的)存储在元数据存储230或时间序列数据存储260中。因此,数据流处理器280在后续时间间隔中的表达式的所有计算中将死的数据流排除在外,直到数据流的状态变回活的。

因此,数据流处理器280不为该数据流等待与该数据流相关联的最大期望延迟。这防止数据流处理器280在后续时间间隔必须等待(数据流的最大期望延迟的)附加的时间。数据流可以在长时间周期保持为死的。如果数据流处理器280在后续时间间隔的考虑中不将死的数据流排除在外,则数据流处理器280将继续等待数据流的最大期望延迟不确定量的时间。

只要数据流的状态从死的变为活的,数据流处理器280开始将数据流包括于在对后续时间间隔评估表达式中所考虑的数据流的集合中。如果数据流的数据值在数据流状态被确定为死的之后到达仪器化分析系统,则数据流处理器280将死的数据流的状态改变回活的。

图8示出了根据的实施例的标识发送数据流的数据源的故障的过程。数据流处理器280确定(810)针对数据流的故障阈值。数据流处理器280监测数据值到达较晚(例如,在最大期望延迟值之后)的数据流以检查数据值是否在故障阈值之前到达。如果数据流的数据值未能在故障阈值之前到达,则数据流处理器280将数据流标记为死的。数据流处理器280可以将指示数据流是死的的标签和指示数据流被确定为死的的时间的时间戳存储在元数据存储230中。数据流处理器280将数据流从在后续时间间隔中(例如,为基于数据流评估表达式)所考虑的数据流的集合排除(830)。数据流处理器280将数据流排除(830)在外直到数据流的数据值到达。

备选实施例

将理解,已经简化了本发明的附图和描述以示出与清楚理解本发明相关的元件,同时为了清楚起见,排除了在典型IT管理系统中找到的很多其它元件。本领域普通技术人员可以认识到,在实施本发明时可能期望和/或需要其它元件和/或步骤。然而,因为这些元件和步骤在本领域中是众所周知的,并且因为它们不助于更好地理解本发明,所以本文中没有提供对这些元件和步骤的讨论。本文中的公开内容涉及对本领域技术人员已知的对这样的元件和方法的所有这样的变型和修改。

以上描述的一些部分在关于信息的操作的算法和符号表示方面描述实施例。这些算法描述和表示通常由数据处理领域的技术人员使用以将其工作的实质有效地传达给本领域技术人员。在功能上、计算上或逻辑上描述的这些操作被理解为由计算机程序或等效电路、微代码等实现。而且,有时也可方便地将这些操作布置称为模块,而不失一般性。所描述的操作及其相关联的模块可以在软件、固件、硬件或其任何组合中被具化。

如本文中所使用的,对“一个实施例”或“实施例”的任何引用表示结合该实施例描述的具体元件、特征、结构或特性包括在至少一个实施例中。在说明书中的各个地方的短语“在一个实施例中”的出现不一定都指代相同的实施例。

可以使用表达“耦合”和“连接”以及它们的派生词来描述一些实施例。应当理解,这些术语不是作为彼此的同义词。例如,可使用术语“连接”描述一些实施例以指示两个或更多个元件彼此直接物理接触或电接触。在另一示例中,可使用术语“耦合”描述一些实施例以指示两个或更多个元件直接的物理接触或电接触。然而,术语“耦合”也可能表示两个或更多个元件彼此不直接接触,但仍然彼此协作或相互作用。实施例不限于在本上下文。

如本文中所使用的,术语“包括(comprises)”、“包括(comprising)”、“包括(includes)”、“包括(including)”、“具有(has)”、“具有(having)”或其任何其它变型旨在涵盖非排他性的包括。例如,包括元素列表的过程、方法、物品或装置不一定仅限于这些元素,而是可包括未明确列出的或这些过程、方法、物品或装置所固有的其它元素。此外,除非有明确的相反说明,否则“或”指包括性的或不是排他性的或。例如,以下任一情况下A或B条件满足:A为真(或存在)而B为假(或不存在),A为假(或不存在)而B为真(或存在),以及A和B都为真(或存在)。

此外,使用“一个(a)”或“一个(an)”描述本文中的实施例的元件和部件。这只是为了方便,并且给出本发明的一般意义。该描述应当被理解为包括一个或至少一个,并且单数也包括复数,除非显而易见地表示单数。

在阅读本公开之后,本领域技术人员将通过本文所公开的原理理解系统和过程的附加的、可选的结构和功能设计。因此,尽管说明和描述了具体的实施例和应用,但是将理解,所公开的实施例不限于本文公开的精确结构和部件。在不偏离所附权利要求中定义的精神和范围的前提下,可对本文公开的方法和装置的布置、操作和细节进行对本领域技术人员显而易见的各种修改、改变和变化。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号