CN107111527B - 用于分析仪器化软件的数据流处理语言 - Google Patents
用于分析仪器化软件的数据流处理语言 Download PDFInfo
- Publication number
- CN107111527B CN107111527B CN201580069546.5A CN201580069546A CN107111527B CN 107111527 B CN107111527 B CN 107111527B CN 201580069546 A CN201580069546 A CN 201580069546A CN 107111527 B CN107111527 B CN 107111527B
- Authority
- CN
- China
- Prior art keywords
- data
- data streams
- data stream
- input
- threshold
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
- G06F11/3466—Performance evaluation by tracing or monitoring
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3065—Monitoring arrangements determined by the means or processing involved in reporting the monitored data
- G06F11/3086—Monitoring arrangements determined by the means or processing involved in reporting the monitored data where the reporting involves the use of self describing data formats, i.e. metadata, markup languages, human readable formats
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
- G06F11/3452—Performance evaluation by statistical analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3604—Software analysis for verifying properties of programs
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/16—File or folder operations, e.g. details of user interfaces specifically adapted to file systems
- G06F16/164—File meta data generation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
- G06F16/24568—Data stream processing; Continuous queries
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/466—Transaction processing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/542—Event management; Broadcasting; Multicasting; Notifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3003—Monitoring arrangements specially adapted to the computing system or computing system component being monitored
- G06F11/3006—Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system is distributed, e.g. networked systems, clusters, multiprocessor systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3065—Monitoring arrangements determined by the means or processing involved in reporting the monitored data
- G06F11/3072—Monitoring arrangements determined by the means or processing involved in reporting the monitored data where the reporting involves data filtering, e.g. pattern matching, time or event triggered, adaptive or policy-based reporting
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
- G06F11/3409—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment for performance assessment
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2201/00—Indexing scheme relating to error detection, to error correction, and to monitoring
- G06F2201/81—Threshold
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2201/00—Indexing scheme relating to error detection, to error correction, and to monitoring
- G06F2201/835—Timestamp
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2201/00—Indexing scheme relating to error detection, to error correction, and to monitoring
- G06F2201/86—Event-based monitoring
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2201/00—Indexing scheme relating to error detection, to error correction, and to monitoring
- G06F2201/88—Monitoring involving counting
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Quality & Reliability (AREA)
- Software Systems (AREA)
- Computer Hardware Design (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Bioinformatics & Computational Biology (AREA)
- Evolutionary Biology (AREA)
- Probability & Statistics with Applications (AREA)
- Bioinformatics & Cheminformatics (AREA)
- Life Sciences & Earth Sciences (AREA)
- Library & Information Science (AREA)
- Human Computer Interaction (AREA)
- Computational Linguistics (AREA)
- Multimedia (AREA)
- Debugging And Monitoring (AREA)
- Stored Programmes (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
仪器化分析***通过执行使用数据流语言程序指定的指令来处理数据流。该数据流语言允许用户使用查找块来指定搜索条件,该查找块用于标识由数据流语言程序处理的数据流集合。所标识的数据流集合可以动态地改变。该数据流语言允许用户基于与输入数据流相关联的一个或多个元数据属性的独特值来将数据流编组成数据流集合。数据流语言允许用户指定阈值块,用于确定输入数据流的数据值是否在利用低阈值/高阈值指定的边界之外。输入到阈值块的数据流集合的元素可以动态地改变。低阈值/高阈值可以被指定为数据流并且可以动态地改变。
Description
背景技术
本公开一般而言涉及数据流处理,更具体地,涉及用于处理从仪器化软件接收的数据流的数据流处理语言。
软件开发人员通过将软件仪器化来监控他们所开发的软件的不同方面。这些方面包括软件的执行、执行软件期间遇到的误差、在执行软件期间遇到的显著事件、描述代码的哪些部分正在被执行以及哪些部分未被执行的信息,等等。用于将代码仪器化的常规技术包括代码中的声明,其记录不同类型的信息以记录文件或在屏幕上打印信息。该技术适用于简单应用,例如,具有在单个处理器上执行的简单执行流程的应用。然而,用于仪器化软件的这些技术对于可能分布在多个***上的复杂应用(每个***执行多个进程或执行线程)而言不够胜任。
用于仪器化这种复杂***的另一常规技术是在仪器化代码中使用专家的帮助。某些供应商提供帮助仪器化代码的专家服务。然而,这些供应商通常提供通常不是非常灵活的标准服务。此外,这些基于供应商的解决方案在供应商仪器化代码所需的时间方面具有显著开销。因而,这些解决方案适合于缓慢的开发周期,例如,长为一年的开发周期。然而,软件产品的软件开发和发布周期已经变短了。例如,存在几个在线***,其中软件开发人员每月、每周或甚至每天改变它们并且对它们进行部署。由于基于供应商的仪器化解决方案的显著开销,所以开发人员发现难以在快节奏开发环境中使用这些服务。
此外,用于仪器化代码的常规技术在同化信息、存储信息和分析信息以生成报告方面引起显著延迟。因此,在软件中发生问题的时间与该问题经由代码的仪器化被检测到的时间之间可能会有显著延迟。因而,用于基于软件的仪器化来生成报告的常规***在复杂应用的快节奏开发周期中常常不够胜任。
发明内容
仪器化分析***的实施例基于在数据流语言中指定的指令来处理数据流。数据流从在外部***上执行的仪器化代码接收。数据流语言的命令被指定为块。块执行某个类型的操作(或计算,例如,取回数据、处理数据等等)。块可选地包括输入端口、输出端口和参数。输入端口接收可以从外部***接收或由其他块生成的数据流的数据。块的计算结果作为输出被提供给块的输出端口。与块相关联的参数用于指定块的计算。例如,参数指定查找数据流的块的搜索字符串。数据流语言程序包括块的网络,其中块的输出可以作为输入被提供给其他块,等等。任务表示数据流语言程序的执行。针对相同的数据流语言程序,多个任务可以被执行。任务与开始时间、停止时间和周期性相关联。该任务在开始时间开始,并且执行直到停止时间为止。该任务包括基于所指定的周期性、以时间间隔周期性地执行的指令。对于每个时间间隔,任务从数据流集合接收数据值,并且执行数据流语言的块以生成输出数据值。其他实施例使用不同的语法和不同的编程范式来实现本文中所指示的功能。
仪器化分析***的实施例基于在数据流语言中指定的指令来处理数据流。数据流从在外部***上执行的仪器化代码接收,或者可以作为数据流语言程序的结果、通过仪器化分析***来生成。仪器化分析***接收数据流语言程序,其执行数据流与阈值的比较。例如,数据流的数据可以与低阈值和/或高阈值进行比较。低阈值/高阈值可以是常数值或动态改变的值。低阈值/高阈值可以通过生成数据流的数据流语言程序来指定。
阈值块被配置成接收第一输入和第二输入。例如,第一输入通过阈值块的数据端口接收,第二输入通过阈值块的阈值端口接收。数据流语言程序的第一指令集合生成第一输入,并且数据流语言程序的第二指令集合生成第二输入。***接收输入数据流集合。***执行第一指令集合以聚合输入数据流集合的数据,以生成第一多个数据流,其包括作为阈值块的第一输入而被提供的数据值。***执行第二指令集合以聚合输入数据流集合的数据,以生成第二多个数据流,其包括作为阈值块的第二输入而被提供的阈值。该***将作为数据值的、作为第一输入被接收的数据流,与作为阈值的、作为第二输入被接收的数据流进行匹配。对于在第一输入处接收的每个数据流,***将数据流的数据值与来自第二个多个数据流的对应数据流的阈值进行比较,并且基于数据值和阈值的比较结果来确定是否生成事件。
在实施例中,所生成的事件被报告作为在由***分析的数据流中检测到的异常。例如,异常可以指示具体数据流或基于数据流集合的聚合值超出由阈值块的低阈值和高阈值设置的界限。低阈值和高阈值本身可以动态地改变,例如,低阈值和高阈值可以被定义为基于某些输入数据流的移动平均。
实施例描述了一种基于在数据流语言中指定的指令来处理数据流的仪器化分析***。该***存储描述多个数据流的元数据。该***接收用于执行的数据流语言程序。数据流语言程序包括使用数据流语言指定的指令集合。指令包括与基于与所接收的数据流相关联的元数据属性的搜索表达式相关联的查找块。***评价搜索表达式以标识符合搜索表达式的数据流集合。***通过执行以下步骤来重复执行数据流语言程序。***从所标识的数据流集合的每个数据流接收数据值。***执行数据流语言程序的每个块,并且基于执行来生成结果数据值。结果值与由数据流语言程序生成的结果数据流相对应。***存储一个或多个结果数据值。
在实施例中,查找块是数据流语言程序的第一块。***重复评价查找块。由查找块标识的数据流集合可以从查找块的一个评价改变为另一评价。查找块可以以与数据流语言程序的其余块的执行速率不同的速率来评价。
***的实施例基于在数据流语言中指定的指令来处理数据流。***存储描述由***处理的数据流的元数据。每个数据流的元数据包括与数据流相关联的属性。例如,数据流可以与具有值“databank1”的属性“source”和具有值“numCacheMisses”的属性“metric_name”相关联。***接收使用数据流语言程序指定的指令集合用于处理输入数据流。***通过执行指令集合来生成结果数据流。例如,数据流语言程序可以包括用于通过某些属性对所接收的数据流进行编组的指令,并且基于所标识的组的数目,数据流语言程序的结果可以包括多个结果数据流。***执行结果数据流中的每个结果数据流的以下步骤。***确定描述结果数据流的属性值集合。***将该值集合存储为描述结果数据流的元数据。***生成数据流的标识符,并且将标识符与描述数据流的元数据相关联。该***存储与该标识符相关联的结果数据流的数据。
在实施例中,数据流语言程序指定多个分组(groupby)命令。仪器化分析***与每个结果数据流相关联,所指定的元数据属性的值与数据流语言程序的最后分组命令相关联。
本说明书中描述的特征和优点并非全部包括,并且具体地,考虑到附图、说明书和权利要求书,许多附加特征和优点对于本领域普通技术人员将是明显的。而且,应当指出,说明书中所使用的语言主要出于可读性和指导的目的而被选择,并且可能没有被选择来描绘或限制所公开的主题。
附图说明
所公开的实施例具有根据具体实施方式、所附权利要求和附图(或图)将更容易显而易见的其他优点和特征。下文简要介绍这些附图。
图1示出了根据实施例的用于基于仪器化软件来报告的整体***环境。
图2示出了根据实施例的用于执行用于处理从仪器化软件接收的数据流的数据流语言程序的***的架构。
图3示出了根据实施例的用于处理数据流语言程序的块的数据流语言处理器的架构。
图4示出了根据实施例的用于说明数据流语言的特征的数据流语言程序的示例。
图5示出了根据实施例的用于基于数据流语言程序来处理从数据流接收的数据的仪器化分析***的整体过程。
图6示出了根据实施例的从仪器化软件接收的数据流的量化过程。
图7示出了根据实施例的通过用于向数据流语言程序提供输入的查找块来选择数据流集合。
图8示出了根据实施例的作为对查找块的周期性重新评价的结果向数据流语言程序提供输入的数据流集合的动态改变。
图9示出了根据实施例的用于标识用于使用查找块向数据流语言程序提供输入的数据流集合的过程。
图10图示了根据实施例的通过执行提取块从数据流取回数据的过程。
图11A至图11C图示了根据实施例的组合来自时间序列数据存储装置的数据和从数据流实时接收的数据以用于移动窗口计算的过程。
图12图示了根据实施例的用于对数据流的数据进行编组以生成结果数据流集合的过程。
图13A至图13B示出了根据实施例的示例场景,其图示了基于描述数据流的不同元数据属性对数据流进行编组。
图14示出了根据实施例的示例场景,其图示了作为输入数据流随时间而改变的结果的由分组块生成的结果数据流的动态改变。
图15示出了根据实施例的流程图,其图示了通过执行数据流语言程序的发布块而发布结果数据流的过程。
图16示出了根据实施例的数据流语言程序的示例,其图示了具有由具体属性编组的数据流的固定阈值的阈值块的使用。
图17示出了根据实施例的数据流语言程序的示例,其图示了具有由元数据属性编组的数据流的动态改变的阈值的阈值块的使用。
图18示出了根据实施例的流程图,其图示了执行包括阈值块的数据流语言程序的过程。
图19示出了根据实施例的数据流语言程序的示例,其图示了使用定制块来基于应用于包括数据流组的输入的用户定义功能来生成结果数据流。
图20示出了根据实施例的流程图,其图示了执行具有定制块的数据流语言程序的过程。
图21示出了根据实施例的显示数据流语言程序的执行结果的用户接口的屏幕截图,其示出了由仪器化分析***接收的数据流。
图22示出了根据实施例的显示数据流语言程序的执行结果的用户接口的屏幕截图,其示出了由仪器化分析***接收的数据流的数据的1分钟平均。
图23示出了根据实施例的显示数据流语言程序的执行结果的用户接口的屏幕截图,其示出了由数据中心编组的数据流的总和。
图24示出了根据实施例的显示数据流语言程序的执行结果的用户接口的屏幕截图,该数据流语言程序包括确定高速缓存命中率与由数据中心编组的数据流的高速缓存命中率与未命中率之和的比例的定制宏块。
现在将详细参考几个实施例,其示例在附图中图示。应当指出,在任何可行的情况下,在附图中可以使用类似或相同的附图标记,并且可以指示类似或相同的功能。附图仅仅为了说明的目的描绘了所公开的***(或方法)的实施例。本领域技术人员将从以下描述中容易地认识到,在不背离本文中所描述的原理的情况下,可以采用本文中所说明的结构和方法的备选实施例。
具体实施方式
整体***环境
图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包括被配置成执行仪器化软件的任何计算***,而不论其是否用于开发新软件。例如,开发***120可以是用于测试目的、分级目的或在企业中执行的任何生产***的计算***。
在开发***120上执行的软件被配置成向仪器化分析***100发送作为仪器化软件的结果而生成的信息。例如,应用130可以向仪器化分析***100发送与各种度量被生成时相对应的值。应用130可以发送度量的组值并且将它们周期性地发送到仪器化分析***100。不同的应用130可以以不同的速率发送相同的度量或不同的度量。相同的应用可以以不同的速率发送不同的度量。应用130通过调用由仪器化分析***100支持的应用编程接口(API)向仪器化分析***100发送数据。
可以仪器化软件程序,以向应用添加计数器或计量器。计数器包括存储根据在软件中某个事件的发生而递增的值的指令。计数器可以用于确定代码的具体部分被执行的次数,例如,函数或方法、条件代码的具体分支、异常、循环等。
通常,计数器值单调地改变,例如,计数器值可以单调增加(或减小)。例如,如果计数器跟踪自***开始执行以来事件发生的次数,则每当***检测到事件的发生时,计数器值增加。可以比较计数器的值以确定在两个不同时间点处的具体计数器值的改变。例如,具体事件在时间t1和t2之间的时间间隔内发生的次数可以通过计算从t1到t2的对应计数器值的改变来确定。应用130可以调用仪器化分析***的API,以向仪器化分析***100发送计数器的当前值。
以下是应用130的仪器化代码的示例。包括在正在被仪器化的代码中的以下指令创建用于跟踪动作或实体的计数的计数器对象。counter1=createCounter(source=“web1”,metric=“metric1”);
上述指令创建计数器对象并且将其分配给变量计数器1。计数器对象与源“web1”和度量“metric1”相关联。在实施例中,源和度量值唯一地标识与计数器(或计量器)相关联的数据流。在其他实施例中,更多或更少的键值对可以用于唯一地标识数据流。
当与计数器相对应的数据通过仪器化代码被发送到仪器化分析***100时,接收在创建计数器期间指定的值中的一个或多个值。实施例允许仪器化应用130以减少与每个数据流一起发送的信息量。这减少了作为仪器化代码的结果而在应用130中引入的开销量。
应用130的仪器化代码可以包括在代码中的不同位置处更新计数器值的指令。例如,计数器1可以通过执行指令“counter1.increment()”来递增。计数器可以被递增以跟踪与代码相关联的各种动作或实体。例如,每当特定函数或方法被调用时,计数器可以被递增,每当条件表达式的具体分支被执行时,计数器可以被递增,每当例如在对象的构造器中创建特定类型的对象时,计数器可以被递增。计数器的递增指令可以有条件地被调用,例如,如果函数使用特定参数组合来调用。应用130通过调用仪器化分析***100的API向仪器化分析***100传达计数器值。
计量器包括指令以测量应用130的某些运行时特征,例如,堆大小、高速缓存未命中或命中的数目、所使用的有源存储器、CPU(中央处理单元)利用率、响应请求所需的总时间、连接至服务所需的时间等等。计量器还可以用于跟踪某些应用特定参数或业务相关值,例如,事务数目、用户数目等等。计量器可以基于可配置的间隔来周期性地调用。计量器的值被周期性地发送到仪器化分析***100。
管理***160允许例如***管理员之类的特权用户将数据流与元数据相关联。管理***160包括管理应用170,其向***管理员提供用户接口以指定元数据。元数据包括属性,例如,名称-值对。仪器化分析***100接收描述数据流的元数据并且存储该元数据。独立于从每个数据流接收的数据指定描述数据流的元数据的能力在生成基于数据流的报告方面提供了若干益处。
作为示例,仪器化分析***100可以接收对描述每个数据流的元数据的修改,而不需要对应用130的仪器化软件进行任何修改。作为结果,仪器化分析***100接收新报告的指定和对现有报告的修改,并且基于新报告/经修改的报告来生成结果,而不需要开发人员修改应用130。
由于开发人员不需要考虑在添加指令以仪器化软件的同时需要生成的报告的类型,所以这提供了一种用于仪器化软件的新范式。开发人员仅仪器化其软件来生成可以在所生成的报告中以各种方式组合的原始数据。基于对软件进行仪器化来进行实时报告的***和方法在于2015年7月15日提交的美国专利申请14/800,677中进行了描述,其全部内容通过引用并入本文。
此外,作为在生成仪器化软件的专家的人可以与软件开发人员不同。例如,不是开发人员的数据分析专家可以定义数据流的元数据,并且生成报告而不参与开发过程。因为分析数据所需的技能通常与开发软件所需的技能不同,所以这很有意义。
此外,仪器化分析***100还可以通过整理现有报告并且添加新分析功能来接收并且处理在现有报告之上建立的报告。仪器化分析***100生成新报告的结果并且在仪器化分析***100从仪器化软件接收数据流时,发送它们以进行实时呈现。仪器化分析***100生成这些附加报告并且修改现有报告,而不需要对应用130的仪器化代码进行任何修改。
此外,仪器化分析***100提供描述数据流的元数据与数据流的数据的分离。因而,需要从开发***120传送到仪器化分析***100的数据量得以减少。每个应用130仅传送度量的数据值和标识度量的信息。元数据信息从与数据流的数据源独立的源分开地接收。因而,任何数量的元数据可以被引入,而不会增加每个数据流的数据量。
报告***150可以是客户端设备。报告***150包括客户端应用140,其允许用户与仪器化分析***100交互。在实施例中,客户端应用140是互联网浏览器,其可以包括客户端侧代码(例如,Java脚本),用于接入仪器化分析***100。在其他实施例中,客户端应用140是被开发用于与仪器化分析***100进行交互的专有应用。
报告***150可以是常规计算机***(例如,台式计算机或膝上型计算机)、平板电脑或具有计算机功能性的设备(诸如个人数字助理(PDA)、移动电话、智能电话或其他合适设备)。报告***150经由网络与仪器化分析***100进行交互。网络可以包括使用有线通信***和/或无线通信***的局域网和/或广域网的任何组合。在一个实施例中,网络使用标准通信技术和/或协议。
仪器化分析***100可以被托管在计算***上,其包括一个或多个处理器、存储器、辅助存储器和输入/输出控制器。用于托管仪器化分析***100的计算***通常是服务器级***,其与例如用作报告***150的典型计算***相比较,使用强大处理器、大存储器和快速输入/输出***。
在实施例中,来自多个开发***120的数据可以例如通过服务器合并,并且组合后的数据被发送到仪器化分析***100。例如,企业可以安装服务器,其从不同开发***120内部地接收数据流,并且将所组合的数据以批量形式周期性地发送到仪器化分析***100。这样允许从该企业的高效外部通信。然而,该配置可能导致向仪器化分析***100传达信息的延迟以及通过报告***150报告数据的对应延迟。
关联尺寸与数据流
数据流可以通过使用表示与数据流相关联的尺寸的值的坐标集合来标识。尺寸是指可以采用值的集合中的一个值的数据流的属性。每个数据流可以与尺寸的值相关联。例如,尺寸可以是数据流的源或与数据流相关联的度量名称。数据流的源可以由服务器名称、服务名称等等来标识。度量名称的示例是cpu(中央处理单元)负载、高速缓存未命中、高速缓存命中等。尺寸的值也被称为数据流的坐标值。坐标值可以被表示为存储在元数据存储装置230中的元数据属性。给定源和度量的两个尺寸,数据流可以通过提供表示源和度量的两个坐标(例如,(server1,cpu_load)或(server2,memory_usage))来标识。
数据流可以由多个尺寸(即,超过上文所描述的两个尺寸,即,源和度量名称)来表征。例如,如果每个服务器具有多个cpu,则可以包括尺寸cpu_id。因而,从***获得的每个数据流可以由(source_id,cpu_id,metric_name),即,源标识符、cpu标识符和度量名称来表征。使用三个坐标标识的数据流的示例包括(server1,cpu1,load),(server1,cpu2,load),(server2,cpu1,load),(server2,cpu2,load)等等。
作为尺寸的另一示例,***可以将客户名称定义为尺寸。客户的名称可以例如基于在开发***120上执行的仪器化软件的配置参数来通过仪器化软件来报告。可以使用***属性来指定针对仪器化软件的客户名称。仪器化软件包括当它标识与该具体客户相关联的数据流时的客户名称。将数据流与客户相关联的能力允许仪器化分析***执行特定于客户的分析,例如,关于每个客户的***使用的报告、标识报告超过阈值数目个错误的客户等等。
数据流可以从仪器化软件获得,或者可以在仪表分析***内作为数据流语言程序的块的执行结果来生成。数据流还可以包括被存储在仪器化分析***中的数据,例如,存储在数据存储装置(诸如本文中所描述的时间序列数据存储装置260)中。
仪器化分析***的***架构
图2示出了根据实施例的用于执行用于处理从仪器化软件接收的数据流的数据流语言程序的***的架构。该仪器化分析***100包括接口模块210、量化模块240、元数据模块220、元数据存储装置230、数据点路由模块250、分析引擎270、用户接口管理器280、数据流语言处理器200、时间序列数据存储装置260和软件总线290。在其他实施例中,仪器化分析***100可以包括本文中未被描述的其他模块。作为替代,作为由具体模块提供的所指示的功能可以由其他模块来实现。
接口模块210接收来自外部***(例如,与仪器化分析***100通信的开发***120)的请求。接口模块210支持外部***可以调用的各种应用编程接口(API)。只要仪器化代码以可以由接口模块210处理的格式发送信息,接口模块210就可以接收并且处理使用由不同供应商提供的功能来仪器化的应用130提供的数据。
接口模块210从一个或多个开发***120接收数据流的形式的数据。在实施例中,接口模块210接收数据并且将输入数据表示为元组。因而,每个数据流被表示为多个元组,每个元组表示数据点。由接口模块210接收的数据元组包括各种元素。数据元组包括度量标识符,例如,度量的值以及元组相对应的度量的名称和。所接收的数据元组还可以包括其他元素,例如,与发送数据的应用130捕获数据的时间相对应的时间戳、与数据相关联的一个或多个属性。
在实施例中,与元组相关联的时间戳表示数据值由仪器化分析***100接收的时间。与数据相关联的属性可以以名称-值对的形式来提供。这些属性可以提供描述所接收的数据的附加信息,例如,描述数据源的信息(诸如与源相关联的主机名称、服务器名称、设备名称、或服务名称)、与数据相关联的方法或函数名称、应用实例标识符等等。
在实施例中,接口模块210生成标识符并且将该标识符分配给由接口模块210接收的记录。该标识符在本文中被称为时间序列标识符(本文中也被称为TSID或tsid)。唯一时间序列标识符被分配给匹配度量名称的所有元组以及与元组一起接收的属性集合。因而,元组(度量名称、属性、度量值、时间戳)被映射到元组(tsid、度量值、时间戳)。例如,如果元组提供度量名称m1和主机名称h1,则度量名称为m1和主机名称h1的所有元组被分配相同的时间序列标识符。因而,tsid唯一地标识由仪器化分析***100接收的数据流的所有元组。
量化模块240处理所接收的数据值,以便将在任何时间间隔可用的输入数据时间序列的数据变换为数据在规则的时间间隔可用的时间序列。例如,在输入时间序列中接收的数据值可以在不规则间隔出现,然而,量化模块240处理时间序列的数据,以生成数据周期性地(例如,每一秒、或每5秒、或每15秒等等)出现的时间序列。这个过程在本文中被称为时间序列的量化。在实施例中,接口模块210创建多个线程或进程,每个线程或进程被配置成接收与数据流相对应的数据。每个线程或进程调用量化模块240以对在每个时间间隔内接收的每个数据流的数据执行量化。用于量化仪器化软件的数据流的***和方法在于2015年7月15日提交的美国专利申请14/800,679中进行了描述,其全部内容通过引用并入本文。
元数据模块220接收并且存储描述从开发***120接收的各种数据流的元数据信息。在实施例中,存储在元数据模块220中的元数据从用户(例如,使用管理***160与仪器化分析***100交互的***管理员)接收。
元数据可以被表示为名称-值对。在实施例中,元数据被表示为元数据对象,每个对象定义可以被表示为名称-值对的属性集合。数据流集合可以与元数据对象相关联。因而,由元数据对象表示的所有属性均与每个数据流相关联,该数据流与元数据对象相关联。
元数据数据存储装置230存储元数据对象及其与数据流的关联。元数据数据存储装置230存储每个元数据对象的标识符(ID)和由元数据对象表示的属性。在实施例中,每个数据流与唯一地标识数据流的时间序列标识符相关联。元数据数据存储装置230存储将每个元数据对象映射到时间序列标识符值集合的索引。元数据存储装置230可以接收指令以修改元数据对象。例如,元数据存储装置230可以接收指令以修改、添加或删除由元数据对象表示的一些属性。可替代地,元数据存储装置230可以接收指令以修改从元数据对象到数据流的映射。例如,元数据存储装置230可以接收指令以将数据流与元数据对象相关联或者删除元数据对象和数据流之间的关联。
在实施例中,元数据存储装置230被表示为关系数据库,而且还可以被表示为任何其他类型的数据库或数据存储装置。例如,元数据存储装置230可以是存储将元数据对象ID映射到标识数据流的时间序列ID的表的关系数据库。其他数据库表可以将与每个元数据对象相关联的属性存储为从元数据对象ID到被表示为名称-值对的每个属性的映射。
用户接口管理器280渲染用户接口,用于允许用户指定数据流语言程序的参数并且呈现数据流语言程序的执行结果。用户接口管理器280可以将数据流语言程序的实时结果显示为随着数据流的数据被接收而周期性地更新的一个或多个图表。用户接口管理器280还呈现用户接口,其允许用户在视觉上而非文字地指定数据流语言程序。本文中对由用户接口管理器280呈现的用户接口的屏幕截图的示例进行了描述。
时间序列数据存储装置260存储从各种源(例如,开发***120)接收的数据。时间序列数据存储装置260在本文中也被称为时间序列数据库(或TSDB)。在实施例中,时间序列数据存储装置260还存储数据被量化之后的时间序列数据。时间序列数据存储装置260还可以存储每个时间序列的汇总数据。时间序列数据存储装置260还存储各种分析请求的结果,例如,用户所请求的各种报告的结果。分析引擎270通过将存储在时间序列数据存储装置260中的数据与从各种源作为数据流而获得的新数据进行组合来计算某些报告的结果,例如,时间间隔的移动平均。
软件总线290为仪器化分析***100的模块提供了向仪器化分析***100的其他模块提供数据流的数据的机制。数据流语言程序可以向软件总线290发送数据流。其他模块(例如,提取模块320、查找模块310、窗口模块380等等)可以从软件总线290读取数据,并且对数据执行进一步处理。例如,在软件总线290上发布的数据流语言程序的数据流输出可以通过作为任务执行的另一数据流语言程序的查找块来标识。
数据流语言处理器200执行使用数据流语言指定的程序。数据流语言处理器200接收数据流语言程序,解析数据流语言程序以验证程序。数据流语言处理器200生成数据流语言程序的表示,并且使用该表示执行数据流语言程序。
使用数据流语言指定的请求是基于与从各种开发***120接收的数据相关联的元数据的查询。数据流语言支持各种类型的分析功能,例如,聚合和变换。数据流语言提供了以各种方式组合包括聚合和变换在内的各种功能的能力。在实施例中,数据流语言处理器200解析使用数据流语言指定的程序,生成程序的可执行表示,并且执行所生成的表示。
数据流语言
使用数据流语言指定的程序包括被称为块的计算单元。每个块与由数据块执行的特定处理或计算相关联。每个块还可以具有一个或多个输入端口和一个或多个输出端口。块通过输入端口接收输入,使用数据执行特定计算,并且向输出端口发送计算结果。该过程以预先指定的周期性进行重复。因而,输入端口用作向块提供数据的机制,并且输出端口用作输出块的数据的机制。
在实施例中,每个块与块的类型相关联。块的类型确定由块执行的计算。由数据流语言支持的块的类型包括查找块、提取块、统计计算块、阈值块等等。块可以与某些配置参数相关联。例如,查找块可以将表达式作为输入。数据流语言程序包括块类型的实例。例如,具有特定搜索表达式的查找块是包括在数据流语言程序中的查找块的实例。
在实施例中,块的输入端口用字符“?”标识,输出端口用字符“!”标识。其他实施例可以使用其他语法来标识输入端口/输出端口。例如,如果块B1具有输入端口in1和in2,则特定输入端口(如in2)可以被标识为“B1?in2”。类似地,如果块B1具有输出端口out1和out2,则特定输出端口(如out2)可以被指定为“B2!out2”。如果块具有单个输入/输出端口,则数据流语言程序可以不标识端口。例如,如果块B2具有单个输入端口,则输入端口可以被称为“B2”。类似地,如果块B2具有单个输出端口,则输出端口可以被称为“B2”。
两个块可以通过指定一个块的输出被提供作为另一块的输入来连接。因此,数据流语言程序可以被认为是块的网络。在实施例中,两个块之间的连接使用两个块之间的箭头来指定。例如,如果B1和B2均具有单个输入端口和单个输入端口,则“B1→B2”指定B1的输出被提供作为块B2的输入。类似地,如果B1有两个输出端口out1和out2并且B2有两个输入端口in1和in2,则B1的out1端口可以通过表达式“B1!out1→B2?in2”来连接至B2的in2端口。
数据流语言处理器200可以基于数据流语言程序来执行多个任务。每个任务可以与开始时间、结束时间和周期性相关联。因而,该任务以由周期性指定的间隔从开始时间直到结束时间来执行。周期性指定数据流语言程序处理数据的速率。用户可以基于相同的数据流语言程序来指定不同任务用于执行,每个任务与不同的开始时间、结束时间和周期性相关联。
图3示出了根据实施例的用于处理数据流语言程序的块的数据流语言处理器的架构。如图3所示,数据流语言处理器200包括用于处理数据流语言的各种类型的块的模块。因而,数据流语言处理器200包括查找模块310、提取模块320、计算模块330、阈值模块340、发布模块350、编组模块360、窗口模块380、数据流元数据生成器370以及定制块模块390。与图3所示的模块相比较,其他实施例可以包括更多或更少的模块。某些模块(例如,解析器)在图3中未被图示。每个模块的细节以及由每个模块处理的块的类型的细节一起,在本文进行进一步描述。
查找模块310执行查找块以标识数据流集合以供由数据流语言程序的其余部分进行处理。提取模块320从所标识的数据流中提取数据,并且提供数据以供由数据流语言程序的后续块进行处理。计算模块330执行在数据流语言程序中指定的统计计算,例如,均值、中值、求和等等。阈值模块340将输入数据流的数据与阈值进行比较,以确定输入数据是否超过某些界限。指定用于比较的阈值可以动态地改变,例如,阈值可以被指定为以特定因子缩放的输入数据流的一小时移动平均值。发布模块350执行发布块,其向包括用户接口(例如,仪表板)在内的各种接收器提供发布块之前的块的输出,以用于呈现结果、用于存储到数据库、或用于提供给其他块以供进一步处理。编组模块360对输入数据流的数据执行编组,以生成与每个组相对应的结果数据流集合。这些组可以基于使用编组命令指定的一个或多个属性,例如,来自每个数据中心的数据流组。数据流元数据生成器370生成表示作为执行数据流语言程序的结果生成的结果数据流的元数据,并且将该元数据存储在元数据存储装置230中,以供允许仪器化分析***100的其他部件使用结果数据流。定制块模块390处理数据流语言程序中的用户定义块(定制块)。
示例数据流语言程序
图4示出了根据实施例的用于说明数据流语言的特征的数据流语言程序的示例。图4以块的形式表示数据流语言程序。图4所示的数据流语言程序可以被指定如下。
find(“source:analytics*”)→fetch
→groupby(“datacenter”)
→stats!mean
→publish
上述数据流语言程序的第一块是采用指定搜索表达式的字符串参数的查找块410。查找块查找由仪器化分析***100接收的满足搜索表达式的数据流集合。例如,查找块410采用标识“source”元数据属性值“dev.”的所有数据流的搜索表达式“source:dev”。例如,企业可以将所有开发***与源值“dev.”相关联。查找块的输出被提供为提取块420的输入。
提取块420从由查找块标识的数据流中取回数据。提取块以预先指定的周期性接收数据。提取块可以接收由接口模块210接收并且由量化模块240量化的数据流的实时数据。提取块420还可以接收存储在时间序列数据存储器260中的数据流的数据。提取块420的输出被提供为分组块430的输入。
分组块430采用数据流的一个或多个属性的名称作为输入。分组块430通过所指定的属性对数据流进行编组。如上述示例所示,分组块430采用“datacenter”属性作为输入,并且通过其数据中心值对数据流进行编组。因而,具有相同数据中心的所有数据流的数据被编组在一起。分组块430输出与数据中心的每个值相对应的数据流。分组块430的输出被提供为统计块440(其是一种统计计算块)的输入。
统计块440具有多个输出,例如,均值、中值、求和等等。每个输出端口基于由输出的名称指定的计算类型来提供值。统计块440计算从分组块430作为输入而接收的每组数据流的均值。相应的,统计块440确定从每个数据中心的数据流接收的数据的均值。如图4所示,统计块的平均输出端口向发布块450提供输入。
发布块450可以被配置成在仪表板上发布所接收的输入。发布块可以被配置成在软件总线290上发布数据。软件总线290向仪器化分析***100的所有其他模块提供数据。数据流语言处理器200以针对数据流语言程序所指定的周期性来执行上文所指定的各种块。
数据流语言程序执行的整体过程
图5示出了根据实施例的用于基于数据流语言程序来处理从数据流接收的数据的仪器化分析***的整体过程。元数据模块220接收510描述数据流的元数据。元数据定义被接收,其与数据流本身的数据无关。例如,数据流可以仅提供包括数据值和与数据值相关联的时间戳的元组,而不提供任何属性(例如,名称-值对)。元数据模块220从源接收描述数据流的属性,该源不同于提供数据流的源。例如,数据流由在开发***120上执行的仪器化软件的实例提供,而元数据定义可以经由***管理员通过管理***160提供。
分析引擎270使用描述数据流的元数据属性接收520数据流语言程序。数据流语言程序可以表示提供给仪器化分析***100的指令集合,以生成描述仪器化软件的报告,并且实时提供结果,即,当数据流的数据被接收时。
在仪器化分析***100从各种开发***120接收各种数据流的数据时,仪器化分析***100重复以下步骤。接口模块210接收530不同数据流的数据。在实施例中,接口模块210等待固定时间间隔,例如,1秒或几秒,并且收集从不同数据流接收的数据。在实施例中,量化模块240对针对每个时间间隔的每个输入数据流的数据执行量化。因而,来自每个数据流的数据被聚合成与针对该时间间隔的数据流相关联的单个值。
分析引擎270基于针对时间间隔的数据流的数据来执行540数据流语言程序。如果每个数据流的数据被量化,则分析引擎270使用来自每个数据流的量化值执行540数据流语言程序。数据流语言程序可以包括发布块,其使得分析引擎270发送数据流语言程序的评价结果以供呈现给例如用户接口。
数据流语言程序可以生成一个或多个数据流。分析引擎270还将作为数据流语言程序的评价结果而生成的数据流存储在例如时间序列数据存储装置260中。分析引擎270创建一个或多个新数据流(或时间序列),其表示数据流语言程序的结果。新数据流被存储在时间序列数据存储装置260中。这允许将数据流语言程序的结果用作其他数据流语言程序的输入。例如,数据流语言程序可以生成表示从多个数据流接收的第95百分位数的值的数据。数据流语言程序的结果可以作为新数据流而被存储在时间序列数据存储装置260中。分析引擎270可以进一步执行基于所生成的数据流来计算移动平均值的另一数据流语言程序。
量化
输入数据流的量化简化了使用量化数据流的数据处理。例如,基于所接收的多个数据流的聚合值可以针对每个时间间隔进行确定。这通过进一步聚合跨多个数据流的用于具体时间间隔的数据来执行。在实施例中,输入数据流的量化在每个时间间隔结束时被执行,使得用于该时间间隔的量化数据可用于处理。
此外,仪器化分析***100存储单个数据流的量化数据,使得跨多个数据流的数据可以以各种方式组合,例如,如在请求中指定的。换句话说,用户可以发送以第一种方式组合跨多个数据流的数据的第一请求。随后,用户可以发送用于以不同的方式组合跨不同数据流的数据的新请求。例如,用户可以组合跨数据流的数据以查看在各种数据中心上计算的聚合。然而,随后,用户可以改变请求以查看在不同类型的应用、不同类型的服务器、不同地理区域等等上计算的聚合。
仪器化分析***100还可以接收用户修改先前数据流在其上被聚合的数据流集合的请求。例如,用户可以请求仪器化分析***100从被聚合的数据流集合中移除一个或多个数据流,并且基于修改后的集合来请求聚合。用户可以发送这种请求,以分析移除或添加新服务器、应用或对***配置进行任何其他修改的影响。仪器化分析***100保持量化数据流的数据,并且基于这些请求来组合在不同时间间隔内量化的数据流数据。由于仪器化分析***100存储量化数据流数据,因此仪器化分析***100具有根据需要有效组合跨数据流的数据的能力。
仪器化分析***100可以组合跨数据流的数据以执行跨多个数据流的移动聚合计算。仪器化分析***100可以连续计算跨给定长度的时间间隔的任何移动聚合值,例如,一小时移动平均、15分钟移动平均等等。
量化模块240聚合针对每个时间间隔的输入数据流的值,并且生成用于该时间间隔的聚合值。因而,量化模块240接收数据值可以在任意时间间隔之后发生的数据流。量化模块240处理输入数据流以生成其中数据在规则时间间隔可用的数据流。本文中对量化模块240的细节进行进一步描述。
量化模块240接收描述在数据流中接收的值的类型的信息,例如,该值是否是某个动作或实体的计数,该值是否通过某个值的聚合来获得,该值是否表示给定值集合的最大值/最小值等等。数据流的值的类型描述了为获得该值而执行的操作的类型。量化模块240存储从数据流的各种类型的值到对用于间隔的数据流的输入值执行的操作的类型的映射,以获得表示时间间隔的结果值。
在实施例中,量化模块240包括缓冲器,其用于存储作为针对具体时间间隔的输入而被接收的数据值。由于在时间间隔中接收的值的数目不能提前得知并且可以从一个时间间隔到另一个时间间隔而改变,所以量化模块240的缓冲器使用可以存储任意数目个值的数据结构。例如,量化模块240可以使用列表数据结构或堆栈数据结构来存储输入数据流的值。
量化模块240收集针对每个时间间隔接收的数据流的数据值。量化模块240跟踪时间。当量化模块240确定达到当前时间间隔的结束时,量化模块240处理在时间间隔中接收的所有数据值,以确定表示该时间间隔的聚合值。量化模块240随后清除用于表示输入值的缓冲器,并且使用它来存储用于下一时间间隔的值。在实施例中,量化模块240使用多个缓冲器,使得当存储在缓冲器中的先前时间间隔的数据正在被处理时,用于下一时间间隔的新数据可以被存储在另一缓冲器中。
图6示出了根据实施例的从仪器化软件接收的数据流的量化过程。图6示出了时间轴620a和620b,每个时间轴表示具有数据值序列的时间线。时间轴620a示出了输入数据流600的数据值,而时间轴620b示出了由量化模块240生成的量化数据流610的值。
如图6所示,四个数据值D11,D12,D13和D14在时间间隔I1(表示从T0到T1的时间)中被接收;两个数据值D21和D22在时间间隔I2(表示从T1到T2的时间)中被接收;并且三个数据值D31,D32和D33在时间间隔I3(表示从T2到T3的时间)中被接收。可以假设Tm和Tn之间的每个时间间隔包括开始时间点Tm(使得结束时间点Tn包括在下一时间间隔中)。可以使用Tm和Tn之间的时间间隔的任何其他解释,例如,结束时间点Tn被包括在时间间隔中,而开始时间点Tm被包括在先前时间间隔中。
量化模块240处理每个时间间隔的数据值以生成在时间轴620b上示出的对应结果值。例如,量化模块240聚合在时间间隔I1中接收到的值D11,D12,D13和D14以生成在时间轴620b上示出的值D1;量化模块240聚合在时间间隔I2中接收的值D21和D22以生成在时间轴620b上示出的值D2;并且量化模块240聚合在时间间隔I3中接收的值D31,D32和D33以生成在时间轴620b上示出的值D3。
聚合数据流的输入值而执行的操作的类型取决于由输入数据流表示的数据的类型。如果输入数据流的每个元组是某个值的计数,例如,由软件执行的动作的计数,则量化模块240聚合输入值,以通过对计数加和来确定针对每个时间间隔的输出数据流值。如果所接收的输入数据流的每个元组是值集合的最小值(或最大值),则量化模块240聚合针对时间间隔的输入值,以通过确定用于该时间间隔的输入值的最小值(或最大值)来确定用于该时间间隔的输出值。如果所接收的输入数据流的每个元组是值集合的平均值,则量化模块240聚合与时间间隔相关联的输入值,以通过确定每个时间间隔的输入值的平均来确定用于该时间间隔的输出数据流值。如果所接收的输入数据流的每个元组是该时间点处的度量的最后可用值,则量化模块240聚合用于时间间隔的输入值,以通过仅使用该数据流的最后值来确定用于该时间间隔的输出值。
度量数据流和事件数据流
在实施例中,仪器化分析***100支持两种类型的数据流,即,度量数据流和事件数据流。事件通常是指在***中发生的异常情况,例如,负载超过某些阈值或存储器使用超过某些阈值。事件还可以是指例如由开发***120的***管理员在***中执行的具体动作。度量数据流包括表示可以从仪器化软件获得或从度量数据流导出的度量值的数据,该度量数据流从仪器化软件获得。除非另有说明,否则本文中所指的数据流是度量数据流。度量数据流也被称为度量时间序列,并且事件数据流也被称为事件时间序列。
度量数据流包括使用以下方式表示的数据点:数据流标识符、时间戳值和数据值。数据流标识符标识数据点所属的数据流。时间戳值将数据点与时间(例如报告数据点的时间或仪器化分析***100接收到数据点的时间)相关联。数据值是正在被报告的度量的值,例如,表示特定时间的服务器中的CPU负载的值,或表示特定时间的服务器中的存储器使用的测量。度量时间序列通常向仪器化分析***提供大量数据,例如,每个数据流可以每秒报告几个数据点,并且每个企业可能存在大量的数据流。
事件数据流包括使用以下方式表示的数据点:数据流标识符、时间戳值和描述事件的一个或多个键值对。数据流标识符和事件数据流的时间戳值类似于度量数据流。然而,与度量数据流的数据点相比较,事件通常以较少的频率发生。例如,事件可以表示由***管理员执行的动作,诸如启动维护窗口。事件的键值对描述事件,例如,启动维护窗口的***管理员的名称、维护窗口的目的、维护窗口的范围等等。事件通常以不规则速率发生,例如,事件可能通过某个***而非其他***来报告,事件可能发生一次,并且可能在相当长的时间内不会发生等等。因此,与事件一起存储的信息量可能很大。
事件还可以描述在***中发生的某些特定条件,例如,显示某个特点的某个度量。作为示例,如果服务器的cpu负载或存储器使用超过某些阈值,则可能会报告事件。这些事件作为数据流语言程序的执行结果通过仪器化分析***100来生成。
仪器化分析***100在处理数据方面以与度量时间序列相同的方式处理事件时间序列。例如,仪器化分析***100允许基于任一类型的数据流来实时报告信息。仪器化分析***100允许将事件数据流与度量数据流进行比较,以允许用户将两者相关。例如,在事件被生成时,用指示度量值的事件数据流覆盖度量数据流的报告可以被生成。
数据流语言程序的数据流的动态选择
允许动态选择数据流的查找块针对数据流语言程序而被输入。查找块指定用于标识数据流的搜索条件。在实施例中,搜索条件是基于描述数据流的属性(或元数据标签)的表达式。这些属性可以被接收作为数据流的一部分或与数据流相关联,例如,作为添加到仪器化分析***100并且存储在元数据存储装置230中的元数据。通过执行搜索条件来标识的数据流被提供为数据流语言程序的后续块的输入。
数据流语言处理器200可以周期性地评价查找块的搜索条件,从而重新评价作为数据流语言程序的输入而被提供的数据流集合。因此,作为数据流语言程序的输入而被提供的数据流集合被动态地改变。例如,开发***120可以添加新服务器,开始或停止服务或重新配置现有服务。此外,新的开发***120可以向仪器化分析***100发送数据流。因此,由仪器化分析***100接收的数据流集合被动态地改变。
查找块的搜索条件可以用于基于数据流的特点来标识数据流集合。例如,搜索条件可以用于标识属于具体数据中心的服务、与特定应用相对应的服务、与可以跨多个数据中心扩展的组织相关联的服务、运行软件的特定版本的服务(如操作***或具有某个补丁的应用)。针对查找块指定的搜索条件的类型取决于为数据流定义的并且存储在元数据存储装置230中的元数据标签的类型。
查找块的搜索条件在从诸如开发***之类的外部***接收的所有数据流以及在仪器化分析***100内生成的数据流上进行评价,例如,作为数据流语言程序的中间结果或最终结果。例如,如本文中所描述的,数据流语言程序的中间结果或最终结果被表示为第一类公民,其被视为与从开发***120接收的数据流相同。因而,当查找块的搜索条件被评价时,结果可以包括从开发***120接收的数据流以及在仪器化分析***100内生成的数据流。
以下是针对查找块指定的搜索条件的几个示例。假设用户想要在分析服务器上查找负载,并且分析服务器被命名为analytic1,analytic2,analytic3,...和analyticN。分析服务器集合可以通过使用查找块find(“source:analytic*”)来标识,该查找块find将搜索条件指定为元数据标签值满足正则表达式“analytic*”的所有数据流。
搜索条件可以是逻辑表达式。例如,查找块find(“source:databank*AND metric:numCacheHits”)查找具有形式为“databank*”并且度量名称为numCacheHits的源属性的所有数据流。因而,针对提供来自被标识为“databank*”的源的度量numCacheHits的所有数据流,对具有该查找块的数据流语言程序进行评价。类似地,查找块find(“source:databank*AND metric:numCacheMisses”)查找来自被标识为“databank*”的源的提供度量numCacheMisses的所有数据流。作为另一示例,查找块find(“source:zk*AND smetric:cpuAND region:ore1”)从具有度量“cpu”的区域“ore1”中查找具有形式为“zk*”的源名称的所有数据流。
查找块可以与指定开始时间、停止时间和周期性中的一个或多个的配置参数相关联。查找块的周期性可能与查找块所属的数据流语言程序的业务的周期性不同。之所以这样,是因为数据流集合的速率可能与用户希望数据移动通过数据流语言程序的速率不同。例如,用户可以确定数据流集合不经常改变,并且搜索字符串可以每隔一小时左右评价一次,而任务的周期性是1分钟。因而,用户可以针对查找块和数据流语言程序指定不同周期性值。
在实施例中,查找块的评价不是基于固定周期性,而是由在仪器化分析***100中发生的某些事件触发。例如,查找块的评价是由元数据中的任何更新来触发。元数据中的更新可能导致查找块改变的结果,从而基于查找块产生被数据流语言程序处理的不同的输入数据流集合。在实施例中,仪器化分析***100将查找块与元数据的特定部分相关联。在实施例中,如果查找块基于某些元数据属性,则与那些元数据属性相关联的任何改变触发查找块的执行。例如,如果对于来自区域“xyz”的所有数据流而言,查找块评价为真,则对“xyz”区域的数据流的任何添加或删除会触发对数据流的评价。将数据流添加或删除到其他区域可能不会触发查找块的执行。仪器化分析***100分析并且标识与每个查找块相关联的元数据属性集合。仪器化分析***100检测是否发生与元数据属性集合相关联的元数据改变,该元数据属性集合与查找块相关联。如果仪器化分析***100检测到与查找块相关联的元数据属性集合相关联的的元数据的改变已经发生,则仪器化分析***100重新评价查找块。在实施例中,如果仪器化分析***检测到与数据流相关联的属性已经改变,则该仪器化分析***重新评价查找块。在实施例中,如果查找块的定义被修改,则查找块被重新评价。
在实施例中,当存在数据流的改变时,查找块被重新评价。例如,如果新数据流通过仪器化分析***100来检测,或者如果仪器化分析***100确定数据流不活动,则仪器化分析***100重新评价查找块。所生成的数据流可以是从诸如开发***120之类的外部***接收的数据流,或者数据流可以通过数据流语言程序的中间结果或最终结果生成。例如,如本文中所描述的,数据流语言程序的中间结果或最终结果被表示为第一类公民,其被视为与从开发***120接收的数据流相同。因此,添加、删除或修改这些数据流的元数据还使得查找块被重新评价。
图7图示了根据实施例的通过用于向数据流语言程序提供输入的查找块来选择数据流集合。如图7所示,查找块710a具有由搜索字符串“datacenter:east*”指定的搜索条件。数据流语言处理器200的查找模块310标识其中“datacenter”元数据标签(或属性)满足正则表达式“east*”的所有数据流。
图7示出了由仪器化分析***100接收的数据流集合740a,包括具有数据中心标签值central_dev、east_dev、east_qa、west_dev和north_dev的数据流。查找模块310确定具有数据中心标签值east_dev和east_qa的数据流满足查找块710a的搜索条件。查找模块310为数据流语言程序的后续块730a提供所标识的数据流集合750a。
作为数据流语言程序的其余部分的输入而被提供的数据流集合取决于与查找块710相关联的搜索条件。例如,查找块710b具有搜索条件“datacenter:*dev”,其与查找块710a的搜索条件不同。数据流语言处理器200的查找模块310通过标识“datacenter”元数据标签(或属性)满足正则表达式“*dev”的所有数据流来处理查找块710b的搜索条件。
图7示出了由仪器化分析***100接收的数据流集合740b,其包括具有数据中心标签值central_dev、east_dev、east_qa、west_dev和north_dev的数据流。在该示例中,集合740b具有与集合740a相同的元素。查找模块310确定具有数据中心标签值central_dev、east_dev、west_dev和north_dev的数据流满足查找块的搜索条件。查找模块310为数据流语言程序的后续块730b提供所标识的数据流集合750b。
图7图示了通过数据流语言处理器200动态确定由数据流语言程序处理的数据流集合。由数据流语言处理的数据流集合基于查找块710的搜索条件以及由仪器化分析***100接收的当前可用数据流来确定。
在实施例中,查找块与时间表相关联,使得数据流语言处理器200的查找模块310根据时间表执行查找块。例如,查找块可以与周期性相关联,使得查找模块310以基于周期性确定的速率执行查找块。因而,查找模块310基于周期性来等待时间间隔,并且重新评价满足查找块的搜索条件的数据流集合。该过程被重复(直到时间达到与查找块相关联的“结束时间”值为止)。
图8图示了根据实施例的作为对查找块的周期性重新评价的结果向数据流语言程序提供输入的数据流集合的动态改变。如图8所示,查找块的搜索条件在时间T1进行评价,并再次在时间T2进行评价,导致不同数据流集合850被标识以供通过数据流语言程序进行处理。图8图示了在两个不同的时间点重新执行查找块。
在时间T1,仪器化分析***100接收具有数据中心标签值central_dev、east_dev、east_qa、west_dev和north_dev的数据流集合840a(注意可能存在具有相同数据中心标签值的多个数据流)。查找模块310评价具有搜索条件“datacenter:east*”的查找块810a。因而,查找模块310标识具有数据中心标签值east_dev和east_qa的数据流集合850a。数据流语言处理器200提供被标识给数据流语言程序的后续块830a的数据流集合850a。
查找模块310在时间T2重新评价查找块。在时间T2,仪器化分析***100接收具有数据中心标签值central_dev、east_dev、east_prod、west_dev和north_dev的数据流集合840a。因而,查找模块310标识具有数据中心标签值east_prod和east_qa的数据流集合850b。
与在时间T1标识的集合850a相比较,集合850b包括具有数据中心标签east_prod的新数据流,并且缺少具有数据中心标签east_qa的数据流。数据流语言处理器200提供被标识给数据流语言程序的后续块830a的数据流集合850a。因而,基于查找模块的相同搜索条件来对数据流集合850进行的每个后续评价可以产生向后续块830提供的不同数据流集合。
动态改变由数据流语言程序处理的数据流集合的能力允许数据流语言程序适于向仪器化分析***提供输入的动态改变的环境。例如,企业可以向数据中心添加/移除服务器,添加新数据中心,添加/移除/修改服务,改变服务以执行以不同方式仪器化的软件等等。指定由数据流语言程序处理的数据流集合的能力允许仪器化分析***在数据动态改变时报告描述企业的数据,而不必修改数据流语言程序。
图9示出了根据实施例的用于标识用于使用查找块向数据流语言程序提供输入的数据流集合的过程。如图9所示,数据流语言处理器200接收900数据流语言程序以供处理。图9所图示的过程基于如下假设:数据流语言程序具有查找块,随后是与其余的数据流语言程序相对应的块集合。
查找块与搜索字符串相关联。查找模块310接收910与查找块相关联的搜索字符串。查找模块310解析920搜索字符串以构建与搜索字符串相对应的搜索条件的表示,例如,解析树表示。查找模块310标识930与搜索条件相对应的数据流集合。查找模块310向数据流语言程序的后续块(例如,提取块)提供所标识的数据流集合。数据流语言处理器200基于搜索条件来从所标识930的数据流取回数据,并且执行940其余的数据流语言程序。
基于搜索条件来标识930数据流集合并且执行940数据流语言程序的其余块的步骤由数据流语言处理器200重复执行。重复步骤930和940的速率可能会有所不同。例如,与执行数据流语言程序的其余块的速率相比较,标识930数据流集合的步骤可以以较慢的速率执行。对于与数据流语言程序相对应的任务,数据流语言程序的其余块的执行940速率和查找块的执行速率被指定(例如,通过用户)。
从数据流语言程序的数据流取回数据
在实施例中,数据流语言程序包括用于从给定数据流集合取回数据的提取块。通常,提取块放置在数据流语言程序的数据流水线中的查找块之后。换句话说,查找块的输出被提供给提取块的输入。因而,作为处理查找块的结果,提取块从由查找模块310标识的数据流集合中取回数据。提取模块320执行提取块。
图10图示了根据实施例的通过执行提取块从数据流取回数据的过程。图10所图示的某些步骤可以以与图10中指示的顺序不同的顺序执行。此外,步骤可以通过与本文中所指示的那些模块不同的模块来执行。
数据流语言处理器200基于数据流语言程序来接收任务的开始时间、结束时间和周期性。提取模块320基于数据流语言程序的查找块的搜索条件来从查找模块310接收数据流集合。提取模块取回数据并且将其提供给数据流语言程序的后续块用于执行。提取模块320执行以下步骤用于从每个后续时间间隔的数据流中提取数据。
提取模块320标识下一时间间隔,并且等待数据在时间间隔期间到达。量化模块基于每个输入数据流的数据来生成具有不同周期性的多个量化数据流。例如,量化数据流Q1可以以5秒的周期性来生成,另一量化数据流Q2可以以10秒的周期性来生成,另一量化数据流Q3可以以1分钟的周期性来生成等等。提取模块320选择1020具有最大周期性时间间隔的量化数据流,该最大周期时间间隔小于执行数据流语言程序的周期性时间间隔(如基于数据流语言程序的周期性而确定的)。
例如,如果基于数据流语言程序的周期性,执行数据流语言程序的时间间隔的大小需要在30秒内,则提取模块320选择周期性为10秒的量化数据流Q2。量化数据流Q3未被选择,因为它的周期性时间间隔为1分钟(即,60秒),其大于数据流语言程序的时间周期性时间间隔(即,30秒)。量化数据流Q3未被选择,因为它的周期性时间间隔为5秒,其不是小于数据流语言程序的周期性时间间隔的最大周期性时间间隔(由于它小于Q2的周期性时间间隔,该Q2的周期性时间间隔为10秒)。提取模块320对所选择的量化数据流进行重新量化,以生成周期性为30秒的重新量化的数据流(例如,通过聚合在当前30秒时间间隔内出现的量化数据流的三个数据点的数据值)。
如果需要,提取模块320从时间序列数据存储装置260取回1050数据,以便与从数据流接收的实时数据组合。提取模块向后续块(例如,统计计算块)提供1060经组合的数据。例如,假设数据流语言程序向屏幕发布输出,并且任务的开始时间被指示为负(例如,-1小时)。数据可以被呈现为图表,其呈现在图表被接收时的数据以及针对所选时间间隔的过去数据。例如,用户可以选择用于在图表上呈现数据的一小时时间窗口。在这种情形下,如果图表仅基于在数据流中接收到的实时数据来渲染,则当仪器化分析***100开始处理数据流语言程序时,图表可能为空。所显示的图表可能从右侧缓慢开始填充,并且将在一小时后填充所显示的窗口。这提供了不理想的用户体验。理想情况下,用户希望在整个一小时内看到完整图表(具有一小时数据),图表从一开始就被显示。
提取模块320通过从时间序列数据存储装置260中取回1050数据来弥补上述情形,以供渲染在来自数据流的实时数据可用的时间之前出现的图表的部分。例如,当仪器化分析***100开始处理数据流语言程序时,提取模块320呈现用于使用从时间序列数据存储装置260获得的数据来渲染整个图表的数据。由于从数据流接收越来越多的数据,提取模块320将来自时间序列数据存储装置260的数据与所接收的实时数据组合。
作为示例,在10分钟之后,提取模块320发送用于呈现的与从数据流接收的10分钟数据组合的、从时间序列数据存储装置260取回的50分钟数据。类似地,在30分钟之后,提取模块320发送用于呈现的与从数据流中接收的30分钟数据组合的、从时间序列数据存储装置260取回的30分钟数据,等等。在接收到数据流的多于60分钟的数据之后,提取模块320具有足够的基于数据流的数据,使得其可以发送基于从数据流接收的用于渲染图表的所有数据,并且不必将来自数据流的数据与时间序列数据存储装置260先前存储的数据组合。
提取模块320可以从时间序列数据存储装置260取回1050数据,用于与在其他情形(例如,对于窗口块)下从数据流接收的数据组合。窗口块提供指定长度(如tw)的滑动时间窗口,并且执行窗口数据的计算(如平均值)以确定一小时时间窗口内的移动平均。在这种情形下,由于来自数据流的数据在一段时间tw内不可用于填充整个窗口,所以存在初始化延迟时间tw。因而,如果数据流语言程序在时间t1开始,则从时间t1-tw开始的数据从时间序列数据存储装置260中提取,以填充窗口以提供用于窗口计算的有意义的数据。在任何时间t0>t1,(同时t0-t1小于tw),提取模块320用从数据流接收的实时数据填充长度为t0-t1的窗口的末尾部分,并且用从时间序列数据存储装置260取回的数据填充窗口的第一部分(即,剩余部分)。
如果数据流语言程序包括多窗口计算,则提取模块320通过组合来自时间序列数据存储装置260的数据(如果需要)和从数据流接收的实时数据来维护需要被提取的最大窗口的大小的数据。针对最大窗口维护的数据包括用于较小窗口的数据。
图11A至图11C图示了根据实施例的组合来自时间序列数据存储装置的数据和实时接收的数据以用于移动窗口计算的过程。移动窗口的长度被假设为Tw。示例计算是跨数据流集合的数据的聚合,例如,基于跨整个数据流集合的移动窗口期间接收到的数据的平均值或百分位数计算。移动窗口是保持移位的时间窗口。换句话说,移动窗口的大小保持恒定,但窗口随时间保持前进。
在窗口内发生的数据点的数目可以随时间而改变。所处理的数据流的数目还可以随窗口前进而改变,例如,由于引入了新数据流,或者由于对描述数据流的元数据的修改。例如,如果移动窗口正在计算来自数据中心“east”的跨所有数据流的数据的平均值,则如果数据中心“east”开始/停止服务,引入新服务器,或者如果描述数据流的元数据被修改以向/从某些数据流添加/移除“datacenter=east”标签,数据流的数目可以随时间而改变。数据流语言处理器200周期性地重新评价数据流集合以及在窗口内出现的数据点集合,并且从所选择的数据流中计算针对数据点指定的聚合值。
图11A示出了当窗口计算开始时,可以从时间序列数据存储装置260取回窗口的完整数据的场景。图11B示出了在经过一段时间(其小于时间Tw,窗口的长度)之后,提取模块320将来自时间序列数据存储装置260的数据与从数据流接收的实时数据组合。图11C示出了在大于窗口的长度Tw的时间之后,提取模块320不必从时间序列数据存储装置260取回数据,而是可以用从数据流获得的实时数据填充整个窗口。
如图11A所示,T2指示当前时间,并且给出大小为Tw的窗口,时间T1表示时间点T2-Tw。假设窗口计算在时间T2开始。因而,窗口的时间范围为T1-T2。此时没有从数据流接收数据。从时间序列数据存储装置260取回整个窗口的数据。
图11B示出了经过一段时间之后,当前时间由T4表示,并且窗口已经前进到时间范围T3-T4。由于自从时间T2起收集实时数据,因此在时间范围T2-T4的窗口计算中收集并且使用实时数据。对于时间范围T3-T2,提取模块320仍然使用来自时间序列数据存储装置260的数据。图11B所示的场景适用于时间范围T4-T2小于Tw时的所有时间(换句话说,适用于小于窗口的大小的自T2以后的所有时间)。
图11C示出了等于或大于窗口长度的时间场景。换句话说,如果T5是当前时间,则图11C适用于所有时间T5,使得T5-T2大于或等于窗口Tw的长度。在这些场景下,提取模块320已经从数据流累积了充足的实时数据,使得提取模块320不从时间序列数据存储装置260取回数据。换句话说,窗口计算使用从数据流实时接收的所有数据来执行。
图11A至图11C中描述的场景还适用于使用图表(例如,经由仪表板)呈现数据。来自时间序列数据存储装置260的数据用于填充图表的初始部分,以避免随时间推进而缓慢地示出图表填充。由于向用户呈现由用户选择的整个时间窗口的图表,因此用来自时间序列数据存储装置260的数据填充图表的能力提供了更好的用户体验。
编组数据流
图12图示了根据实施例的用于对数据流的数据进行编组以生成结果数据流集合的过程。编组声明可以包括在数据流语言程序中,例如,使用如图4所示的分组块。数据流语言程序的编组声明指定描述数据流的一个或多个元数据属性。分组块与针对每个数据流组执行的聚合计算相关联。
编组模块360接收1210描述数据流的一个或多个属性。该属性可以是与数据流的数据(例如,源名称和度量名称)一起被接收的属性或是通过元数据模块220与数据流相关联的并且存储在元数据存储装置230中的元数据标签。编组模块360还接收针对每个数据流组执行的特定计算,例如,基于数据流的数据来确定聚合值的计算。
基于针对执行数据流语言程序的任务而指定的周期性,数据流语言处理器200(及其部件模块)对每个时间间隔执行以下计算。编组模块360标识1220对应于与编组命令相关联的一个或多个属性的每个独特值集合的数据流组。例如,如果使用编组命令指定的属性是“datacenter”属性,则编组模块360标识数据流集合,每个集合具有“datacenter”标签的独特值。
编组模块360对所标识的每个数据流集合(或组)执行以下计算。编组模块360接收1230与用于该具体时间间隔的集合的每个数据流相对应的数据。编组模块360针对来自每个组的数据流的数据确定1240聚合计算的值。例如,如果编组基于属性“datacenter”并且所指定的计算是平均,则编组模块360确定1240针对给定时间间隔而获得的具体数据中心的所有数据流的数据的平均。编组模块360将每个组的计算结果输出1250到数据流语言程序的后续块。
如图12所图示的过程所描述的,编组语句(即,分组块)采用数据流集合作为输入,并且生成结果数据流集合。编组语句可以指定通过多个元数据属性进行编组。所生成的结果数据流的数目等于输入集合中存在的至少一个数据流的编组属性的独特属性值的数目。换句话说,如果在输入中存在具有属性具有独特值的组合的数据流,则针对编组属性的值的每个独特组合来生成数据流。
图13A至图13B示出了根据实施例的基于描述数据流的不同元数据属性来对数据流进行编组的示例场景。图13A示出了基于属性“dc”(表示数据中心)来对数据流集合进行编组。输入数据流集合1340a包括属性为dc=east和metric=cpuLoad的数据流、属性为dc=west和metric=cpuLoad的数据流、属性为dc=north和metric=cpuLoad的数据流、属性为dc=west和metric=cacheMisses的数据流、以及属性为dc=north和metric=cacheMisses的数据流。编组模块360处理编组块1310a,其指定分组(“dc”)以从具有与属性dc相同的属性值的输入集合1340a收集数据流。输入集合1340a包括属性为dc=east的一个数据流、属性为dc=west的两个数据流、以及属性为dc=north的两个数据流。
在实施例中,如果没有具有该值组合的输入数据流,则编组模块360忽略分组属性的独特值。因而,编组模块360不生成与这些属性值相对应的任何结果数据流。例如,如果dc属性可以具有其他可能的值,如“north-east”、“south-west”等等,并且没有具有这些属性值的输入数据流,则编组模块360不生成与元数据属性的这些独特值相对应的结果数据流。
因而,如图13所示,编组模块360生成三个结果数据流,即,与dc=east相对应的第一结果数据流、与dc=west相对应的第二结果数据流以及与dc=north相对应的第三数据流。每个结果数据流包括通过以执行分组块的周期性(其是数据流语言程序被执行的周期性)聚合来自对应的输入数据流组的数据而生成的数据值。
如果分组块指定用于编组的不同属性,则编组模块360可以生成不同的结果数据流集合。例如,图13B示出了基于“度量”属性来对数据流进行编组。输入集合1340b具有与集合1340a相同的数据流。输入数据流编组三个数据流以生成与metric=cpuLoad相对应的结果数据流和与metric=cacheMisses相对应的另一结果数据流。
图14示出了根据实施例的示例性场景,其图示了作为输入数据流随时间改变的结果的由分组块生成的结果数据流的动态改变。例如,当输入数据流集合1440与集合1340a不同时,可以在稍后的时间点(例如,对于不同的时间间隔)执行图13a所示的分组块。如图14所示,输入集合1440不包括属性为dc=east的任何数据流。此外,输入集合1440包括属性为dc=south的数据流。因而,编组模块360生成具有三个结果数据流的结果集合1450,即,与dc=west相对应的第一结果数据流、与dc=north相对应的第二结果数据流以及与dc=south相对应的第三数据流。因而,由编组模块360生成的组可以随数据流的输入集合改变而动态改变。在开发***120中执行的从仪器化软件接收的输入数据流集合可以由于各种原因而改变,例如,由于开始新的开发***120,添加/移除服务,或修改与元数据存储装置230中的数据流相关联的元数据。
发布数据流作为第一类公民
根据实施例,数据流语言程序包括发布命令(即,发布块),其基于数据流语言程序的执行结果通过向仪器化分析***100的其他部件提供数据流来发布一个或多个数据流。例如,由数据流语言程序生成的数据流可以被发布到用户接口以被呈现为实时图表或报告。所生成的数据流被表示为第一类公民。换句话说,所生成的数据流被以与由仪器化分析***100从开发***120的仪器化软件接收的数据流相同方式被表示。
所生成的数据流还可以被仪器化分析***100的其他部件100以与由仪器化分析***100接收的数据流相同的方式使用。所生成的数据流可以通过仪器化分析***100或经由管理***160通过***管理员自动地与元数据属性相关联。数据流语言程序的查找块可以查找类似于从外部***接收的其他数据流的所生成的数据流。执行其他数据流语言程序的任务可以接收所生成的数据流作为输入并且处理它。数据流的数据可以经由用户接口来呈现,并且可以基于从用户接收的输入来操纵,其类似于由仪器化分析***100处理的任何其他数据流。
数据流语言处理器200将结果数据流发布在软件总线290上。可以标识任何结果数据流(或任何其他数据流)的数据流标识符的仪器化分析***100的任何部件可以从软件总线290获得数据流的数据。软件总线290可以存储发布在存储器中的数据流的数据,以提供对数据的快速访问。
数据流语言程序可以生成多个结果数据流以供发布。例如,数据流语言程序可以聚合基于数据中心编组的度量(例如,cacheMisses)。因而,针对每个数据中心生成聚合属性(如total cacheMisses)。发布模块350生成描述每个所生成的结果数据流的元数据并且将该元数据存储在元数据存储装置230中。发布模块350将数据流与信息相关联,该信息与生成数据流的数据流语言程序相关联。因而,发布模块350分析生成数据流的数据流语言程序的块,并且从数据流语言程序的块中标识信息,该信息标识数据流。
发布模块350可以基于通过生成所发布的数据流的数据流语言程序作为输入而被接收的数据流的属性来生成描述数据流的元数据属性。例如,如果数据流语言程序计算输入数据流的移动平均,则发布模块350同样将基于输入数据流的元数据属性值与所发布的数据流相关联。在这种情形下,发布模块350可以使用输入数据流的源名称作为输入数据流的源名称。如果通过聚合多个输入数据流来获得所发布的数据流,则发布模块350可以通过聚合基于输入数据流的属性值来生成所发布的数据流的属性(例如,通过并置(concatenating)来自输入数据流的对应的属性值或通过并置通过缩短来自数据流的属性值来获得的子串)。例如,结果数据流的源名称可以通过并置所聚合的输入数据流的源名称或通过并置输入数据流的源名称的前缀字符串来获得。
在实施例中,发布块与表征正在被发布的数据的类型的度量名称相关联。发布模块350将发布块的度量名称与由发布块发布的数据流相关联。数据流语言处理器200还生成标识符(被称为时间序列标识符)以供表示每个结果数据流。每个结果数据流的数据被存储在时间序列数据存储装置260中,并且可供仪器化分析***的任何部件使用。
如果发布块不与度量名称相关联,则发布模块基于由生成正在被发布的数据流的数据流语言程序接收的输入数据流来确定度量名称。如果正在被发布的数据流语言由单个数据流生成,则发布模块使用单个数据流的度量名称作为所发布的数据流的度量名称。如果正在被发布的数据流语言由多个数据流生成,则发布模块基于多个数据流的度量名称来生成用于所发布的数据流的度量名称,例如,通过并置度量名称或度量名称的子串(例如,前缀或后缀)。
图15示出了根据实施例的流程图,其图示了通过执行数据流语言程序的发布块而获得的结果数据流的发布过程。假设数据流语言程序包括发布块和一个或多个分组块。假设发布块与度量名称相关联。例如,数据流语言程序可以如下:
find(“source:analytics*”,“metric:load”))→
fetch()→
groupby(“datacenter”)→
stats!mean→
publish(“dc_load”)
上述数据流语言程序包括指定度量名称“dc_load”的发布块。数据流语言程序还包括用于基于数据中心对输入数据流进行编组的分组声明。
数据流语言处理器200标识1500正在被处理的数据流语言程序中的发布块。例如,如果上述数据流语言程序正在被处理,则数据流语言处理器200标识1500数据流语言程序的最后块,即,发布(“dc_load”)。发布模块350确定1510与发布块相关联的度量名称。例如,在上文所示的数据流语言程序的发布块中,发布模块350确定1510与发布块相关联的度量名称“dc_load”。数据流语言处理器200使用度量名作为描述结果数据流的元数据属性。
发布块的输出可以包括多个结果数据流,例如,如果数据流语言程序包括分组块。上述示例数据流语言程序可以生成多个结果数据流,每个数据中心一个结果数据流,即,基于来自所有具有独特数据中心属性值的数据流周期性获得的统计平均数据值的一个结果数据流。其他数据流语言程序可以包括多个分组块。然而,由数据流语言程序生成的结果数据流的数目由数据流语言程序的最后分组块来确定。
发布模块350标识1520数据流语言程序的最后分组块的属性集合。在上述示例中,分组(“datacenter”)块具有用于编组数据流的单个属性“datacenter”。然而,分组块可以包括用于对数据流进行编组的多个属性。例如,分组命令groupby(“datacenter”、“region”)指定用于编组数据流的两个属性“datacenter”和“region”。发布模块350使用所标识的属性集合的独特值来区分由数据流语言程序生成的结果数据流。
数据流语言处理器200(及其部件模块)对每个结果数据流执行以下步骤。发布模块350标识与结果数据流相关联的最后分组块的所标识的属性的值。与结果数据流相关联的所标识的属性的值可以与数据流一起接收,或者从给出分组块的输入数据流的标识符的元数据存储装置230中提取。如果输入数据流集合包括具有不同数据中心值的数据流,例如,“east”、“west”、“north”、“south”等等,则由分组块输出的每个结果数据流(以及如果分组块是数据流语言程序的最后分组块,则是数据流语言程序)与这些数据中心值中的一个数据中心值相关联。如果分组块指定用于编组的多个属性,则每个结果数据流与指定用于编组的分组块的属性的独特值集合相关联。
数据流元数据生成器370基于与结果数据流相关联的所标识的属性的值以及与发布块相关联的度量名称来生成1540描述结果数据流的元数据。例如,如果分组块指定数据中心属性(具有值“east”、“west”、“north”、“south”),并且使用发布块指定的度量名称为cpu_load,则数据流元数据生成器370将每个已发布的数据流与度量名称cpu_load和数据中心属性的对应值相关联(与数据流组相关联)。数据流元数据生成器370还生成结果数据流的标识符。数据流元数据生成器370将包括与结果流相关联的属性的元数据存储1550在元数据存储装置230中。
数据流语言处理器200周期性地执行数据流语言程序,按照由数据流语言程序的周期性指定的那样。当数据流语言程序被执行时,数据流语言处理器200为每个结果数据流生成数据。数据流语言处理器200存储1560为每个结果数据流所生成的数据,该结果数据流与结果数据流的标识符相关联。
使用阈值块的异常检测
数据流语言程序支持允许将数据流集合的数据与阈值进行比较的阈值块。被比较的数据流可以是由仪器化分析***100从开发***120的仪器化软件接收的数据流或作为数据流语言程序的一个或多个块的执行结果而获得的数据流。阈值块包括数据端口和阈值端口。数据端口接收表示数据值的一个或多个数据流。阈值端口接收表示阈值的一个或多个数据流。阈值块将数据值与阈值进行比较,以确定数据值是否在由阈值指定的范围内。在实施例中,阈值块包括一个以上的阈值端口。例如,阈值块可以包括两个阈值端口,即,低阈值端口和高阈值端口。阈值块确定数据值是否低于在高阈值端口中接收的阈值并且高于在低阈值端口中接收的阈值。
阈值块允许指定高阈值和/或低阈值。阈值模块340通过将在输入流中接收的数据值与由阈值块指定的阈值进行比较来处理阈值块。阈值块指定低阈值和高阈值。如果来自由阈值块接收到的输入数据流的数据值位于高阈值和/或低阈值的边界之外,则阈值模块340生成事件。换句话说,如果数据流的数据超过高阈值或低于低阈值,则阈值模块340生成事件。阈值可以是固定的或动态的。动态阈值被获得作为数据流语言程序的执行结果。阈值块可以指定低阈值/高阈值中的一个或两个。
对阈值块的输入可以是作为数据流语言程序的块的执行结果而生成的多个数据流值,例如,作为输入数据流集合的编组结果而获得的多个数据流。在这种情形下,低阈值或高阈值也被指定为生成多个数据流的数据流语言程序的输出。阈值模块340将由阈值块的输入端口接收的数据流与由低阈值端口/高阈值端口接收的数据流进行匹配。阈值模块340将由输入端口接收的数据流的数据与由每个时间间隔(基于数据流语言程序的周期性)的低阈值端口/高阈值端口接收的数据流的数据进行比较,并且基于该比较来采取动作(例如,发送事件)。
在实施例中,阈值块指定持续时间和分数(fraction)值。例如,阈值块可以指定持续时间T(如5分钟)。如果输入数据流的数据在所指定的阈值之外超过所指定的持续时间T,则阈值模块340生成事件。例如,如果输入数据流的数据高于高阈值超出T时间单位,则阈值模块340生成事件。作为另一示例,如果输入数据流的数据低于低阈值超出T时间单位,则阈值模块340生成事件。指定持续时间的能力确保位于阈值边界之外的数据流的数据的异常行为持续相当长的时间,而非短暂行为。
在实施例中,阈值块指定分数值F(如0.8)以及持续时间T。如果在指定长度T的时间窗口内,输入数据流的数据位于阈值边界之外超过指定分数的持续时间T,则阈值模块340生成事件。因而,即使输入数据流的数据不在整个持续时间T内都在阈值边界之外,阈值模块340也生成事件,只要该数据在阈值边界之外至少持续指定分数的持续时间。
图16示出了根据实施例的数据流语言程序的示例,其图示了具有由特定属性编组的数据流的固定阈值的阈值块的使用。数据流语言处理器200接收图16所示的数据流语言处理器,并且处理它。
查找模块310执行查找块1610,以标识输入到数据流语言程序1600的数据流集合。提取模块320执行提取块1615,以针对数据流语言程序指定的周期性提取数据流的数据。编组模块360执行分组块1620,以将基于数据中心值通过查找块标识的数据流编组成数据流集合,该集合的每个数据流与在所标识的数据流中出现的独特的数据中心值相对应。计算模块330执行统计块1625,以确定与来自每个数据中心的数据相对应的均值。计算模块330向阈值块的入端口提供统计块1625的输出作为输入。
阈值模块340将所输入的每个数据流的数据与阈值块1630的高阈值进行比较。如图16所示,阈值块1630的高阈值为固定值(即,固定值6)。因而,如果任何组(与数据中心相对应)的数据流的任何数据值超过高阈值6,则阈值模块340生成事件。阈值模块340在事件中提供超过阈值的数据流的细节作为名称值对。例如,阈值模块340可以提供与超过高阈值的数据流相对应的数据中心属性值、超过高阈值的时间的时间戳等等的细节。由于阈值块1630未指定低阈值,因此阈值模块340不将输入到阈值块1630的数据流的数据与任何低阈值进行比较。
图17示出了根据实施例的数据流语言程序的示例,其图示了由元数据属性编组的数据流的具有动态改变的阈值的阈值块。数据块向图17的阈值块1760的入端口提供输入的数据块,类似于向图16的阈值块1630提供输入的数据块。因而,图17的框1710,1715,1720,1725分别与图16的框1610,1615,1620和1625相对应。然而,阈值块1760的高端口的输入接收动态改变的输入。此外,阈值块1760的高端口接收多个数据流作为输入。阈值模块340将由阈值块1760的高端口接收的多个数据流与由入端口接收的多个数据流进行匹配。
提取模块320执行提取块1730,以针对数据流语言程序指定的周期性来提取数据流的数据。编组模块360执行分组块1735,以将由查找块1710标识的数据流通过数据中心值编组成数据流集合,该集合的每个数据流与数据中心值相对应。窗口模块380执行窗口块1740,以标识与输入到窗口块1740的每个数据流的一小时移动窗口相对应的数据点。计算模块330执行统计块1745,以确定与由窗口块1740输出的每个数据流相对应的一小时移动窗口的一小时移动平均值。定制块模块390通过组合数据流语言的内置块来处理由用户定义的定制宏。计算模块330通过执行缩放块1750来将统计块1745的输出按照因子150%缩放。缩放块1750的缩放输出被提供作为阈值块1760的高端口的输入。
因而,阈值模块340将表示来自每个数据中心的数据流的均值的结果数据流集合与被缩放150%的来自每个数据中心的数据流的数据的一小时移动平均进行比较。如果与由入端口接收的数据中心相对应的结果数据流的数据超过在阈值块1760的高端口处接收到的相同数据中心的数据流的经缩放的移动平均值,则阈值模块340生成事件。因而,图17示出了数据流语言程序的示例,其图示了生成作为输入而被接收的动态改变的数据流集合和作为用于比较的阈值而被提供的动态改变的数据流集合。
图18示出了根据实施例的流程图,其图示了执行包括阈值块的数据流语言程序的过程。阈值模块340标识1810正在被执行的数据流语言程序的阈值块。阈值模块340标识1820描述阈值块的各种部件和参数,其包括输入端口、低阈值端口/高阈值端口、所指定的阈值窗口的大小、以及与阈值窗口相关联的分数值(如果被指定)。在一些实施例中,低阈值和/或高阈值可以是常数值,在这种情况下,或者常数值被指定为低阈值端口/高阈值端口的输入,或者低阈值/高阈值被指定为阈值块的参数(而无需指定任何低阈值端口/高阈值端口)。
数据流语言处理器200执行向输入端口提供输入的数据流语言程序的部分以及向低阈值端口/高阈值端口提供输入的数据流语言程序的部分。该执行基于针对与数据流语言程序相对应的任务指定的周期性来重复。在每个时间间隔,阈值模块340基于数据流语言程序的周期性来执行在输入端口中接收的数据与在低阈值端口/高阈值端口中接收的数据的比较。如果向输入端口(或低阈值端口或高阈值端口)提供输入的数据流语言程序的一部分包括分组块,则阈值块的输入端口接收数据流组。每个端口处的数据流的数目取决于在对应分组块中指定的元数据属性(或元数据属性集合)的独特值(假如在具有元数据属性的独特值的分组块的输入中存在至少一个数据流)。
在实施例中,数据流语言处理器200分析在输入端口和低阈值端口/高阈值端口处提供数据的块以标识在数据被输入到阈值块之前出现的最后分组块。阈值模块340使用最后分组块来标识在每个端口处接收的数据流,例如,以将来自输入端口的数据流与来自低阈值端口和/或高阈值端口的数据流相匹配,并且如果事件基于数据流来生成,则标识事件中的数据流。如果在阈值块的两个不同端口处接收的两个数据流具有由分组块使用的元数据属性的相同独特值,则阈值模块340确定它们相匹配。例如,如果用于生成作为输入向阈值块的两个端口提供的数据流的由数据流语言程序使用的分组块基于数据中心属性来对数据流进行分组,则通过聚合特定数据中心(如数据中心东或数据中心西)的数据而获得的数据流被确定为相匹配。
阈值模块340对在每个端口(即,输入端口、低端口和高端口)处接收的每个数据流执行以下计算。阈值模块340将输入端口处接收的数据值与在低阈值端口和/或高阈值端口处接收的数据值进行比较1850。如果在输入端口处接收的数据值超过在高阈值端口处接收到的数据值或者低于在低阈值端口处接收的数据值,则阈值模块340生成事件。所生成的事件包括基于与数据流相对应的元数据属性的值来标识在输入端口处接收的数据流的信息。
在实施例中,阈值块的数据端口接收作为基于分组命令来对输入数据流集合进行编组的结果而生成的第一多个数据流,该分组命令基于第一元数据属性集合(例如,区域和data_center)对输入数据流集合进行编组。阈值块的阈值端口接收作为基于分组命令来对输入数据流集合进行编组的结果而生成的第二多个数据流,该分组命令基于第二元数据属性集合对输入数据流集合进行编组。第二元数据属性集合可以与第一元数据属性集合相同。可替代地,第二元数据属性集合可以与第一元数据属性集合不同。具体地,第二元数据属性集合可以是第一元数据属性集合的子集。例如,如果第一元数据属性集合包括区域和data_center,则第二元数据属性集合仅包括区域。作为另一示例,如果第一元数据属性集合包括区域、data_center、machine_id,则第二元数据属性集合仅包含区域和data_center。因而,阈值输入接收到比阈值块的数据输入更少的数据流。结果,在数据端口处接收的多个数据流可以与在阈值端口处接收的相同数据流进行比较。在上述示例中,数据端口接收针对每个独特的区域、data_center、machine_id的组合的值的数据流,并且阈值端口接收针对每个独特的区域、data_center的组合的值的数据流。因而,在数据端口处接收的与区域和data_center相对应的所有数据流与在阈值端口处接收的相同数据流进行比较,而不考虑与在数据端口处接收到的数据流相关联的machine_id值无关。
如果阈值块指定阈值窗口,则阈值模块340将在所指定的阈值窗口大小的最后窗口期间在输入端口处接收的所有数据点与在低阈值端口和/或高阈值端口处接收的数据值进行比较。如果在所标识的窗口期间出现的所有数据值均基于阈值位于所指定的边界之外(即,大于高阈值或低于低阈值),则阈值块生成事件。
如果阈值块除了阈值窗口大小之外还指定了分数参数,则阈值模块340将在所指定的阈值窗口大小的最后窗口期间在输入端口处接收的数据点与在低阈值端口和/或高阈值端口处接收的数据值进行比较。如果来自所标识的窗口的多于指定分数的数据点在由阈值块指定的边界之外,则阈值模块340生成事件。例如,如果分数值为0.75(即,75%),则如果来自所标识的窗口的多于75%的数据点在由阈值块指定的边界之外,则阈值模块340生成事件。在实施例中,如果在所标识的窗口的多于指定分数期间出现的数据点在由阈值块指定的边界之外,则阈值模块340生成事件。例如,如果分数值为0.75(即,75%),则如果在所标识的窗口的多于75%期间出现的数据点在由阈值块指定的边界之外,则阈值模块340生成事件。
用于数据流语言程序的定制块
定制块可以通过组合数据流语言的现有内置块由用户来指定。定制块也被称为宏块或定制宏块。定义定制宏块的能力使数据流语言可扩展。类似于内置块,定制块可以包括在数据流语言程序中。定制块可以使用其他定制宏块,允许定制宏块的任意嵌套。用户可以使用定制块指定任意抽象。定制块以针对包括定制宏块的数据流语言程序的任务而指定的周期性来执行。定制块模块390确定用于每个时间间隔的定制宏块的每个输入端口的输入值。
定制块模块390执行定制宏块的指令,并且为每个输出端口生成数据值。来自输出端口的输出值可以被提供给后续块。如果定制块的输入包括块,这些块包括分组块,则输入端口可以接收多个数据流作为输入。定制块模块390对在输入处接收的每个数据流的每个数据点执行定制块模块390的指令。数据流的数目可以基于由包括定制宏块的数据流语言程序接收的整体数据流集合的改变而动态改变。定制宏块可以与在定制块的指令中使用的一个或多个参数相关联。定制宏块的指令使用参数值。然而,当定制宏块在数据流语言程序中被指定时,每个参数的特定值被提供。因而,定制块模块390在执行定制宏块的指令的同时将参数名称替换为参数值。
图19示出了根据实施例的数据流语言程序的示例,其图示了使用定制块基于应用于包括数据流组的输入的用户定义功能来生成结果数据流。示例定制宏块1960组合两个输入数据流的数据,以基于输入数据值来生成功能。组合块1960具有两个输入端口命中和未命中以及一个输出端口out。每个输入端口的输入由数据流语言程序的一部分生成。
例如,输入端口命中的输入被生成作为统计块1925的输出,并且输入端口未命中的输入被生成作为统计块1945的输出。查找模块310执行查找块1900以查找具有度量值cacheHits的由仪器化分析***100接收的所有数据流。例如,查找模块310可以执行查找块1900以查找提供高速缓存命中值的从开发***120接收的所有数据流。提取模块320执行提取块1915以提取由查找块1900标识的数据流的数据。编组模块执行分组块1920以通过数据中心属性对数据流进行编组。计算模块330执行统计块1925以生成来自每个独特数据中心的所有数据流的数据的均值,并且将该数据作为输入提供给组合块1960的命中端口。
类似地,查找模块310执行查找块1910以查找具有度量值cacheMisses的由仪器化分析***100接收的所有数据流。例如,查找模块310可以执行查找块1910以查找提供高速缓存未命中的值的从开发***120接收的所有数据流。提取模块320执行提取块1930以提取由查找块1900标识的数据流的数据。编组模块执行分组块1935以通过数据中心属性对数据流进行编组。计算模块330执行统计块1945以生成来自每个独特数据中心的所有数据流的数据的均值,并且将该数据作为输入提供给组合块1960的命中端口。
定制块模块390执行针对组合块而指定的指令集合1910。因而,对于每个时间间隔,如果H表示在命中输入端口处接收到的数据值并且M表示在未命中端口处接收的未命中的值,则定制块模块390确定H/(H+M)的值。定制块模块390将上述表达式的值提供给输出端口。数据流语言处理器200将数据值从输出端口提供给后续块的输入端口(如果有的话)。
图20示出了根据实施例的流程图,其图示了执行具有定制块的数据流语言程序的过程。数据流语言处理器标识2010数据流语言程序的定制块。定制块模块390标识2020定制块的输入端口和输出端口。如果定制块指定参数值,则定制块模块390接收要替换参数的值,并且在由定制块指定的指令中替换它们。
定制块模块390针对每个时间间隔重复以下步骤。定制块模块390确定每个输入端口的输入数据值。如果生成输入端口的输入的数据流语言程序的一部分包括分组块,则该端口的输入可以包括与由分组块生成的每个数据流相对应的多个数据值。
定制块模块390针对每个数据值执行定制块的指令。如果在每个端口处输入多个数据流,则定制块模块390通过比较每个输入端口的分组块的元数据属性的值来标识匹配数据流。定制块模块390对输入到输入端口的每个数据流执行2040指令。如果输入端口具有恒定输入值,而另一输入端口具有多个数据流,则定制块模块390将常数值应用于另一输入端口的每个数据流。
定制块模块390将定制块的指令的执行结果的值提供给根据在定制块的指令中指定的输出端口。数据流语言处理器200将输出端口处的值提供给连接至输出端口的数据流语言程序的块。定制块可以在输出端口处输出多个数据流。例如,定制块的输入端口可以各自接收多个数据流,并且定制块可以对包括来自每个输入端口处接收的匹配数据流的值的元组执行具体计算。
定制数据块的指令可以包括其他定制数据块。因而,对于每个定制块,执行图20所图示的上述过程。
用于使用数据流语言程序生成报告的用户接口
在一些实施例中,仪器化分析***100提供用户接口,该用户接口来为对观看基于数据流的报告感兴趣的最终用户生成数据流语言程序。向用户提供用户友好的用户接口,其隐藏数据流语言的复杂性。由仪器化分析***提供的用户接口示出了各种小部件(widget),其允许用户采取动作,诸如选择用于生成报告的度量、执行汇总、编组数据流等等。
图21示出了根据实施例的显示数据流语言程序的执行结果的用户接口的屏幕截图,其示出了由仪器化分析***接收的数据流。屏幕截图示出了几个图表2120,其显示表示度量2120service.cache.hits的数据流。度量表示从在开发***120上执行的仪器化软件接收的高速缓存命中值。该值被汇总到1秒的时间间隔。因而,在一秒钟的每个时间间隔中接收的高速缓存命中值被相加在一起。可以存在报告度量service.cache.hits的大量服务,因而显示了大量图表2120。图21示出了允许用户采取动作(例如,选择由用户接口报告的度量、执行汇总)的各种小部件。
图22示出了根据实施例的显示数据流语言程序的执行结果的用户接口的屏幕截图,其示出了由仪器化分析***接收的数据流的1分钟平均。图22示出了允许用户指定要对数据流执行某些计算的小部件。特定地,图22示出了计算用于每个数据流的一分钟均值的小部件2220。因此,图表2210比图21所示的图表更平滑。然而,图22所示的图表2210的数目与图21所示的图表2210的数目相同。
大型企业可能具有非常大量的开发***120。每个开发***可以执行多个服务,每个服务报告度量。因此,图21和图22中所显示的图表的数目可能非常大。如图23所示,用户可以通过对数据流进行编组来获得对由数据流报告的数据的更好了解。
图23示出了根据实施例的显示数据流语言程序的执行结果的用户接口的屏幕截图,其示出了通过数据中心编组的数据流的总和。图23示出了小部件2320,其允许指定基于其来编组数据流的属性以及对每个组执行的聚合操作。如图23所示,用户已经通过数据中心请求编组,并且对每个组执行求和操作。假设只有两个数据中心,图表的数目减少到两个。每个图表2310示出了从特定数据中心接收的数据流的数据值的总和。
图24示出了根据实施例的显示数据流语言程序的执行结果的用户接口的屏幕截图,该数据流语言程序包括确定基于数据中心编组的数据流的高速缓存命中率与高速缓存命中率和未命中率之和的比例的定制宏块。如图24所示,用户把使用小部件2430报告度量service.cache.hit的数据流称作A。用户还把使用小部件2440报告度量service.cache.miss的数据流称作B。用户把计算A/(A+B)定义为高速缓存命中相对于高速缓存命中和高速缓存未命中的总和的比例。用户还使用小部件2450指定所计算的值A/(A+B)应当被缩放100倍。基于数据中心来对每个数据流组执行该计算。因而,针对每个数据中心生成图表2410,该图表报告从数据中心接收到的所有数据流的高速缓存命中比例的实时值。
备选实施例
应当理解,本发明的附图和描述已经被简化,以说明与清楚理解本发明相关的元件,同时为了清楚起见,省略了在典型***中找到的很多其他元件。本领域普通技术人员可以认识到,在实现本发明中期望和/或需要其他元件和/或步骤。然而,因为这些元件和步骤在本领域中是众所周知的,并且因为它们不利于更好地理解本发明,所以本文中没有提供对这些元件和步骤的讨论。本文中的公开内容涉及对本领域技术人员已知的这些元件和方法的所有这样的变化和修改。
上文描述的一些部分根据关于信息的操作的算法和符号表示来描述实施例。数据处理领域的技术人员通常使用这些算法描述和表示来有效地将其作品的实质传达给其他本领域技术人员。在功能上、计算上或逻辑上描述的这些操作被理解为由计算机程序或等效电路、微代码等实现。此外,在不失一般性的情况下,还可以将这些操作安排称作模块,有时被证实是方便的。所描述的操作及其相关联的模块可以以软件、固件、硬件或其任何组合来实现。
如本文中所使用的,对“一个实施例”或“一实施例”的任何引用意味着结合实施例描述的具体元件、特征、结构或特点包括在至少一个实施例中。在说明书中的各个地方的短语“在一个实施例中”的出现不一定都是指相同的实施例。
一些实施例可以使用表达式“耦合”和“连接”以及它们的派生词来描述。应当理解,这些术语不旨在作为彼此的同义词。例如,一些实施例可以使用术语“连接”来描述,以指示两个或多个元件彼此直接物理或电接触。在另一示例中,一些实施例可以使用术语“耦合”来描述,以指示两个或多个元件直接物理或电接触。然而,术语“耦合”也可能意味着两个或更多个元件彼此不直接接触,但仍然彼此协作或相互作用。实施例在这方面不受限制。
如本文中所使用的,术语“包括(comprises)”、“包括(comprising)”、“包括(includes)”、“包括(including)”、“具有(has)”、“具有(having)”或其任何其他变型旨在涵盖非排他性包含。例如,包括元素列表的过程、方法、物品或装置不一定仅限于这些元素,而是可以包括未明确列出的元素或这些过程、方法、物品或装置所固有的元素。进一步地,除非有明确的相反说明,否则“或”是指包含性或而非异或。例如,条件A或B满足以下各项中的任一项:A为真(或存在),B为假(或不存在),A为假(或不存在),B为真(或存在),以及A和B均为真(或存在)。
另外,“一(a)”或“一个(an)”用来描述本文中的实施例的元件和部件。这只是为了方便起见,并且给出了本发明的一般意义。该描述应该被阅读为包括一个或至少一个,并且单数也包括复数,除非显而易见的是其他的含义。在阅读本公开之后,本领域技术人员应当领会用于通过本文中所公开的原理基于仪器化软件来生成报告的***和过程的其他附加的备选结构设计和功能设计。因此,虽然已经说明了并且描述了具体实施例和应用,但是应当理解,所公开的实施例不限于本文中所公开的精确构造和部件。在不背离所附权利要求限定的精神和范围的情况下,可以对本文中所公开的方法和装置的布置、操作和细节进行对本领域技术人员而言明显的各种修改、改变和变化。
Claims (20)
1.一种用于检测数据流中的异常的方法,所述方法包括:
接收数据流语言程序的指令,包括:
阈值块,被配置成接收第一输入和第二输入,所述第一输入包括具有数据值的多个数据流,并且所述第二输入包括具有阈值的多个数据流;
第一指令集合,用于生成所述阈值块的所述第一输入;以及
第二指令集合,用于生成所述阈值块的所述第二输入;
接收输入数据流集合;以及
执行所述第一指令集合以聚合所述输入数据流集合的数据,以生成第一多个数据流,所述第一多个数据流包括作为所述阈值块的所述第一输入而被提供的数据值;
执行所述第二指令集合以聚合所述输入数据流集合的数据,以生成第二多个数据流,所述第二多个数据流包括作为所述阈值块的所述第二输入而被提供的阈值;
将来自所述第一多个数据流的数据流与来自所述第二多个数据流的数据流进行匹配,以标识对应的数据流;以及
对于所述第一多个数据流中的每个数据流:
将所述数据流的数据值与来自所述第二多个数据流的对应数据流的阈值进行比较;以及
基于所述数据值和所述阈值的比较的结果,来确定是否生成事件。
2.根据权利要求1所述的方法,确定是否生成事件包括:如果所述比较指示所述输入数据流集合的数据流的所述数据超过来自所述第二多个数据流的所述对应数据流的阈值,则生成事件。
3.根据权利要求1所述的方法,其中执行所述第一指令集合以聚合所述输入数据流集合的所述数据包括:基于第一元数据属性集合来编组所述输入数据流集合,并且执行所述第二指令集合来聚合所述输入数据流集合的所述数据包括:基于第二元数据属性集合来编组所述输入数据流集合。
4.根据权利要求3所述的方法,其中所述第一多个数据流中的每个数据流与所述第一元数据属性集合的第一值集合相关联,所述第二多个数据流中的每个数据流与所述第二元数据属性集合的第二值集合相关联。
5.根据权利要求4所述的方法,其中将来自所述第一多个数据流的数据流与来自所述第二多个数据流的数据流进行匹配包括:将来自所述第一值集合的值与来自所述第二值集合的值进行比较。
6.根据权利要求1所述的方法,其中所述第二多个数据流的所述数据流的所述阈值是高阈值,并且如果所述第一多个数据流中的数据流的所述数据超过来自所述第二多个数据流的对应数据流的阈值,则事件被生成。
7.根据权利要求1所述的方法,其中所述第二多个数据流的所述数据流的所述阈值为低阈值,并且如果所述第一多个数据流中的数据流的所述数据被确定为低于来自所述第二多个数据流的对应数据流的阈值,则事件被生成。
8.根据权利要求3所述的方法,其中所述第二元数据属性集合是所述第一元数据属性集合的子集。
9.根据权利要求3所述的方法,其中所述第一多个数据流中的数据流的数目取决于与所述输入数据流集合的所述数据流相关联的所述第一元数据属性集合的独特值的数目,并且其中所述第二多个数据流中的数据流的数目取决于与所述输入数据流集合的所述数据流相关联的所述第二元数据属性集合的独特值的数目。
10.根据权利要求1所述的方法,其中所述第二指令集合包括窗口指令,以基于预定大小的移动窗口来确定移动聚合值。
11.根据权利要求1所述的方法,其中所述阈值块与阈值窗口大小相关联,其中如果对于所述阈值窗口大小的窗口中出现的所有数据点,来自所述第一多个数据流的数据流的数据值超过来自所述第二多个数据流的匹配数据流的数据值,则所述事件被生成。
12.根据权利要求11所述的方法,其中所述阈值块还与分数参数相关联,其中如果对于所述阈值窗口大小的窗口中出现的大于所述分数的数据点,来自所述第一多个数据流的数据流的所述数据值大于来自所述第二多个数据流的所述匹配数据流的所述数据值,则所述事件被生成。
13.根据权利要求11所述的方法,其中所述阈值块还与分数参数相关联,其中如果对于超过所述分数的所述阈值窗口大小的窗口的持续时间,来自所述输入数据流集合的数据流的所述数据值大于来自所述第二多个数据流的所述匹配数据流的所述数据值,则所述事件被生成。
14.根据权利要求1所述的方法,还包括:
确定所述第一多个数据流中的每个数据流在所述第二多个数据流中是否具有匹配数据流;以及
如果所述第一多个数据流中的至少一个数据流在所述第二多个数据流中没有匹配数据流,则发送错误消息。
15.根据权利要求1所述的方法,其中用于所述第一多个数据流的第一子集的事件被生成,但是用于所述第一多个数据流的第二子集的事件没有被生成。
16.根据权利要求1所述的方法,其中所述第一多个数据流和所述第二多个数据流中的所述数据流作为所述数据流集合中的改变的结果而动态改变。
17.根据权利要求1所述的方法,其中所述第一多个数据流和所述第二多个数据流中的所述数据流作为描述数据流的元数据属性值的改变的结果而动态改变。
18.根据权利要求1所述的方法,其中所述输入数据流集合中的所述数据流从在外部***上执行的仪器化软件或数据流语言程序的执行结果中的一个或多个来接收。
19.一种计算机可读非暂态存储介质,存储指令用于:
接收数据流语言程序的指令,包括:
阈值块,被配置成接收第一输入和第二输入,所述第一输入包括具有数据值的多个数据流,并且所述第二输入包括具有阈值的多个数据流;
第一指令集合,用于生成所述阈值块的所述第一输入;以及
第二指令集合,用于生成所述阈值块的所述第二输入;
接收输入数据流集合;以及
执行所述第一指令集合以聚合所述输入数据流集合的数据,以生成第一多个数据流,所述第一多个数据流包括作为所述阈值块的所述第一输入而被提供的数据值;
执行所述第二指令集合以聚合所述输入数据流集合的数据,以生成第二多个数据流,所述第二多个数据流包括作为所述阈值块的所述第二输入而被提供的阈值;
将来自所述第一多个数据流的数据流与来自所述第二多个数据流的数据流进行匹配,以标识对应的数据流;以及
对于所述第一多个数据流中的每个数据流:
将所述数据流的数据值与来自所述第二多个数据流的对应数据流的阈值进行比较;以及
基于所述数据值和所述阈值的比较的结果,来确定是否生成事件。
20.一种计算机***,包括:
计算机处理器;以及
计算机可读非暂态存储介质,存储指令用于:
接收数据流语言程序的指令,包括:
阈值块,被配置成接收第一输入和第二输入,所述第一输入包括具有数据值的多个数据流,并且所述第二输入包括具有阈值的多个数据流;
第一指令集合,用于生成所述阈值块的所述第一输入;以及
第二指令集合,用于生成所述阈值块的所述第二输入;
接收输入数据流集合;以及
执行所述第一指令集合以聚合所述输入数据流集合的数据,以生成第一多个数据流,所述第一多个数据流包括作为所述阈值块的所述第一输入而被提供的数据值;
执行所述第二指令集合以聚合所述输入数据流集合的数据,以生成第二多个数据流,所述第二多个数据流包括作为所述阈值块的所述第二输入而被提供的阈值;
将来自所述第一多个数据流的数据流与来自所述第二多个数据流的数据流进行匹配,以标识对应的数据流;以及
对于所述第一多个数据流中的每个数据流:
将所述数据流的数据值与来自所述第二多个数据流的对应数据流的阈值进行比较;以及
基于所述数据值和所述阈值的比较的结果,来确定是否生成事件。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110472032.1A CN113220724B (zh) | 2014-12-19 | 2015-12-16 | 用于处理数据流的方法、***和计算机可读存储介质 |
Applications Claiming Priority (9)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201462094935P | 2014-12-19 | 2014-12-19 | |
US62/094,935 | 2014-12-19 | ||
US14/970,454 | 2015-12-15 | ||
US14/970,450 | 2015-12-15 | ||
US14/970,451 | 2015-12-15 | ||
US14/970,451 US9760353B2 (en) | 2014-12-19 | 2015-12-15 | Dynamically changing input data streams processed by data stream language programs |
US14/970,454 US9846574B2 (en) | 2014-12-19 | 2015-12-15 | Representing result data streams based on execution of data stream language programs |
US14/970,450 US9804830B2 (en) | 2014-12-19 | 2015-12-15 | Anomaly detection using a data stream processing language for analyzing instrumented software |
PCT/US2015/066132 WO2016100534A1 (en) | 2014-12-19 | 2015-12-16 | Data stream processing language for analyzing instrumented software |
Related Child Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110472032.1A Division CN113220724B (zh) | 2014-12-19 | 2015-12-16 | 用于处理数据流的方法、***和计算机可读存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107111527A CN107111527A (zh) | 2017-08-29 |
CN107111527B true CN107111527B (zh) | 2021-04-20 |
Family
ID=56129450
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110472032.1A Active CN113220724B (zh) | 2014-12-19 | 2015-12-16 | 用于处理数据流的方法、***和计算机可读存储介质 |
CN201580069546.5A Active CN107111527B (zh) | 2014-12-19 | 2015-12-16 | 用于分析仪器化软件的数据流处理语言 |
Family Applications Before (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110472032.1A Active CN113220724B (zh) | 2014-12-19 | 2015-12-16 | 用于处理数据流的方法、***和计算机可读存储介质 |
Country Status (6)
Country | Link |
---|---|
US (8) | US9804830B2 (zh) |
EP (2) | EP3982265A1 (zh) |
JP (3) | JP6793900B2 (zh) |
CN (2) | CN113220724B (zh) |
AU (3) | AU2015364688B2 (zh) |
CA (2) | CA2969131C (zh) |
Families Citing this family (39)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9996445B2 (en) | 2014-01-17 | 2018-06-12 | International Business Machines Corporation | Computer flight recorder with active error detection |
US9804951B2 (en) * | 2014-10-08 | 2017-10-31 | Signalfx, Inc. | Quantization of data streams of instrumented software |
US9804830B2 (en) * | 2014-12-19 | 2017-10-31 | Signalfx, Inc. | Anomaly detection using a data stream processing language for analyzing instrumented software |
US10592500B2 (en) | 2015-01-27 | 2020-03-17 | International Business Machines Corporation | Eviction stream for data joins |
US10394692B2 (en) * | 2015-01-29 | 2019-08-27 | Signalfx, Inc. | Real-time processing of data streams received from instrumented software |
US10142353B2 (en) | 2015-06-05 | 2018-11-27 | Cisco Technology, Inc. | System for monitoring and managing datacenters |
US10536357B2 (en) | 2015-06-05 | 2020-01-14 | Cisco Technology, Inc. | Late data detection in data center |
US10263833B2 (en) | 2015-12-01 | 2019-04-16 | Microsoft Technology Licensing, Llc | Root cause investigation of site speed performance anomalies |
US10504026B2 (en) | 2015-12-01 | 2019-12-10 | Microsoft Technology Licensing, Llc | Statistical detection of site speed performance anomalies |
US10171335B2 (en) * | 2015-12-01 | 2019-01-01 | Microsoft Technology Licensing, Llc | Analysis of site speed performance anomalies caused by server-side issues |
US9892020B1 (en) * | 2016-03-11 | 2018-02-13 | Signalfx, Inc. | User interface for specifying data stream processing language programs for analyzing instrumented software |
US10972333B2 (en) * | 2016-03-16 | 2021-04-06 | Telefonaktiebolaget Lm Ericsson (Publ) | Method and device for real-time network event processing |
JP2019516167A (ja) * | 2016-03-23 | 2019-06-13 | フォグホーン システムズ, インコーポレイテッドFoghorn Systems, Inc. | リアルタイムデータフロープログラミング言語のためのツールおよび方法 |
US10140201B2 (en) * | 2016-12-19 | 2018-11-27 | Bank Of America Corporation | Software defect detection tool |
US10860545B2 (en) * | 2017-03-24 | 2020-12-08 | Microsoft Technology Licensing, Llc | Measuring usage of computing resources |
US10725979B2 (en) | 2017-03-24 | 2020-07-28 | Microsoft Technology Licensing, Llc | Measuring usage of computing resources by storing usage events in a distributed file system |
WO2018191879A1 (en) | 2017-04-19 | 2018-10-25 | Ebay Inc. | Consistency mitigation techniques for real-time streams |
US11258682B2 (en) | 2017-08-03 | 2022-02-22 | Chicago Mercantile Exchange Inc. | Compressed message tracing and parsing |
EP3679473B1 (en) * | 2017-09-21 | 2022-06-15 | Huawei Cloud Computing Technologies Co., Ltd. | A system and method for stream processing |
US11831343B2 (en) * | 2017-10-30 | 2023-11-28 | AtomBeam Technologies Inc. | System and method for data compression with encryption |
US11811428B2 (en) * | 2017-10-30 | 2023-11-07 | AtomBeam Technologies Inc. | System and method for data compression using genomic encryption techniques |
US12040820B2 (en) | 2017-10-30 | 2024-07-16 | AtomBeam Technologies Inc. | System and method for data compression with homomorphic encryption |
US11182434B2 (en) | 2017-11-15 | 2021-11-23 | Sumo Logic, Inc. | Cardinality of time series |
US11042534B2 (en) | 2017-11-15 | 2021-06-22 | Sumo Logic | Logs to metrics synthesis |
US10877691B2 (en) * | 2017-12-29 | 2020-12-29 | Intel Corporation | Stream classification based on logical regions |
US10691485B2 (en) | 2018-02-13 | 2020-06-23 | Ebay Inc. | Availability oriented durability technique for distributed server systems |
WO2019198221A1 (ja) * | 2018-04-13 | 2019-10-17 | 三菱電機株式会社 | データ処理装置、データ処理方法及びプログラム |
US11093506B1 (en) * | 2018-06-01 | 2021-08-17 | Splunk Inc. | Combining data streams generated by instrumented software using metadata correlation |
US11061885B2 (en) * | 2018-06-15 | 2021-07-13 | Intel Corporation | Autonomous anomaly detection and event triggering for data series |
WO2020082354A1 (zh) * | 2018-10-26 | 2020-04-30 | 深圳市欢太科技有限公司 | 一种***状态检测方法、***状态装置及终端设备 |
US10476518B1 (en) * | 2018-12-06 | 2019-11-12 | Nyquist Semiconductor Limited | Hardware friendly data compression |
WO2021054612A1 (ko) * | 2019-09-19 | 2021-03-25 | 삼성전자주식회사 | 전자 장치 및 이의 제어 방법 |
US11681721B2 (en) * | 2020-05-08 | 2023-06-20 | Jpmorgan Chase Bank, N.A. | Systems and methods for spark lineage data capture |
CN111930782B (zh) * | 2020-08-11 | 2024-03-15 | 南京国电南自轨道交通工程有限公司 | 两种基于阈值的历史数据采样方法 |
US11086853B1 (en) * | 2020-10-12 | 2021-08-10 | iodyne, LLC | Method and system for streaming data from portable storage devices |
WO2023069310A1 (en) * | 2021-10-18 | 2023-04-27 | Splunk Inc. | Dynamic resolution estimation in metric time series data |
US12013879B2 (en) | 2021-10-18 | 2024-06-18 | Splunk Inc. | Dynamic resolution estimation in metric time series data |
US11874821B2 (en) | 2021-12-22 | 2024-01-16 | Ebay Inc. | Block aggregation for shared streams |
US11853735B1 (en) * | 2023-02-10 | 2023-12-26 | Citibank, N.A. | Systems and methods for continuous integration and continuous deployment pipeline management using pipeline-agnostic non-script rule sets |
Family Cites Families (123)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5872909A (en) | 1995-01-24 | 1999-02-16 | Wind River Systems, Inc. | Logic analyzer for software |
US6097399A (en) | 1998-01-16 | 2000-08-01 | Honeywell Inc. | Display of visual data utilizing data aggregation |
US6408404B1 (en) | 1998-07-29 | 2002-06-18 | Northrop Grumman Corporation | System and method for ensuring and managing situation awareness |
US6301615B1 (en) * | 1998-10-14 | 2001-10-09 | Sun Microsystems, Inc. | Cluster performance monitoring utility |
US7181743B2 (en) | 2000-05-25 | 2007-02-20 | The United States Of America As Represented By The Secretary Of The Navy | Resource allocation decision function for resource management architecture and corresponding programs therefor |
US7389497B1 (en) | 2000-07-06 | 2008-06-17 | International Business Machines Corporation | Method and system for tracing profiling information using per thread metric variables with reused kernel threads |
JP2002278780A (ja) | 2001-03-19 | 2002-09-27 | Toshiba Corp | ネットワークシステムおよび資源分析システム |
US7111282B2 (en) * | 2001-06-12 | 2006-09-19 | Hewlett-Packard Development Company, L.P. | Instrumenting a software program and collecting data from the instrumented software program by type |
US7028225B2 (en) | 2001-09-25 | 2006-04-11 | Path Communications, Inc. | Application manager for monitoring and recovery of software based application processes |
US6988224B2 (en) * | 2002-10-31 | 2006-01-17 | Hewlett-Packard Development Company, L.P. | Measurement apparatus |
US7269824B2 (en) | 2003-02-13 | 2007-09-11 | Path Reliability, Inc. | Software behavior pattern recognition and analysis |
US7624174B2 (en) * | 2003-05-22 | 2009-11-24 | Microsoft Corporation | Self-learning method and system for detecting abnormalities |
JP2004348670A (ja) | 2003-05-26 | 2004-12-09 | Mitsubishi Electric Corp | ログ仲介システム |
KR100485702B1 (ko) * | 2003-05-29 | 2005-04-28 | 삼성전자주식회사 | 지지대를 갖는 박막 벌크 음향 공진기 및 그 제조방법 |
US7392370B2 (en) * | 2004-01-14 | 2008-06-24 | International Business Machines Corporation | Method and apparatus for autonomically initiating measurement of secondary metrics based on hardware counter values for primary metrics |
US7886281B2 (en) * | 2004-03-30 | 2011-02-08 | Symantec Corporation | System and methods for cross-tier transaction tracing |
US20050223368A1 (en) * | 2004-03-30 | 2005-10-06 | Tonic Solutions, Inc. | Instrumented application for transaction tracing |
US7400578B2 (en) * | 2004-12-16 | 2008-07-15 | International Business Machines Corporation | Method and system for throttling network transmissions using per-receiver bandwidth control at the application layer of the transmitting server |
US8396886B1 (en) * | 2005-02-03 | 2013-03-12 | Sybase Inc. | Continuous processing language for real-time data streams |
US7890507B2 (en) | 2005-02-25 | 2011-02-15 | International Business Machines Corporation | System and method of joining data obtained from horizontally and vertically partitioned heterogeneous data stores using string-based location transparent search expressions |
US20060293777A1 (en) * | 2005-06-07 | 2006-12-28 | International Business Machines Corporation | Automated and adaptive threshold setting |
EP1780955A1 (en) | 2005-10-28 | 2007-05-02 | Siemens Aktiengesellschaft | Monitoring method and apparatus of processing of a data stream with high rate/flow |
US8117175B1 (en) * | 2005-11-30 | 2012-02-14 | At&T Intellectual Property Ii, L.P. | Methods and apparatus for querying multiple data streams |
JP2007165962A (ja) | 2005-12-09 | 2007-06-28 | Matsushita Electric Ind Co Ltd | ストリームデータ処理装置 |
US8402443B2 (en) * | 2005-12-12 | 2013-03-19 | dyna Trace software GmbH | Method and system for automated analysis of the performance of remote method invocations in multi-tier applications using bytecode instrumentation |
US8176480B1 (en) * | 2006-02-27 | 2012-05-08 | Symantec Operating Corporation | Adaptive instrumentation through dynamic recompilation |
US7716530B2 (en) * | 2006-02-28 | 2010-05-11 | Microsoft Corporation | Thread interception and analysis |
JP4528273B2 (ja) | 2006-03-17 | 2010-08-18 | 三菱電機株式会社 | 制御ノード装置及びデータ管理方法及びプログラム |
US8739143B2 (en) | 2007-01-31 | 2014-05-27 | Hewlett-Packard Development Company, L.P. | Profiling metrics for computer programs |
US7979245B1 (en) | 2006-05-17 | 2011-07-12 | Quest Software, Inc. | Model-based systems and methods for monitoring computing resource performance |
EP1870829B1 (en) * | 2006-06-23 | 2014-12-03 | Microsoft Corporation | Securing software by enforcing data flow integrity |
US8407699B2 (en) | 2008-03-10 | 2013-03-26 | Citrix Systems, Inc. | System and method for managing code isolation |
JP4933222B2 (ja) | 2006-11-15 | 2012-05-16 | 株式会社日立製作所 | インデックス処理方法及び計算機システム |
US8032875B2 (en) * | 2006-11-28 | 2011-10-04 | Oracle America, Inc. | Method and apparatus for computing user-specified cost metrics in a data space profiler |
CN101193055A (zh) | 2006-11-30 | 2008-06-04 | 中兴通讯股份有限公司 | 间接实时流量控制数据发送方法 |
US8136124B2 (en) * | 2007-01-18 | 2012-03-13 | Oracle America, Inc. | Method and apparatus for synthesizing hardware counters from performance sampling |
CN100461132C (zh) * | 2007-03-02 | 2009-02-11 | 北京邮电大学 | 基于源代码静态分析的软件安全代码分析器及其检测方法 |
US20080270848A1 (en) * | 2007-04-26 | 2008-10-30 | Carli Connally | Method and Apparatus for Displaying Pin Result Data |
US9047412B2 (en) * | 2007-05-06 | 2015-06-02 | Dynatrace Corporation | System and method for extracting instrumentation relevant inheritance relationships for a distributed, inheritance rule based instrumentation system |
US8095917B2 (en) * | 2007-06-04 | 2012-01-10 | Microsoft Corporation | Debugger for virtual intermediate language operations |
US8504733B1 (en) | 2007-07-31 | 2013-08-06 | Hewlett-Packard Development Company, L.P. | Subtree for an aggregation system |
US7698603B2 (en) | 2007-09-07 | 2010-04-13 | Microsoft Corporation | Test results management |
US8356289B2 (en) * | 2008-03-26 | 2013-01-15 | Avaya Inc. | Efficient encoding of instrumented data in real-time concurrent systems |
JP5198929B2 (ja) | 2008-04-25 | 2013-05-15 | 株式会社日立製作所 | ストリームデータ処理方法及び計算機システム |
US20090287729A1 (en) * | 2008-05-16 | 2009-11-19 | Microsoft Corporation | Source code coverage testing |
US8676841B2 (en) * | 2008-08-29 | 2014-03-18 | Oracle International Corporation | Detection of recurring non-occurrences of events using pattern matching |
US8381039B1 (en) | 2008-10-20 | 2013-02-19 | Amazon Technologies, Inc. | Storage of mass data for monitoring |
JP4659877B2 (ja) | 2008-12-03 | 2011-03-30 | 株式会社日立製作所 | ストリームデータ処理制御方法、ストリームデータ処理装置及びストリームデータ処理制御プログラム |
JP5310094B2 (ja) * | 2009-02-27 | 2013-10-09 | 日本電気株式会社 | 異常検出システム、異常検出方法および異常検出用プログラム |
US8601458B2 (en) * | 2009-05-14 | 2013-12-03 | International Business Machines Corporation | Profile-driven data stream processing |
US8854992B2 (en) | 2009-07-09 | 2014-10-07 | Motorola Mobility Llc | Artificial delay inflation and jitter reduction to improve TCP throughputs |
US8381284B2 (en) | 2009-08-21 | 2013-02-19 | Mcafee, Inc. | System and method for enforcing security policies in a virtual environment |
US9529694B2 (en) * | 2009-09-14 | 2016-12-27 | Oracle International Corporation | Techniques for adaptive trace logging |
US8327059B2 (en) | 2009-09-30 | 2012-12-04 | Vmware, Inc. | System and method to enhance memory protection for programs in a virtual machine environment |
JP5990466B2 (ja) * | 2010-01-21 | 2016-09-14 | スビラル・インコーポレーテッド | ストリームに基づく演算を実装するための汎用複数コアシステムのための方法および装置 |
JP5534869B2 (ja) | 2010-03-03 | 2014-07-02 | 積水化学工業株式会社 | 計測管理システム及び管理サーバ |
US8484243B2 (en) | 2010-05-05 | 2013-07-09 | Cisco Technology, Inc. | Order-independent stream query processing |
JP5478722B2 (ja) | 2010-06-18 | 2014-04-23 | 三菱電機株式会社 | データ処理装置及びデータ処理方法及びプログラム |
US8615597B2 (en) * | 2010-06-30 | 2013-12-24 | Telcordia Technologies, Inc. | Optimizing evaluation patterns and data acquisition for stream analytics in resource-constrained wireless environments |
EP2538632B1 (en) * | 2010-07-14 | 2014-04-02 | Google Inc. | Method and receiver for reliable detection of the status of an RTP packet stream |
US8260826B2 (en) | 2010-09-23 | 2012-09-04 | Hewlett-Packard Development Company, L.P. | Data processing system and method |
US20130226909A1 (en) | 2010-10-06 | 2013-08-29 | Hitachi, Ltd. | Stream Data Processing Method and Device |
US20120158925A1 (en) * | 2010-12-17 | 2012-06-21 | Microsoft Corporation | Monitoring a model-based distributed application |
US8468461B2 (en) * | 2011-03-05 | 2013-06-18 | Flowatch Llc | Form-based user-configurable processing plant management system and method |
WO2012128388A1 (ja) | 2011-03-23 | 2012-09-27 | 日本電気株式会社 | 運用管理システム、運用管理方法、及びプログラム |
US9274919B2 (en) | 2011-04-29 | 2016-03-01 | Dynatrace Software Gmbh | Transaction tracing mechanism of distributed heterogenous transactions having instrumented byte code with constant memory consumption and independent of instrumented method call depth |
JP5699789B2 (ja) | 2011-05-10 | 2015-04-15 | ソニー株式会社 | 情報処理装置、情報処理方法、プログラム及び情報処理システム |
EP2707812A1 (en) * | 2011-05-10 | 2014-03-19 | Telefonaktiebolaget LM Ericsson (PUBL) | Optimised data stream management system |
US9465631B2 (en) * | 2011-09-30 | 2016-10-11 | Microsoft Technology Licensing, Llc | Automatic caching of partial results while editing software |
US9208218B2 (en) | 2011-10-19 | 2015-12-08 | Zalag Corporation | Methods and apparatuses for generating search expressions from content, for applying search expressions to content collections, and/or for analyzing corresponding search results |
WO2013101214A1 (en) | 2011-12-30 | 2013-07-04 | Intel Corporation | Optional logging of debug activities in a real time instruction tracing log |
US8699339B2 (en) | 2012-02-17 | 2014-04-15 | Apple Inc. | Reducing interarrival delays in network traffic |
US9454462B2 (en) * | 2012-03-16 | 2016-09-27 | International Business Machines Corporation | Run-time instrumentation monitoring for processor characteristic changes |
US9442824B2 (en) * | 2012-03-16 | 2016-09-13 | International Business Machines Corporation | Transformation of a program-event-recording event into a run-time instrumentation event |
US9465716B2 (en) * | 2012-03-16 | 2016-10-11 | International Business Machines Corporation | Run-time instrumentation directed sampling |
WO2013147817A1 (en) | 2012-03-29 | 2013-10-03 | Intel Corporation | Architecture and method for managing interrupts in a virtualized environment |
US20130275814A1 (en) | 2012-04-12 | 2013-10-17 | Shiva Prasad Nayak | Adaptive system monitoring |
EP2845121B1 (en) | 2012-04-30 | 2020-10-14 | WebTrends, Inc. | Method and system that streams real-time, processed data from remote processor-controlled appliances |
JP5505464B2 (ja) | 2012-06-08 | 2014-05-28 | 沖電気工業株式会社 | センサデータ提供システム、ゲートウェイ及び抽象化センサデータ生成方法 |
WO2013186831A1 (ja) | 2012-06-11 | 2013-12-19 | 株式会社日立製作所 | ストリームデータ処理方法、ストリームデータ処理装置及びプログラム |
US8914317B2 (en) * | 2012-06-28 | 2014-12-16 | International Business Machines Corporation | Detecting anomalies in real-time in multiple time series data with automated thresholding |
US9185235B2 (en) | 2012-08-02 | 2015-11-10 | Ab Initio Technology Llc | Aggregating data in a mediation system |
US9063788B2 (en) * | 2012-08-27 | 2015-06-23 | International Business Machines Corporation | Stream processing with runtime adaptation |
US9953059B2 (en) * | 2012-09-28 | 2018-04-24 | Oracle International Corporation | Generation of archiver queries for continuous queries over archived relations |
US9563663B2 (en) * | 2012-09-28 | 2017-02-07 | Oracle International Corporation | Fast path evaluation of Boolean predicates |
US9185114B2 (en) | 2012-12-05 | 2015-11-10 | Symantec Corporation | Methods and systems for secure storage segmentation based on security context in a virtual environment |
JP6011639B2 (ja) | 2012-12-28 | 2016-10-19 | 富士通株式会社 | 情報処理装置、情報処理方法、及び情報処理プログラム |
US9229839B2 (en) | 2013-01-09 | 2016-01-05 | Microsoft Technology Licensing, Llc | Implementing rate controls to limit timeout-based faults |
US20150234897A1 (en) | 2013-01-10 | 2015-08-20 | Hitachi, Ltd. | Time series data processing apparatus and method, and storage medium |
US10298444B2 (en) | 2013-01-15 | 2019-05-21 | Oracle International Corporation | Variable duration windows on continuous data streams |
US8954546B2 (en) * | 2013-01-25 | 2015-02-10 | Concurix Corporation | Tracing with a workload distributor |
US9135145B2 (en) | 2013-01-28 | 2015-09-15 | Rackspace Us, Inc. | Methods and systems of distributed tracing |
US20130283102A1 (en) | 2013-02-12 | 2013-10-24 | Concurix Corporation | Deployment of Profile Models with a Monitoring Agent |
US10613965B2 (en) * | 2013-03-14 | 2020-04-07 | Adobe Inc. | Method and system of visually combining profiling data from instrumentation and sampling |
US9665474B2 (en) | 2013-03-15 | 2017-05-30 | Microsoft Technology Licensing, Llc | Relationships derived from trace data |
US9471656B2 (en) | 2013-03-15 | 2016-10-18 | Uda, Llc | Massively-parallel system architecture and method for real-time extraction of high-value information from data streams |
CN109629953A (zh) | 2013-05-15 | 2019-04-16 | 麦格纳覆盖件有限公司 | 用于操作车辆的闭合板的方法和*** |
US9542291B2 (en) | 2013-05-24 | 2017-01-10 | Software Ag | Self-monitoring event-based system and method |
US9292328B2 (en) | 2013-05-24 | 2016-03-22 | Bromium, Inc. | Management of supervisor mode execution protection (SMEP) by a hypervisor |
US9578372B2 (en) | 2013-09-27 | 2017-02-21 | Cisco Technology, Inc. | Delay tolerant decoder |
WO2015060844A1 (en) | 2013-10-23 | 2015-04-30 | Hewlett-Packard Development Company, L.P. | Tracking a status of a process |
KR20160075704A (ko) | 2013-10-24 | 2016-06-29 | 카세일즈.컴 엘티디 | 멀티패싯 검색 쿼리들을 구현하기 위한 시스템 및 방법 |
WO2015176048A1 (en) | 2014-05-15 | 2015-11-19 | Lynx Software Technologies, Inc. | Aspects of hardware virtualization, hypervisors, code detection |
US9479414B1 (en) | 2014-05-30 | 2016-10-25 | Dell Software Inc. | System and method for analyzing computing performance |
US9244978B2 (en) * | 2014-06-11 | 2016-01-26 | Oracle International Corporation | Custom partitioning of a data stream |
US9454497B2 (en) | 2014-08-15 | 2016-09-27 | Intel Corporation | Technologies for secure inter-virtual-machine shared memory communication |
CA3177882A1 (en) | 2014-10-08 | 2016-04-14 | Splunk Inc. | Real-time reporting based on instrumentation of software |
US9804951B2 (en) | 2014-10-08 | 2017-10-31 | Signalfx, Inc. | Quantization of data streams of instrumented software |
WO2016057211A1 (en) | 2014-10-08 | 2016-04-14 | Signalfx, Inc. | Real-time reporting based on instrumentation of software |
US9804830B2 (en) | 2014-12-19 | 2017-10-31 | Signalfx, Inc. | Anomaly detection using a data stream processing language for analyzing instrumented software |
WO2016100534A1 (en) | 2014-12-19 | 2016-06-23 | Signalfx, Inc. | Data stream processing language for analyzing instrumented software |
US9858411B2 (en) | 2014-12-19 | 2018-01-02 | Intel Corporation | Execution profiling mechanism |
US10394692B2 (en) | 2015-01-29 | 2019-08-27 | Signalfx, Inc. | Real-time processing of data streams received from instrumented software |
US9715410B2 (en) | 2015-01-30 | 2017-07-25 | Red Hat Israel, Ltd. | Protected virtual machine function access |
US10691476B2 (en) | 2015-06-27 | 2020-06-23 | Mcafee, Llc | Protection of sensitive data |
US10210038B2 (en) * | 2015-10-08 | 2019-02-19 | Lightbend, Inc. | Tuning context-aware rule engine for anomaly detection |
US9880871B2 (en) | 2016-02-23 | 2018-01-30 | Red Hat Israel, Ltd. | Protection from guest interrupts in a virtual machine function |
US9892020B1 (en) | 2016-03-11 | 2018-02-13 | Signalfx, Inc. | User interface for specifying data stream processing language programs for analyzing instrumented software |
US10303899B2 (en) | 2016-08-11 | 2019-05-28 | Intel Corporation | Secure public cloud with protected guest-verified host control |
KR102511451B1 (ko) | 2016-11-09 | 2023-03-17 | 삼성전자주식회사 | 리치 실행 환경에서 보안 어플리케이션을 안전하게 실행하는 컴퓨팅 시스템 |
EP3343366B1 (en) | 2016-12-27 | 2020-12-30 | OpenSynergy GmbH | System and method for scheduling a plurality of guest systems and/or threads |
US10860718B2 (en) | 2017-07-28 | 2020-12-08 | Mcafee, Llc | Protecting computer systems used in virtualization environments against fileless malware |
US11171983B2 (en) | 2018-06-29 | 2021-11-09 | Intel Corporation | Techniques to provide function-level isolation with capability-based security |
-
2015
- 2015-12-15 US US14/970,450 patent/US9804830B2/en active Active
- 2015-12-15 US US14/970,451 patent/US9760353B2/en active Active
- 2015-12-15 US US14/970,454 patent/US9846574B2/en active Active
- 2015-12-16 CN CN202110472032.1A patent/CN113220724B/zh active Active
- 2015-12-16 CA CA2969131A patent/CA2969131C/en active Active
- 2015-12-16 CA CA3058839A patent/CA3058839A1/en active Pending
- 2015-12-16 EP EP21209283.7A patent/EP3982265A1/en active Pending
- 2015-12-16 JP JP2017532956A patent/JP6793900B2/ja active Active
- 2015-12-16 EP EP15870999.8A patent/EP3234776B1/en active Active
- 2015-12-16 CN CN201580069546.5A patent/CN107111527B/zh active Active
- 2015-12-16 AU AU2015364688A patent/AU2015364688B2/en active Active
-
2017
- 2017-09-07 US US15/697,451 patent/US10949180B2/en active Active
- 2017-12-18 US US15/845,993 patent/US10409568B2/en active Active
-
2019
- 2019-08-21 US US16/547,559 patent/US11709661B2/en active Active
-
2020
- 2020-01-15 JP JP2020004714A patent/JP6889289B2/ja active Active
-
2021
- 2021-02-12 US US17/175,330 patent/US11733982B1/en active Active
- 2021-03-10 AU AU2021201512A patent/AU2021201512B2/en active Active
- 2021-05-20 JP JP2021085282A patent/JP7437351B2/ja active Active
-
2023
- 2023-03-07 AU AU2023201395A patent/AU2023201395B2/en active Active
- 2023-06-08 US US18/331,571 patent/US12039307B1/en active Active
Also Published As
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107111527B (zh) | 用于分析仪器化软件的数据流处理语言 | |
US11914501B1 (en) | User interface for specifying data stream processing language programs for analyzing instrumented software | |
CN107430545B (zh) | 从仪器化软件接收的数据流的实时处理 | |
US10394693B2 (en) | Quantization of data streams of instrumented software | |
CN106796520B (zh) | 基于软件的仪器化的实时报告 | |
WO2016100534A1 (en) | Data stream processing language for analyzing instrumented software |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
CB02 | Change of applicant information |
Address after: California, USA Applicant after: Signal Co.,Ltd. Address before: California, USA Applicant before: SIGNALFX Inc. |
|
CB02 | Change of applicant information | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20200720 Address after: California, USA Applicant after: SPLUNK Inc. Address before: California, USA Applicant before: Signal Co.,Ltd. |
|
TA01 | Transfer of patent application right | ||
GR01 | Patent grant | ||
GR01 | Patent grant |