背景技術(shù):
本公開一般而言涉及數(shù)據(jù)流處理,更具體地,涉及用于處理從儀器化軟件接收的數(shù)據(jù)流的數(shù)據(jù)流處理語言。
軟件開發(fā)人員通過將軟件儀器化來監(jiān)控他們所開發(fā)的軟件的不同方面。這些方面包括軟件的執(zhí)行、執(zhí)行軟件期間遇到的誤差、在執(zhí)行軟件期間遇到的顯著事件、描述代碼的哪些部分正在被執(zhí)行以及哪些部分未被執(zhí)行的信息,等等。用于將代碼儀器化的常規(guī)技術(shù)包括代碼中的聲明,其記錄不同類型的信息以記錄文件或在屏幕上打印信息。該技術(shù)適用于簡單應用,例如,具有在單個處理器上執(zhí)行的簡單執(zhí)行流程的應用。然而,用于儀器化軟件的這些技術(shù)對于可能分布在多個系統(tǒng)上的復雜應用(每個系統(tǒng)執(zhí)行多個進程或執(zhí)行線程)而言不夠勝任。
用于儀器化這種復雜系統(tǒng)的另一常規(guī)技術(shù)是在儀器化代碼中使用專家的幫助。某些供應商提供幫助儀器化代碼的專家服務。然而,這些供應商通常提供通常不是非常靈活的標準服務。此外,這些基于供應商的解決方案在供應商儀器化代碼所需的時間方面具有顯著開銷。因而,這些解決方案適合于緩慢的開發(fā)周期,例如,長為一年的開發(fā)周期。然而,軟件產(chǎn)品的軟件開發(fā)和發(fā)布周期已經(jīng)變短了。例如,存在幾個在線系統(tǒng),其中軟件開發(fā)人員每月、每周或甚至每天改變它們并且對它們進行部署。由于基于供應商的儀器化解決方案的顯著開銷,所以開發(fā)人員發(fā)現(xiàn)難以在快節(jié)奏開發(fā)環(huán)境中使用這些服務。
此外,用于儀器化代碼的常規(guī)技術(shù)在同化信息、存儲信息和分析信息以生成報告方面引起顯著延遲。因此,在軟件中發(fā)生問題的時間與該問題經(jīng)由代碼的儀器化被檢測到的時間之間可能會有顯著延遲。因而,用于基于軟件的儀器化來生成報告的常規(guī)系統(tǒng)在復雜應用的快節(jié)奏開發(fā)周期中常常不夠勝任。
技術(shù)實現(xiàn)要素:
儀器化分析系統(tǒng)的實施例基于在數(shù)據(jù)流語言中指定的指令來處理數(shù)據(jù)流。數(shù)據(jù)流從在外部系統(tǒng)上執(zhí)行的儀器化代碼接收。數(shù)據(jù)流語言的命令被指定為塊。塊執(zhí)行某個類型的操作(或計算,例如,取回數(shù)據(jù)、處理數(shù)據(jù)等等)。塊可選地包括輸入端口、輸出端口和參數(shù)。輸入端口接收可以從外部系統(tǒng)接收或由其他塊生成的數(shù)據(jù)流的數(shù)據(jù)。塊的計算結(jié)果作為輸出被提供給塊的輸出端口。與塊相關(guān)聯(lián)的參數(shù)用于指定塊的計算。例如,參數(shù)指定查找數(shù)據(jù)流的塊的搜索字符串。數(shù)據(jù)流語言程序包括塊的網(wǎng)絡,其中塊的輸出可以作為輸入被提供給其他塊,等等。任務表示數(shù)據(jù)流語言程序的執(zhí)行。針對相同的數(shù)據(jù)流語言程序,多個任務可以被執(zhí)行。任務與開始時間、停止時間和周期性相關(guān)聯(lián)。該任務在開始時間開始,并且執(zhí)行直到停止時間為止。該任務包括基于所指定的周期性、以時間間隔周期性地執(zhí)行的指令。對于每個時間間隔,任務從數(shù)據(jù)流集合接收數(shù)據(jù)值,并且執(zhí)行數(shù)據(jù)流語言的塊以生成輸出數(shù)據(jù)值。其他實施例使用不同的語法和不同的編程范式來實現(xiàn)本文中所指示的功能。
儀器化分析系統(tǒng)的實施例基于在數(shù)據(jù)流語言中指定的指令來處理數(shù)據(jù)流。數(shù)據(jù)流從在外部系統(tǒng)上執(zhí)行的儀器化代碼接收,或者可以作為數(shù)據(jù)流語言程序的結(jié)果、通過儀器化分析系統(tǒng)來生成。儀器化分析系統(tǒng)接收數(shù)據(jù)流語言程序,其執(zhí)行數(shù)據(jù)流與閾值的比較。例如,數(shù)據(jù)流的數(shù)據(jù)可以與低閾值和/或高閾值進行比較。低閾值/高閾值可以是常數(shù)值或動態(tài)改變的值。低閾值/高閾值可以通過生成數(shù)據(jù)流的數(shù)據(jù)流語言程序來指定。
閾值塊被配置成接收第一輸入和第二輸入。例如,第一輸入通過閾值塊的數(shù)據(jù)端口接收,第二輸入通過閾值塊的閾值端口接收。數(shù)據(jù)流語言程序的第一指令集合生成第一輸入,并且數(shù)據(jù)流語言程序的第二指令集合生成第二輸入。系統(tǒng)接收輸入數(shù)據(jù)流集合。系統(tǒng)執(zhí)行第一指令集合以聚合輸入數(shù)據(jù)流集合的數(shù)據(jù),以生成第一多個數(shù)據(jù)流,其包括作為閾值塊的第一輸入而被提供的數(shù)據(jù)值。系統(tǒng)執(zhí)行第二指令集合以聚合輸入數(shù)據(jù)流集合的數(shù)據(jù),以生成第二多個數(shù)據(jù)流,其包括作為閾值塊的第二輸入而被提供的閾值。該系統(tǒng)將作為數(shù)據(jù)值的、作為第一輸入被接收的數(shù)據(jù)流,與作為閾值的、作為第二輸入被接收的數(shù)據(jù)流進行匹配。對于在第一輸入處接收的每個數(shù)據(jù)流,系統(tǒng)將數(shù)據(jù)流的數(shù)據(jù)值與來自第二個多個數(shù)據(jù)流的對應數(shù)據(jù)流的閾值進行比較,并且基于數(shù)據(jù)值和閾值的比較結(jié)果來確定是否生成事件。
在實施例中,所生成的事件被報告作為在由系統(tǒng)分析的數(shù)據(jù)流中檢測到的異常。例如,異常可以指示具體數(shù)據(jù)流或基于數(shù)據(jù)流集合的聚合值超出由閾值塊的低閾值和高閾值設置的界限。低閾值和高閾值本身可以動態(tài)地改變,例如,低閾值和高閾值可以被定義為基于某些輸入數(shù)據(jù)流的移動平均。
實施例描述了一種基于在數(shù)據(jù)流語言中指定的指令來處理數(shù)據(jù)流的儀器化分析系統(tǒng)。該系統(tǒng)存儲描述多個數(shù)據(jù)流的元數(shù)據(jù)。該系統(tǒng)接收用于執(zhí)行的數(shù)據(jù)流語言程序。數(shù)據(jù)流語言程序包括使用數(shù)據(jù)流語言指定的指令集合。指令包括與基于與所接收的數(shù)據(jù)流相關(guān)聯(lián)的元數(shù)據(jù)屬性的搜索表達式相關(guān)聯(lián)的查找塊。系統(tǒng)評價搜索表達式以標識符合搜索表達式的數(shù)據(jù)流集合。系統(tǒng)通過執(zhí)行以下步驟來重復執(zhí)行數(shù)據(jù)流語言程序。系統(tǒng)從所標識的數(shù)據(jù)流集合的每個數(shù)據(jù)流接收數(shù)據(jù)值。系統(tǒng)執(zhí)行數(shù)據(jù)流語言程序的每個塊,并且基于執(zhí)行來生成結(jié)果數(shù)據(jù)值。結(jié)果值與由數(shù)據(jù)流語言程序生成的結(jié)果數(shù)據(jù)流相對應。系統(tǒng)存儲一個或多個結(jié)果數(shù)據(jù)值。
在實施例中,查找塊是數(shù)據(jù)流語言程序的第一塊。系統(tǒng)重復評價查找塊。由查找塊標識的數(shù)據(jù)流集合可以從查找塊的一個評價改變?yōu)榱硪辉u價。查找塊可以以與數(shù)據(jù)流語言程序的其余塊的執(zhí)行速率不同的速率來評價。
系統(tǒng)的實施例基于在數(shù)據(jù)流語言中指定的指令來處理數(shù)據(jù)流。系統(tǒng)存儲描述由系統(tǒng)處理的數(shù)據(jù)流的元數(shù)據(jù)。每個數(shù)據(jù)流的元數(shù)據(jù)包括與數(shù)據(jù)流相關(guān)聯(lián)的屬性。例如,數(shù)據(jù)流可以與具有值“databank1”的屬性“source”和具有值“numcachemisses”的屬性“metric_name”相關(guān)聯(lián)。系統(tǒng)接收使用數(shù)據(jù)流語言程序指定的指令集合用于處理輸入數(shù)據(jù)流。系統(tǒng)通過執(zhí)行指令集合來生成結(jié)果數(shù)據(jù)流。例如,數(shù)據(jù)流語言程序可以包括用于通過某些屬性對所接收的數(shù)據(jù)流進行編組的指令,并且基于所標識的組的數(shù)目,數(shù)據(jù)流語言程序的結(jié)果可以包括多個結(jié)果數(shù)據(jù)流。系統(tǒng)執(zhí)行結(jié)果數(shù)據(jù)流中的每個結(jié)果數(shù)據(jù)流的以下步驟。系統(tǒng)確定描述結(jié)果數(shù)據(jù)流的屬性值集合。系統(tǒng)將該值集合存儲為描述結(jié)果數(shù)據(jù)流的元數(shù)據(jù)。系統(tǒng)生成數(shù)據(jù)流的標識符,并且將標識符與描述數(shù)據(jù)流的元數(shù)據(jù)相關(guān)聯(lián)。該系統(tǒng)存儲與該標識符相關(guān)聯(lián)的結(jié)果數(shù)據(jù)流的數(shù)據(jù)。
在實施例中,數(shù)據(jù)流語言程序指定多個分組(groupby)命令。儀器化分析系統(tǒng)與每個結(jié)果數(shù)據(jù)流相關(guān)聯(lián),所指定的元數(shù)據(jù)屬性的值與數(shù)據(jù)流語言程序的最后分組命令相關(guān)聯(lián)。
本說明書中描述的特征和優(yōu)點并非全部包括,并且具體地,考慮到附圖、說明書和權(quán)利要求書,許多附加特征和優(yōu)點對于本領(lǐng)域普通技術(shù)人員將是明顯的。而且,應當指出,說明書中所使用的語言主要出于可讀性和指導的目的而被選擇,并且可能沒有被選擇來描繪或限制所公開的主題。
附圖說明
所公開的實施例具有根據(jù)具體實施方式、所附權(quán)利要求和附圖(或圖)將更容易顯而易見的其他優(yōu)點和特征。下文簡要介紹這些附圖。
圖1示出了根據(jù)實施例的用于基于儀器化軟件來報告的整體系統(tǒng)環(huán)境。
圖2示出了根據(jù)實施例的用于執(zhí)行用于處理從儀器化軟件接收的數(shù)據(jù)流的數(shù)據(jù)流語言程序的系統(tǒng)的架構(gòu)。
圖3示出了根據(jù)實施例的用于處理數(shù)據(jù)流語言程序的塊的數(shù)據(jù)流語言處理器的架構(gòu)。
圖4示出了根據(jù)實施例的用于說明數(shù)據(jù)流語言的特征的數(shù)據(jù)流語言程序的示例。
圖5示出了根據(jù)實施例的用于基于數(shù)據(jù)流語言程序來處理從數(shù)據(jù)流接收的數(shù)據(jù)的儀器化分析系統(tǒng)的整體過程。
圖6示出了根據(jù)實施例的從儀器化軟件接收的數(shù)據(jù)流的量化過程。
圖7示出了根據(jù)實施例的通過用于向數(shù)據(jù)流語言程序提供輸入的查找塊來選擇數(shù)據(jù)流集合。
圖8示出了根據(jù)實施例的作為對查找塊的周期性重新評價的結(jié)果向數(shù)據(jù)流語言程序提供輸入的數(shù)據(jù)流集合的動態(tài)改變。
圖9示出了根據(jù)實施例的用于標識用于使用查找塊向數(shù)據(jù)流語言程序提供輸入的數(shù)據(jù)流集合的過程。
圖10圖示了根據(jù)實施例的通過執(zhí)行提取塊從數(shù)據(jù)流取回數(shù)據(jù)的過程。
圖11a至圖11c圖示了根據(jù)實施例的組合來自時間序列數(shù)據(jù)存儲裝置的數(shù)據(jù)和從數(shù)據(jù)流實時接收的數(shù)據(jù)以用于移動窗口計算的過程。
圖12圖示了根據(jù)實施例的用于對數(shù)據(jù)流的數(shù)據(jù)進行編組以生成結(jié)果數(shù)據(jù)流集合的過程。
圖13a至圖13b示出了根據(jù)實施例的示例場景,其圖示了基于描述數(shù)據(jù)流的不同元數(shù)據(jù)屬性對數(shù)據(jù)流進行編組。
圖14示出了根據(jù)實施例的示例場景,其圖示了作為輸入數(shù)據(jù)流隨時間而改變的結(jié)果的由分組塊生成的結(jié)果數(shù)據(jù)流的動態(tài)改變。
圖15示出了根據(jù)實施例的流程圖,其圖示了通過執(zhí)行數(shù)據(jù)流語言程序的發(fā)布塊而發(fā)布結(jié)果數(shù)據(jù)流的過程。
圖16示出了根據(jù)實施例的數(shù)據(jù)流語言程序的示例,其圖示了具有由具體屬性編組的數(shù)據(jù)流的固定閾值的閾值塊的使用。
圖17示出了根據(jù)實施例的數(shù)據(jù)流語言程序的示例,其圖示了具有由元數(shù)據(jù)屬性編組的數(shù)據(jù)流的動態(tài)改變的閾值的閾值塊的使用。
圖18示出了根據(jù)實施例的流程圖,其圖示了執(zhí)行包括閾值塊的數(shù)據(jù)流語言程序的過程。
圖19示出了根據(jù)實施例的數(shù)據(jù)流語言程序的示例,其圖示了使用定制塊來基于應用于包括數(shù)據(jù)流組的輸入的用戶定義功能來生成結(jié)果數(shù)據(jù)流。
圖20示出了根據(jù)實施例的流程圖,其圖示了執(zhí)行具有定制塊的數(shù)據(jù)流語言程序的過程。
圖21示出了根據(jù)實施例的顯示數(shù)據(jù)流語言程序的執(zhí)行結(jié)果的用戶接口的屏幕截圖,其示出了由儀器化分析系統(tǒng)接收的數(shù)據(jù)流。
圖22示出了根據(jù)實施例的顯示數(shù)據(jù)流語言程序的執(zhí)行結(jié)果的用戶接口的屏幕截圖,其示出了由儀器化分析系統(tǒng)接收的數(shù)據(jù)流的數(shù)據(jù)的1分鐘平均。
圖23示出了根據(jù)實施例的顯示數(shù)據(jù)流語言程序的執(zhí)行結(jié)果的用戶接口的屏幕截圖,其示出了由數(shù)據(jù)中心編組的數(shù)據(jù)流的總和。
圖24示出了根據(jù)實施例的顯示數(shù)據(jù)流語言程序的執(zhí)行結(jié)果的用戶接口的屏幕截圖,該數(shù)據(jù)流語言程序包括確定高速緩存命中率與由數(shù)據(jù)中心編組的數(shù)據(jù)流的高速緩存命中率與未命中率之和的比例的定制宏塊。
現(xiàn)在將詳細參考幾個實施例,其示例在附圖中圖示。應當指出,在任何可行的情況下,在附圖中可以使用類似或相同的附圖標記,并且可以指示類似或相同的功能。附圖僅僅為了說明的目的描繪了所公開的系統(tǒng)(或方法)的實施例。本領(lǐng)域技術(shù)人員將從以下描述中容易地認識到,在不背離本文中所描述的原理的情況下,可以采用本文中所說明的結(jié)構(gòu)和方法的備選實施例。
具體實施方式
整體系統(tǒng)環(huán)境
圖1示出了根據(jù)實施例的用于基于儀器化軟件進行報告的整體系統(tǒng)環(huán)境。整個系統(tǒng)環(huán)境包括儀器化分析系統(tǒng)100、一個或多個開發(fā)系統(tǒng)120、管理系統(tǒng)160和報告系統(tǒng)150。在其他實施例中,與圖1中所示的部件相比,可以使用更多或更少的部件。例如,開發(fā)系統(tǒng)120、管理系統(tǒng)160和報告系統(tǒng)150可以經(jīng)由網(wǎng)絡(圖1中未示出)與儀器化分析系統(tǒng)100交互。此外,圖1所示的每個系統(tǒng)可能存在或多或少的實例,例如,可以存在多個報告系統(tǒng)150。
圖1和其他附圖使用相同的附圖標記來標識相同的元件。諸如“130a”之類的附圖標記之后的字母指示該具體涉及具有該特定附圖標記的元件。文本中沒有跟隨字母的附圖標記,例如“130”,是指具有該附圖標記的附圖中的任何或所有元件(例如,文本中的“130”是指附圖中的附圖標記“130a”和/或“130b”)。
儀器化分析系統(tǒng)100接收包括由不同開發(fā)系統(tǒng)120發(fā)送的度量值的數(shù)據(jù)(儀器化分析系統(tǒng)100還可以在本文中被稱為分析系統(tǒng)或數(shù)據(jù)分析系統(tǒng))。開發(fā)系統(tǒng)120執(zhí)行儀器化軟件,例如,應用130。盡管在圖1中應用130被示出為儀器化軟件的示例,但是本文中所公開的技術(shù)不限于應用軟件,而是適用于其他類型的軟件,例如,服務器軟件、在客戶端設備上執(zhí)行的軟件、網(wǎng)站等等。此外,開發(fā)系統(tǒng)120包括被配置成執(zhí)行儀器化軟件的任何計算系統(tǒng),而不論其是否用于開發(fā)新軟件。例如,開發(fā)系統(tǒng)120可以是用于測試目的、分級目的或在企業(yè)中執(zhí)行的任何生產(chǎn)系統(tǒng)的計算系統(tǒng)。
在開發(fā)系統(tǒng)120上執(zhí)行的軟件被配置成向儀器化分析系統(tǒng)100發(fā)送作為儀器化軟件的結(jié)果而生成的信息。例如,應用130可以向儀器化分析系統(tǒng)100發(fā)送與各種度量被生成時相對應的值。應用130可以發(fā)送度量的組值并且將它們周期性地發(fā)送到儀器化分析系統(tǒng)100。不同的應用130可以以不同的速率發(fā)送相同的度量或不同的度量。相同的應用可以以不同的速率發(fā)送不同的度量。應用130通過調(diào)用由儀器化分析系統(tǒng)100支持的應用編程接口(api)向儀器化分析系統(tǒng)100發(fā)送數(shù)據(jù)。
可以儀器化軟件程序,以向應用添加計數(shù)器或計量器。計數(shù)器包括存儲根據(jù)在軟件中某個事件的發(fā)生而遞增的值的指令。計數(shù)器可以用于確定代碼的具體部分被執(zhí)行的次數(shù),例如,函數(shù)或方法、條件代碼的具體分支、異常、循環(huán)等。
通常,計數(shù)器值單調(diào)地改變,例如,計數(shù)器值可以單調(diào)增加(或減小)。例如,如果計數(shù)器跟蹤自系統(tǒng)開始執(zhí)行以來事件發(fā)生的次數(shù),則每當系統(tǒng)檢測到事件的發(fā)生時,計數(shù)器值增加??梢员容^計數(shù)器的值以確定在兩個不同時間點處的具體計數(shù)器值的改變。例如,具體事件在時間t1和t2之間的時間間隔內(nèi)發(fā)生的次數(shù)可以通過計算從t1到t2的對應計數(shù)器值的改變來確定。應用130可以調(diào)用儀器化分析系統(tǒng)的api,以向儀器化分析系統(tǒng)100發(fā)送計數(shù)器的當前值。
以下是應用130的儀器化代碼的示例。包括在正在被儀器化的代碼中的以下指令創(chuàng)建用于跟蹤動作或?qū)嶓w的計數(shù)的計數(shù)器對象。counter1=createcounter(source=“web1”,metric=“metric1”);
上述指令創(chuàng)建計數(shù)器對象并且將其分配給變量計數(shù)器1。計數(shù)器對象與源“web1”和度量“metric1”相關(guān)聯(lián)。在實施例中,源和度量值唯一地標識與計數(shù)器(或計量器)相關(guān)聯(lián)的數(shù)據(jù)流。在其他實施例中,更多或更少的鍵值對可以用于唯一地標識數(shù)據(jù)流。
當與計數(shù)器相對應的數(shù)據(jù)通過儀器化代碼被發(fā)送到儀器化分析系統(tǒng)100時,接收在創(chuàng)建計數(shù)器期間指定的值中的一個或多個值。實施例允許儀器化應用130以減少與每個數(shù)據(jù)流一起發(fā)送的信息量。這減少了作為儀器化代碼的結(jié)果而在應用130中引入的開銷量。
應用130的儀器化代碼可以包括在代碼中的不同位置處更新計數(shù)器值的指令。例如,計數(shù)器1可以通過執(zhí)行指令“counter1.increment()”來遞增。計數(shù)器可以被遞增以跟蹤與代碼相關(guān)聯(lián)的各種動作或?qū)嶓w。例如,每當特定函數(shù)或方法被調(diào)用時,計數(shù)器可以被遞增,每當條件表達式的具體分支被執(zhí)行時,計數(shù)器可以被遞增,每當例如在對象的構(gòu)造器中創(chuàng)建特定類型的對象時,計數(shù)器可以被遞增。計數(shù)器的遞增指令可以有條件地被調(diào)用,例如,如果函數(shù)使用特定參數(shù)組合來調(diào)用。應用130通過調(diào)用儀器化分析系統(tǒng)100的api向儀器化分析系統(tǒng)100傳達計數(shù)器值。
計量器包括指令以測量應用130的某些運行時特征,例如,堆大小、高速緩存未命中或命中的數(shù)目、所使用的有源存儲器、cpu(中央處理單元)利用率、響應請求所需的總時間、連接至服務所需的時間等等。計量器還可以用于跟蹤某些應用特定參數(shù)或業(yè)務相關(guān)值,例如,事務數(shù)目、用戶數(shù)目等等。計量器可以基于可配置的間隔來周期性地調(diào)用。計量器的值被周期性地發(fā)送到儀器化分析系統(tǒng)100。
管理系統(tǒng)160允許例如系統(tǒng)管理員之類的特權(quán)用戶將數(shù)據(jù)流與元數(shù)據(jù)相關(guān)聯(lián)。管理系統(tǒng)160包括管理應用170,其向系統(tǒng)管理員提供用戶接口以指定元數(shù)據(jù)。元數(shù)據(jù)包括屬性,例如,名稱-值對。儀器化分析系統(tǒng)100接收描述數(shù)據(jù)流的元數(shù)據(jù)并且存儲該元數(shù)據(jù)。獨立于從每個數(shù)據(jù)流接收的數(shù)據(jù)指定描述數(shù)據(jù)流的元數(shù)據(jù)的能力在生成基于數(shù)據(jù)流的報告方面提供了若干益處。
作為示例,儀器化分析系統(tǒng)100可以接收對描述每個數(shù)據(jù)流的元數(shù)據(jù)的修改,而不需要對應用130的儀器化軟件進行任何修改。作為結(jié)果,儀器化分析系統(tǒng)100接收新報告的指定和對現(xiàn)有報告的修改,并且基于新報告/經(jīng)修改的報告來生成結(jié)果,而不需要開發(fā)人員修改應用130。
由于開發(fā)人員不需要考慮在添加指令以儀器化軟件的同時需要生成的報告的類型,所以這提供了一種用于儀器化軟件的新范式。開發(fā)人員僅儀器化其軟件來生成可以在所生成的報告中以各種方式組合的原始數(shù)據(jù)。基于對軟件進行儀器化來進行實時報告的系統(tǒng)和方法在于2015年7月15日提交的美國專利申請14/800,677中進行了描述,其全部內(nèi)容通過引用并入本文。
此外,作為在生成儀器化軟件的專家的人可以與軟件開發(fā)人員不同。例如,不是開發(fā)人員的數(shù)據(jù)分析專家可以定義數(shù)據(jù)流的元數(shù)據(jù),并且生成報告而不參與開發(fā)過程。因為分析數(shù)據(jù)所需的技能通常與開發(fā)軟件所需的技能不同,所以這很有意義。
此外,儀器化分析系統(tǒng)100還可以通過整理現(xiàn)有報告并且添加新分析功能來接收并且處理在現(xiàn)有報告之上建立的報告。儀器化分析系統(tǒng)100生成新報告的結(jié)果并且在儀器化分析系統(tǒng)100從儀器化軟件接收數(shù)據(jù)流時,發(fā)送它們以進行實時呈現(xiàn)。儀器化分析系統(tǒng)100生成這些附加報告并且修改現(xiàn)有報告,而不需要對應用130的儀器化代碼進行任何修改。
此外,儀器化分析系統(tǒng)100提供描述數(shù)據(jù)流的元數(shù)據(jù)與數(shù)據(jù)流的數(shù)據(jù)的分離。因而,需要從開發(fā)系統(tǒng)120傳送到儀器化分析系統(tǒng)100的數(shù)據(jù)量得以減少。每個應用130僅傳送度量的數(shù)據(jù)值和標識度量的信息。元數(shù)據(jù)信息從與數(shù)據(jù)流的數(shù)據(jù)源獨立的源分開地接收。因而,任何數(shù)量的元數(shù)據(jù)可以被引入,而不會增加每個數(shù)據(jù)流的數(shù)據(jù)量。
報告系統(tǒng)150可以是客戶端設備。報告系統(tǒng)150包括客戶端應用140,其允許用戶與儀器化分析系統(tǒng)100交互。在實施例中,客戶端應用140是互聯(lián)網(wǎng)瀏覽器,其可以包括客戶端側(cè)代碼(例如,java腳本),用于接入儀器化分析系統(tǒng)100。在其他實施例中,客戶端應用140是被開發(fā)用于與儀器化分析系統(tǒng)100進行交互的專有應用。
報告系統(tǒng)150可以是常規(guī)計算機系統(tǒng)(例如,臺式計算機或膝上型計算機)、平板電腦或具有計算機功能性的設備(諸如個人數(shù)字助理(pda)、移動電話、智能電話或其他合適設備)。報告系統(tǒng)150經(jīng)由網(wǎng)絡與儀器化分析系統(tǒng)100進行交互。網(wǎng)絡可以包括使用有線通信系統(tǒng)和/或無線通信系統(tǒng)的局域網(wǎng)和/或廣域網(wǎng)的任何組合。在一個實施例中,網(wǎng)絡使用標準通信技術(shù)和/或協(xié)議。
儀器化分析系統(tǒng)100可以被托管在計算系統(tǒng)上,其包括一個或多個處理器、存儲器、輔助存儲器和輸入/輸出控制器。用于托管儀器化分析系統(tǒng)100的計算系統(tǒng)通常是服務器級系統(tǒng),其與例如用作報告系統(tǒng)150的典型計算系統(tǒng)相比較,使用強大處理器、大存儲器和快速輸入/輸出系統(tǒng)。
在實施例中,來自多個開發(fā)系統(tǒng)120的數(shù)據(jù)可以例如通過服務器合并,并且組合后的數(shù)據(jù)被發(fā)送到儀器化分析系統(tǒng)100。例如,企業(yè)可以安裝服務器,其從不同開發(fā)系統(tǒng)120內(nèi)部地接收數(shù)據(jù)流,并且將所組合的數(shù)據(jù)以批量形式周期性地發(fā)送到儀器化分析系統(tǒng)100。這樣允許從該企業(yè)的高效外部通信。然而,該配置可能導致向儀器化分析系統(tǒng)100傳達信息的延遲以及通過報告系統(tǒng)150報告數(shù)據(jù)的對應延遲。
關(guān)聯(lián)尺寸與數(shù)據(jù)流
數(shù)據(jù)流可以通過使用表示與數(shù)據(jù)流相關(guān)聯(lián)的尺寸的值的坐標集合來標識。尺寸是指可以采用值的集合中的一個值的數(shù)據(jù)流的屬性。每個數(shù)據(jù)流可以與尺寸的值相關(guān)聯(lián)。例如,尺寸可以是數(shù)據(jù)流的源或與數(shù)據(jù)流相關(guān)聯(lián)的度量名稱。數(shù)據(jù)流的源可以由服務器名稱、服務名稱等等來標識。度量名稱的示例是cpu(中央處理單元)負載、高速緩存未命中、高速緩存命中等。尺寸的值也被稱為數(shù)據(jù)流的坐標值。坐標值可以被表示為存儲在元數(shù)據(jù)存儲裝置230中的元數(shù)據(jù)屬性。給定源和度量的兩個尺寸,數(shù)據(jù)流可以通過提供表示源和度量的兩個坐標(例如,(server1,cpu_load)或(server2,memory_usage))來標識。
數(shù)據(jù)流可以由多個尺寸(即,超過上文所描述的兩個尺寸,即,源和度量名稱)來表征。例如,如果每個服務器具有多個cpu,則可以包括尺寸cpu_id。因而,從系統(tǒng)獲得的每個數(shù)據(jù)流可以由(source_id,cpu_id,metric_name),即,源標識符、cpu標識符和度量名稱來表征。使用三個坐標標識的數(shù)據(jù)流的示例包括(server1,cpu1,load),(server1,cpu2,load),(server2,cpu1,load),(server2,cpu2,load)等等。
作為尺寸的另一示例,系統(tǒng)可以將客戶名稱定義為尺寸??蛻舻拿Q可以例如基于在開發(fā)系統(tǒng)120上執(zhí)行的儀器化軟件的配置參數(shù)來通過儀器化軟件來報告。可以使用系統(tǒng)屬性來指定針對儀器化軟件的客戶名稱。儀器化軟件包括當它標識與該具體客戶相關(guān)聯(lián)的數(shù)據(jù)流時的客戶名稱。將數(shù)據(jù)流與客戶相關(guān)聯(lián)的能力允許儀器化分析系統(tǒng)執(zhí)行特定于客戶的分析,例如,關(guān)于每個客戶的系統(tǒng)使用的報告、標識報告超過閾值數(shù)目個錯誤的客戶等等。
數(shù)據(jù)流可以從儀器化軟件獲得,或者可以在儀表分析系統(tǒng)內(nèi)作為數(shù)據(jù)流語言程序的塊的執(zhí)行結(jié)果來生成。數(shù)據(jù)流還可以包括被存儲在儀器化分析系統(tǒng)中的數(shù)據(jù),例如,存儲在數(shù)據(jù)存儲裝置(諸如本文中所描述的時間序列數(shù)據(jù)存儲裝置260)中。
儀器化分析系統(tǒng)的系統(tǒng)架構(gòu)
圖2示出了根據(jù)實施例的用于執(zhí)行用于處理從儀器化軟件接收的數(shù)據(jù)流的數(shù)據(jù)流語言程序的系統(tǒng)的架構(gòu)。該儀器化分析系統(tǒng)100包括接口模塊210、量化模塊240、元數(shù)據(jù)模塊220、元數(shù)據(jù)存儲裝置230、數(shù)據(jù)點路由模塊250、分析引擎270、用戶接口管理器280、數(shù)據(jù)流語言處理器200、時間序列數(shù)據(jù)存儲裝置260和軟件總線290。在其他實施例中,儀器化分析系統(tǒng)100可以包括本文中未被描述的其他模塊。作為替代,作為由具體模塊提供的所指示的功能可以由其他模塊來實現(xiàn)。
接口模塊210接收來自外部系統(tǒng)(例如,與儀器化分析系統(tǒng)100通信的開發(fā)系統(tǒng)120)的請求。接口模塊210支持外部系統(tǒng)可以調(diào)用的各種應用編程接口(api)。只要儀器化代碼以可以由接口模塊210處理的格式發(fā)送信息,接口模塊210就可以接收并且處理使用由不同供應商提供的功能來儀器化的應用130提供的數(shù)據(jù)。
接口模塊210從一個或多個開發(fā)系統(tǒng)120接收數(shù)據(jù)流的形式的數(shù)據(jù)。在實施例中,接口模塊210接收數(shù)據(jù)并且將輸入數(shù)據(jù)表示為元組。因而,每個數(shù)據(jù)流被表示為多個元組,每個元組表示數(shù)據(jù)點。由接口模塊210接收的數(shù)據(jù)元組包括各種元素。數(shù)據(jù)元組包括度量標識符,例如,度量的值以及元組相對應的度量的名稱和。所接收的數(shù)據(jù)元組還可以包括其他元素,例如,與發(fā)送數(shù)據(jù)的應用130捕獲數(shù)據(jù)的時間相對應的時間戳、與數(shù)據(jù)相關(guān)聯(lián)的一個或多個屬性。
在實施例中,與元組相關(guān)聯(lián)的時間戳表示數(shù)據(jù)值由儀器化分析系統(tǒng)100接收的時間。與數(shù)據(jù)相關(guān)聯(lián)的屬性可以以名稱-值對的形式來提供。這些屬性可以提供描述所接收的數(shù)據(jù)的附加信息,例如,描述數(shù)據(jù)源的信息(諸如與源相關(guān)聯(lián)的主機名稱、服務器名稱、設備名稱、或服務名稱)、與數(shù)據(jù)相關(guān)聯(lián)的方法或函數(shù)名稱、應用實例標識符等等。
在實施例中,接口模塊210生成標識符并且將該標識符分配給由接口模塊210接收的記錄。該標識符在本文中被稱為時間序列標識符(本文中也被稱為tsid或tsid)。唯一時間序列標識符被分配給匹配度量名稱的所有元組以及與元組一起接收的屬性集合。因而,元組(度量名稱、屬性、度量值、時間戳)被映射到元組(tsid、度量值、時間戳)。例如,如果元組提供度量名稱m1和主機名稱h1,則度量名稱為m1和主機名稱h1的所有元組被分配相同的時間序列標識符。因而,tsid唯一地標識由儀器化分析系統(tǒng)100接收的數(shù)據(jù)流的所有元組。
量化模塊240處理所接收的數(shù)據(jù)值,以便將在任何時間間隔可用的輸入數(shù)據(jù)時間序列的數(shù)據(jù)變換為數(shù)據(jù)在規(guī)則的時間間隔可用的時間序列。例如,在輸入時間序列中接收的數(shù)據(jù)值可以在不規(guī)則間隔出現(xiàn),然而,量化模塊240處理時間序列的數(shù)據(jù),以生成數(shù)據(jù)周期性地(例如,每一秒、或每5秒、或每15秒等等)出現(xiàn)的時間序列。這個過程在本文中被稱為時間序列的量化。在實施例中,接口模塊210創(chuàng)建多個線程或進程,每個線程或進程被配置成接收與數(shù)據(jù)流相對應的數(shù)據(jù)。每個線程或進程調(diào)用量化模塊240以對在每個時間間隔內(nèi)接收的每個數(shù)據(jù)流的數(shù)據(jù)執(zhí)行量化。用于量化儀器化軟件的數(shù)據(jù)流的系統(tǒng)和方法在于2015年7月15日提交的美國專利申請14/800,679中進行了描述,其全部內(nèi)容通過引用并入本文。
元數(shù)據(jù)模塊220接收并且存儲描述從開發(fā)系統(tǒng)120接收的各種數(shù)據(jù)流的元數(shù)據(jù)信息。在實施例中,存儲在元數(shù)據(jù)模塊220中的元數(shù)據(jù)從用戶(例如,使用管理系統(tǒng)160與儀器化分析系統(tǒng)100交互的系統(tǒng)管理員)接收。
元數(shù)據(jù)可以被表示為名稱-值對。在實施例中,元數(shù)據(jù)被表示為元數(shù)據(jù)對象,每個對象定義可以被表示為名稱-值對的屬性集合。數(shù)據(jù)流集合可以與元數(shù)據(jù)對象相關(guān)聯(lián)。因而,由元數(shù)據(jù)對象表示的所有屬性均與每個數(shù)據(jù)流相關(guān)聯(lián),該數(shù)據(jù)流與元數(shù)據(jù)對象相關(guān)聯(lián)。
元數(shù)據(jù)數(shù)據(jù)存儲裝置230存儲元數(shù)據(jù)對象及其與數(shù)據(jù)流的關(guān)聯(lián)。元數(shù)據(jù)數(shù)據(jù)存儲裝置230存儲每個元數(shù)據(jù)對象的標識符(id)和由元數(shù)據(jù)對象表示的屬性。在實施例中,每個數(shù)據(jù)流與唯一地標識數(shù)據(jù)流的時間序列標識符相關(guān)聯(lián)。元數(shù)據(jù)數(shù)據(jù)存儲裝置230存儲將每個元數(shù)據(jù)對象映射到時間序列標識符值集合的索引。元數(shù)據(jù)存儲裝置230可以接收指令以修改元數(shù)據(jù)對象。例如,元數(shù)據(jù)存儲裝置230可以接收指令以修改、添加或刪除由元數(shù)據(jù)對象表示的一些屬性??商娲?,元數(shù)據(jù)存儲裝置230可以接收指令以修改從元數(shù)據(jù)對象到數(shù)據(jù)流的映射。例如,元數(shù)據(jù)存儲裝置230可以接收指令以將數(shù)據(jù)流與元數(shù)據(jù)對象相關(guān)聯(lián)或者刪除元數(shù)據(jù)對象和數(shù)據(jù)流之間的關(guān)聯(lián)。
在實施例中,元數(shù)據(jù)存儲裝置230被表示為關(guān)系數(shù)據(jù)庫,而且還可以被表示為任何其他類型的數(shù)據(jù)庫或數(shù)據(jù)存儲裝置。例如,元數(shù)據(jù)存儲裝置230可以是存儲將元數(shù)據(jù)對象id映射到標識數(shù)據(jù)流的時間序列id的表的關(guān)系數(shù)據(jù)庫。其他數(shù)據(jù)庫表可以將與每個元數(shù)據(jù)對象相關(guān)聯(lián)的屬性存儲為從元數(shù)據(jù)對象id到被表示為名稱-值對的每個屬性的映射。
用戶接口管理器280渲染用戶接口,用于允許用戶指定數(shù)據(jù)流語言程序的參數(shù)并且呈現(xiàn)數(shù)據(jù)流語言程序的執(zhí)行結(jié)果。用戶接口管理器280可以將數(shù)據(jù)流語言程序的實時結(jié)果顯示為隨著數(shù)據(jù)流的數(shù)據(jù)被接收而周期性地更新的一個或多個圖表。用戶接口管理器280還呈現(xiàn)用戶接口,其允許用戶在視覺上而非文字地指定數(shù)據(jù)流語言程序。本文中對由用戶接口管理器280呈現(xiàn)的用戶接口的屏幕截圖的示例進行了描述。
時間序列數(shù)據(jù)存儲裝置260存儲從各種源(例如,開發(fā)系統(tǒng)120)接收的數(shù)據(jù)。時間序列數(shù)據(jù)存儲裝置260在本文中也被稱為時間序列數(shù)據(jù)庫(或tsdb)。在實施例中,時間序列數(shù)據(jù)存儲裝置260還存儲數(shù)據(jù)被量化之后的時間序列數(shù)據(jù)。時間序列數(shù)據(jù)存儲裝置260還可以存儲每個時間序列的匯總數(shù)據(jù)。時間序列數(shù)據(jù)存儲裝置260還存儲各種分析請求的結(jié)果,例如,用戶所請求的各種報告的結(jié)果。分析引擎270通過將存儲在時間序列數(shù)據(jù)存儲裝置260中的數(shù)據(jù)與從各種源作為數(shù)據(jù)流而獲得的新數(shù)據(jù)進行組合來計算某些報告的結(jié)果,例如,時間間隔的移動平均。
軟件總線290為儀器化分析系統(tǒng)100的模塊提供了向儀器化分析系統(tǒng)100的其他模塊提供數(shù)據(jù)流的數(shù)據(jù)的機制。數(shù)據(jù)流語言程序可以向軟件總線290發(fā)送數(shù)據(jù)流。其他模塊(例如,提取模塊320、查找模塊310、窗口模塊380等等)可以從軟件總線290讀取數(shù)據(jù),并且對數(shù)據(jù)執(zhí)行進一步處理。例如,在軟件總線290上發(fā)布的數(shù)據(jù)流語言程序的數(shù)據(jù)流輸出可以通過作為任務執(zhí)行的另一數(shù)據(jù)流語言程序的查找塊來標識。
數(shù)據(jù)流語言處理器200執(zhí)行使用數(shù)據(jù)流語言指定的程序。數(shù)據(jù)流語言處理器200接收數(shù)據(jù)流語言程序,解析數(shù)據(jù)流語言程序以驗證程序。數(shù)據(jù)流語言處理器200生成數(shù)據(jù)流語言程序的表示,并且使用該表示執(zhí)行數(shù)據(jù)流語言程序。
使用數(shù)據(jù)流語言指定的請求是基于與從各種開發(fā)系統(tǒng)120接收的數(shù)據(jù)相關(guān)聯(lián)的元數(shù)據(jù)的查詢。數(shù)據(jù)流語言支持各種類型的分析功能,例如,聚合和變換。數(shù)據(jù)流語言提供了以各種方式組合包括聚合和變換在內(nèi)的各種功能的能力。在實施例中,數(shù)據(jù)流語言處理器200解析使用數(shù)據(jù)流語言指定的程序,生成程序的可執(zhí)行表示,并且執(zhí)行所生成的表示。
數(shù)據(jù)流語言
使用數(shù)據(jù)流語言指定的程序包括被稱為塊的計算單元。每個塊與由數(shù)據(jù)塊執(zhí)行的特定處理或計算相關(guān)聯(lián)。每個塊還可以具有一個或多個輸入端口和一個或多個輸出端口。塊通過輸入端口接收輸入,使用數(shù)據(jù)執(zhí)行特定計算,并且向輸出端口發(fā)送計算結(jié)果。該過程以預先指定的周期性進行重復。因而,輸入端口用作向塊提供數(shù)據(jù)的機制,并且輸出端口用作輸出塊的數(shù)據(jù)的機制。
在實施例中,每個塊與塊的類型相關(guān)聯(lián)。塊的類型確定由塊執(zhí)行的計算。由數(shù)據(jù)流語言支持的塊的類型包括查找塊、提取塊、統(tǒng)計計算塊、閾值塊等等。塊可以與某些配置參數(shù)相關(guān)聯(lián)。例如,查找塊可以將表達式作為輸入。數(shù)據(jù)流語言程序包括塊類型的實例。例如,具有特定搜索表達式的查找塊是包括在數(shù)據(jù)流語言程序中的查找塊的實例。
在實施例中,塊的輸入端口用字符“?”標識,輸出端口用字符“!”標識。其他實施例可以使用其他語法來標識輸入端口/輸出端口。例如,如果塊b1具有輸入端口in1和in2,則特定輸入端口(如in2)可以被標識為“b1?in2”。類似地,如果塊b1具有輸出端口out1和out2,則特定輸出端口(如out2)可以被指定為“b2!out2”。如果塊具有單個輸入/輸出端口,則數(shù)據(jù)流語言程序可以不標識端口。例如,如果塊b2具有單個輸入端口,則輸入端口可以被稱為“b2”。類似地,如果塊b2具有單個輸出端口,則輸出端口可以被稱為“b2”。
兩個塊可以通過指定一個塊的輸出被提供作為另一塊的輸入來連接。因此,數(shù)據(jù)流語言程序可以被認為是塊的網(wǎng)絡。在實施例中,兩個塊之間的連接使用兩個塊之間的箭頭來指定。例如,如果b1和b2均具有單個輸入端口和單個輸入端口,則“b1→b2”指定b1的輸出被提供作為塊b2的輸入。類似地,如果b1有兩個輸出端口out1和out2并且b2有兩個輸入端口in1和in2,則b1的out1端口可以通過表達式“b1!out1→b2?in2”來連接至b2的in2端口。
數(shù)據(jù)流語言處理器200可以基于數(shù)據(jù)流語言程序來執(zhí)行多個任務。每個任務可以與開始時間、結(jié)束時間和周期性相關(guān)聯(lián)。因而,該任務以由周期性指定的間隔從開始時間直到結(jié)束時間來執(zhí)行。周期性指定數(shù)據(jù)流語言程序處理數(shù)據(jù)的速率。用戶可以基于相同的數(shù)據(jù)流語言程序來指定不同任務用于執(zhí)行,每個任務與不同的開始時間、結(jié)束時間和周期性相關(guān)聯(lián)。
圖3示出了根據(jù)實施例的用于處理數(shù)據(jù)流語言程序的塊的數(shù)據(jù)流語言處理器的架構(gòu)。如圖3所示,數(shù)據(jù)流語言處理器200包括用于處理數(shù)據(jù)流語言的各種類型的塊的模塊。因而,數(shù)據(jù)流語言處理器200包括查找模塊310、提取模塊320、計算模塊330、閾值模塊340、發(fā)布模塊350、編組模塊360、窗口模塊380、數(shù)據(jù)流元數(shù)據(jù)生成器370以及定制塊模塊390。與圖3所示的模塊相比較,其他實施例可以包括更多或更少的模塊。某些模塊(例如,解析器)在圖3中未被圖示。每個模塊的細節(jié)以及由每個模塊處理的塊的類型的細節(jié)一起,在本文進行進一步描述。
查找模塊310執(zhí)行查找塊以標識數(shù)據(jù)流集合以供由數(shù)據(jù)流語言程序的其余部分進行處理。提取模塊320從所標識的數(shù)據(jù)流中提取數(shù)據(jù),并且提供數(shù)據(jù)以供由數(shù)據(jù)流語言程序的后續(xù)塊進行處理。計算模塊330執(zhí)行在數(shù)據(jù)流語言程序中指定的統(tǒng)計計算,例如,均值、中值、求和等等。閾值模塊340將輸入數(shù)據(jù)流的數(shù)據(jù)與閾值進行比較,以確定輸入數(shù)據(jù)是否超過某些界限。指定用于比較的閾值可以動態(tài)地改變,例如,閾值可以被指定為以特定因子縮放的輸入數(shù)據(jù)流的一小時移動平均值。發(fā)布模塊350執(zhí)行發(fā)布塊,其向包括用戶接口(例如,儀表板)在內(nèi)的各種接收器提供發(fā)布塊之前的塊的輸出,以用于呈現(xiàn)結(jié)果、用于存儲到數(shù)據(jù)庫、或用于提供給其他塊以供進一步處理。編組模塊360對輸入數(shù)據(jù)流的數(shù)據(jù)執(zhí)行編組,以生成與每個組相對應的結(jié)果數(shù)據(jù)流集合。這些組可以基于使用編組命令指定的一個或多個屬性,例如,來自每個數(shù)據(jù)中心的數(shù)據(jù)流組。數(shù)據(jù)流元數(shù)據(jù)生成器370生成表示作為執(zhí)行數(shù)據(jù)流語言程序的結(jié)果生成的結(jié)果數(shù)據(jù)流的元數(shù)據(jù),并且將該元數(shù)據(jù)存儲在元數(shù)據(jù)存儲裝置230中,以供允許儀器化分析系統(tǒng)100的其他部件使用結(jié)果數(shù)據(jù)流。定制塊模塊390處理數(shù)據(jù)流語言程序中的用戶定義塊(定制塊)。
示例數(shù)據(jù)流語言程序
圖4示出了根據(jù)實施例的用于說明數(shù)據(jù)流語言的特征的數(shù)據(jù)流語言程序的示例。圖4以塊的形式表示數(shù)據(jù)流語言程序。圖4所示的數(shù)據(jù)流語言程序可以被指定如下。
find(“source:analytics*”)→fetch
→groupby(“datacenter”)
→stats!mean
→publish
上述數(shù)據(jù)流語言程序的第一塊是采用指定搜索表達式的字符串參數(shù)的查找塊410。查找塊查找由儀器化分析系統(tǒng)100接收的滿足搜索表達式的數(shù)據(jù)流集合。例如,查找塊410采用標識“source”元數(shù)據(jù)屬性值“dev.”的所有數(shù)據(jù)流的搜索表達式“source:dev”。例如,企業(yè)可以將所有開發(fā)系統(tǒng)與源值“dev.”相關(guān)聯(lián)。查找塊的輸出被提供為提取塊420的輸入。
提取塊420從由查找塊標識的數(shù)據(jù)流中取回數(shù)據(jù)。提取塊以預先指定的周期性接收數(shù)據(jù)。提取塊可以接收由接口模塊210接收并且由量化模塊240量化的數(shù)據(jù)流的實時數(shù)據(jù)。提取塊420還可以接收存儲在時間序列數(shù)據(jù)存儲器260中的數(shù)據(jù)流的數(shù)據(jù)。提取塊420的輸出被提供為分組塊430的輸入。
分組塊430采用數(shù)據(jù)流的一個或多個屬性的名稱作為輸入。分組塊430通過所指定的屬性對數(shù)據(jù)流進行編組。如上述示例所示,分組塊430采用“datacenter”屬性作為輸入,并且通過其數(shù)據(jù)中心值對數(shù)據(jù)流進行編組。因而,具有相同數(shù)據(jù)中心的所有數(shù)據(jù)流的數(shù)據(jù)被編組在一起。分組塊430輸出與數(shù)據(jù)中心的每個值相對應的數(shù)據(jù)流。分組塊430的輸出被提供為統(tǒng)計塊440(其是一種統(tǒng)計計算塊)的輸入。
統(tǒng)計塊440具有多個輸出,例如,均值、中值、求和等等。每個輸出端口基于由輸出的名稱指定的計算類型來提供值。統(tǒng)計塊440計算從分組塊430作為輸入而接收的每組數(shù)據(jù)流的均值。相應的,統(tǒng)計塊440確定從每個數(shù)據(jù)中心的數(shù)據(jù)流接收的數(shù)據(jù)的均值。如圖4所示,統(tǒng)計塊的平均輸出端口向發(fā)布塊450提供輸入。
發(fā)布塊450可以被配置成在儀表板上發(fā)布所接收的輸入。發(fā)布塊可以被配置成在軟件總線290上發(fā)布數(shù)據(jù)。軟件總線290向儀器化分析系統(tǒng)100的所有其他模塊提供數(shù)據(jù)。數(shù)據(jù)流語言處理器200以針對數(shù)據(jù)流語言程序所指定的周期性來執(zhí)行上文所指定的各種塊。
數(shù)據(jù)流語言程序執(zhí)行的整體過程
圖5示出了根據(jù)實施例的用于基于數(shù)據(jù)流語言程序來處理從數(shù)據(jù)流接收的數(shù)據(jù)的儀器化分析系統(tǒng)的整體過程。元數(shù)據(jù)模塊220接收510描述數(shù)據(jù)流的元數(shù)據(jù)。元數(shù)據(jù)定義被接收,其與數(shù)據(jù)流本身的數(shù)據(jù)無關(guān)。例如,數(shù)據(jù)流可以僅提供包括數(shù)據(jù)值和與數(shù)據(jù)值相關(guān)聯(lián)的時間戳的元組,而不提供任何屬性(例如,名稱-值對)。元數(shù)據(jù)模塊220從源接收描述數(shù)據(jù)流的屬性,該源不同于提供數(shù)據(jù)流的源。例如,數(shù)據(jù)流由在開發(fā)系統(tǒng)120上執(zhí)行的儀器化軟件的實例提供,而元數(shù)據(jù)定義可以經(jīng)由系統(tǒng)管理員通過管理系統(tǒng)160提供。
分析引擎270使用描述數(shù)據(jù)流的元數(shù)據(jù)屬性接收520數(shù)據(jù)流語言程序。數(shù)據(jù)流語言程序可以表示提供給儀器化分析系統(tǒng)100的指令集合,以生成描述儀器化軟件的報告,并且實時提供結(jié)果,即,當數(shù)據(jù)流的數(shù)據(jù)被接收時。
在儀器化分析系統(tǒng)100從各種開發(fā)系統(tǒng)120接收各種數(shù)據(jù)流的數(shù)據(jù)時,儀器化分析系統(tǒng)100重復以下步驟。接口模塊210接收530不同數(shù)據(jù)流的數(shù)據(jù)。在實施例中,接口模塊210等待固定時間間隔,例如,1秒或幾秒,并且收集從不同數(shù)據(jù)流接收的數(shù)據(jù)。在實施例中,量化模塊240對針對每個時間間隔的每個輸入數(shù)據(jù)流的數(shù)據(jù)執(zhí)行量化。因而,來自每個數(shù)據(jù)流的數(shù)據(jù)被聚合成與針對該時間間隔的數(shù)據(jù)流相關(guān)聯(lián)的單個值。
分析引擎270基于針對時間間隔的數(shù)據(jù)流的數(shù)據(jù)來執(zhí)行540數(shù)據(jù)流語言程序。如果每個數(shù)據(jù)流的數(shù)據(jù)被量化,則分析引擎270使用來自每個數(shù)據(jù)流的量化值執(zhí)行540數(shù)據(jù)流語言程序。數(shù)據(jù)流語言程序可以包括發(fā)布塊,其使得分析引擎270發(fā)送數(shù)據(jù)流語言程序的評價結(jié)果以供呈現(xiàn)給例如用戶接口。
數(shù)據(jù)流語言程序可以生成一個或多個數(shù)據(jù)流。分析引擎270還將作為數(shù)據(jù)流語言程序的評價結(jié)果而生成的數(shù)據(jù)流存儲在例如時間序列數(shù)據(jù)存儲裝置260中。分析引擎270創(chuàng)建一個或多個新數(shù)據(jù)流(或時間序列),其表示數(shù)據(jù)流語言程序的結(jié)果。新數(shù)據(jù)流被存儲在時間序列數(shù)據(jù)存儲裝置260中。這允許將數(shù)據(jù)流語言程序的結(jié)果用作其他數(shù)據(jù)流語言程序的輸入。例如,數(shù)據(jù)流語言程序可以生成表示從多個數(shù)據(jù)流接收的第95百分位數(shù)的值的數(shù)據(jù)。數(shù)據(jù)流語言程序的結(jié)果可以作為新數(shù)據(jù)流而被存儲在時間序列數(shù)據(jù)存儲裝置260中。分析引擎270可以進一步執(zhí)行基于所生成的數(shù)據(jù)流來計算移動平均值的另一數(shù)據(jù)流語言程序。
量化
輸入數(shù)據(jù)流的量化簡化了使用量化數(shù)據(jù)流的數(shù)據(jù)處理。例如,基于所接收的多個數(shù)據(jù)流的聚合值可以針對每個時間間隔進行確定。這通過進一步聚合跨多個數(shù)據(jù)流的用于具體時間間隔的數(shù)據(jù)來執(zhí)行。在實施例中,輸入數(shù)據(jù)流的量化在每個時間間隔結(jié)束時被執(zhí)行,使得用于該時間間隔的量化數(shù)據(jù)可用于處理。
此外,儀器化分析系統(tǒng)100存儲單個數(shù)據(jù)流的量化數(shù)據(jù),使得跨多個數(shù)據(jù)流的數(shù)據(jù)可以以各種方式組合,例如,如在請求中指定的。換句話說,用戶可以發(fā)送以第一種方式組合跨多個數(shù)據(jù)流的數(shù)據(jù)的第一請求。隨后,用戶可以發(fā)送用于以不同的方式組合跨不同數(shù)據(jù)流的數(shù)據(jù)的新請求。例如,用戶可以組合跨數(shù)據(jù)流的數(shù)據(jù)以查看在各種數(shù)據(jù)中心上計算的聚合。然而,隨后,用戶可以改變請求以查看在不同類型的應用、不同類型的服務器、不同地理區(qū)域等等上計算的聚合。
儀器化分析系統(tǒng)100還可以接收用戶修改先前數(shù)據(jù)流在其上被聚合的數(shù)據(jù)流集合的請求。例如,用戶可以請求儀器化分析系統(tǒng)100從被聚合的數(shù)據(jù)流集合中移除一個或多個數(shù)據(jù)流,并且基于修改后的集合來請求聚合。用戶可以發(fā)送這種請求,以分析移除或添加新服務器、應用或?qū)ο到y(tǒng)配置進行任何其他修改的影響。儀器化分析系統(tǒng)100保持量化數(shù)據(jù)流的數(shù)據(jù),并且基于這些請求來組合在不同時間間隔內(nèi)量化的數(shù)據(jù)流數(shù)據(jù)。由于儀器化分析系統(tǒng)100存儲量化數(shù)據(jù)流數(shù)據(jù),因此儀器化分析系統(tǒng)100具有根據(jù)需要有效組合跨數(shù)據(jù)流的數(shù)據(jù)的能力。
儀器化分析系統(tǒng)100可以組合跨數(shù)據(jù)流的數(shù)據(jù)以執(zhí)行跨多個數(shù)據(jù)流的移動聚合計算。儀器化分析系統(tǒng)100可以連續(xù)計算跨給定長度的時間間隔的任何移動聚合值,例如,一小時移動平均、15分鐘移動平均等等。
量化模塊240聚合針對每個時間間隔的輸入數(shù)據(jù)流的值,并且生成用于該時間間隔的聚合值。因而,量化模塊240接收數(shù)據(jù)值可以在任意時間間隔之后發(fā)生的數(shù)據(jù)流。量化模塊240處理輸入數(shù)據(jù)流以生成其中數(shù)據(jù)在規(guī)則時間間隔可用的數(shù)據(jù)流。本文中對量化模塊240的細節(jié)進行進一步描述。
量化模塊240接收描述在數(shù)據(jù)流中接收的值的類型的信息,例如,該值是否是某個動作或?qū)嶓w的計數(shù),該值是否通過某個值的聚合來獲得,該值是否表示給定值集合的最大值/最小值等等。數(shù)據(jù)流的值的類型描述了為獲得該值而執(zhí)行的操作的類型。量化模塊240存儲從數(shù)據(jù)流的各種類型的值到對用于間隔的數(shù)據(jù)流的輸入值執(zhí)行的操作的類型的映射,以獲得表示時間間隔的結(jié)果值。
在實施例中,量化模塊240包括緩沖器,其用于存儲作為針對具體時間間隔的輸入而被接收的數(shù)據(jù)值。由于在時間間隔中接收的值的數(shù)目不能提前得知并且可以從一個時間間隔到另一個時間間隔而改變,所以量化模塊240的緩沖器使用可以存儲任意數(shù)目個值的數(shù)據(jù)結(jié)構(gòu)。例如,量化模塊240可以使用列表數(shù)據(jù)結(jié)構(gòu)或堆棧數(shù)據(jù)結(jié)構(gòu)來存儲輸入數(shù)據(jù)流的值。
量化模塊240收集針對每個時間間隔接收的數(shù)據(jù)流的數(shù)據(jù)值。量化模塊240跟蹤時間。當量化模塊240確定達到當前時間間隔的結(jié)束時,量化模塊240處理在時間間隔中接收的所有數(shù)據(jù)值,以確定表示該時間間隔的聚合值。量化模塊240隨后清除用于表示輸入值的緩沖器,并且使用它來存儲用于下一時間間隔的值。在實施例中,量化模塊240使用多個緩沖器,使得當存儲在緩沖器中的先前時間間隔的數(shù)據(jù)正在被處理時,用于下一時間間隔的新數(shù)據(jù)可以被存儲在另一緩沖器中。
圖6示出了根據(jù)實施例的從儀器化軟件接收的數(shù)據(jù)流的量化過程。圖6示出了時間軸620a和620b,每個時間軸表示具有數(shù)據(jù)值序列的時間線。時間軸620a示出了輸入數(shù)據(jù)流600的數(shù)據(jù)值,而時間軸620b示出了由量化模塊240生成的量化數(shù)據(jù)流610的值。
如圖6所示,四個數(shù)據(jù)值d11,d12,d13和d14在時間間隔i1(表示從t0到t1的時間)中被接收;兩個數(shù)據(jù)值d21和d22在時間間隔i2(表示從t1到t2的時間)中被接收;并且三個數(shù)據(jù)值d31,d32和d33在時間間隔i3(表示從t2到t3的時間)中被接收。可以假設tm和tn之間的每個時間間隔包括開始時間點tm(使得結(jié)束時間點tn包括在下一時間間隔中)。可以使用tm和tn之間的時間間隔的任何其他解釋,例如,結(jié)束時間點tn被包括在時間間隔中,而開始時間點tm被包括在先前時間間隔中。
量化模塊240處理每個時間間隔的數(shù)據(jù)值以生成在時間軸620b上示出的對應結(jié)果值。例如,量化模塊240聚合在時間間隔i1中接收到的值d11,d12,d13和d14以生成在時間軸620b上示出的值d1;量化模塊240聚合在時間間隔i2中接收的值d21和d22以生成在時間軸620b上示出的值d2;并且量化模塊240聚合在時間間隔i3中接收的值d31,d32和d33以生成在時間軸620b上示出的值d3。
聚合數(shù)據(jù)流的輸入值而執(zhí)行的操作的類型取決于由輸入數(shù)據(jù)流表示的數(shù)據(jù)的類型。如果輸入數(shù)據(jù)流的每個元組是某個值的計數(shù),例如,由軟件執(zhí)行的動作的計數(shù),則量化模塊240聚合輸入值,以通過對計數(shù)加和來確定針對每個時間間隔的輸出數(shù)據(jù)流值。如果所接收的輸入數(shù)據(jù)流的每個元組是值集合的最小值(或最大值),則量化模塊240聚合針對時間間隔的輸入值,以通過確定用于該時間間隔的輸入值的最小值(或最大值)來確定用于該時間間隔的輸出值。如果所接收的輸入數(shù)據(jù)流的每個元組是值集合的平均值,則量化模塊240聚合與時間間隔相關(guān)聯(lián)的輸入值,以通過確定每個時間間隔的輸入值的平均來確定用于該時間間隔的輸出數(shù)據(jù)流值。如果所接收的輸入數(shù)據(jù)流的每個元組是該時間點處的度量的最后可用值,則量化模塊240聚合用于時間間隔的輸入值,以通過僅使用該數(shù)據(jù)流的最后值來確定用于該時間間隔的輸出值。
度量數(shù)據(jù)流和事件數(shù)據(jù)流
在實施例中,儀器化分析系統(tǒng)100支持兩種類型的數(shù)據(jù)流,即,度量數(shù)據(jù)流和事件數(shù)據(jù)流。事件通常是指在系統(tǒng)中發(fā)生的異常情況,例如,負載超過某些閾值或存儲器使用超過某些閾值。事件還可以是指例如由開發(fā)系統(tǒng)120的系統(tǒng)管理員在系統(tǒng)中執(zhí)行的具體動作。度量數(shù)據(jù)流包括表示可以從儀器化軟件獲得或從度量數(shù)據(jù)流導出的度量值的數(shù)據(jù),該度量數(shù)據(jù)流從儀器化軟件獲得。除非另有說明,否則本文中所指的數(shù)據(jù)流是度量數(shù)據(jù)流。度量數(shù)據(jù)流也被稱為度量時間序列,并且事件數(shù)據(jù)流也被稱為事件時間序列。
度量數(shù)據(jù)流包括使用以下方式表示的數(shù)據(jù)點:數(shù)據(jù)流標識符、時間戳值和數(shù)據(jù)值。數(shù)據(jù)流標識符標識數(shù)據(jù)點所屬的數(shù)據(jù)流。時間戳值將數(shù)據(jù)點與時間(例如報告數(shù)據(jù)點的時間或儀器化分析系統(tǒng)100接收到數(shù)據(jù)點的時間)相關(guān)聯(lián)。數(shù)據(jù)值是正在被報告的度量的值,例如,表示特定時間的服務器中的cpu負載的值,或表示特定時間的服務器中的存儲器使用的測量。度量時間序列通常向儀器化分析系統(tǒng)提供大量數(shù)據(jù),例如,每個數(shù)據(jù)流可以每秒報告幾個數(shù)據(jù)點,并且每個企業(yè)可能存在大量的數(shù)據(jù)流。
事件數(shù)據(jù)流包括使用以下方式表示的數(shù)據(jù)點:數(shù)據(jù)流標識符、時間戳值和描述事件的一個或多個鍵值對。數(shù)據(jù)流標識符和事件數(shù)據(jù)流的時間戳值類似于度量數(shù)據(jù)流。然而,與度量數(shù)據(jù)流的數(shù)據(jù)點相比較,事件通常以較少的頻率發(fā)生。例如,事件可以表示由系統(tǒng)管理員執(zhí)行的動作,諸如啟動維護窗口。事件的鍵值對描述事件,例如,啟動維護窗口的系統(tǒng)管理員的名稱、維護窗口的目的、維護窗口的范圍等等。事件通常以不規(guī)則速率發(fā)生,例如,事件可能通過某個系統(tǒng)而非其他系統(tǒng)來報告,事件可能發(fā)生一次,并且可能在相當長的時間內(nèi)不會發(fā)生等等。因此,與事件一起存儲的信息量可能很大。
事件還可以描述在系統(tǒng)中發(fā)生的某些特定條件,例如,顯示某個特點的某個度量。作為示例,如果服務器的cpu負載或存儲器使用超過某些閾值,則可能會報告事件。這些事件作為數(shù)據(jù)流語言程序的執(zhí)行結(jié)果通過儀器化分析系統(tǒng)100來生成。
儀器化分析系統(tǒng)100在處理數(shù)據(jù)方面以與度量時間序列相同的方式處理事件時間序列。例如,儀器化分析系統(tǒng)100允許基于任一類型的數(shù)據(jù)流來實時報告信息。儀器化分析系統(tǒng)100允許將事件數(shù)據(jù)流與度量數(shù)據(jù)流進行比較,以允許用戶將兩者相關(guān)。例如,在事件被生成時,用指示度量值的事件數(shù)據(jù)流覆蓋度量數(shù)據(jù)流的報告可以被生成。
數(shù)據(jù)流語言程序的數(shù)據(jù)流的動態(tài)選擇
允許動態(tài)選擇數(shù)據(jù)流的查找塊針對數(shù)據(jù)流語言程序而被輸入。查找塊指定用于標識數(shù)據(jù)流的搜索條件。在實施例中,搜索條件是基于描述數(shù)據(jù)流的屬性(或元數(shù)據(jù)標簽)的表達式。這些屬性可以被接收作為數(shù)據(jù)流的一部分或與數(shù)據(jù)流相關(guān)聯(lián),例如,作為添加到儀器化分析系統(tǒng)100并且存儲在元數(shù)據(jù)存儲裝置230中的元數(shù)據(jù)。通過執(zhí)行搜索條件來標識的數(shù)據(jù)流被提供為數(shù)據(jù)流語言程序的后續(xù)塊的輸入。
數(shù)據(jù)流語言處理器200可以周期性地評價查找塊的搜索條件,從而重新評價作為數(shù)據(jù)流語言程序的輸入而被提供的數(shù)據(jù)流集合。因此,作為數(shù)據(jù)流語言程序的輸入而被提供的數(shù)據(jù)流集合被動態(tài)地改變。例如,開發(fā)系統(tǒng)120可以添加新服務器,開始或停止服務或重新配置現(xiàn)有服務。此外,新的開發(fā)系統(tǒng)120可以向儀器化分析系統(tǒng)100發(fā)送數(shù)據(jù)流。因此,由儀器化分析系統(tǒng)100接收的數(shù)據(jù)流集合被動態(tài)地改變。
查找塊的搜索條件可以用于基于數(shù)據(jù)流的特點來標識數(shù)據(jù)流集合。例如,搜索條件可以用于標識屬于具體數(shù)據(jù)中心的服務、與特定應用相對應的服務、與可以跨多個數(shù)據(jù)中心擴展的組織相關(guān)聯(lián)的服務、運行軟件的特定版本的服務(如操作系統(tǒng)或具有某個補丁的應用)。針對查找塊指定的搜索條件的類型取決于為數(shù)據(jù)流定義的并且存儲在元數(shù)據(jù)存儲裝置230中的元數(shù)據(jù)標簽的類型。
查找塊的搜索條件在從諸如開發(fā)系統(tǒng)之類的外部系統(tǒng)接收的所有數(shù)據(jù)流以及在儀器化分析系統(tǒng)100內(nèi)生成的數(shù)據(jù)流上進行評價,例如,作為數(shù)據(jù)流語言程序的中間結(jié)果或最終結(jié)果。例如,如本文中所描述的,數(shù)據(jù)流語言程序的中間結(jié)果或最終結(jié)果被表示為第一類公民,其被視為與從開發(fā)系統(tǒng)120接收的數(shù)據(jù)流相同。因而,當查找塊的搜索條件被評價時,結(jié)果可以包括從開發(fā)系統(tǒng)120接收的數(shù)據(jù)流以及在儀器化分析系統(tǒng)100內(nèi)生成的數(shù)據(jù)流。
以下是針對查找塊指定的搜索條件的幾個示例。假設用戶想要在分析服務器上查找負載,并且分析服務器被命名為analytic1,analytic2,analytic3,...和analyticn。分析服務器集合可以通過使用查找塊find(“source:analytic*”)來標識,該查找塊find將搜索條件指定為元數(shù)據(jù)標簽值滿足正則表達式“analytic*”的所有數(shù)據(jù)流。
搜索條件可以是邏輯表達式。例如,查找塊find(“source:databank*andmetric:numcachehits”)查找具有形式為“databank*”并且度量名稱為numcachehits的源屬性的所有數(shù)據(jù)流。因而,針對提供來自被標識為“databank*”的源的度量numcachehits的所有數(shù)據(jù)流,對具有該查找塊的數(shù)據(jù)流語言程序進行評價。類似地,查找塊find(“source:databank*andmetric:numcachemisses”)查找來自被標識為“databank*”的源的提供度量numcachemisses的所有數(shù)據(jù)流。作為另一示例,查找塊find(“source:zk*andsmetric:cpuandregion:ore1”)從具有度量“cpu”的區(qū)域“ore1”中查找具有形式為“zk*”的源名稱的所有數(shù)據(jù)流。
查找塊可以與指定開始時間、停止時間和周期性中的一個或多個的配置參數(shù)相關(guān)聯(lián)。查找塊的周期性可能與查找塊所屬的數(shù)據(jù)流語言程序的業(yè)務的周期性不同。之所以這樣,是因為數(shù)據(jù)流集合的速率可能與用戶希望數(shù)據(jù)移動通過數(shù)據(jù)流語言程序的速率不同。例如,用戶可以確定數(shù)據(jù)流集合不經(jīng)常改變,并且搜索字符串可以每隔一小時左右評價一次,而任務的周期性是1分鐘。因而,用戶可以針對查找塊和數(shù)據(jù)流語言程序指定不同周期性值。
在實施例中,查找塊的評價不是基于固定周期性,而是由在儀器化分析系統(tǒng)100中發(fā)生的某些事件觸發(fā)。例如,查找塊的評價是由元數(shù)據(jù)中的任何更新來觸發(fā)。元數(shù)據(jù)中的更新可能導致查找塊改變的結(jié)果,從而基于查找塊產(chǎn)生被數(shù)據(jù)流語言程序處理的不同的輸入數(shù)據(jù)流集合。在實施例中,儀器化分析系統(tǒng)100將查找塊與元數(shù)據(jù)的特定部分相關(guān)聯(lián)。在實施例中,如果查找塊基于某些元數(shù)據(jù)屬性,則與那些元數(shù)據(jù)屬性相關(guān)聯(lián)的任何改變觸發(fā)查找塊的執(zhí)行。例如,如果對于來自區(qū)域“xyz”的所有數(shù)據(jù)流而言,查找塊評價為真,則對“xyz”區(qū)域的數(shù)據(jù)流的任何添加或刪除會觸發(fā)對數(shù)據(jù)流的評價。將數(shù)據(jù)流添加或刪除到其他區(qū)域可能不會觸發(fā)查找塊的執(zhí)行。儀器化分析系統(tǒng)100分析并且標識與每個查找塊相關(guān)聯(lián)的元數(shù)據(jù)屬性集合。儀器化分析系統(tǒng)100檢測是否發(fā)生與元數(shù)據(jù)屬性集合相關(guān)聯(lián)的元數(shù)據(jù)改變,該元數(shù)據(jù)屬性集合與查找塊相關(guān)聯(lián)。如果儀器化分析系統(tǒng)100檢測到與查找塊相關(guān)聯(lián)的元數(shù)據(jù)屬性集合相關(guān)聯(lián)的的元數(shù)據(jù)的改變已經(jīng)發(fā)生,則儀器化分析系統(tǒng)100重新評價查找塊。在實施例中,如果儀器化分析系統(tǒng)檢測到與數(shù)據(jù)流相關(guān)聯(lián)的屬性已經(jīng)改變,則該儀器化分析系統(tǒng)重新評價查找塊。在實施例中,如果查找塊的定義被修改,則查找塊被重新評價。
在實施例中,當存在數(shù)據(jù)流的改變時,查找塊被重新評價。例如,如果新數(shù)據(jù)流通過儀器化分析系統(tǒng)100來檢測,或者如果儀器化分析系統(tǒng)100確定數(shù)據(jù)流不活動,則儀器化分析系統(tǒng)100重新評價查找塊。所生成的數(shù)據(jù)流可以是從諸如開發(fā)系統(tǒng)120之類的外部系統(tǒng)接收的數(shù)據(jù)流,或者數(shù)據(jù)流可以通過數(shù)據(jù)流語言程序的中間結(jié)果或最終結(jié)果生成。例如,如本文中所描述的,數(shù)據(jù)流語言程序的中間結(jié)果或最終結(jié)果被表示為第一類公民,其被視為與從開發(fā)系統(tǒng)120接收的數(shù)據(jù)流相同。因此,添加、刪除或修改這些數(shù)據(jù)流的元數(shù)據(jù)還使得查找塊被重新評價。
圖7圖示了根據(jù)實施例的通過用于向數(shù)據(jù)流語言程序提供輸入的查找塊來選擇數(shù)據(jù)流集合。如圖7所示,查找塊710a具有由搜索字符串“datacenter:east*”指定的搜索條件。數(shù)據(jù)流語言處理器200的查找模塊310標識其中“datacenter”元數(shù)據(jù)標簽(或?qū)傩?滿足正則表達式“east*”的所有數(shù)據(jù)流。
圖7示出了由儀器化分析系統(tǒng)100接收的數(shù)據(jù)流集合740a,包括具有數(shù)據(jù)中心標簽值central_dev、east_dev、east_qa、west_dev和north_dev的數(shù)據(jù)流。查找模塊310確定具有數(shù)據(jù)中心標簽值east_dev和east_qa的數(shù)據(jù)流滿足查找塊710a的搜索條件。查找模塊310為數(shù)據(jù)流語言程序的后續(xù)塊730a提供所標識的數(shù)據(jù)流集合750a。
作為數(shù)據(jù)流語言程序的其余部分的輸入而被提供的數(shù)據(jù)流集合取決于與查找塊710相關(guān)聯(lián)的搜索條件。例如,查找塊710b具有搜索條件“datacenter:*dev”,其與查找塊710a的搜索條件不同。數(shù)據(jù)流語言處理器200的查找模塊310通過標識“datacenter”元數(shù)據(jù)標簽(或?qū)傩?滿足正則表達式“*dev”的所有數(shù)據(jù)流來處理查找塊710b的搜索條件。
圖7示出了由儀器化分析系統(tǒng)100接收的數(shù)據(jù)流集合740b,其包括具有數(shù)據(jù)中心標簽值central_dev、east_dev、east_qa、west_dev和north_dev的數(shù)據(jù)流。在該示例中,集合740b具有與集合740a相同的元素。查找模塊310確定具有數(shù)據(jù)中心標簽值central_dev、east_dev、west_dev和north_dev的數(shù)據(jù)流滿足查找塊的搜索條件。查找模塊310為數(shù)據(jù)流語言程序的后續(xù)塊730b提供所標識的數(shù)據(jù)流集合750b。
圖7圖示了通過數(shù)據(jù)流語言處理器200動態(tài)確定由數(shù)據(jù)流語言程序處理的數(shù)據(jù)流集合。由數(shù)據(jù)流語言處理的數(shù)據(jù)流集合基于查找塊710的搜索條件以及由儀器化分析系統(tǒng)100接收的當前可用數(shù)據(jù)流來確定。
在實施例中,查找塊與時間表相關(guān)聯(lián),使得數(shù)據(jù)流語言處理器200的查找模塊310根據(jù)時間表執(zhí)行查找塊。例如,查找塊可以與周期性相關(guān)聯(lián),使得查找模塊310以基于周期性確定的速率執(zhí)行查找塊。因而,查找模塊310基于周期性來等待時間間隔,并且重新評價滿足查找塊的搜索條件的數(shù)據(jù)流集合。該過程被重復(直到時間達到與查找塊相關(guān)聯(lián)的“結(jié)束時間”值為止)。
圖8圖示了根據(jù)實施例的作為對查找塊的周期性重新評價的結(jié)果向數(shù)據(jù)流語言程序提供輸入的數(shù)據(jù)流集合的動態(tài)改變。如圖8所示,查找塊的搜索條件在時間t1進行評價,并再次在時間t2進行評價,導致不同數(shù)據(jù)流集合850被標識以供通過數(shù)據(jù)流語言程序進行處理。圖8圖示了在兩個不同的時間點重新執(zhí)行查找塊。
在時間t1,儀器化分析系統(tǒng)100接收具有數(shù)據(jù)中心標簽值central_dev、east_dev、east_qa、west_dev和north_dev的數(shù)據(jù)流集合840a(注意可能存在具有相同數(shù)據(jù)中心標簽值的多個數(shù)據(jù)流)。查找模塊310評價具有搜索條件“datacenter:east*”的查找塊810a。因而,查找模塊310標識具有數(shù)據(jù)中心標簽值east_dev和east_qa的數(shù)據(jù)流集合850a。數(shù)據(jù)流語言處理器200提供被標識給數(shù)據(jù)流語言程序的后續(xù)塊830a的數(shù)據(jù)流集合850a。
查找模塊310在時間t2重新評價查找塊。在時間t2,儀器化分析系統(tǒng)100接收具有數(shù)據(jù)中心標簽值central_dev、east_dev、east_prod、west_dev和north_dev的數(shù)據(jù)流集合840a。因而,查找模塊310標識具有數(shù)據(jù)中心標簽值east_prod和east_qa的數(shù)據(jù)流集合850b。
與在時間t1標識的集合850a相比較,集合850b包括具有數(shù)據(jù)中心標簽east_prod的新數(shù)據(jù)流,并且缺少具有數(shù)據(jù)中心標簽east_qa的數(shù)據(jù)流。數(shù)據(jù)流語言處理器200提供被標識給數(shù)據(jù)流語言程序的后續(xù)塊830a的數(shù)據(jù)流集合850a。因而,基于查找模塊的相同搜索條件來對數(shù)據(jù)流集合850進行的每個后續(xù)評價可以產(chǎn)生向后續(xù)塊830提供的不同數(shù)據(jù)流集合。
動態(tài)改變由數(shù)據(jù)流語言程序處理的數(shù)據(jù)流集合的能力允許數(shù)據(jù)流語言程序適于向儀器化分析系統(tǒng)提供輸入的動態(tài)改變的環(huán)境。例如,企業(yè)可以向數(shù)據(jù)中心添加/移除服務器,添加新數(shù)據(jù)中心,添加/移除/修改服務,改變服務以執(zhí)行以不同方式儀器化的軟件等等。指定由數(shù)據(jù)流語言程序處理的數(shù)據(jù)流集合的能力允許儀器化分析系統(tǒng)在數(shù)據(jù)動態(tài)改變時報告描述企業(yè)的數(shù)據(jù),而不必修改數(shù)據(jù)流語言程序。
圖9示出了根據(jù)實施例的用于標識用于使用查找塊向數(shù)據(jù)流語言程序提供輸入的數(shù)據(jù)流集合的過程。如圖9所示,數(shù)據(jù)流語言處理器200接收900數(shù)據(jù)流語言程序以供處理。圖9所圖示的過程基于如下假設:數(shù)據(jù)流語言程序具有查找塊,隨后是與其余的數(shù)據(jù)流語言程序相對應的塊集合。
查找塊與搜索字符串相關(guān)聯(lián)。查找模塊310接收910與查找塊相關(guān)聯(lián)的搜索字符串。查找模塊310解析920搜索字符串以構(gòu)建與搜索字符串相對應的搜索條件的表示,例如,解析樹表示。查找模塊310標識930與搜索條件相對應的數(shù)據(jù)流集合。查找模塊310向數(shù)據(jù)流語言程序的后續(xù)塊(例如,提取塊)提供所標識的數(shù)據(jù)流集合。數(shù)據(jù)流語言處理器200基于搜索條件來從所標識930的數(shù)據(jù)流取回數(shù)據(jù),并且執(zhí)行940其余的數(shù)據(jù)流語言程序。
基于搜索條件來標識930數(shù)據(jù)流集合并且執(zhí)行940數(shù)據(jù)流語言程序的其余塊的步驟由數(shù)據(jù)流語言處理器200重復執(zhí)行。重復步驟930和940的速率可能會有所不同。例如,與執(zhí)行數(shù)據(jù)流語言程序的其余塊的速率相比較,標識930數(shù)據(jù)流集合的步驟可以以較慢的速率執(zhí)行。對于與數(shù)據(jù)流語言程序相對應的任務,數(shù)據(jù)流語言程序的其余塊的執(zhí)行940速率和查找塊的執(zhí)行速率被指定(例如,通過用戶)。
從數(shù)據(jù)流語言程序的數(shù)據(jù)流取回數(shù)據(jù)
在實施例中,數(shù)據(jù)流語言程序包括用于從給定數(shù)據(jù)流集合取回數(shù)據(jù)的提取塊。通常,提取塊放置在數(shù)據(jù)流語言程序的數(shù)據(jù)流水線中的查找塊之后。換句話說,查找塊的輸出被提供給提取塊的輸入。因而,作為處理查找塊的結(jié)果,提取塊從由查找模塊310標識的數(shù)據(jù)流集合中取回數(shù)據(jù)。提取模塊320執(zhí)行提取塊。
圖10圖示了根據(jù)實施例的通過執(zhí)行提取塊從數(shù)據(jù)流取回數(shù)據(jù)的過程。圖10所圖示的某些步驟可以以與圖10中指示的順序不同的順序執(zhí)行。此外,步驟可以通過與本文中所指示的那些模塊不同的模塊來執(zhí)行。
數(shù)據(jù)流語言處理器200基于數(shù)據(jù)流語言程序來接收任務的開始時間、結(jié)束時間和周期性。提取模塊320基于數(shù)據(jù)流語言程序的查找塊的搜索條件來從查找模塊310接收數(shù)據(jù)流集合。提取模塊取回數(shù)據(jù)并且將其提供給數(shù)據(jù)流語言程序的后續(xù)塊用于執(zhí)行。提取模塊320執(zhí)行以下步驟用于從每個后續(xù)時間間隔的數(shù)據(jù)流中提取數(shù)據(jù)。
提取模塊320標識下一時間間隔,并且等待數(shù)據(jù)在時間間隔期間到達。量化模塊基于每個輸入數(shù)據(jù)流的數(shù)據(jù)來生成具有不同周期性的多個量化數(shù)據(jù)流。例如,量化數(shù)據(jù)流q1可以以5秒的周期性來生成,另一量化數(shù)據(jù)流q2可以以10秒的周期性來生成,另一量化數(shù)據(jù)流q3可以以1分鐘的周期性來生成等等。提取模塊320選擇1020具有最大周期性時間間隔的量化數(shù)據(jù)流,該最大周期時間間隔小于執(zhí)行數(shù)據(jù)流語言程序的周期性時間間隔(如基于數(shù)據(jù)流語言程序的周期性而確定的)。
例如,如果基于數(shù)據(jù)流語言程序的周期性,執(zhí)行數(shù)據(jù)流語言程序的時間間隔的大小需要在30秒內(nèi),則提取模塊320選擇周期性為10秒的量化數(shù)據(jù)流q2。量化數(shù)據(jù)流q3未被選擇,因為它的周期性時間間隔為1分鐘(即,60秒),其大于數(shù)據(jù)流語言程序的時間周期性時間間隔(即,30秒)。量化數(shù)據(jù)流q3未被選擇,因為它的周期性時間間隔為5秒,其不是小于數(shù)據(jù)流語言程序的周期性時間間隔的最大周期性時間間隔(由于它小于q2的周期性時間間隔,該q2的周期性時間間隔為10秒)。提取模塊320對所選擇的量化數(shù)據(jù)流進行重新量化,以生成周期性為30秒的重新量化的數(shù)據(jù)流(例如,通過聚合在當前30秒時間間隔內(nèi)出現(xiàn)的量化數(shù)據(jù)流的三個數(shù)據(jù)點的數(shù)據(jù)值)。
如果需要,提取模塊320從時間序列數(shù)據(jù)存儲裝置260取回1050數(shù)據(jù),以便與從數(shù)據(jù)流接收的實時數(shù)據(jù)組合。提取模塊向后續(xù)塊(例如,統(tǒng)計計算塊)提供1060經(jīng)組合的數(shù)據(jù)。例如,假設數(shù)據(jù)流語言程序向屏幕發(fā)布輸出,并且任務的開始時間被指示為負(例如,-1小時)。數(shù)據(jù)可以被呈現(xiàn)為圖表,其呈現(xiàn)在圖表被接收時的數(shù)據(jù)以及針對所選時間間隔的過去數(shù)據(jù)。例如,用戶可以選擇用于在圖表上呈現(xiàn)數(shù)據(jù)的一小時時間窗口。在這種情形下,如果圖表僅基于在數(shù)據(jù)流中接收到的實時數(shù)據(jù)來渲染,則當儀器化分析系統(tǒng)100開始處理數(shù)據(jù)流語言程序時,圖表可能為空。所顯示的圖表可能從右側(cè)緩慢開始填充,并且將在一小時后填充所顯示的窗口。這提供了不理想的用戶體驗。理想情況下,用戶希望在整個一小時內(nèi)看到完整圖表(具有一小時數(shù)據(jù)),圖表從一開始就被顯示。
提取模塊320通過從時間序列數(shù)據(jù)存儲裝置260中取回1050數(shù)據(jù)來彌補上述情形,以供渲染在來自數(shù)據(jù)流的實時數(shù)據(jù)可用的時間之前出現(xiàn)的圖表的部分。例如,當儀器化分析系統(tǒng)100開始處理數(shù)據(jù)流語言程序時,提取模塊320呈現(xiàn)用于使用從時間序列數(shù)據(jù)存儲裝置260獲得的數(shù)據(jù)來渲染整個圖表的數(shù)據(jù)。由于從數(shù)據(jù)流接收越來越多的數(shù)據(jù),提取模塊320將來自時間序列數(shù)據(jù)存儲裝置260的數(shù)據(jù)與所接收的實時數(shù)據(jù)組合。
作為示例,在10分鐘之后,提取模塊320發(fā)送用于呈現(xiàn)的與從數(shù)據(jù)流接收的10分鐘數(shù)據(jù)組合的、從時間序列數(shù)據(jù)存儲裝置260取回的50分鐘數(shù)據(jù)。類似地,在30分鐘之后,提取模塊320發(fā)送用于呈現(xiàn)的與從數(shù)據(jù)流中接收的30分鐘數(shù)據(jù)組合的、從時間序列數(shù)據(jù)存儲裝置260取回的30分鐘數(shù)據(jù),等等。在接收到數(shù)據(jù)流的多于60分鐘的數(shù)據(jù)之后,提取模塊320具有足夠的基于數(shù)據(jù)流的數(shù)據(jù),使得其可以發(fā)送基于從數(shù)據(jù)流接收的用于渲染圖表的所有數(shù)據(jù),并且不必將來自數(shù)據(jù)流的數(shù)據(jù)與時間序列數(shù)據(jù)存儲裝置260先前存儲的數(shù)據(jù)組合。
提取模塊320可以從時間序列數(shù)據(jù)存儲裝置260取回1050數(shù)據(jù),用于與在其他情形(例如,對于窗口塊)下從數(shù)據(jù)流接收的數(shù)據(jù)組合。窗口塊提供指定長度(如tw)的滑動時間窗口,并且執(zhí)行窗口數(shù)據(jù)的計算(如平均值)以確定一小時時間窗口內(nèi)的移動平均。在這種情形下,由于來自數(shù)據(jù)流的數(shù)據(jù)在一段時間tw內(nèi)不可用于填充整個窗口,所以存在初始化延遲時間tw。因而,如果數(shù)據(jù)流語言程序在時間t1開始,則從時間t1-tw開始的數(shù)據(jù)從時間序列數(shù)據(jù)存儲裝置260中提取,以填充窗口以提供用于窗口計算的有意義的數(shù)據(jù)。在任何時間t0>t1,(同時t0-t1小于tw),提取模塊320用從數(shù)據(jù)流接收的實時數(shù)據(jù)填充長度為t0-t1的窗口的末尾部分,并且用從時間序列數(shù)據(jù)存儲裝置260取回的數(shù)據(jù)填充窗口的第一部分(即,剩余部分)。
如果數(shù)據(jù)流語言程序包括多窗口計算,則提取模塊320通過組合來自時間序列數(shù)據(jù)存儲裝置260的數(shù)據(jù)(如果需要)和從數(shù)據(jù)流接收的實時數(shù)據(jù)來維護需要被提取的最大窗口的大小的數(shù)據(jù)。針對最大窗口維護的數(shù)據(jù)包括用于較小窗口的數(shù)據(jù)。
圖11a至圖11c圖示了根據(jù)實施例的組合來自時間序列數(shù)據(jù)存儲裝置的數(shù)據(jù)和實時接收的數(shù)據(jù)以用于移動窗口計算的過程。移動窗口的長度被假設為tw。示例計算是跨數(shù)據(jù)流集合的數(shù)據(jù)的聚合,例如,基于跨整個數(shù)據(jù)流集合的移動窗口期間接收到的數(shù)據(jù)的平均值或百分位數(shù)計算。移動窗口是保持移位的時間窗口。換句話說,移動窗口的大小保持恒定,但窗口隨時間保持前進。
在窗口內(nèi)發(fā)生的數(shù)據(jù)點的數(shù)目可以隨時間而改變。所處理的數(shù)據(jù)流的數(shù)目還可以隨窗口前進而改變,例如,由于引入了新數(shù)據(jù)流,或者由于對描述數(shù)據(jù)流的元數(shù)據(jù)的修改。例如,如果移動窗口正在計算來自數(shù)據(jù)中心“east”的跨所有數(shù)據(jù)流的數(shù)據(jù)的平均值,則如果數(shù)據(jù)中心“east”開始/停止服務,引入新服務器,或者如果描述數(shù)據(jù)流的元數(shù)據(jù)被修改以向/從某些數(shù)據(jù)流添加/移除“datacenter=east”標簽,數(shù)據(jù)流的數(shù)目可以隨時間而改變。數(shù)據(jù)流語言處理器200周期性地重新評價數(shù)據(jù)流集合以及在窗口內(nèi)出現(xiàn)的數(shù)據(jù)點集合,并且從所選擇的數(shù)據(jù)流中計算針對數(shù)據(jù)點指定的聚合值。
圖11a示出了當窗口計算開始時,可以從時間序列數(shù)據(jù)存儲裝置260取回窗口的完整數(shù)據(jù)的場景。圖11b示出了在經(jīng)過一段時間(其小于時間tw,窗口的長度)之后,提取模塊320將來自時間序列數(shù)據(jù)存儲裝置260的數(shù)據(jù)與從數(shù)據(jù)流接收的實時數(shù)據(jù)組合。圖11c示出了在大于窗口的長度tw的時間之后,提取模塊320不必從時間序列數(shù)據(jù)存儲裝置260取回數(shù)據(jù),而是可以用從數(shù)據(jù)流獲得的實時數(shù)據(jù)填充整個窗口。
如圖11a所示,t2指示當前時間,并且給出大小為tw的窗口,時間t1表示時間點t2-tw。假設窗口計算在時間t2開始。因而,窗口的時間范圍為t1-t2。此時沒有從數(shù)據(jù)流接收數(shù)據(jù)。從時間序列數(shù)據(jù)存儲裝置260取回整個窗口的數(shù)據(jù)。
圖11b示出了經(jīng)過一段時間之后,當前時間由t4表示,并且窗口已經(jīng)前進到時間范圍t3-t4。由于自從時間t2起收集實時數(shù)據(jù),因此在時間范圍t2-t4的窗口計算中收集并且使用實時數(shù)據(jù)。對于時間范圍t3-t2,提取模塊320仍然使用來自時間序列數(shù)據(jù)存儲裝置260的數(shù)據(jù)。圖11b所示的場景適用于時間范圍t4-t2小于tw時的所有時間(換句話說,適用于小于窗口的大小的自t2以后的所有時間)。
圖11c示出了等于或大于窗口長度的時間場景。換句話說,如果t5是當前時間,則圖11c適用于所有時間t5,使得t5-t2大于或等于窗口tw的長度。在這些場景下,提取模塊320已經(jīng)從數(shù)據(jù)流累積了充足的實時數(shù)據(jù),使得提取模塊320不從時間序列數(shù)據(jù)存儲裝置260取回數(shù)據(jù)。換句話說,窗口計算使用從數(shù)據(jù)流實時接收的所有數(shù)據(jù)來執(zhí)行。
圖11a至圖11c中描述的場景還適用于使用圖表(例如,經(jīng)由儀表板)呈現(xiàn)數(shù)據(jù)。來自時間序列數(shù)據(jù)存儲裝置260的數(shù)據(jù)用于填充圖表的初始部分,以避免隨時間推進而緩慢地示出圖表填充。由于向用戶呈現(xiàn)由用戶選擇的整個時間窗口的圖表,因此用來自時間序列數(shù)據(jù)存儲裝置260的數(shù)據(jù)填充圖表的能力提供了更好的用戶體驗。
編組數(shù)據(jù)流
圖12圖示了根據(jù)實施例的用于對數(shù)據(jù)流的數(shù)據(jù)進行編組以生成結(jié)果數(shù)據(jù)流集合的過程。編組聲明可以包括在數(shù)據(jù)流語言程序中,例如,使用如圖4所示的分組塊。數(shù)據(jù)流語言程序的編組聲明指定描述數(shù)據(jù)流的一個或多個元數(shù)據(jù)屬性。分組塊與針對每個數(shù)據(jù)流組執(zhí)行的聚合計算相關(guān)聯(lián)。
編組模塊360接收1210描述數(shù)據(jù)流的一個或多個屬性。該屬性可以是與數(shù)據(jù)流的數(shù)據(jù)(例如,源名稱和度量名稱)一起被接收的屬性或是通過元數(shù)據(jù)模塊220與數(shù)據(jù)流相關(guān)聯(lián)的并且存儲在元數(shù)據(jù)存儲裝置230中的元數(shù)據(jù)標簽。編組模塊360還接收針對每個數(shù)據(jù)流組執(zhí)行的特定計算,例如,基于數(shù)據(jù)流的數(shù)據(jù)來確定聚合值的計算。
基于針對執(zhí)行數(shù)據(jù)流語言程序的任務而指定的周期性,數(shù)據(jù)流語言處理器200(及其部件模塊)對每個時間間隔執(zhí)行以下計算。編組模塊360標識1220對應于與編組命令相關(guān)聯(lián)的一個或多個屬性的每個獨特值集合的數(shù)據(jù)流組。例如,如果使用編組命令指定的屬性是“datacenter”屬性,則編組模塊360標識數(shù)據(jù)流集合,每個集合具有“datacenter”標簽的獨特值。
編組模塊360對所標識的每個數(shù)據(jù)流集合(或組)執(zhí)行以下計算。編組模塊360接收1230與用于該具體時間間隔的集合的每個數(shù)據(jù)流相對應的數(shù)據(jù)。編組模塊360針對來自每個組的數(shù)據(jù)流的數(shù)據(jù)確定1240聚合計算的值。例如,如果編組基于屬性“datacenter”并且所指定的計算是平均,則編組模塊360確定1240針對給定時間間隔而獲得的具體數(shù)據(jù)中心的所有數(shù)據(jù)流的數(shù)據(jù)的平均。編組模塊360將每個組的計算結(jié)果輸出1250到數(shù)據(jù)流語言程序的后續(xù)塊。
如圖12所圖示的過程所描述的,編組語句(即,分組塊)采用數(shù)據(jù)流集合作為輸入,并且生成結(jié)果數(shù)據(jù)流集合。編組語句可以指定通過多個元數(shù)據(jù)屬性進行編組。所生成的結(jié)果數(shù)據(jù)流的數(shù)目等于輸入集合中存在的至少一個數(shù)據(jù)流的編組屬性的獨特屬性值的數(shù)目。換句話說,如果在輸入中存在具有屬性具有獨特值的組合的數(shù)據(jù)流,則針對編組屬性的值的每個獨特組合來生成數(shù)據(jù)流。
圖13a至圖13b示出了根據(jù)實施例的基于描述數(shù)據(jù)流的不同元數(shù)據(jù)屬性來對數(shù)據(jù)流進行編組的示例場景。圖13a示出了基于屬性“dc”(表示數(shù)據(jù)中心)來對數(shù)據(jù)流集合進行編組。輸入數(shù)據(jù)流集合1340a包括屬性為dc=east和metric=cpuload的數(shù)據(jù)流、屬性為dc=west和metric=cpuload的數(shù)據(jù)流、屬性為dc=north和metric=cpuload的數(shù)據(jù)流、屬性為dc=west和metric=cachemisses的數(shù)據(jù)流、以及屬性為dc=north和metric=cachemisses的數(shù)據(jù)流。編組模塊360處理編組塊1310a,其指定分組(“dc”)以從具有與屬性dc相同的屬性值的輸入集合1340a收集數(shù)據(jù)流。輸入集合1340a包括屬性為dc=east的一個數(shù)據(jù)流、屬性為dc=west的兩個數(shù)據(jù)流、以及屬性為dc=north的兩個數(shù)據(jù)流。
在實施例中,如果沒有具有該值組合的輸入數(shù)據(jù)流,則編組模塊360忽略分組屬性的獨特值。因而,編組模塊360不生成與這些屬性值相對應的任何結(jié)果數(shù)據(jù)流。例如,如果dc屬性可以具有其他可能的值,如“north-east”、“south-west”等等,并且沒有具有這些屬性值的輸入數(shù)據(jù)流,則編組模塊360不生成與元數(shù)據(jù)屬性的這些獨特值相對應的結(jié)果數(shù)據(jù)流。
因而,如圖13所示,編組模塊360生成三個結(jié)果數(shù)據(jù)流,即,與dc=east相對應的第一結(jié)果數(shù)據(jù)流、與dc=west相對應的第二結(jié)果數(shù)據(jù)流以及與dc=north相對應的第三數(shù)據(jù)流。每個結(jié)果數(shù)據(jù)流包括通過以執(zhí)行分組塊的周期性(其是數(shù)據(jù)流語言程序被執(zhí)行的周期性)聚合來自對應的輸入數(shù)據(jù)流組的數(shù)據(jù)而生成的數(shù)據(jù)值。
如果分組塊指定用于編組的不同屬性,則編組模塊360可以生成不同的結(jié)果數(shù)據(jù)流集合。例如,圖13b示出了基于“度量”屬性來對數(shù)據(jù)流進行編組。輸入集合1340b具有與集合1340a相同的數(shù)據(jù)流。輸入數(shù)據(jù)流編組三個數(shù)據(jù)流以生成與metric=cpuload相對應的結(jié)果數(shù)據(jù)流和與metric=cachemisses相對應的另一結(jié)果數(shù)據(jù)流。
圖14示出了根據(jù)實施例的示例性場景,其圖示了作為輸入數(shù)據(jù)流隨時間改變的結(jié)果的由分組塊生成的結(jié)果數(shù)據(jù)流的動態(tài)改變。例如,當輸入數(shù)據(jù)流集合1440與集合1340a不同時,可以在稍后的時間點(例如,對于不同的時間間隔)執(zhí)行圖13a所示的分組塊。如圖14所示,輸入集合1440不包括屬性為dc=east的任何數(shù)據(jù)流。此外,輸入集合1440包括屬性為dc=south的數(shù)據(jù)流。因而,編組模塊360生成具有三個結(jié)果數(shù)據(jù)流的結(jié)果集合1450,即,與dc=west相對應的第一結(jié)果數(shù)據(jù)流、與dc=north相對應的第二結(jié)果數(shù)據(jù)流以及與dc=south相對應的第三數(shù)據(jù)流。因而,由編組模塊360生成的組可以隨數(shù)據(jù)流的輸入集合改變而動態(tài)改變。在開發(fā)系統(tǒng)120中執(zhí)行的從儀器化軟件接收的輸入數(shù)據(jù)流集合可以由于各種原因而改變,例如,由于開始新的開發(fā)系統(tǒng)120,添加/移除服務,或修改與元數(shù)據(jù)存儲裝置230中的數(shù)據(jù)流相關(guān)聯(lián)的元數(shù)據(jù)。
發(fā)布數(shù)據(jù)流作為第一類公民
根據(jù)實施例,數(shù)據(jù)流語言程序包括發(fā)布命令(即,發(fā)布塊),其基于數(shù)據(jù)流語言程序的執(zhí)行結(jié)果通過向儀器化分析系統(tǒng)100的其他部件提供數(shù)據(jù)流來發(fā)布一個或多個數(shù)據(jù)流。例如,由數(shù)據(jù)流語言程序生成的數(shù)據(jù)流可以被發(fā)布到用戶接口以被呈現(xiàn)為實時圖表或報告。所生成的數(shù)據(jù)流被表示為第一類公民。換句話說,所生成的數(shù)據(jù)流被以與由儀器化分析系統(tǒng)100從開發(fā)系統(tǒng)120的儀器化軟件接收的數(shù)據(jù)流相同方式被表示。
所生成的數(shù)據(jù)流還可以被儀器化分析系統(tǒng)100的其他部件100以與由儀器化分析系統(tǒng)100接收的數(shù)據(jù)流相同的方式使用。所生成的數(shù)據(jù)流可以通過儀器化分析系統(tǒng)100或經(jīng)由管理系統(tǒng)160通過系統(tǒng)管理員自動地與元數(shù)據(jù)屬性相關(guān)聯(lián)。數(shù)據(jù)流語言程序的查找塊可以查找類似于從外部系統(tǒng)接收的其他數(shù)據(jù)流的所生成的數(shù)據(jù)流。執(zhí)行其他數(shù)據(jù)流語言程序的任務可以接收所生成的數(shù)據(jù)流作為輸入并且處理它。數(shù)據(jù)流的數(shù)據(jù)可以經(jīng)由用戶接口來呈現(xiàn),并且可以基于從用戶接收的輸入來操縱,其類似于由儀器化分析系統(tǒng)100處理的任何其他數(shù)據(jù)流。
數(shù)據(jù)流語言處理器200將結(jié)果數(shù)據(jù)流發(fā)布在軟件總線290上??梢詷俗R任何結(jié)果數(shù)據(jù)流(或任何其他數(shù)據(jù)流)的數(shù)據(jù)流標識符的儀器化分析系統(tǒng)100的任何部件可以從軟件總線290獲得數(shù)據(jù)流的數(shù)據(jù)。軟件總線290可以存儲發(fā)布在存儲器中的數(shù)據(jù)流的數(shù)據(jù),以提供對數(shù)據(jù)的快速訪問。
數(shù)據(jù)流語言程序可以生成多個結(jié)果數(shù)據(jù)流以供發(fā)布。例如,數(shù)據(jù)流語言程序可以聚合基于數(shù)據(jù)中心編組的度量(例如,cachemisses)。因而,針對每個數(shù)據(jù)中心生成聚合屬性(如totalcachemisses)。發(fā)布模塊350生成描述每個所生成的結(jié)果數(shù)據(jù)流的元數(shù)據(jù)并且將該元數(shù)據(jù)存儲在元數(shù)據(jù)存儲裝置230中。發(fā)布模塊350將數(shù)據(jù)流與信息相關(guān)聯(lián),該信息與生成數(shù)據(jù)流的數(shù)據(jù)流語言程序相關(guān)聯(lián)。因而,發(fā)布模塊350分析生成數(shù)據(jù)流的數(shù)據(jù)流語言程序的塊,并且從數(shù)據(jù)流語言程序的塊中標識信息,該信息標識數(shù)據(jù)流。
發(fā)布模塊350可以基于通過生成所發(fā)布的數(shù)據(jù)流的數(shù)據(jù)流語言程序作為輸入而被接收的數(shù)據(jù)流的屬性來生成描述數(shù)據(jù)流的元數(shù)據(jù)屬性。例如,如果數(shù)據(jù)流語言程序計算輸入數(shù)據(jù)流的移動平均,則發(fā)布模塊350同樣將基于輸入數(shù)據(jù)流的元數(shù)據(jù)屬性值與所發(fā)布的數(shù)據(jù)流相關(guān)聯(lián)。在這種情形下,發(fā)布模塊350可以使用輸入數(shù)據(jù)流的源名稱作為輸入數(shù)據(jù)流的源名稱。如果通過聚合多個輸入數(shù)據(jù)流來獲得所發(fā)布的數(shù)據(jù)流,則發(fā)布模塊350可以通過聚合基于輸入數(shù)據(jù)流的屬性值來生成所發(fā)布的數(shù)據(jù)流的屬性(例如,通過并置(concatenating)來自輸入數(shù)據(jù)流的對應的屬性值或通過并置通過縮短來自數(shù)據(jù)流的屬性值來獲得的子串)。例如,結(jié)果數(shù)據(jù)流的源名稱可以通過并置所聚合的輸入數(shù)據(jù)流的源名稱或通過并置輸入數(shù)據(jù)流的源名稱的前綴字符串來獲得。
在實施例中,發(fā)布塊與表征正在被發(fā)布的數(shù)據(jù)的類型的度量名稱相關(guān)聯(lián)。發(fā)布模塊350將發(fā)布塊的度量名稱與由發(fā)布塊發(fā)布的數(shù)據(jù)流相關(guān)聯(lián)。數(shù)據(jù)流語言處理器200還生成標識符(被稱為時間序列標識符)以供表示每個結(jié)果數(shù)據(jù)流。每個結(jié)果數(shù)據(jù)流的數(shù)據(jù)被存儲在時間序列數(shù)據(jù)存儲裝置260中,并且可供儀器化分析系統(tǒng)的任何部件使用。
如果發(fā)布塊不與度量名稱相關(guān)聯(lián),則發(fā)布模塊基于由生成正在被發(fā)布的數(shù)據(jù)流的數(shù)據(jù)流語言程序接收的輸入數(shù)據(jù)流來確定度量名稱。如果正在被發(fā)布的數(shù)據(jù)流語言由單個數(shù)據(jù)流生成,則發(fā)布模塊使用單個數(shù)據(jù)流的度量名稱作為所發(fā)布的數(shù)據(jù)流的度量名稱。如果正在被發(fā)布的數(shù)據(jù)流語言由多個數(shù)據(jù)流生成,則發(fā)布模塊基于多個數(shù)據(jù)流的度量名稱來生成用于所發(fā)布的數(shù)據(jù)流的度量名稱,例如,通過并置度量名稱或度量名稱的子串(例如,前綴或后綴)。
圖15示出了根據(jù)實施例的流程圖,其圖示了通過執(zhí)行數(shù)據(jù)流語言程序的發(fā)布塊而獲得的結(jié)果數(shù)據(jù)流的發(fā)布過程。假設數(shù)據(jù)流語言程序包括發(fā)布塊和一個或多個分組塊。假設發(fā)布塊與度量名稱相關(guān)聯(lián)。例如,數(shù)據(jù)流語言程序可以如下:
find(“source:analytics*”,“metric:load”))→
fetch()→
groupby(“datacenter”)→
stats!mean→
publish(“dc_load”)
上述數(shù)據(jù)流語言程序包括指定度量名稱“dc_load”的發(fā)布塊。數(shù)據(jù)流語言程序還包括用于基于數(shù)據(jù)中心對輸入數(shù)據(jù)流進行編組的分組聲明。
數(shù)據(jù)流語言處理器200標識1500正在被處理的數(shù)據(jù)流語言程序中的發(fā)布塊。例如,如果上述數(shù)據(jù)流語言程序正在被處理,則數(shù)據(jù)流語言處理器200標識1500數(shù)據(jù)流語言程序的最后塊,即,發(fā)布(“dc_load”)。發(fā)布模塊350確定1510與發(fā)布塊相關(guān)聯(lián)的度量名稱。例如,在上文所示的數(shù)據(jù)流語言程序的發(fā)布塊中,發(fā)布模塊350確定1510與發(fā)布塊相關(guān)聯(lián)的度量名稱“dc_load”。數(shù)據(jù)流語言處理器200使用度量名作為描述結(jié)果數(shù)據(jù)流的元數(shù)據(jù)屬性。
發(fā)布塊的輸出可以包括多個結(jié)果數(shù)據(jù)流,例如,如果數(shù)據(jù)流語言程序包括分組塊。上述示例數(shù)據(jù)流語言程序可以生成多個結(jié)果數(shù)據(jù)流,每個數(shù)據(jù)中心一個結(jié)果數(shù)據(jù)流,即,基于來自所有具有獨特數(shù)據(jù)中心屬性值的數(shù)據(jù)流周期性獲得的統(tǒng)計平均數(shù)據(jù)值的一個結(jié)果數(shù)據(jù)流。其他數(shù)據(jù)流語言程序可以包括多個分組塊。然而,由數(shù)據(jù)流語言程序生成的結(jié)果數(shù)據(jù)流的數(shù)目由數(shù)據(jù)流語言程序的最后分組塊來確定。
發(fā)布模塊350標識1520數(shù)據(jù)流語言程序的最后分組塊的屬性集合。在上述示例中,分組(“datacenter”)塊具有用于編組數(shù)據(jù)流的單個屬性“datacenter”。然而,分組塊可以包括用于對數(shù)據(jù)流進行編組的多個屬性。例如,分組命令groupby(“datacenter”、“region”)指定用于編組數(shù)據(jù)流的兩個屬性“datacenter”和“region”。發(fā)布模塊350使用所標識的屬性集合的獨特值來區(qū)分由數(shù)據(jù)流語言程序生成的結(jié)果數(shù)據(jù)流。
數(shù)據(jù)流語言處理器200(及其部件模塊)對每個結(jié)果數(shù)據(jù)流執(zhí)行以下步驟。發(fā)布模塊350標識與結(jié)果數(shù)據(jù)流相關(guān)聯(lián)的最后分組塊的所標識的屬性的值。與結(jié)果數(shù)據(jù)流相關(guān)聯(lián)的所標識的屬性的值可以與數(shù)據(jù)流一起接收,或者從給出分組塊的輸入數(shù)據(jù)流的標識符的元數(shù)據(jù)存儲裝置230中提取。如果輸入數(shù)據(jù)流集合包括具有不同數(shù)據(jù)中心值的數(shù)據(jù)流,例如,“east”、“west”、“north”、“south”等等,則由分組塊輸出的每個結(jié)果數(shù)據(jù)流(以及如果分組塊是數(shù)據(jù)流語言程序的最后分組塊,則是數(shù)據(jù)流語言程序)與這些數(shù)據(jù)中心值中的一個數(shù)據(jù)中心值相關(guān)聯(lián)。如果分組塊指定用于編組的多個屬性,則每個結(jié)果數(shù)據(jù)流與指定用于編組的分組塊的屬性的獨特值集合相關(guān)聯(lián)。
數(shù)據(jù)流元數(shù)據(jù)生成器370基于與結(jié)果數(shù)據(jù)流相關(guān)聯(lián)的所標識的屬性的值以及與發(fā)布塊相關(guān)聯(lián)的度量名稱來生成1540描述結(jié)果數(shù)據(jù)流的元數(shù)據(jù)。例如,如果分組塊指定數(shù)據(jù)中心屬性(具有值“east”、“west”、“north”、“south”),并且使用發(fā)布塊指定的度量名稱為cpu_load,則數(shù)據(jù)流元數(shù)據(jù)生成器370將每個已發(fā)布的數(shù)據(jù)流與度量名稱cpu_load和數(shù)據(jù)中心屬性的對應值相關(guān)聯(lián)(與數(shù)據(jù)流組相關(guān)聯(lián))。數(shù)據(jù)流元數(shù)據(jù)生成器370還生成結(jié)果數(shù)據(jù)流的標識符。數(shù)據(jù)流元數(shù)據(jù)生成器370將包括與結(jié)果流相關(guān)聯(lián)的屬性的元數(shù)據(jù)存儲1550在元數(shù)據(jù)存儲裝置230中。
數(shù)據(jù)流語言處理器200周期性地執(zhí)行數(shù)據(jù)流語言程序,按照由數(shù)據(jù)流語言程序的周期性指定的那樣。當數(shù)據(jù)流語言程序被執(zhí)行時,數(shù)據(jù)流語言處理器200為每個結(jié)果數(shù)據(jù)流生成數(shù)據(jù)。數(shù)據(jù)流語言處理器200存儲1560為每個結(jié)果數(shù)據(jù)流所生成的數(shù)據(jù),該結(jié)果數(shù)據(jù)流與結(jié)果數(shù)據(jù)流的標識符相關(guān)聯(lián)。
使用閾值塊的異常檢測
數(shù)據(jù)流語言程序支持允許將數(shù)據(jù)流集合的數(shù)據(jù)與閾值進行比較的閾值塊。被比較的數(shù)據(jù)流可以是由儀器化分析系統(tǒng)100從開發(fā)系統(tǒng)120的儀器化軟件接收的數(shù)據(jù)流或作為數(shù)據(jù)流語言程序的一個或多個塊的執(zhí)行結(jié)果而獲得的數(shù)據(jù)流。閾值塊包括數(shù)據(jù)端口和閾值端口。數(shù)據(jù)端口接收表示數(shù)據(jù)值的一個或多個數(shù)據(jù)流。閾值端口接收表示閾值的一個或多個數(shù)據(jù)流。閾值塊將數(shù)據(jù)值與閾值進行比較,以確定數(shù)據(jù)值是否在由閾值指定的范圍內(nèi)。在實施例中,閾值塊包括一個以上的閾值端口。例如,閾值塊可以包括兩個閾值端口,即,低閾值端口和高閾值端口。閾值塊確定數(shù)據(jù)值是否低于在高閾值端口中接收的閾值并且高于在低閾值端口中接收的閾值。
閾值塊允許指定高閾值和/或低閾值。閾值模塊340通過將在輸入流中接收的數(shù)據(jù)值與由閾值塊指定的閾值進行比較來處理閾值塊。閾值塊指定低閾值和高閾值。如果來自由閾值塊接收到的輸入數(shù)據(jù)流的數(shù)據(jù)值位于高閾值和/或低閾值的邊界之外,則閾值模塊340生成事件。換句話說,如果數(shù)據(jù)流的數(shù)據(jù)超過高閾值或低于低閾值,則閾值模塊340生成事件。閾值可以是固定的或動態(tài)的。動態(tài)閾值被獲得作為數(shù)據(jù)流語言程序的執(zhí)行結(jié)果。閾值塊可以指定低閾值/高閾值中的一個或兩個。
對閾值塊的輸入可以是作為數(shù)據(jù)流語言程序的塊的執(zhí)行結(jié)果而生成的多個數(shù)據(jù)流值,例如,作為輸入數(shù)據(jù)流集合的編組結(jié)果而獲得的多個數(shù)據(jù)流。在這種情形下,低閾值或高閾值也被指定為生成多個數(shù)據(jù)流的數(shù)據(jù)流語言程序的輸出。閾值模塊340將由閾值塊的輸入端口接收的數(shù)據(jù)流與由低閾值端口/高閾值端口接收的數(shù)據(jù)流進行匹配。閾值模塊340將由輸入端口接收的數(shù)據(jù)流的數(shù)據(jù)與由每個時間間隔(基于數(shù)據(jù)流語言程序的周期性)的低閾值端口/高閾值端口接收的數(shù)據(jù)流的數(shù)據(jù)進行比較,并且基于該比較來采取動作(例如,發(fā)送事件)。
在實施例中,閾值塊指定持續(xù)時間和分數(shù)(fraction)值。例如,閾值塊可以指定持續(xù)時間t(如5分鐘)。如果輸入數(shù)據(jù)流的數(shù)據(jù)在所指定的閾值之外超過所指定的持續(xù)時間t,則閾值模塊340生成事件。例如,如果輸入數(shù)據(jù)流的數(shù)據(jù)高于高閾值超出t時間單位,則閾值模塊340生成事件。作為另一示例,如果輸入數(shù)據(jù)流的數(shù)據(jù)低于低閾值超出t時間單位,則閾值模塊340生成事件。指定持續(xù)時間的能力確保位于閾值邊界之外的數(shù)據(jù)流的數(shù)據(jù)的異常行為持續(xù)相當長的時間,而非短暫行為。
在實施例中,閾值塊指定分數(shù)值f(如0.8)以及持續(xù)時間t。如果在指定長度t的時間窗口內(nèi),輸入數(shù)據(jù)流的數(shù)據(jù)位于閾值邊界之外超過指定分數(shù)的持續(xù)時間t,則閾值模塊340生成事件。因而,即使輸入數(shù)據(jù)流的數(shù)據(jù)不在整個持續(xù)時間t內(nèi)都在閾值邊界之外,閾值模塊340也生成事件,只要該數(shù)據(jù)在閾值邊界之外至少持續(xù)指定分數(shù)的持續(xù)時間。
圖16示出了根據(jù)實施例的數(shù)據(jù)流語言程序的示例,其圖示了具有由特定屬性編組的數(shù)據(jù)流的固定閾值的閾值塊的使用。數(shù)據(jù)流語言處理器200接收圖16所示的數(shù)據(jù)流語言處理器,并且處理它。
查找模塊310執(zhí)行查找塊1610,以標識輸入到數(shù)據(jù)流語言程序1600的數(shù)據(jù)流集合。提取模塊320執(zhí)行提取塊1615,以針對數(shù)據(jù)流語言程序指定的周期性提取數(shù)據(jù)流的數(shù)據(jù)。編組模塊360執(zhí)行分組塊1620,以將基于數(shù)據(jù)中心值通過查找塊標識的數(shù)據(jù)流編組成數(shù)據(jù)流集合,該集合的每個數(shù)據(jù)流與在所標識的數(shù)據(jù)流中出現(xiàn)的獨特的數(shù)據(jù)中心值相對應。計算模塊330執(zhí)行統(tǒng)計塊1625,以確定與來自每個數(shù)據(jù)中心的數(shù)據(jù)相對應的均值。計算模塊330向閾值塊的入端口提供統(tǒng)計塊1625的輸出作為輸入。
閾值模塊340將所輸入的每個數(shù)據(jù)流的數(shù)據(jù)與閾值塊1630的高閾值進行比較。如圖16所示,閾值塊1630的高閾值為固定值(即,固定值6)。因而,如果任何組(與數(shù)據(jù)中心相對應)的數(shù)據(jù)流的任何數(shù)據(jù)值超過高閾值6,則閾值模塊340生成事件。閾值模塊340在事件中提供超過閾值的數(shù)據(jù)流的細節(jié)作為名稱值對。例如,閾值模塊340可以提供與超過高閾值的數(shù)據(jù)流相對應的數(shù)據(jù)中心屬性值、超過高閾值的時間的時間戳等等的細節(jié)。由于閾值塊1630未指定低閾值,因此閾值模塊340不將輸入到閾值塊1630的數(shù)據(jù)流的數(shù)據(jù)與任何低閾值進行比較。
圖17示出了根據(jù)實施例的數(shù)據(jù)流語言程序的示例,其圖示了由元數(shù)據(jù)屬性編組的數(shù)據(jù)流的具有動態(tài)改變的閾值的閾值塊。數(shù)據(jù)塊向圖17的閾值塊1760的入端口提供輸入的數(shù)據(jù)塊,類似于向圖16的閾值塊1630提供輸入的數(shù)據(jù)塊。因而,圖17的框1710,1715,1720,1725分別與圖16的框1610,1615,1620和1625相對應。然而,閾值塊1760的高端口的輸入接收動態(tài)改變的輸入。此外,閾值塊1760的高端口接收多個數(shù)據(jù)流作為輸入。閾值模塊340將由閾值塊1760的高端口接收的多個數(shù)據(jù)流與由入端口接收的多個數(shù)據(jù)流進行匹配。
提取模塊320執(zhí)行提取塊1730,以針對數(shù)據(jù)流語言程序指定的周期性來提取數(shù)據(jù)流的數(shù)據(jù)。編組模塊360執(zhí)行分組塊1735,以將由查找塊1710標識的數(shù)據(jù)流通過數(shù)據(jù)中心值編組成數(shù)據(jù)流集合,該集合的每個數(shù)據(jù)流與數(shù)據(jù)中心值相對應。窗口模塊380執(zhí)行窗口塊1740,以標識與輸入到窗口塊1740的每個數(shù)據(jù)流的一小時移動窗口相對應的數(shù)據(jù)點。計算模塊330執(zhí)行統(tǒng)計塊1745,以確定與由窗口塊1740輸出的每個數(shù)據(jù)流相對應的一小時移動窗口的一小時移動平均值。定制塊模塊390通過組合數(shù)據(jù)流語言的內(nèi)置塊來處理由用戶定義的定制宏。計算模塊330通過執(zhí)行縮放塊1750來將統(tǒng)計塊1745的輸出按照因子150%縮放??s放塊1750的縮放輸出被提供作為閾值塊1760的高端口的輸入。
因而,閾值模塊340將表示來自每個數(shù)據(jù)中心的數(shù)據(jù)流的均值的結(jié)果數(shù)據(jù)流集合與被縮放150%的來自每個數(shù)據(jù)中心的數(shù)據(jù)流的數(shù)據(jù)的一小時移動平均進行比較。如果與由入端口接收的數(shù)據(jù)中心相對應的結(jié)果數(shù)據(jù)流的數(shù)據(jù)超過在閾值塊1760的高端口處接收到的相同數(shù)據(jù)中心的數(shù)據(jù)流的經(jīng)縮放的移動平均值,則閾值模塊340生成事件。因而,圖17示出了數(shù)據(jù)流語言程序的示例,其圖示了生成作為輸入而被接收的動態(tài)改變的數(shù)據(jù)流集合和作為用于比較的閾值而被提供的動態(tài)改變的數(shù)據(jù)流集合。
圖18示出了根據(jù)實施例的流程圖,其圖示了執(zhí)行包括閾值塊的數(shù)據(jù)流語言程序的過程。閾值模塊340標識1810正在被執(zhí)行的數(shù)據(jù)流語言程序的閾值塊。閾值模塊340標識1820描述閾值塊的各種部件和參數(shù),其包括輸入端口、低閾值端口/高閾值端口、所指定的閾值窗口的大小、以及與閾值窗口相關(guān)聯(lián)的分數(shù)值(如果被指定)。在一些實施例中,低閾值和/或高閾值可以是常數(shù)值,在這種情況下,或者常數(shù)值被指定為低閾值端口/高閾值端口的輸入,或者低閾值/高閾值被指定為閾值塊的參數(shù)(而無需指定任何低閾值端口/高閾值端口)。
數(shù)據(jù)流語言處理器200執(zhí)行向輸入端口提供輸入的數(shù)據(jù)流語言程序的部分以及向低閾值端口/高閾值端口提供輸入的數(shù)據(jù)流語言程序的部分。該執(zhí)行基于針對與數(shù)據(jù)流語言程序相對應的任務指定的周期性來重復。在每個時間間隔,閾值模塊340基于數(shù)據(jù)流語言程序的周期性來執(zhí)行在輸入端口中接收的數(shù)據(jù)與在低閾值端口/高閾值端口中接收的數(shù)據(jù)的比較。如果向輸入端口(或低閾值端口或高閾值端口)提供輸入的數(shù)據(jù)流語言程序的一部分包括分組塊,則閾值塊的輸入端口接收數(shù)據(jù)流組。每個端口處的數(shù)據(jù)流的數(shù)目取決于在對應分組塊中指定的元數(shù)據(jù)屬性(或元數(shù)據(jù)屬性集合)的獨特值(假如在具有元數(shù)據(jù)屬性的獨特值的分組塊的輸入中存在至少一個數(shù)據(jù)流)。
在實施例中,數(shù)據(jù)流語言處理器200分析在輸入端口和低閾值端口/高閾值端口處提供數(shù)據(jù)的塊以標識在數(shù)據(jù)被輸入到閾值塊之前出現(xiàn)的最后分組塊。閾值模塊340使用最后分組塊來標識在每個端口處接收的數(shù)據(jù)流,例如,以將來自輸入端口的數(shù)據(jù)流與來自低閾值端口和/或高閾值端口的數(shù)據(jù)流相匹配,并且如果事件基于數(shù)據(jù)流來生成,則標識事件中的數(shù)據(jù)流。如果在閾值塊的兩個不同端口處接收的兩個數(shù)據(jù)流具有由分組塊使用的元數(shù)據(jù)屬性的相同獨特值,則閾值模塊340確定它們相匹配。例如,如果用于生成作為輸入向閾值塊的兩個端口提供的數(shù)據(jù)流的由數(shù)據(jù)流語言程序使用的分組塊基于數(shù)據(jù)中心屬性來對數(shù)據(jù)流進行分組,則通過聚合特定數(shù)據(jù)中心(如數(shù)據(jù)中心東或數(shù)據(jù)中心西)的數(shù)據(jù)而獲得的數(shù)據(jù)流被確定為相匹配。
閾值模塊340對在每個端口(即,輸入端口、低端口和高端口)處接收的每個數(shù)據(jù)流執(zhí)行以下計算。閾值模塊340將輸入端口處接收的數(shù)據(jù)值與在低閾值端口和/或高閾值端口處接收的數(shù)據(jù)值進行比較1850。如果在輸入端口處接收的數(shù)據(jù)值超過在高閾值端口處接收到的數(shù)據(jù)值或者低于在低閾值端口處接收的數(shù)據(jù)值,則閾值模塊340生成事件。所生成的事件包括基于與數(shù)據(jù)流相對應的元數(shù)據(jù)屬性的值來標識在輸入端口處接收的數(shù)據(jù)流的信息。
在實施例中,閾值塊的數(shù)據(jù)端口接收作為基于分組命令來對輸入數(shù)據(jù)流集合進行編組的結(jié)果而生成的第一多個數(shù)據(jù)流,該分組命令基于第一元數(shù)據(jù)屬性集合(例如,區(qū)域和data_center)對輸入數(shù)據(jù)流集合進行編組。閾值塊的閾值端口接收作為基于分組命令來對輸入數(shù)據(jù)流集合進行編組的結(jié)果而生成的第二多個數(shù)據(jù)流,該分組命令基于第二元數(shù)據(jù)屬性集合對輸入數(shù)據(jù)流集合進行編組。第二元數(shù)據(jù)屬性集合可以與第一元數(shù)據(jù)屬性集合相同。可替代地,第二元數(shù)據(jù)屬性集合可以與第一元數(shù)據(jù)屬性集合不同。具體地,第二元數(shù)據(jù)屬性集合可以是第一元數(shù)據(jù)屬性集合的子集。例如,如果第一元數(shù)據(jù)屬性集合包括區(qū)域和data_center,則第二元數(shù)據(jù)屬性集合僅包括區(qū)域。作為另一示例,如果第一元數(shù)據(jù)屬性集合包括區(qū)域、data_center、machine_id,則第二元數(shù)據(jù)屬性集合僅包含區(qū)域和data_center。因而,閾值輸入接收到比閾值塊的數(shù)據(jù)輸入更少的數(shù)據(jù)流。結(jié)果,在數(shù)據(jù)端口處接收的多個數(shù)據(jù)流可以與在閾值端口處接收的相同數(shù)據(jù)流進行比較。在上述示例中,數(shù)據(jù)端口接收針對每個獨特的區(qū)域、data_center、machine_id的組合的值的數(shù)據(jù)流,并且閾值端口接收針對每個獨特的區(qū)域、data_center的組合的值的數(shù)據(jù)流。因而,在數(shù)據(jù)端口處接收的與區(qū)域和data_center相對應的所有數(shù)據(jù)流與在閾值端口處接收的相同數(shù)據(jù)流進行比較,而不考慮與在數(shù)據(jù)端口處接收到的數(shù)據(jù)流相關(guān)聯(lián)的machine_id值無關(guān)。
如果閾值塊指定閾值窗口,則閾值模塊340將在所指定的閾值窗口大小的最后窗口期間在輸入端口處接收的所有數(shù)據(jù)點與在低閾值端口和/或高閾值端口處接收的數(shù)據(jù)值進行比較。如果在所標識的窗口期間出現(xiàn)的所有數(shù)據(jù)值均基于閾值位于所指定的邊界之外(即,大于高閾值或低于低閾值),則閾值塊生成事件。
如果閾值塊除了閾值窗口大小之外還指定了分數(shù)參數(shù),則閾值模塊340將在所指定的閾值窗口大小的最后窗口期間在輸入端口處接收的數(shù)據(jù)點與在低閾值端口和/或高閾值端口處接收的數(shù)據(jù)值進行比較。如果來自所標識的窗口的多于指定分數(shù)的數(shù)據(jù)點在由閾值塊指定的邊界之外,則閾值模塊340生成事件。例如,如果分數(shù)值為0.75(即,75%),則如果來自所標識的窗口的多于75%的數(shù)據(jù)點在由閾值塊指定的邊界之外,則閾值模塊340生成事件。在實施例中,如果在所標識的窗口的多于指定分數(shù)期間出現(xiàn)的數(shù)據(jù)點在由閾值塊指定的邊界之外,則閾值模塊340生成事件。例如,如果分數(shù)值為0.75(即,75%),則如果在所標識的窗口的多于75%期間出現(xiàn)的數(shù)據(jù)點在由閾值塊指定的邊界之外,則閾值模塊340生成事件。
用于數(shù)據(jù)流語言程序的定制塊
定制塊可以通過組合數(shù)據(jù)流語言的現(xiàn)有內(nèi)置塊由用戶來指定。定制塊也被稱為宏塊或定制宏塊。定義定制宏塊的能力使數(shù)據(jù)流語言可擴展。類似于內(nèi)置塊,定制塊可以包括在數(shù)據(jù)流語言程序中。定制塊可以使用其他定制宏塊,允許定制宏塊的任意嵌套。用戶可以使用定制塊指定任意抽象。定制塊以針對包括定制宏塊的數(shù)據(jù)流語言程序的任務而指定的周期性來執(zhí)行。定制塊模塊390確定用于每個時間間隔的定制宏塊的每個輸入端口的輸入值。
定制塊模塊390執(zhí)行定制宏塊的指令,并且為每個輸出端口生成數(shù)據(jù)值。來自輸出端口的輸出值可以被提供給后續(xù)塊。如果定制塊的輸入包括塊,這些塊包括分組塊,則輸入端口可以接收多個數(shù)據(jù)流作為輸入。定制塊模塊390對在輸入處接收的每個數(shù)據(jù)流的每個數(shù)據(jù)點執(zhí)行定制塊模塊390的指令。數(shù)據(jù)流的數(shù)目可以基于由包括定制宏塊的數(shù)據(jù)流語言程序接收的整體數(shù)據(jù)流集合的改變而動態(tài)改變。定制宏塊可以與在定制塊的指令中使用的一個或多個參數(shù)相關(guān)聯(lián)。定制宏塊的指令使用參數(shù)值。然而,當定制宏塊在數(shù)據(jù)流語言程序中被指定時,每個參數(shù)的特定值被提供。因而,定制塊模塊390在執(zhí)行定制宏塊的指令的同時將參數(shù)名稱替換為參數(shù)值。
圖19示出了根據(jù)實施例的數(shù)據(jù)流語言程序的示例,其圖示了使用定制塊基于應用于包括數(shù)據(jù)流組的輸入的用戶定義功能來生成結(jié)果數(shù)據(jù)流。示例定制宏塊1960組合兩個輸入數(shù)據(jù)流的數(shù)據(jù),以基于輸入數(shù)據(jù)值來生成功能。組合塊1960具有兩個輸入端口命中和未命中以及一個輸出端口out。每個輸入端口的輸入由數(shù)據(jù)流語言程序的一部分生成。
例如,輸入端口命中的輸入被生成作為統(tǒng)計塊1925的輸出,并且輸入端口未命中的輸入被生成作為統(tǒng)計塊1945的輸出。查找模塊310執(zhí)行查找塊1900以查找具有度量值cachehits的由儀器化分析系統(tǒng)100接收的所有數(shù)據(jù)流。例如,查找模塊310可以執(zhí)行查找塊1900以查找提供高速緩存命中值的從開發(fā)系統(tǒng)120接收的所有數(shù)據(jù)流。提取模塊320執(zhí)行提取塊1915以提取由查找塊1900標識的數(shù)據(jù)流的數(shù)據(jù)。編組模塊執(zhí)行分組塊1920以通過數(shù)據(jù)中心屬性對數(shù)據(jù)流進行編組。計算模塊330執(zhí)行統(tǒng)計塊1925以生成來自每個獨特數(shù)據(jù)中心的所有數(shù)據(jù)流的數(shù)據(jù)的均值,并且將該數(shù)據(jù)作為輸入提供給組合塊1960的命中端口。
類似地,查找模塊310執(zhí)行查找塊1910以查找具有度量值cachemisses的由儀器化分析系統(tǒng)100接收的所有數(shù)據(jù)流。例如,查找模塊310可以執(zhí)行查找塊1910以查找提供高速緩存未命中的值的從開發(fā)系統(tǒng)120接收的所有數(shù)據(jù)流。提取模塊320執(zhí)行提取塊1930以提取由查找塊1900標識的數(shù)據(jù)流的數(shù)據(jù)。編組模塊執(zhí)行分組塊1935以通過數(shù)據(jù)中心屬性對數(shù)據(jù)流進行編組。計算模塊330執(zhí)行統(tǒng)計塊1945以生成來自每個獨特數(shù)據(jù)中心的所有數(shù)據(jù)流的數(shù)據(jù)的均值,并且將該數(shù)據(jù)作為輸入提供給組合塊1960的命中端口。
定制塊模塊390執(zhí)行針對組合塊而指定的指令集合1910。因而,對于每個時間間隔,如果h表示在命中輸入端口處接收到的數(shù)據(jù)值并且m表示在未命中端口處接收的未命中的值,則定制塊模塊390確定h/(h+m)的值。定制塊模塊390將上述表達式的值提供給輸出端口。數(shù)據(jù)流語言處理器200將數(shù)據(jù)值從輸出端口提供給后續(xù)塊的輸入端口(如果有的話)。
圖20示出了根據(jù)實施例的流程圖,其圖示了執(zhí)行具有定制塊的數(shù)據(jù)流語言程序的過程。數(shù)據(jù)流語言處理器標識2010數(shù)據(jù)流語言程序的定制塊。定制塊模塊390標識2020定制塊的輸入端口和輸出端口。如果定制塊指定參數(shù)值,則定制塊模塊390接收要替換參數(shù)的值,并且在由定制塊指定的指令中替換它們。
定制塊模塊390針對每個時間間隔重復以下步驟。定制塊模塊390確定每個輸入端口的輸入數(shù)據(jù)值。如果生成輸入端口的輸入的數(shù)據(jù)流語言程序的一部分包括分組塊,則該端口的輸入可以包括與由分組塊生成的每個數(shù)據(jù)流相對應的多個數(shù)據(jù)值。
定制塊模塊390針對每個數(shù)據(jù)值執(zhí)行定制塊的指令。如果在每個端口處輸入多個數(shù)據(jù)流,則定制塊模塊390通過比較每個輸入端口的分組塊的元數(shù)據(jù)屬性的值來標識匹配數(shù)據(jù)流。定制塊模塊390對輸入到輸入端口的每個數(shù)據(jù)流執(zhí)行2040指令。如果輸入端口具有恒定輸入值,而另一輸入端口具有多個數(shù)據(jù)流,則定制塊模塊390將常數(shù)值應用于另一輸入端口的每個數(shù)據(jù)流。
定制塊模塊390將定制塊的指令的執(zhí)行結(jié)果的值提供給根據(jù)在定制塊的指令中指定的輸出端口。數(shù)據(jù)流語言處理器200將輸出端口處的值提供給連接至輸出端口的數(shù)據(jù)流語言程序的塊。定制塊可以在輸出端口處輸出多個數(shù)據(jù)流。例如,定制塊的輸入端口可以各自接收多個數(shù)據(jù)流,并且定制塊可以對包括來自每個輸入端口處接收的匹配數(shù)據(jù)流的值的元組執(zhí)行具體計算。
定制數(shù)據(jù)塊的指令可以包括其他定制數(shù)據(jù)塊。因而,對于每個定制塊,執(zhí)行圖20所圖示的上述過程。
用于使用數(shù)據(jù)流語言程序生成報告的用戶接口
在一些實施例中,儀器化分析系統(tǒng)100提供用戶接口,該用戶接口來為對觀看基于數(shù)據(jù)流的報告感興趣的最終用戶生成數(shù)據(jù)流語言程序。向用戶提供用戶友好的用戶接口,其隱藏數(shù)據(jù)流語言的復雜性。由儀器化分析系統(tǒng)提供的用戶接口示出了各種小部件(widget),其允許用戶采取動作,諸如選擇用于生成報告的度量、執(zhí)行匯總、編組數(shù)據(jù)流等等。
圖21示出了根據(jù)實施例的顯示數(shù)據(jù)流語言程序的執(zhí)行結(jié)果的用戶接口的屏幕截圖,其示出了由儀器化分析系統(tǒng)接收的數(shù)據(jù)流。屏幕截圖示出了幾個圖表2120,其顯示表示度量2120service.cache.hits的數(shù)據(jù)流。度量表示從在開發(fā)系統(tǒng)120上執(zhí)行的儀器化軟件接收的高速緩存命中值。該值被匯總到1秒的時間間隔。因而,在一秒鐘的每個時間間隔中接收的高速緩存命中值被相加在一起??梢源嬖趫蟾娑攘縮ervice.cache.hits的大量服務,因而顯示了大量圖表2120。圖21示出了允許用戶采取動作(例如,選擇由用戶接口報告的度量、執(zhí)行匯總)的各種小部件。
圖22示出了根據(jù)實施例的顯示數(shù)據(jù)流語言程序的執(zhí)行結(jié)果的用戶接口的屏幕截圖,其示出了由儀器化分析系統(tǒng)接收的數(shù)據(jù)流的1分鐘平均。圖22示出了允許用戶指定要對數(shù)據(jù)流執(zhí)行某些計算的小部件。特定地,圖22示出了計算用于每個數(shù)據(jù)流的一分鐘均值的小部件2220。因此,圖表2210比圖21所示的圖表更平滑。然而,圖22所示的圖表2210的數(shù)目與圖21所示的圖表2210的數(shù)目相同。
大型企業(yè)可能具有非常大量的開發(fā)系統(tǒng)120。每個開發(fā)系統(tǒng)可以執(zhí)行多個服務,每個服務報告度量。因此,圖21和圖22中所顯示的圖表的數(shù)目可能非常大。如圖23所示,用戶可以通過對數(shù)據(jù)流進行編組來獲得對由數(shù)據(jù)流報告的數(shù)據(jù)的更好了解。
圖23示出了根據(jù)實施例的顯示數(shù)據(jù)流語言程序的執(zhí)行結(jié)果的用戶接口的屏幕截圖,其示出了通過數(shù)據(jù)中心編組的數(shù)據(jù)流的總和。圖23示出了小部件2320,其允許指定基于其來編組數(shù)據(jù)流的屬性以及對每個組執(zhí)行的聚合操作。如圖23所示,用戶已經(jīng)通過數(shù)據(jù)中心請求編組,并且對每個組執(zhí)行求和操作。假設只有兩個數(shù)據(jù)中心,圖表的數(shù)目減少到兩個。每個圖表2310示出了從特定數(shù)據(jù)中心接收的數(shù)據(jù)流的數(shù)據(jù)值的總和。
圖24示出了根據(jù)實施例的顯示數(shù)據(jù)流語言程序的執(zhí)行結(jié)果的用戶接口的屏幕截圖,該數(shù)據(jù)流語言程序包括確定基于數(shù)據(jù)中心編組的數(shù)據(jù)流的高速緩存命中率與高速緩存命中率和未命中率之和的比例的定制宏塊。如圖24所示,用戶把使用小部件2430報告度量service.cache.hit的數(shù)據(jù)流稱作a。用戶還把使用小部件2440報告度量service.cache.miss的數(shù)據(jù)流稱作b。用戶把計算a/(a+b)定義為高速緩存命中相對于高速緩存命中和高速緩存未命中的總和的比例。用戶還使用小部件2450指定所計算的值a/(a+b)應當被縮放100倍?;跀?shù)據(jù)中心來對每個數(shù)據(jù)流組執(zhí)行該計算。因而,針對每個數(shù)據(jù)中心生成圖表2410,該圖表報告從數(shù)據(jù)中心接收到的所有數(shù)據(jù)流的高速緩存命中比例的實時值。
備選實施例
應當理解,本發(fā)明的附圖和描述已經(jīng)被簡化,以說明與清楚理解本發(fā)明相關(guān)的元件,同時為了清楚起見,省略了在典型系統(tǒng)中找到的很多其他元件。本領(lǐng)域普通技術(shù)人員可以認識到,在實現(xiàn)本發(fā)明中期望和/或需要其他元件和/或步驟。然而,因為這些元件和步驟在本領(lǐng)域中是眾所周知的,并且因為它們不利于更好地理解本發(fā)明,所以本文中沒有提供對這些元件和步驟的討論。本文中的公開內(nèi)容涉及對本領(lǐng)域技術(shù)人員已知的這些元件和方法的所有這樣的變化和修改。
上文描述的一些部分根據(jù)關(guān)于信息的操作的算法和符號表示來描述實施例。數(shù)據(jù)處理領(lǐng)域的技術(shù)人員通常使用這些算法描述和表示來有效地將其作品的實質(zhì)傳達給其他本領(lǐng)域技術(shù)人員。在功能上、計算上或邏輯上描述的這些操作被理解為由計算機程序或等效電路、微代碼等實現(xiàn)。此外,在不失一般性的情況下,還可以將這些操作安排稱作模塊,有時被證實是方便的。所描述的操作及其相關(guān)聯(lián)的模塊可以以軟件、固件、硬件或其任何組合來實現(xiàn)。
如本文中所使用的,對“一個實施例”或“一實施例”的任何引用意味著結(jié)合實施例描述的具體元件、特征、結(jié)構(gòu)或特點包括在至少一個實施例中。在說明書中的各個地方的短語“在一個實施例中”的出現(xiàn)不一定都是指相同的實施例。
一些實施例可以使用表達式“耦合”和“連接”以及它們的派生詞來描述。應當理解,這些術(shù)語不旨在作為彼此的同義詞。例如,一些實施例可以使用術(shù)語“連接”來描述,以指示兩個或多個元件彼此直接物理或電接觸。在另一示例中,一些實施例可以使用術(shù)語“耦合”來描述,以指示兩個或多個元件直接物理或電接觸。然而,術(shù)語“耦合”也可能意味著兩個或更多個元件彼此不直接接觸,但仍然彼此協(xié)作或相互作用。實施例在這方面不受限制。
如本文中所使用的,術(shù)語“包括(comprises)”、“包括(comprising)”、“包括(includes)”、“包括(including)”、“具有(has)”、“具有(having)”或其任何其他變型旨在涵蓋非排他性包含。例如,包括元素列表的過程、方法、物品或裝置不一定僅限于這些元素,而是可以包括未明確列出的元素或這些過程、方法、物品或裝置所固有的元素。進一步地,除非有明確的相反說明,否則“或”是指包含性或而非異或。例如,條件a或b滿足以下各項中的任一項:a為真(或存在),b為假(或不存在),a為假(或不存在),b為真(或存在),以及a和b均為真(或存在)。
另外,“一(a)”或“一個(an)”用來描述本文中的實施例的元件和部件。這只是為了方便起見,并且給出了本發(fā)明的一般意義。該描述應該被閱讀為包括一個或至少一個,并且單數(shù)也包括復數(shù),除非顯而易見的是其他的含義。在閱讀本公開之后,本領(lǐng)域技術(shù)人員應當領(lǐng)會用于通過本文中所公開的原理基于儀器化軟件來生成報告的系統(tǒng)和過程的其他附加的備選結(jié)構(gòu)設計和功能設計。因此,雖然已經(jīng)說明了并且描述了具體實施例和應用,但是應當理解,所公開的實施例不限于本文中所公開的精確構(gòu)造和部件。在不背離所附權(quán)利要求限定的精神和范圍的情況下,可以對本文中所公開的方法和裝置的布置、操作和細節(jié)進行對本領(lǐng)域技術(shù)人員而言明顯的各種修改、改變和變化。