IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ スプランク インコーポレイテッドの特許一覧

特許7437351計測手段が組み込まれたソフトウェアを分析するためのデータストリーム処理言語
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-02-14
(45)【発行日】2024-02-22
(54)【発明の名称】計測手段が組み込まれたソフトウェアを分析するためのデータストリーム処理言語
(51)【国際特許分類】
   G06F 16/903 20190101AFI20240215BHJP
   G06F 16/907 20190101ALI20240215BHJP
   G06F 11/30 20060101ALI20240215BHJP
   G06F 8/77 20180101ALI20240215BHJP
【FI】
G06F16/903
G06F16/907
G06F11/30 140G
G06F8/77
【請求項の数】 17
(21)【出願番号】P 2021085282
(22)【出願日】2021-05-20
(62)【分割の表示】P 2020004714の分割
【原出願日】2015-12-16
(65)【公開番号】P2021152908
(43)【公開日】2021-09-30
【審査請求日】2021-06-09
(31)【優先権主張番号】62/094,935
(32)【優先日】2014-12-19
(33)【優先権主張国・地域又は機関】US
(31)【優先権主張番号】14/970,454
(32)【優先日】2015-12-15
(33)【優先権主張国・地域又は機関】US
(31)【優先権主張番号】14/970,450
(32)【優先日】2015-12-15
(33)【優先権主張国・地域又は機関】US
(31)【優先権主張番号】14/970,451
(32)【優先日】2015-12-15
(33)【優先権主張国・地域又は機関】US
【前置審査】
(73)【特許権者】
【識別番号】509097518
【氏名又は名称】スプランク インコーポレイテッド
(74)【代理人】
【識別番号】110001243
【氏名又は名称】弁理士法人谷・阿部特許事務所
(72)【発明者】
【氏名】ラジェシュ ラマン
(72)【発明者】
【氏名】アリジット ムクヘルジ
(72)【発明者】
【氏名】クリス グランディ
(72)【発明者】
【氏名】フィリップ リウ
【審査官】酒井 恭信
(56)【参考文献】
【文献】特開2000-215130(JP,A)
【文献】米国特許第06301615(US,B1)
【文献】特開2004-348740(JP,A)
【文献】米国特許出願公開第2005/0125710(US,A1)
【文献】特開2008-123426(JP,A)
【文献】米国特許出願公開第2002/0138663(US,A1)
【文献】米国特許第08396886(US,B1)
【文献】米国特許出願公開第2014/0095444(US,A1)
【文献】Gedik B., et al.,SPADE: The System S Declarative Stream Processing Engine,Proc. of the 2008 ACM SIGMOD international conference on Management of data,米国,ACM,2008年,pp. 1123-1134
(58)【調査した分野】(Int.Cl.,DB名)
G06F 16/00 - 16/958
G06F 11/30 - 11/34
G06F 8/00 - 8/77
G06F 9/44 - 9/54
(57)【特許請求の範囲】
【請求項1】
動的に変化するデータストリームのセットを処理するために計測分析システムに備えられたコンピュータによって実行されるコンピュータ実施方法であって、
検索式に関連付けられた検索ブロックを少なくとも含む命令のセットを受信するステップであって、前記検索式は、複数のデータストリームを記述する属性に少なくとも部分的に基づき、前記複数のデータストリームは、計測手段が組み込まれたソフトウェアによって生成されたデータを提供する、ステップと、
前記検索ブロックに関連付けられた周期性に基づいて決定された時間間隔中に前記検索ブロックを実行して、前記複数のデータストリームから前記検索式を満たすデータストリームのセットを決定し、さらに、前記検索ブロックの実行は、前記計測分析システムで発生する特定のイベントによってトリガーされて、前記複数のデータストリームから前記検索式を満たすデータストリームのセットを決定するステップと、
前記検索ブロックの実行に基づいて決定されたデータストリームであるデータストリームのセットから、1つまたは複数の結果データ値を取り出すステップであって、前記結果データ値は複数の結果データストリームに対応する、ステップと、
ユーザインターフェースを介して前記複数の結果データストリームの表示をもたらすステップと
を含む、コンピュータ実施方法。
【請求項2】
前記命令のセットは、データストリーム全体にわたるデータのグループ化を指定するグループ化コマンドを含み、前記グループ化コマンドは、1つまたは複数の属性を識別する、請求項1に記載のコンピュータ実施方法。
【請求項3】
前記グループ化コマンドは、メタデータ属性のセットによって前記データストリームのデータをグループ化し、各結果データストリームは、前記メタデータ属性のセットの別個の値のセットに対応する、請求項2に記載のコンピュータ実施方法。
【請求項4】
前記データストリームに変更があった場合、前記検索ブロックを実行するステップをさらに含む、請求項1に記載のコンピュータ実施方法。
【請求項5】
前記結果データストリームは公開ブロックに関連付けられ、前記公開ブロックはメトリック名に関連付けられ、
前記結果データストリームごとに、
前記結果データストリームを記述する属性として前記公開ブロックの前記メトリック名を利用するステップと、
前記結果データストリームを記述するメタデータとともに、前記メトリック名に基づいて前記属性を格納するステップと
をさらに含む、請求項1に記載のコンピュータ実施方法。
【請求項6】
前記複数のデータストリームからの1つまたは複数のデータストリームは、別の命令のセットの実行の結果として取得される結果データストリームとして生成される、請求項1に記載のコンピュータ実施方法。
【請求項7】
前記複数のデータストリームを記述するメタデータは、前記データストリームの前記データとは独立して受信される、請求項1に記載のコンピュータ実施方法。
【請求項8】
動的に変化するデータストリームのセットを処理するための計測分析システムであって、
命令を格納した少なくとも1つのメモリと、
前記命令を実行するように構成された少なくとも1つのプロセッサであって、前記少なくとも1つのプロセッサは、
検索式に関連付けられた検索ブロックを少なくとも含む命令のセットを受信し、前記検索式は、複数のデータストリームを記述する属性に少なくとも部分的に基づき、前記複数のデータストリームは、計測手段が組み込まれたソフトウェアによって生成されたデータを提供し、
前記検索ブロックに関連付けられた周期性に基づいて決定された時間間隔中に前記検索ブロックを実行して、前記複数のデータストリームから前記検索式を満たすデータストリームのセットを決定し、さらに、前記検索ブロックの実行は、前記計測分析システムで発生する特定のイベントによってトリガーされて、前記複数のデータストリームから前記検索式を満たすデータストリームのセットを決定し、
前記検索ブロックの実行に基づいて決定されたデータストリームであるデータストリームのセットから、1つまたは複数の結果データ値を取り出し、前記結果データ値は複数の結果データストリームに対応し、
ユーザインターフェースを介して前記複数の結果データストリームの表示をもたら
ように構成される、少なくとも1つのプロセッサと
を備えた計測分析システム。
【請求項9】
前記命令のセットは、データストリーム全体にわたるデータのグループ化を指定するグループ化コマンドを含み、前記グループ化コマンドは1つまたは複数の属性を識別する、請求項8に記載のシステム。
【請求項10】
前記グループ化コマンドは、メタデータ属性のセットによって前記データストリームのデータをグループ化し、各結果データストリームは、前記メタデータ属性のセットの別個の値のセットに対応する、請求項9に記載のシステム。
【請求項11】
前記データストリームに変更があった場合に、前記検索ブロックが再実行される、請求項8に記載のシステム。
【請求項12】
前記結果データストリームは公開ブロックに関連付けられ、前記公開ブロックはメトリック名に関連付けられ、
結果データストリームごとに、
前記結果データストリームを記述する属性として、前記公開ブロックのメトリック名を利用し、
前記結果データストリームを記述するメタデータとともに、前記メトリック名に基づいて属性を格納する
ようにさらに構成される、請求項8に記載のシステム。
【請求項13】
複数のデータストリームからの1つまたは複数のデータストリームが、別の命令のセットの実行の結果として取得される結果データストリームとして生成される、請求項8に記載のシステム。
【請求項14】
前記複数のデータストリームを記述するメタデータは、前記データストリームのデータとは独立して受信される、請求項8に記載のシステム。
【請求項15】
格納された命令を含む非一時的なコンピュータ可読記憶媒体であって、前記命令は、計測分析システムに備えられた1つまたは複数のプロセッサによって実行されると、前記1つまたは複数のプロセッサに、
検索式に関連付けられた検索ブロックを少なくとも含む命令のセットを受信するステップであって、前記検索式は、複数のデータストリームを記述する属性に少なくとも部分的に基づき、前記複数のデータストリームは、計測手段が組み込まれたソフトウェアによって生成されたデータを提供する、ステップと、
前記検索ブロックに関連付けられた周期性に基づいて決定された時間間隔中に前記検索ブロックを実行して、前記複数のデータストリームから前記検索式を満たすデータストリームのセットを決定し、さらに、前記検索ブロックの実行は、前記計測分析システムで発生する特定のイベントによってトリガーされて、前記複数のデータストリームから前記検索式を満たすデータストリームのセットを決定するステップと、
前記検索ブロックの実行に基づいて決定されたデータストリームであるデータストリームのセットから、1つまたは複数の結果データ値を取り出すステップであって、前記結果データ値は複数の結果データストリームに対応する、ステップと、
ユーザインターフェースを介して前記複数の結果データストリームの表示をもたらすステップと
を含む、動的に変化するデータストリームのセットを処理するための動作を実行させる、非一時的なコンピュータ可読記憶媒体。
【請求項16】
前記命令のセットは、データストリーム全体にわたるデータのグループ化を指定するグループ化コマンドを含み、前記グループ化コマンドは、1つまたは複数の属性を識別する、請求項15に記載の非一時的なコンピュータ可読記憶媒体。
【請求項17】
前記グループ化コマンドは、メタデータ属性のセットによって前記データストリームのデータをグループ化し、各結果データストリームは、前記メタデータ属性のセットの別個の値のセットに対応する、請求項16に記載の非一時的なコンピュータ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、一般にはデータストリーム処理に関し、より具体的には、計測手段が組み込まれたソフトウェアから受信されたデータストリームを処理するためのデータストリーム処理言語に関する。
【背景技術】
【0002】
ソフトウェア開発者たちは、彼らがソフトウェアに計測手段を組み込むことによって開発するソフトウェアのさまざまな側面をモニタする。これらは、ソフトウェアの実行、ソフトウェアの実行中に直面されるエラー、ソフトウェアの実行中に直面される重大なイベント、コードのどの部分が実行されているか、およびどの部分が実行されていないかについて記述する情報などを含む。コードに計測手段を組み込むための従来の技術は、さまざまなタイプの情報をログファイルへ記録するか、または情報をスクリーン上に印刷する、そのコード内のステートメントを含む。この技術は、シンプルなアプリケーション、たとえば、シングルプロセッサ上で実行する実行のシンプルなフローを有するアプリケーションに適している。しかしながら、ソフトウェアに計測手段を組み込むためのこれらの技術は、複数のシステムにわたって分散されてそれぞれのシステムが実行の複数のプロセスまたはスレッドを実行する場合がある複雑なアプリケーションには適していない。
【0003】
そのような複雑なシステムに計測手段を組み込むための別の従来の技術は、コードに計測手段を組み込む際にエキスパートを使用することである。特定のベンダーは、コードの計測を支援するエキスパートサービスを提供している。しかしながら、これらのベンダーは典型的には、しばしばあまりフレキシブルではない標準的なサービスを提供している。さらに、これらのベンダーに基づくソリューションは、ベンダーによってコードに計測手段を組み込むために必要とされる時間という点で多大なオーバーヘッドを有している。したがって、これらのソリューションは、ゆっくりとした開発サイクル、たとえば、1年がかりの開発サイクルに適している。しかしながら、ソフトウェア製品に関するソフトウェア開発およびリリースサイクルは、短くなってきている。たとえば、ソフトウェア開発者たちが毎月、毎週、または毎日でさえ変更を作成してそれらを展開するいくつかのオンラインシステムがある。ベンダーに基づく計測ソリューションの多大なオーバーヘッドに起因して、開発者たちは、これらのサービスを速いペースの開発環境において使用することは困難であると感じている。
【0004】
さらに、コードに計測手段を組み込むための従来の技術は、情報を取り入れ、情報を格納し、情報を分析して、レポートを生成する際に多大な遅延をもたらす。結果として、ソフトウェアにおいて問題が生じる時点と、コードの計測を介してその問題が検知される時点との間において多大な遅延がある可能性がある。したがって、ソフトウェアの計測に基づいてレポートを生成するための従来のシステムはしばしば、複雑なアプリケーションの速いペースの開発サイクルにおいては不適切である。
【先行技術文献】
【特許文献】
【0005】
【文献】米国特許出願第14/800,677号明細書
【文献】米国特許出願第14/800,679号明細書
【発明の概要】
【0006】
計測分析システムの実施形態は、データストリーム言語において指定された命令に基づいてデータストリームを処理する。それらのデータストリームは、外部システム上で実行している計測手段が組み込まれたコードから受信される。データストリーム言語のコマンドは、ブロックとして指定される。ブロックは、特定のタイプのオペレーション(または計算、たとえば、データを取り出すこと、データを処理することなど)を実行する。ブロックは、入力ポート、出力ポート、およびパラメータを任意選択で含む。入力ポートは、外部システムから受信されること、またはその他のブロックによって生成されることが可能であるデータストリームのデータを受信する。ブロックの計算の結果は、出力としてブロックの出力ポートへ提供される。ブロックに関連付けられているパラメータが、ブロックの計算の指定において使用される。たとえば、パラメータは、データストリームを見つけ出すブロックに関する検索ストリングを指定する。データストリーム言語プログラムは、ブロックのネットワークを含み、ブロックの出力は、入力としてその他のブロックなどへ提供されることが可能である。ジョブは、データストリーム言語プログラムの実行を表す。複数のジョブが、同じデータストリーム言語プログラムに関して実行されることが可能である。ジョブは、開始時刻、停止時刻、および周期性に関連付けられている。ジョブは、開始時刻において開始され、停止時刻まで実行される。ジョブは、指定されている周期性に基づくタイムインターバルで周期的に実行される命令を含む。それぞれのタイムインターバルに関して、ジョブは、データストリームのセットからデータ値を受信し、データストリーム言語のブロックを実行して、出力データ値を生成する。その他の実施形態は、本明細書において示されている機能を、異なるシンタックスおよび異なるプログラミングパラダイムを伴って実施する。
【0007】
計測分析システムの実施形態は、データストリーム言語において指定された命令に基づいてデータストリームを処理する。それらのデータストリームは、外部システム上で実行している計測手段が組み込まれたコードから受信されるか、計測手段が組み込まれた分析システムによってデータストリーム言語プログラムの結果として生成されることが可能である。計測分析システムは、データストリームとしきい値との比較を実行するデータストリーム言語プログラムを受信する。たとえば、データストリームのデータは、低しきい値および/または高しきい値と比較されることが可能である。低/高しきい値は、一定の値または動的に変わる値であることが可能である。低/高しきい値は、データストリームを生成するデータストリーム言語プログラムによって指定されることが可能である。
【0008】
thresholdブロックは、第1の入力および第2の入力を受信するように構成されている。たとえば、第1の入力は、thresholdブロックのデータポートによって受信され、第2の入力は、thresholdブロックのしきい値ポートによって受信される。データストリーム言語プログラムの命令の第1のセットは、第1の入力を生成し、データストリーム言語プログラムの命令の第2のセットは、第2の入力を生成する。システムは、データストリームの入力セットを受信する。システムは、命令の第1のセットを実行して、データストリームの入力セットのデータをアグリゲートして、thresholdブロックの第1の入力として提供されるデータ値を含む第1の複数のデータストリームを生成する。システムは、命令の第2のセットを実行して、データストリームの入力セットのデータをアグリゲートして、thresholdブロックの第2の入力として提供されるしきい値を含む第2の複数のデータストリームを生成する。システムは、データ値としての第1の入力として受信されたデータストリームを、しきい値としての第2の入力において受信されたデータストリームとマッチさせる。第1の入力において受信されたそれぞれのデータストリームに関して、システムは、データストリームのデータ値を、第2の複数のデータストリームからの対応するデータストリームからのしきい値と比較し、データ値およびしきい値の比較の結果に基づいて、イベントを生成するかどうかを決定する。
【0009】
実施形態においては、生成されたイベントは、システムによって分析されているデータストリームにおいて検知された異常として報告される。たとえば、異常は、特定のデータストリーム、またはデータストリームのセットに基づくアグリゲート値が、thresholdブロックの低しきい値および高しきい値によって設定されている範囲を超過したということを示す場合がある。低しきい値および高しきい値は、それら自体が動的に変わることが可能であり、たとえば、低しきい値および高しきい値は、特定の入力データストリームに基づく移動平均として定義されることが可能である。
【0010】
実施形態は、データストリーム言語において指定された命令に基づいてデータストリームを処理する計測分析システムについて記述している。このシステムは、複数のデータストリームについて記述するメタデータを格納する。このシステムは、実行のためのデータストリーム言語プログラムを受信する。このデータストリーム言語プログラムは、データストリーム言語を使用して指定された命令のセットを含む。これらの命令は、受信されたデータストリームに関連付けられているメタデータ属性に基づく検索式に関連付けられているfindブロックを含む。このシステムは、検索式を評価して、検索式に適合するデータストリームのセットを識別する。このシステムは、次のステップを実行することによってデータストリーム言語プログラムを繰り返し実行する。このシステムは、データストリームの識別されたセットのそれぞれのデータストリームからデータ値を受信する。このシステムは、データストリーム言語プログラムのそれぞれのブロックを実行し、その実行に基づいて結果データ値を生成する。それらの結果値は、データストリーム言語プログラムによって生成される結果データストリームに対応する。このシステムは、1つまたは複数の結果データ値を格納する。
【0011】
実施形態においては、findブロックは、データストリーム言語プログラムの第1のブロックである。このシステムは、findブロックを繰り返し評価する。findブロックによって識別されるデータストリームのセットは、findブロックの評価ごとに変わる可能性がある。findブロックは、データストリーム言語プログラムのブロックのうちの残りの実行の割合とは異なる割合で評価されることが可能である。
【0012】
システムの実施形態は、データストリーム言語において指定された命令に基づいてデータストリームを処理する。システムは、システムによって処理されるデータストリームについて記述するメタデータを格納する。それぞれのデータストリームに関するメタデータは、そのデータストリームに関連付けられている属性を含む。たとえば、データストリームは、「databank 1」という値を有している「source」という属性、および「numCacheMisses」という値を有している「metric_name」という属性に関連付けられている場合がある。システムは、入力データストリームを処理するためにデータストリーム言語プログラムを使用して指定された命令のセットを受信する。システムは、命令のセットを実行することによって結果データストリームを生成する。たとえば、データストリーム言語プログラムは、受信されたデータストリームを特定の属性によってグループ化するための命令を含むことができ、データストリーム言語プログラムの結果は、識別されたグループの数に基づいて複数の結果データストリームを含むことができる。システムは、結果データストリームのうちのそれぞれの次のステップを実行する。システムは、結果データストリームについて記述する属性の値のセットを決定する。システムは、結果データストリームについて記述するメタデータとして値のそのセットを格納する。システムは、データストリームに関する識別子を生成して、その識別子を、データストリームについて記述するメタデータに関連付ける。システムは、結果データストリームのデータを識別子に関連付けて格納する。
【0013】
実施形態においては、データストリーム言語プログラムは、複数のgroupbyコマンドを指定する。計測分析システムは、データストリーム言語プログラムの最後のgroupbyコマンドに関連付けて指定されているメタデータ属性の値をそれぞれの結果データストリームに関連付ける。
【0014】
本明細書において記述されている特徴および利点は、すべてを網羅したものではなく、とりわけ、図面、明細書、および特許請求の範囲を考慮すれば、当技術分野における標準的な技術者にとっては、多くのさらなる特徴および利点が明らかになるであろう。その上、本明細書において使用されている言葉は、主として読みやすさおよび教示上の目的で選択されており、開示されている主題の線引きまたは画定を行うために選択されてはいない場合があるということに留意されたい。
【図面の簡単な説明】
【0015】
開示されている実施形態は、その他の利点および特徴を有しており、それらは、発明を実施するための形態、添付の特許請求の範囲、および添付の図(または図面)から、さらに容易に明らかになるであろう。図の簡単な紹介は、下記のとおりである。
図1】実施形態による、計測手段が組み込まれたソフトウェアに基づいて報告を行うための全体的なシステム環境を示す図である。
図2】実施形態による、計測手段が組み込まれたソフトウェアから受信されたデータストリームを処理するためのデータストリーム言語プログラムを実行するためのシステムのアーキテクチャーを示す図である。
図3】実施形態による、データストリーム言語プログラムのブロックを処理するためのデータストリーム言語プロセッサのアーキテクチャーを示す図である。
図4】実施形態による、データストリーム言語の特徴を示すためのデータストリーム言語プログラムの例を示す図である。
図5】実施形態による、データストリームから受信されたデータをデータストリーム言語プログラムに基づいて処理するための計測分析システムの全体的なプロセスを示す図である。
図6】実施形態による、計測手段が組み込まれたソフトウェアから受信されたデータストリームの量子化のプロセスを示す図である。
図7】実施形態による、データストリーム言語プログラムへの入力を提供するためのfindブロックによるデータストリームのセットの選択を示す図である。
図8】実施形態による、findブロックの周期的な再評価の結果としてのデータストリーム言語プログラムへの入力を提供するデータストリームのセットに対する動的な変化を示す図である。
図9】実施形態による、findブロックを使用してデータストリーム言語プログラムへの入力を提供するためのデータストリームのセットを識別するためのプロセスを示す図である。
図10】実施形態による、fetchブロックを実行することによってデータストリームからデータを取り出すプロセスを示す図である。
図11図11A~Cは、実施形態による、移動ウィンドウ計算のために時系列データストアからのデータと、データストリームからリアルタイムで受信されるデータとを組み合わせるプロセスを示す図である。
図12】実施形態による、データストリームのデータをグループ化して結果データストリームのセットを生成するためのプロセスを示す図である。
図13A】実施形態による、データストリームを、それらのデータストリームについて記述するさまざまなメタデータ属性に基づいてグループ化することを示す例示的なシナリオを示す図である。
図13B】実施形態による、データストリームを、それらのデータストリームについて記述するさまざまなメタデータ属性に基づいてグループ化することを示す例示的なシナリオを示す図である。
図14】実施形態による、時間に伴う入力データストリームにおける変化の結果としてgroupbyブロックによって生成される結果データストリームの動的な変化を示す例示的なシナリオを示す図である。
図15】実施形態による、データストリーム言語プログラムのpublishブロックを実行することによって入手される結果データストリームを発行するプロセスを示すフローチャートである。
図16】実施形態による、特定の属性によってグループ化されているデータストリームに関する固定されたしきい値を伴うthresholdブロックの使用を示すデータストリーム言語プログラムの例を示す図である。
図17】実施形態による、メタデータ属性によってグループ化されているデータストリームに関する動的に変わるしきい値を伴うthresholdブロックの使用を示すデータストリーム言語プログラムの例を示す図である。
図18】実施形態による、thresholdブロックを含むデータストリーム言語プログラムを実行するプロセスを示すフローチャートである。
図19】実施形態による、データストリームのグループを含む入力に適用されるユーザ定義関数に基づいて結果データストリームを生成するためのカスタマイズされたブロックの使用を示すデータストリーム言語プログラムの例を示す図である。
図20】実施形態による、カスタマイズされたブロックを伴うデータストリーム言語プログラムを実行するプロセスを示すフローチャートである。
図21】実施形態による、計測分析システムによって受信されたデータストリームを示すデータストリーム言語プログラムの実行の結果を表示しているユーザインターフェースのスクリーンショットを示す図である。
図22】実施形態による、計測分析システムによって受信されたデータストリームのデータの1分平均を示すデータストリーム言語プログラムの実行の結果を表示しているユーザインターフェースのスクリーンショットを示す図である。
図23】実施形態による、データセンターによってグループ化されたデータストリームの合計を示すデータストリーム言語プログラムの実行の結果を表示しているユーザインターフェースのスクリーンショットを示す図である。
図24】実施形態による、データセンターによってグループ化されたデータストリームに関する、キャッシュヒット率と、キャッシュヒット率およびミス率の合計との比率を決定するカスタマイズされたマクロブロックを含むデータストリーム言語プログラムの実行の結果を表示しているユーザインターフェースのスクリーンショットを示す図である。
【0016】
次いで、いくつかの実施形態に対して詳細に参照が行われ、それらの実施形態の例が、添付の図において示されている。実用的である場合は常に、類似のまたは同様の参照番号が、図において使用されることが可能であり、類似のまたは同様の機能を示すことができるということが留意される。それらの図は、開示されているシステム(または方法)の実施形態を、例示のみの目的で示している。本明細書において示されている構造および方法の代替実施形態が、本明細書において記述されている原理から逸脱することなく採用されることが可能であるということを、当業者なら、以降の説明から容易に認識するであろう。
【発明を実施するための形態】
【0017】
全体的なシステム環境
図1は、実施形態による、計測手段が組み込まれたソフトウェアに基づいて報告を行うための全体的なシステム環境を示している。この全体的なシステム環境は、計測分析システム100、1つまたは複数の開発システム120、管理システム160、および報告システム150を含む。その他の実施形態においては、図1において示されているよりも多くのコンポーネントまたは少ないコンポーネントが使用されることが可能である。たとえば、開発システム120、管理システム160、および報告システム150は、ネットワーク(図1においては示されていない)を介して計測分析システム100と対話することができる。さらに、図1において示されているそれぞれのシステムのさらに多くのインスタンスまたはさらに少ないインスタンスが存在することが可能であり、たとえば、複数の報告システム150が存在することが可能である。
【0018】
図1およびその他の図は、同様の参照番号を使用して、同様の要素を識別している。参照番号の後の文字、たとえば「130a」は、そのテキストが、その特定の参照番号を有している要素を特に指しているということを示している。テキストにおいて後続の文字を伴わない参照番号、たとえば「130」は、図においてその参照番号を有している要素のうちのいずれかまたはすべてを指す(たとえば、テキストにおける「130」は、図における参照番号「130a」および/または「130b」を指す)。
【0019】
計測分析システム100は、別々の開発システム120によって送信されたメトリックの値を含むデータを受信する(計測分析システム100は、本明細書においては分析システムまたはデータ分析システムと呼ばれる場合もある)。開発システム120は、計測手段が組み込まれたソフトウェア、たとえば、アプリケーション130を実行する。アプリケーション130は、計測手段が組み込まれたソフトウェアの例として図1において示されているが、本明細書において開示されている技術は、アプリケーションソフトウェアに限定されず、その他の種類のソフトウェア、たとえば、サーバソフトウェアや、クライアントデバイス、ウェブサイトなどの上で実行するソフトウェアに適用可能である。さらに、開発システム120は、計測手段が組み込まれたソフトウェアを、それが新たなソフトウェアの開発のために使用されるか否かを問わずに実行するように構成されている任意のコンピューティングシステムを含む。たとえば、開発システム120は、テストの目的、ステージングの目的、または、企業において実行する任意のプロダクションシステムのために使用されるコンピューティングシステムであることが可能である。
【0020】
開発システム120上で実行するソフトウェアは、ソフトウェアに計測手段を組み込んだ結果として生成された情報を計測分析システム100へ送信するように構成されている。たとえば、アプリケーション130は、さまざまなメトリックに対応する値を、それらが生成された際に計測分析システム100へ送信することができる。アプリケーション130は、メトリックのグループ値を送信すること、およびそれらを周期的に計測分析システム100へ送信することが可能である。別々のアプリケーション130は、同じメトリックを、または別々の割合で別々のメトリックを送信することができる。同じアプリケーションは、別々の割合で別々のメトリックを送信することができる。アプリケーション130は、計測分析システム100によってサポートされているアプリケーションプログラミングインターフェース(API)を呼び出すことによって、計測分析システム100へデータを送信する。
【0021】
ソフトウェアプログラムは、アプリケーションにカウンタまたはゲージを加えるように計測手段が組み込まれることが可能である。カウンタは、ソフトウェアにおける特定のイベントの発生時にインクリメントされる値を格納する命令を含む。カウンタは、コードの特定の部分、たとえば、関数またはメソッド、条件付きコードの特定の分岐、例外、ループなどが実行される回数を決定するために使用されることが可能である。
【0022】
典型的には、カウンタ値は単調に変わり、たとえば、カウンタ値は単調に増大(または減少)することが可能である。たとえば、システムが実行を開始して以降にイベントが発生した回数をカウンタが追跡把握する場合には、カウンタ値は、イベントの発生がシステムによって検知されるたびに増大する。カウンタの値どうしが比較されて、2つの異なる時点における特定のカウンタ値の変化を決定することが可能である。たとえば、時刻t1とt2との間におけるタイムインターバル内に特定のイベントが発生する回数は、対応するカウンタ値におけるt1からt2への変化を計算することによって決定されることが可能である。カウンタの現在の値を計測分析システム100へ送信するために、アプリケーション130によって計測分析システムのAPIが呼び出されることが可能である。
【0023】
下記は、アプリケーション130の計測手段が組み込まれたコードの例である。計測手段が組み込まれているコード内に含まれている下記の命令は、アクションまたはエンティティーのカウントを追跡把握するためのカウンタオブジェクトを作成する。
counter 1=createCounter(source=“web 1”, metric=“metric 1”);
【0024】
上記の命令は、カウンタオブジェクトを作成し、それを変数counter 1に割り振る。そのカウンタオブジェクトは、ソース「web 1」およびメトリック「metric 1」に関連付けられている。実施形態においては、ソースおよびメトリック値は、カウンタ(またはゲージ)に関連付けられているデータストリームを一意に識別する。その他の実施形態においては、データストリームを一意に識別するために、より多くのまたはより少ないキー値ペアが使用されることが可能である。
【0025】
カウンタの作成中に指定された値のうちの1つまたは複数は、そのカウンタに対応するデータが、計測手段が組み込まれたコードによって計測分析システム100へ送信されたときに受信される。実施形態は、それぞれのデータストリームとともに送信される情報の量を削減するためにアプリケーション130に計測手段が組み込まれることを可能にする。これは、コードに計測手段を組み込んだ結果としてアプリケーション130においてもたらされるオーバーヘッドの量を削減する。
【0026】
アプリケーション130の計測手段が組み込まれたコードは、そのコード内のさまざまな場所でカウンタ値を更新するための命令を含むことができる。たとえば、counter 1というカウンタは、「counter 1 .increment()」という命令を実行することによってインクリメントされることが可能である。カウンタは、コードに関連付けられているさまざまなアクションまたはエンティティーを追跡把握するためにインクリメントされることが可能である。たとえば、カウンタは、特定の関数またはメソッドがコールされたときは常にインクリメントされることが可能であり、カウンタは、条件式の特定の分岐が実行されたときは常にインクリメントされることが可能であり、カウンタは、特定のタイプのオブジェクトが、たとえば、オブジェクトのコンストラクタにおいて作成されたときは常にインクリメントされることが可能である。カウンタのインクリメント命令は、条件付きで、たとえば、関数がパラメータの特定の組合せとともに呼び出された場合にコールされることが可能である。アプリケーション130は、計測分析システム100のAPIを呼び出すことによってカウンタ値を計測分析システム100へ通信する。
【0027】
ゲージは、アプリケーション130の特定のランタイム特徴、たとえば、ヒープサイズ、キャッシュミスまたはヒットの数、使用されているアクティブメモリ、CPU(中央処理装置)利用状況、要求に応答するためにかかる合計時間、サービスに接続するためにかかる時間などを測定するための命令を含む。ゲージは、特定のアプリケーション固有パラメータまたはビジネス関連の値、たとえば、トランザクションの数、ユーザの数などを追跡把握するために使用されることも可能である。ゲージは、構成可能であるインターバルに基づいて周期的に呼び出されることが可能である。ゲージの値は、計測分析システム100へ周期的に送信される。
【0028】
管理システム160は、特権を有するユーザ、たとえば、システム管理者がデータストリームをメタデータに関連付けることを可能にする。管理システム160は、システム管理者がメタデータを指定するためのユーザインターフェースを提供する管理アプリケーション170を含む。メタデータは、プロパティー、たとえば名前/値ペアを含む。計測分析システム100は、データストリームについて記述するメタデータを受信し、そのメタデータを格納する。データストリームについて記述するメタデータを、それぞれのデータストリームから受信されるデータから独立して指定できることは、データストリームに基づいてレポートを生成する際にいくつかの利点を提供する。
【0029】
例として、計測分析システム100は、それぞれのデータストリームについて記述するメタデータに対する修正を、アプリケーション130の計測手段が組み込まれたソフトウェアに対するいかなる修正も必要とせずに受信することができる。結果として、計測分析システム100は、新たなレポートの仕様および既存のレポートに対する修正を受信し、開発者がアプリケーション130を修正することを必要とすることなく、新たなレポート/修正されたレポートに基づく結果を生成する。
【0030】
これは、ソフトウェアに計測手段を組み込むための新たなパラダイムを提供する。なぜなら、開発者は、ソフトウェアに計測手段を組み込むための命令を加えている間に生成される必要があるレポートのタイプを考慮する必要がないからである。開発者は、自分のソフトウェアに単に計測手段を組み込んで、生データを生成し、それらの生データは、生成されるレポートにおいてさまざまな方法で組み合わされることが可能である。ソフトウェアの計測に基づいてリアルタイムの報告を行うためのシステムおよび方法は、2015年7月15日に出願された特許文献1において記述されており、この特許文献1は、その全体が参照によって本明細書に組み込まれている。
【0031】
さらに、計測手段が組み込まれたソフトウェアを生成することにおけるエキスパートである人は、ソフトウェア開発者とは異なることがある。たとえば、開発者ではないデータ分析におけるエキスパートは、開発プロセスに巻き込まれることなく、データストリームに関するメタデータを定義し、レポートを生成することができる。これは重要である。なぜなら、データを分析するために必要とされるスキルは、典型的には、ソフトウェアを開発するために必要とされるスキルとは異なるからである。
【0032】
さらに、計測分析システム100は、既存のレポートを合成して新たなアナリティクス機能を加えることによって既存のレポートの上に構築されたレポートを受信して処理することもできる。計測分析システム100は、新たなレポートの結果を生成し、それらの結果を、計測手段が組み込まれたソフトウェアからのデータストリームを計測分析システム100が受信した際にリアルタイムで提示するために送信する。計測分析システム100は、アプリケーション130の計測手段が組み込まれたコードに対するいかなる修正も必要とすることなく、これらのさらなるレポートを生成し、既存のレポートを修正する。
【0033】
さらに、計測分析システム100は、データストリームについて記述するメタデータと、データストリームのデータとの分離を提供する。したがって、開発システム120から計測分析システム100へ伝送される必要があるデータの量が削減される。それぞれのアプリケーション130は、メトリックのデータ値、およびメトリックを識別する情報のみを伝送する。メタデータ情報は、データストリームのデータソースから独立したソースから別個に受信される。したがって、それぞれのデータストリームのデータの量を増大させることなく、いかなる量のメタデータも導入されることが可能である。
【0034】
報告システム150は、クライアントデバイスであることが可能である。報告システム150は、ユーザが計測分析システム100と対話することを可能にするクライアントアプリケーション140を含む。実施形態においては、クライアントアプリケーション140は、インターネットブラウザであり、このインターネットブラウザは、計測分析システム100にアクセスするためのクライアント側コード(たとえば、Javaスクリプト)を含むことができる。その他の実施形態においては、クライアントアプリケーション140は、計測分析システム100と対話するために開発されたプロプライエタリアプリケーションである。
【0035】
報告システム150は、従来のコンピュータシステム(たとえば、デスクトップコンピュータもしくはラップトップコンピュータ)、タブレット、またはコンピュータ機能を有するデバイス、たとえば、携帯情報端末(PDA)、モバイル電話、スマートフォン、または別の適切なデバイスであることが可能である。報告システム150は、ネットワークを介して計測分析システム100と対話する。そのネットワークは、有線通信システムおよび/またはワイヤレス通信システムの両方を使用する、ローカルエリアネットワークおよび/またはワイドエリアネットワークの任意の組合せを含むことができる。一実施形態においては、そのネットワークは、標準的な通信テクノロジーおよび/またはプロトコルを使用する。
【0036】
計測分析システム100は、1つまたは複数のプロセッサと、メモリと、セカンダリーストレージと、入力/出力コントローラとを含むコンピューティングシステム上でホストされることが可能である。計測分析システム100をホストするために使用されるコンピューティングシステムは典型的に、たとえば、報告システム150として使用される典型的なコンピューティングシステムと比較して、強力なプロセッサ、大きなメモリ、および高速の入力/出力システムを使用するサーバクラスシステムである。
【0037】
実施形態においては、いくつかの開発システム120からのデータが、たとえば、サーバによって統合されることが可能であり、組み合わされたデータは、計測分析システム100へ送信されることが可能である。たとえば、企業は、内部で別々の開発システム120からデータストリームを受信して組み合わされたデータをバッチ形態で計測分析システム100へ周期的に送信するサーバをインストールすることができる。これは、企業からの外部通信の効率性を可能にする。しかしながら、この構成は、計測分析システム100へ情報を通信する際の遅延と、報告システム150によってデータを報告する際の対応する遅延とをもたらす場合がある。
【0038】
次元をデータストリームに関連付けること
データストリームは、データストリームに関連付けられている次元の値を表す座標のセットを使用することによって識別されることが可能である。次元とは、値のセットの1つの値を取ることができるデータストリームのプロパティーを指す。それぞれのデータストリームは、次元に関する値に関連付けられることが可能である。たとえば、次元は、データストリームのソース、またはデータストリームに関連付けられているメトリック名であることが可能である。データストリームのソースは、サーバ名、サービス名などによって識別されることが可能である。メトリック名の例は、cpu(中央処理装置)負荷、キャッシュミス、キャッシュヒットなどである。次元の値は、データストリームの座標値とも呼ばれる。座標値は、メタデータストア230において格納されているメタデータ属性として表されることが可能である。ソースおよびメトリックという2つの次元を与えられると、ソースおよびメトリックを表す2つの座標、たとえば、(server 1, cpu_load)または(server2, memory_usage)を提供することによって、データストリームが識別されることが可能である。
【0039】
データストリームは、複数の次元(すなわち、上述の2つの次元、すなわち、ソースおよびメトリック名よりも多く)によって特徴付けられることが可能である。たとえば、それぞれのサーバが複数のCPUを有している場合には、cpu_idという次元が含まれることが可能である。したがって、システムから入手されるそれぞれのデータストリームは、(source_id, cpu_id, metric_name)、すなわち、ソース識別子、cpu識別子、およびメトリックを表す名前によって特徴付けられることが可能である。3つの座標を使用して識別されるデータストリームの例は、(server 1, cpu 1, load)、(server 1, cpu2, load)、(server2, cpu 1, load)、(server2, cpu2, load)などを含む。
【0040】
次元の別の例として、システムは、顧客名を次元として定義することができる。顧客の名前は、計測手段が組み込まれたソフトウェアによって、たとえば、開発システム120上で実行する計測手段が組み込まれたソフトウェアの構成パラメータに基づいて報告されることが可能である。顧客名は、システムプロパティーを使用して、計測手段が組み込まれたソフトウェアに関して指定されることが可能である。計測手段が組み込まれたソフトウェアは、顧客名が、その特定の顧客に関連付けられているデータストリームを識別する場合には、それを含める。データストリームを顧客に関連付けることができることは、計測分析システムが、顧客に固有の分析を実行すること、たとえば、それぞれの顧客に関するシステムの使用について報告すること、しきい値数よりも多くのエラーを報告する顧客を識別することなどを可能にする。
【0041】
データストリームは、計測手段が組み込まれたソフトウェアから入手されることが可能であり、または計測分析システム内のデータストリーム言語プログラムのブロックの実行の結果として生成されることが可能である。データストリームは、計測分析システムにおいて、たとえば、データストア(本明細書において記述されている時系列データストア260など)において格納されているデータを含むこともできる。
【0042】
計測分析システムのシステムアーキテクチャー
図2は、実施形態による、計測手段が組み込まれたソフトウェアから受信されたデータストリームを処理するためのデータストリーム言語プログラムを実行するためのシステムのアーキテクチャーを示している。計測分析システム100は、インターフェースモジュール210、量子化モジュール240、メタデータモジュール220、メタデータストア230、データポイントルーティングモジュール250、アナリティクスエンジン270、ユーザインターフェースマネージャー280、データストリーム言語プロセッサ200、時系列データストア260、およびソフトウェアバス290を含む。その他の実施形態においては、計測分析システム100は、本明細書において記述されていないその他のモジュールを含むことができる。特定のモジュールによって提供されるものとして示されている機能は、代わりにその他のモジュールによって実施されることが可能である。
【0043】
インターフェースモジュール210は、計測分析システム100と通信する外部システム、たとえば、開発システム120からの要求を受信する。インターフェースモジュール210は、外部システムが呼び出すことができるさまざまなアプリケーションプログラミングインターフェース(API)をサポートする。インターフェースモジュール210は、さまざまなベンダーによって提供される機能を使用して計測手段が組み込まれるアプリケーション130によって提供されるデータを、計測手段が組み込まれたコードが、インターフェースモジュール210によって処理されることが可能であるフォーマットで情報を送信する限り、受信して処理することができる。
【0044】
インターフェースモジュール210は、1つまたは複数の開発システム120からデータストリームの形態でデータを受信する。実施形態においては、インターフェースモジュール210は、データを受信し、着信データをタプルとして表す。したがって、それぞれのデータストリームは、複数のタプルとして表され、それぞれのタプルは、データポイントを表す。インターフェースモジュール210によって受信されるデータのタプルは、さまざまな要素を含む。データのタプルは、メトリック識別子、たとえば、そのタプルに対応するメトリックの名前、およびメトリックの値を含む。受信されるデータのタプルは、その他の要素、たとえば、そのデータを送信しているアプリケーション130によってそのデータが取り込まれた時刻に対応するタイムスタンプ、そのデータに関連付けられている1つまたは複数のプロパティーをさらに含むことができる。
【0045】
実施形態においては、タプルに関連付けられているタイムスタンプは、データ値が計測分析システム100によって受信された時刻を表す。データに関連付けられているプロパティーは、名前/値ペアの形態で提供されることが可能である。これらのプロパティーは、受信されたデータについて記述するさらなる情報、たとえば、ソースに関連付けられているホスト名、サーバ名、デバイス名、またはサービス名、データに関連付けられているメソッド名または関数名、アプリケーションインスタンス識別子等など、データのソースについて記述する情報を提供することができる。
【0046】
実施形態においては、インターフェースモジュール210は、インターフェースモジュール210によって受信されたレコードに対して識別子を生成して割り振る。その識別子は、本明細書においては時系列識別子と呼ばれる(本明細書においてはTSIDまたはtsidとも呼ばれる)。メトリック名にマッチするすべてのタプル、およびタプルとともに受信されたプロパティーのセットに対して、一意の時系列識別子が割り振られる。したがって、タプル(メトリック名、プロパティー、メトリック値、タイムスタンプ)が、タプル(tsid、メトリック値、タイムスタンプ)にマップされる。たとえば、mlというメトリック名、およびhiというホスト名をタプルが提供する場合には、mlというメトリック名およびhiというホスト名を伴うすべてのタプルが、同じ時系列識別子を割り振られる。したがって、tsidは、計測分析システム100によって受信されるデータストリームのすべてのタプルを一意に識別する。
【0047】
量子化モジュール240は、受信されたデータ値を処理して、任意のタイムインターバルでデータが利用可能であるデータの入力時系列を、規則的なタイムインターバルでデータが利用可能である時系列に変換する。たとえば、入力時系列で受信されるデータ値は、不規則なインターバルで発生する場合があるが、量子化モジュール240は、その時系列のデータを処理して、周期的に、たとえば、1秒ごとに、または5秒ごとに、または15秒ごとに、といった具合にデータが発生する時系列を生成する。このプロセスは、本明細書においては時系列の量子化と呼ばれる。実施形態においては、インターフェースモジュール210は、複数のスレッドまたはプロセスを作成し、それぞれのスレッドまたはプロセスは、データストリームに対応するデータを受信するように構成されている。それぞれのスレッドまたはプロセスは、それぞれのタイムインターバルに関してそれぞれのデータストリームについて受信されたデータの量子化を実行するために量子化モジュール240を呼び出す。計測手段が組み込まれたソフトウェアのデータストリームの量子化のためのシステムおよび方法は、2015年7月15日に出願された特許文献2において記述されており、この特許文献2は、その全体が参照によって本明細書に組み込まれている。
【0048】
メタデータモジュール220は、開発システム120から受信されたさまざまなデータストリームについて記述するメタデータ情報を受信して格納する。実施形態においては、メタデータモジュール220において格納されるメタデータは、ユーザ、たとえば、管理システム160を使用して計測分析システム100と対話するシステム管理者から受信される。
【0049】
メタデータは、名前/値ペアとして表されることが可能である。実施形態においては、メタデータは、メタデータオブジェクトとして表され、それぞれのオブジェクトは、名前/値ペアとして表されることが可能であるプロパティーのセットを定義する。データストリームのセットが、メタデータオブジェクトに関連付けられることが可能である。したがって、メタデータオブジェクトによって表されるすべてのプロパティーは、そのメタデータオブジェクトに関連付けられているそれぞれのデータストリームに関連付けられている。
【0050】
メタデータデータストア230は、メタデータオブジェクト、およびそれらのメタデータオブジェクトとデータストリームとの関連付けを格納する。メタデータデータストア230は、それぞれのメタデータオブジェクトに関する識別子(ID)と、そのメタデータオブジェクトによって表されるプロパティーとを格納する。実施形態においては、それぞれのデータストリームは、そのデータストリームを一意に識別する時系列識別子に関連付けられている。メタデータデータストア230は、それぞれのメタデータオブジェクトを時系列識別子の値のセットにマップするインデックスを格納する。メタデータストア230は、メタデータオブジェクトを修正するための命令を受信することができる。たとえば、メタデータストア230は、メタデータオブジェクトによって表されるいくつかのプロパティーを修正、追加、または削除するための命令を受信することができる。あるいは、メタデータストア230は、メタデータオブジェクトからデータストリームへのマッピングを修正するための命令を受信することができる。たとえば、メタデータストア230は、データストリームをメタデータオブジェクトに関連付けるための命令、またはメタデータオブジェクトとデータストリームとの間における関連付けを削除するための命令を受信することができる。
【0051】
実施形態においては、メタデータストア230は、リレーショナルデータベースとして表されているが、その他の任意のタイプのデータベースまたはデータストアとして表されることが可能である。たとえば、メタデータストア230は、メタデータオブジェクトIDを、データストリームを識別する時系列IDにマップするテーブルを格納するリレーショナルデータベースであることが可能である。その他のデータベーステーブルは、それぞれのメタデータオブジェクトに関連付けられているプロパティーを、メタデータオブジェクトIDから、名前/値ペアとして表されるそれぞれのプロパティーへのマッピングとして格納することができる。
【0052】
ユーザインターフェースマネージャー280は、ユーザがデータストリーム言語プログラムのパラメータを指定すること、およびデータストリーム言語プログラムの実行の結果を提示することを可能にするためのユーザインターフェースをレンダリングする。ユーザインターフェースマネージャー280は、データストリーム言語プログラムのリアルタイムの結果を、データストリームのデータが受信されるにつれて周期的に更新される1つまたは複数のチャートとして表示することができる。ユーザインターフェースマネージャー280はまた、ユーザがデータストリーム言語プログラムをテキストによってではなく視覚的に指定することを可能にするユーザインターフェースを提示する。ユーザインターフェースマネージャー280によって提示されるユーザインターフェースのスクリーンショットの例が、本明細書において記述されている。
【0053】
時系列データストア260は、さまざまなソース、たとえば、開発システム120から受信されたデータを格納する。時系列データストア260は、本明細書においては時系列データベース(またはTSDB)とも呼ばれる。実施形態においては、時系列データストア260はまた、データが量子化された後の時系列データを格納する。時系列データストア260は、それぞれの時系列に関するロールアップデータを格納することもできる。時系列データストア260はまた、さまざまなアナリティクス要求の結果、たとえば、ユーザによって要求されたさまざまなレポートの結果を格納する。アナリティクスエンジン270は、特定のレポートに関する結果、たとえば、時系列データストア260において格納されているデータを、さまざまなソースからのデータストリームとして入手された新たなデータと組み合わせることによる時間のインターバルにわたる移動平均を計算する。
【0054】
ソフトウェアバス290は、計測分析システム100のモジュールが、データストリームのデータを計測分析システム100のその他のモジュールに提供するためのメカニズムを提供する。データストリーム言語プログラムは、データストリームをソフトウェアバス290へ送信することができる。その他のモジュール、たとえば、フェッチモジュール320、探索モジュール310、ウィンドウモジュール380などは、ソフトウェアバス290からのデータを読み取って、そのデータ上でさらなる処理を実行することができる。たとえば、ソフトウェアバス290上で発行されたデータストリーム言語プログラムのデータストリーム出力は、ジョブとして実行する別のデータストリーム言語プログラムのfindブロックによって識別されることが可能である。
【0055】
データストリーム言語プロセッサ200は、データストリーム言語を使用して指定されたプログラムを実行する。データストリーム言語プロセッサ200は、データストリーム言語プログラムを受信し、そのデータストリーム言語プログラムを解析して、そのプログラムを検証する。データストリーム言語プロセッサ200は、データストリーム言語プログラムの表示を生成し、その表示を使用してデータストリーム言語プログラムを実行する。
【0056】
データストリーム言語を使用して指定される要求は、さまざまな開発システム120から受信されるデータに関連付けられているメタデータに基づくクエリーである。データストリーム言語は、さまざまなタイプのアナリティック機能、たとえば、アグリゲーションおよび変換をサポートする。データストリーム言語は、アグリゲーションおよび変換を含むさまざまな機能をさまざまな方法で合成する能力を提供する。実施形態においては、データストリーム言語プロセッサ200は、データストリーム言語を使用して指定されたプログラムを解析し、そのプログラムの実行可能な表示を生成し、その生成された表示を実行する。
【0057】
データストリーム言語
データストリーム言語を使用して指定されるプログラムは、ブロックと呼ばれる計算の単位を含む。それぞれのブロックは、データブロックによって実行される特定の処理または計算に関連付けられている。それぞれのブロックは、1つまたは複数の入力ポートおよび1つまたは複数の出力ポートを有することもできる。ブロックは、入力ポートを介して入力を受信し、そのデータを使用して特定の計算を実行し、その計算の結果を出力ポートへ送信する。このプロセスは、事前に指定された周期性で繰り返される。したがって、入力ポートは、データをブロックに提供するためのメカニズムの役割を果たし、出力ポートは、ブロックのデータを出力するためのメカニズムの役割を果たす。
【0058】
実施形態においては、それぞれのブロックは、そのブロックのタイプに関連付けられている。ブロックのタイプは、そのブロックによって実行される計算を決定する。データストリーム言語によってサポートされるブロックのタイプは、findブロック、fetchブロック、統計計算ブロック、thresholdブロックなどを含む。ブロックは、特定の構成パラメータに関連付けられることが可能である。たとえば、findブロックは、入力としての表現を取ることができる。データストリーム言語プログラムは、ブロックのタイプのインスタンスを含む。たとえば、特定の検索式を伴うfindブロックは、データストリーム言語プログラム内に含まれているfindブロックのインスタンスである。
【0059】
実施形態においては、ブロックの入力ポートは、「?」という文字で識別され、出力ポートは、「!」という文字で識別される。その他の実施形態は、その他のシンタックスを使用して入力/出力ポートを識別することができる。たとえば、ブロックBlが入力ポートin1およびin2を有している場合には、特定の入力ポート(たとえばin2)は、「B1?in2」として識別されることが可能である。同様に、ブロックB1が出力ポートout1およびout2を有している場合には、特定の出力ポート(たとえばout2)は、「B2!out2」として指定されることが可能である。ブロックが単一の入力/出力ポートを有している場合には、データストリーム言語プログラムは、そのポートを識別することができない。たとえば、ブロックB2が単一の入力ポートを有している場合には、その入力ポートは、「B2」と呼ばれることが可能である。同様に、ブロックB2が単一の出力ポートを有している場合には、その出力ポートは、「B2」と呼ばれることが可能である。
【0060】
2つのブロックは、一方のブロックの出力が他方のブロックの入力として提供されるということを指定することによって接続されることが可能である。したがって、データストリーム言語プログラムは、ブロックのネットワークとみなされることが可能である。実施形態においては、2つのブロックの間における接続は、それらの2つのブロックの間における矢印を使用して指定される。たとえば、B1およびB2の両方が、単一の入力ポートおよび単一の入力ポートを有している場合には、「B1→B2」は、B1の出力がブロックB2の入力として提供されるということを指定する。同様に、B1が、2つの出力ポートout1およびout2を有していて、B2が、2つの入力ポートi1およびin2を有している場合には、「B1!out1→B2?in2」という表現によって、B1のout1ポートがB2のin2ポートに接続されることが可能である。
【0061】
データストリーム言語プロセッサ200は、データストリーム言語プログラムに基づいて複数のジョブを実行することができる。それぞれのジョブは、開始時刻、終了時刻、および周期性に関連付けられることが可能である。したがって、ジョブは、周期性によって指定されたインターバルで開始時刻から終了時刻まで実行される。周期性は、データがデータストリーム言語プログラムによって処理される割合を指定する。ユーザは、同じデータストリーム言語プログラムに基づいて実行のための別々のジョブを指定することができ、それぞれのジョブは、別々の開始時刻、終了時刻、および周期性に関連付けられている。
【0062】
図3は、実施形態による、データストリーム言語プログラムのブロックを処理するためのデータストリーム言語プロセッサのアーキテクチャーを示している。図3において示されているように、データストリーム言語プロセッサ200は、データストリーム言語のさまざまなタイプのブロックを処理するためのモジュールを含む。したがって、データストリーム言語プロセッサ200は、探索モジュール310、フェッチモジュール320、計算モジュール330、しきい値モジュール340、発行モジュール350、グループ化モジュール360、ウィンドウモジュール380、データストリームメタデータジェネレータ370、およびカスタマイズドブロックモジュール390を含む。その他の実施形態は、図3において示されているモジュールよりも多くのモジュールまたは少ないモジュールを含むことができる。特定のモジュール、たとえばパーサは、図3においては示されていない。それぞれのモジュールの詳細は、それぞれのモジュールによって処理されるブロックのタイプの詳細とともに本明細書においてさらに記述されている。
【0063】
探索モジュール310は、データストリーム言語プログラムの残りによって処理するためのデータストリームのセットを識別するためにfindブロックを実行する。フェッチモジュール320は、識別されたデータストリームからデータをフェッチし、そのデータを、データストリーム言語プログラムの後続のブロックによって処理するために提供する。計算モジュール330は、データストリーム言語プログラムにおいて指定されている統計計算、たとえば、平均、メジアン、合計などを実行する。しきい値モジュール340は、着信データストリームのデータをしきい値と比較して、その着信データが特定の範囲を超過しているかどうかを決定する。比較のために指定されるしきい値は、動的に変わることが可能であり、たとえば、しきい値は、特定の係数によって拡大された入力データストリームの1時間移動平均として指定されることが可能である。発行モジュール350は、publishブロックを実行し、このpublishブロックは、このpublishブロックに先立つブロックの出力を、結果を提示するために、データベースにおいて格納するために、またはさらなる処理のためにその他のブロックに提供するために、ユーザインターフェース(たとえば、ダッシュボード)を含むさまざまな受信機に提供する。グループ化モジュール360は、入力データストリームのデータのグループ化を実行して、それぞれのグループに対応する結果データストリームのセットを生成する。それらのグループは、グループ化コマンドを用いて指定された1つまたは複数の属性、たとえば、それぞれのデータセンターからのデータストリームのグループに基づくことが可能である。データストリームメタデータジェネレータ370は、データストリーム言語プログラムを実行した結果として生成された結果データストリームを表すメタデータを生成し、計測分析システム100のその他のコンポーネントがその結果データストリームを使用することを可能にするためにそのメタデータをメタデータストア230において格納する。カスタマイズドブロックモジュール390は、ユーザによって定義されたブロック(カスタマイズされたブロック)をデータストリーム言語プログラムにおいて処理する。
【0064】
例示的なデータストリーム言語プログラム
図4は、実施形態による、データストリーム言語の特徴を示すためのデータストリーム言語プログラムの例を示している。図4は、データストリーム言語プログラムをブロックという点から表している。図4において示されているデータストリーム言語プログラムは、下記のように指定されることが可能である。
find(“source:analytics*”)→fetch
→groupby(“datacenter”)
→stats!mean
→publish
【0065】
上述のデータストリーム言語プログラムの第1のブロックは、検索式を指定するストリングパラメータを取るfindブロック410である。findブロックは、検索式を満たす、計測分析システム100によって受信されたデータストリームのセットを見つけ出す。たとえば、findブロック410は、「dev」というメタデータ属性値の「source」となるすべてのデータストリームを識別する検索式“source:dev”を取る。たとえば、企業が、すべての開発システムを「dev」というソース値に関連付ける場合がある。findブロックの出力は、入力としてfetchブロック420へ提供される。
【0066】
fetchブロック420は、findブロックによって識別されたデータストリームからデータを取り出す。fetchブロックは、事前に指定された周期性でデータを受信する。fetchブロックは、インターフェースモジュール210によって受信されて量子化モジュール240によって量子化されたデータストリームのリアルタイムデータを受信することができる。fetchブロック420は、時系列データストア260において格納されているデータストリームのデータを受信することもできる。fetchブロック420の出力は、入力としてgroupbyブロック430へ提供される。
【0067】
groupbyブロック430は、入力としてデータストリームの1つまたは複数の属性の名前を取る。groupbyブロック430は、指定された属性によってデータストリームをグループ化する。上述の例において示されているように、groupbyブロック430は、入力として「datacenter」という属性を取り、データストリームをそれらのデータセンター値によってグループ化する。したがって、同じデータセンターを有しているすべてのデータストリームのデータは、ともにグループ化される。groupbyブロック430は、データセンターのそれぞれの値に対応するデータストリームを出力する。groupbyブロック430の出力は、入力としてstatsブロック440(これは、統計計算ブロックのタイプである)へ提供される。
【0068】
statsブロック440は、複数の出力、たとえば、平均、メジアン、合計などを有する。それぞれの出力ポートは、出力の名前によって指定された計算のタイプに基づく値を提供する。statsブロック440は、groupbyブロック430からの入力として受信されたデータストリームのそれぞれのグループに関する平均値を計算する。したがって、statsブロック440は、それぞれのデータセンターのデータストリームから受信されたデータの平均を決定する。図4において示されているように、statsブロックの平均出力ポートは、publishブロック450への入力を提供する。
【0069】
publishブロック450は、受信された入力をダッシュボード上に発行するように構成されることが可能である。publishブロックは、データをソフトウェアバス290上に発行するように構成されることが可能である。ソフトウェアバス290は、そのデータを計測分析システム100のその他のすべての他のモジュールに提供する。データストリーム言語プロセッサ200は、上で指定されたさまざまなブロックを、データストリーム言語プログラムに関して指定された周期性で実行する。
【0070】
データストリーム言語プログラムの実行の全体的なプロセス
図5は、実施形態による、データストリームから受信されたデータをデータストリーム言語プログラムに基づいて処理するための計測分析システムの全体的なプロセスを示している。メタデータモジュール220は、データストリームについて記述するメタデータを510で受信する。メタデータ定義は、データストリームそのもののデータから独立して受信される。たとえば、データストリームは、いかなるプロパティー(たとえば、名前/値ペア)も提供することなく、データ値と、そのデータ値に関連付けられているタイムスタンプとを含むタプルを単に提供することができる。メタデータモジュール220は、データストリームについて記述するプロパティーを、そのデータストリームを提供しているソースとは異なるソースから受信する。たとえば、データストリームは、開発システム120上で実行している計測手段が組み込まれたソフトウェアのインスタンスによって提供され、メタデータ定義は、管理システム160を介してシステム管理者によって提供されることが可能である。
【0071】
アナリティクスエンジン270は、データストリームについて記述するメタデータ属性を使用してデータストリーム言語プログラムを520で受信する。データストリーム言語プログラムは、計測手段が組み込まれたソフトウェアについて記述するレポートを生成するために、およびリアルタイムで、すなわち、データストリームのデータが受信されるにつれて結果を提供するために計測分析システム100に提供される命令のセットに相当することが可能である。
【0072】
計測分析システム100は、さまざまな開発システム120から計測分析システム100によってさまざまなデータストリームのデータが受信されるにつれて下記のステップを繰り返す。インターフェースモジュール210は、さまざまなデータストリームのデータを530で受信する。実施形態においては、インターフェースモジュール210は、固定された時間のインターバル、たとえば、1秒または数秒にわたって待ち、さまざまなデータストリームから受信されたデータを収集する。実施形態においては、量子化モジュール240は、それぞれのタイムインターバルに関してそれぞれの着信データストリームについてデータの量子化を実行する。したがって、それぞれのデータストリームからのデータは、そのタイムインターバルに関するデータストリームに関連付けられている単一の値へとアグリゲートされる。
【0073】
アナリティクスエンジン270は、タイムインターバルに関するデータストリームのデータに基づいてデータストリーム言語プログラムを540で実行する。それぞれのデータストリームに関してデータが量子化された場合には、アナリティクスエンジン270は、それぞれのデータストリームからの量子化された値を使用してデータストリーム言語プログラムを540で実行する。データストリーム言語プログラムは、たとえば、ユーザインターフェースに提示するためにデータストリーム言語プログラムの評価の結果を送信することをアナリティクスエンジン270に行わせるpublishブロックを含むことができる。
【0074】
データストリーム言語プログラムは、1つまたは複数のデータストリームを生成することができる。アナリティクスエンジン270はまた、データストリーム言語プログラムの評価の結果として生成されたデータストリームを、たとえば、時系列データストア260において格納する。アナリティクスエンジン270は、データストリーム言語プログラムの結果を表す1つまたは複数の新たなデータストリーム(または時系列)を作成する。それらの新たなデータストリームは、時系列データストア260において格納される。これは、そのデータストリーム言語プログラムの結果がその他のデータストリーム言語プログラムへの入力として使用されることを可能にする。たとえば、データストリーム言語プログラムが、複数のデータストリームから受信された値の95番目のパーセンタイルを表すデータを生成する場合がある。このデータストリーム言語プログラムの結果は、新たなデータストリームとして時系列データストア260において格納されることが可能である。アナリティクスエンジン270は、生成されたデータストリームに基づいて移動平均値を計算する別のデータストリーム言語プログラムをさらに実行することができる。
【0075】
量子化
入力データストリームの量子化は、量子化されたデータストリームを使用してデータの処理を簡略化する。たとえば、それぞれのタイムインターバルに関して、受信された複数のデータストリームに基づくアグリゲート値が決定されることが可能である。これは、特定のタイムインターバルに関して複数のデータストリームにわたってデータをさらにアグリゲートすることによって実行される。実施形態においては、入力データストリームの量子化は、それぞれのタイムインターバルの終わりに実行され、それによって、そのタイムインターバルに関する量子化されたデータが、処理に利用できるようになる。
【0076】
さらに、計測分析システム100は、個々のデータストリームに関する量子化されたデータを格納し、それによって、複数のデータストリームにわたるデータが、さまざまな方法で、たとえば、要求において指定されているように組み合わされることが可能になる。言い換えれば、ユーザは、複数のデータストリームにわたるデータを第1の様式で組み合わせる第1の要求を送信することができる。その後、そのユーザは、別のデータストリームにわたるデータを別の様式で組み合わせることを求める新たな要求を送信することができる。たとえば、ユーザは、データストリームにわたるデータを組み合わせて、さまざまなデータセンターにわたって計算されたアグリゲートを見ることができる。しかしながら、その後、ユーザは、別々のタイプのアプリケーション、別々のタイプのサーバ、別々の地理的領域などにわたって計算されたアグリゲートを見るために要求を変更することができる。
【0077】
計測分析システム100は、前のデータストリームがアグリゲートされたデータストリームのセットをユーザが修正する要求を受信することもできる。たとえば、ユーザは、アグリゲートされているデータストリームのセットから1つまたは複数のデータストリームを除去するよう計測分析システム100に要求し、訂正されたセットに基づいてアグリゲートを要求することができる。ユーザは、サーバ、アプリケーションを除去すること、もしくは新たに追加すること、またはシステム構成に対してその他の任意の修正を行うことの影響を分析するために、そのような要求を送信することができる。計測分析システム100は、量子化されたデータストリームのデータを保持し、これらの要求に基づいて、別々のタイムインターバルに関する量子化されたデータストリームデータを組み合わせる。計測分析システム100は、量子化されたデータストリームデータを格納しているので、計測分析システム100は、必要に応じてデータストリームにわたってデータを効率よく組み合わせる能力を有している。
【0078】
計測分析システム100は、データストリームにわたってデータを組み合わせて、複数のデータストリームにわたって移動アグリゲート計算を実行することができる。計測分析システム100は、所与の長さのタイムインターバルにわたる任意の移動アグリゲート値、たとえば、1時間移動平均、15分移動平均などを継続的に計算することができる。
【0079】
量子化モジュール240は、それぞれのタイムインターバルに関して入力データストリームの値をアグリゲートし、タイムインターバルに関するアグリゲート値を生成する。したがって、量子化モジュール240は、任意のタイムインターバルの後にデータ値が発生する可能性があるデータストリームを受信する。量子化モジュール240は、入力データストリームを処理して、規則的なタイムインターバルでデータが利用可能であるデータストリームを生成する。量子化モジュール240の詳細は、本明細書においてさらに記述されている。
【0080】
量子化モジュール240は、データストリームにおいて受信された値のタイプ、たとえば、その値が特定のアクションまたはエンティティーのカウントであるかどうか、その値が特定の値のアグリゲーションによって入手されたかどうか、その値が値の所与のセットの最大/最小値に相当するかどうかなどについて記述する情報を受信する。データストリームの値のタイプは、その値を入手するために実行されたオペレーションのタイプについて記述する。量子化モジュール240は、データストリームの値のさまざまなタイプから、インターバルに関するデータストリームの入力値上で、そのタイムインターバルを代表する結果値を入手するために実行されたオペレーションのタイプへのマッピングを格納する。
【0081】
実施形態においては、量子化モジュール240は、特定のタイムインターバルに関する入力として受信されるデータ値を格納するためのバッファを含む。量子化モジュール240のバッファは、任意の数の値を格納することができるデータ構造を使用する。なぜなら、タイムインターバルにおいて受信される値の数は、事前にはわからず、タイムインターバルごとに変わる可能性があるからである。たとえば、量子化モジュール240は、入力データストリームの値を格納するためにリストデータ構造またはスタックデータ構造を使用することができる。
【0082】
量子化モジュール240は、それぞれのタイムインターバルに関して受信されたデータストリームのデータ値を収集する。量子化モジュール240は、時間を追跡把握する。現在のタイムインターバルの終わりが到達されているということを量子化モジュール240が決定した場合には、量子化モジュール240は、そのタイムインターバルにおいて受信されたすべてのデータ値を処理して、そのタイムインターバルを代表するアグリゲート値を決定する。量子化モジュール240は、その後、入力値を表すために使用されたバッファをクリアし、それを、次のタイムインターバルに関する値を格納するために使用する。実施形態においては、量子化モジュール240は、複数のバッファを使用し、それによって、バッファにおいて格納されている前のタイムインターバルのデータが処理されている間に、次のタイムインターバルに関する新たなデータが別のバッファにおいて格納されることが可能である。
【0083】
図6は、実施形態による、計測手段が組み込まれたソフトウェアから受信されたデータストリームの量子化のプロセスを示している。図6は、時間軸620aおよび620bを示しており、それぞれは、一連のデータ値を伴うタイムラインを表している。時間軸620aは、入力データストリーム600のデータ値を示しており、時間軸620bは、量子化モジュール240によって生成された量子化されたデータストリーム610の値を示している。
【0084】
図6において示されているように、4つのデータ値D11、D12、D13、およびD14が、タイムインターバルI1(時刻T0からT1を表している)において受信されており、2つのデータ値D21およびD22が、タイムインターバルI2(時刻T1からT2を表している)において受信されており、3つのデータ値D31、D32、およびD33が、タイムインターバルI3(時刻T2からT3を表している)において受信されている。TmとTnとの間におけるそれぞれのタイムインターバルは、開始時点Tmを含むと想定されることが可能である(それによって、終了時点Tnは、次のタイムインターバルに含まれる)。TmとTnとの間におけるタイムインターバルのその他の任意の解釈が使用されることが可能であり、たとえば、終了時点Tnがそのタイムインターバルに含まれることが可能であり、開始時点Tmが前のタイムインターバルに含まれることが可能である。
【0085】
量子化モジュール240は、それぞれのタイムインターバルのデータ値を処理して、時間軸620bにおいて示されている対応する結果値を生成する。たとえば、量子化モジュール240は、タイムインターバルI1において受信された値D11、D12、D13、およびD14をアグリゲートして、時間軸620bにおいて示されている値D1を生成し、量子化モジュール240は、タイムインターバルI2において受信された値D21およびD22をアグリゲートして、時間軸620bにおいて示されている値D2を生成し、量子化モジュール240は、タイムインターバルI3において受信された値D31、D32、およびD33をアグリゲートして、時間軸620bにおいて示されている値D3を生成する。
【0086】
データストリームの入力値をアグリゲートするために実行されるオペレーションのタイプは、入力データストリームによって表されるデータのタイプに依存する。入力データストリームのそれぞれのタプルが、特定の値のカウント、たとえば、ソフトウェアによって実行されたアクションのカウントである場合には、量子化モジュール240は、入力値をアグリゲートして、カウントを足し合わせることによって、それぞれのタイムインターバルに関する出力データストリーム値を決定する。受信された入力データストリームのそれぞれのタプルが、値のセットの最小(または最大)である場合には、量子化モジュール240は、タイムインターバルに関する入力値をアグリゲートして、そのタイムインターバルに関する入力値の最小(または最大)を決定することによって、そのタイムインターバルに関する出力値を決定する。受信された入力データストリームのそれぞれのタプルが、値のセットの平均である場合には、量子化モジュール240は、そのタイムインターバルに関連付けられている入力値をアグリゲートして、そのタイムインターバルの入力値の平均を決定することによって、それぞれのタイムインターバルに関する出力データストリーム値を決定する。受信された入力データストリームのそれぞれのタプルが、その時点でのメトリックの最後の利用可能な値である場合には、量子化モジュール240は、タイムインターバルに関する入力値をアグリゲートして、そのデータストリームの最後の値を単に使用することによって、そのタイムインターバルに関する出力値を決定する。
【0087】
メトリックデータストリームおよびイベントデータストリーム
実施形態においては、計測分析システム100は、メトリックデータストリームおよびイベントデータストリームという2つのタイプのデータストリームをサポートする。イベントは、典型的には、システムにおいて発生している例外的な状況、たとえば、特定のしきい値を超過している負荷、または特定のしきい値を超過しているメモリ使用状況を指す。イベントは、システムにおいて、たとえば、開発システム120のシステム管理者によって実行される特定のアクションを指す場合もある。メトリックデータストリームは、計測手段が組み込まれたソフトウェアから入手されること、または計測手段が組み込まれたソフトウェアから入手されたメトリックデータストリームから得られることが可能であるメトリックの値を表すデータを含む。本明細書において言及されるデータストリームは、別段の記載がない限り、メトリックデータストリームである。メトリックデータストリームは、メトリック時系列とも呼ばれ、イベントデータストリームは、イベント時系列とも呼ばれる。
【0088】
メトリックデータストリームは、データストリーム識別子と、タイムスタンプ値と、データ値とを使用して表されるデータポイントを含む。データストリーム識別子は、データポイントが属するデータストリームを識別する。タイムスタンプ値は、データポイントを時刻、たとえば、そのデータポイントが報告された時刻、またはそのデータポイントが計測分析システム100によって受信された時刻に関連付ける。データ値は、報告されているメトリックの値、たとえば、特定の時刻のサーバにおけるCPU負荷を表す値、または特定の時刻のサーバにおけるメモリ使用状況の測定値である。メトリック時系列は、典型的には、大量のデータを計測分析システムに提供し、たとえば、それぞれのデータストリームは、毎秒いくつかのデータポイントを報告することができ、それぞれの企業に関して多数のデータストリームが存在する場合がある。
【0089】
イベントデータストリームは、データストリーム識別子と、タイムスタンプ値と、イベントについて記述する1つまたは複数のキー値ペアとを使用して表されるデータポイントを含む。イベントデータストリームのデータストリーム識別子およびタイムスタンプ値は、メトリックデータストリームと同様である。しかしながら、イベントは典型的に、メトリックデータストリームのデータポイントと比較して、より少ない頻度で発生する。たとえば、イベントは、メンテナンスウィンドウを始動することなど、システム管理者によって実行されるアクションに相当することが可能である。イベントのキー値ペアは、イベントについて記述する。たとえば、メンテナンスウィンドウを開始したシステム管理者の名前、メンテナンスウィンドウの目的、メンテナンスウィンドウの範囲などである。イベントは典型的に、不規則な割合で発生し、たとえば、イベントは、いくつかのシステムによっては報告されるがその他のシステムによっては報告されない場合があり、イベントは、一度発生する場合があり、多大な時間にわたって発生しない場合がある、といった具合である。結果として、イベントとともに格納される情報の量は多くなる可能性がある。
【0090】
イベントは、システムにおいて発生する特定の具体的な状況、たとえば、特定の特徴を表示する特定のメトリックについて記述する場合もある。例として、イベントは、サーバのcpu負荷またはメモリ使用状況が特定のしきい値を超過している場合に報告されることが可能である。これらのイベントは、データストリーム言語プログラムの実行の結果として計測分析システム100によって生成される。
【0091】
計測分析システム100は、データを処理するという点でイベント時系列をメトリック時系列と同じように扱う。たとえば、計測分析システム100は、データストリームのいずれかのタイプに基づいて情報のリアルタイムの報告を可能にする。計測分析システム100は、イベントデータストリームがメトリックデータストリームと比較されることを可能にして、ユーザがそれら2つを相関付けることを可能にする。たとえば、メトリックデータストリームを、イベントが生成された際のメトリック値を示すイベントデータストリームとオーバーレイするレポートが生成されることが可能である。
【0092】
データストリーム言語プログラムに関するデータストリームの動的な選択
findブロックは、データストリーム言語プログラムに関して入力されるデータストリームの動的な選択を可能にする。findブロックは、データストリームを識別するための検索条件を指定する。実施形態においては、検索条件は、データストリームについて記述する属性(またはメタデータタグ)に基づく表現である。これらの属性は、データストリームの一部として受信されて、または、たとえば計測分析システム100に加えられるメタデータとして、データストリームに関連付けられて、メタデータストア230において格納されることが可能である。検索条件を実行することによって識別されたデータストリームは、入力としてデータストリーム言語プログラムの後続のブロックへ提供される。
【0093】
データストリーム言語プロセッサ200は、周期的にfindブロックの検索条件を評価し、それによって、データストリーム言語プログラムへの入力として提供されるデータストリームのセットを再評価することができる。結果として、データストリーム言語プログラムへの入力として提供されるデータストリームのセットは、動的に変更される。たとえば、開発システム120は、新たなサーバを加えること、サービスを開始もしくは停止すること、または既存のサービスを再構成することが可能である。さらに、新たな開発システム120は、データストリームを計測分析システム100へ送信することができる。結果として、計測分析システム100によって受信されるデータストリームのセットは、動的に変わる。
【0094】
findブロックの検索条件は、データストリームの特徴に基づいてデータストリームのセットを識別するために使用されることが可能である。たとえば、検索条件は、特定のデータセンターに属しているサービス、特定のアプリケーションに対応するサービス、複数のデータセンターにわたって分散している場合がある組織に関連付けられているサービス、ソフトウェアの特定のバージョン(たとえばオペレーティングシステム、または特定のパッチを有しているアプリケーション)を稼働させるサービスを識別するために使用されることが可能である。findブロックに関して指定される検索条件のタイプは、データストリームに関して定義されてメタデータストア230において格納されるメタデータタグのタイプに依存する。
【0095】
findブロックの検索条件は、開発システムなどの外部システムから受信されたすべてのデータストリーム、ならびに計測分析システム100内で生成されたデータストリームにわたって、たとえばデータストリーム言語プログラムの中間結果または最終結果として、評価される。たとえば、本明細書において記述されているように、データストリーム言語プログラムの中間結果または最終結果は、開発システム120から受信されたデータストリームと同じに扱われる第一級市民として表される。したがって、findブロックの検索条件が評価される場合には、結果は、開発システム120から受信されたデータストリーム、ならびに計測分析システム100内の内部で生成されたデータストリームを含むことができる。
【0096】
下記は、findブロックに関して指定される検索条件の若干の例である。ユーザが、アナリティクスサーバ上の負荷を知りたいと望んでおり、それらのアナリティクスサーバは、analytic1、analytic2、analytic3、...、およびanalyticNと名付けられていると想定していただきたい。アナリティクスサーバのこのセットは、「analytic*」という正規表現を満たすメタデータタグ値を伴うすべてのデータストリームとして検索条件を指定するfind(“source:analytic*”)というfindブロックを使用することによって識別されることが可能である。
【0097】
検索条件は、論理式であることが可能である。たとえば、find(“source:databank* AND metric:numCacheHits”)というfindブロックは、「databank*」という形式のソース属性と、numCacheHitsというメトリック名とを有しているすべてのデータストリームを見つけ出す。したがって、このfindブロックを伴うデータストリーム言語プログラムは、「databank*」として識別されたソースからnumCacheHitsというメトリックを提供しているすべてのデータストリームに関して評価される。同様に、find(“source:databank* AND metric:numCacheMisses”)というfindブロックは、「databank*」として識別されたソースからnumCacheMissesというメトリックを提供しているすべてのデータストリームを見つけ出す。別の例として、find(“source:zk* AND smetric:cpu AND region:ore1”)というfindブロックは、「cpu」というメトリックを有している「ore1」という領域から、「zk*」という形式のソース名を有しているすべてのデータストリームを見つけ出す。
【0098】
findブロックは、開始時刻、停止時刻、および周期性のうちの1つまたは複数を指定する構成パラメータに関連付けられることが可能である。findブロックの周期性は、そのfindブロックが属するデータストリーム言語プログラムのジョブの周期性とは異なる場合がある。これがそうであるのは、データストリームのセットが変わる割合が、データがデータストリーム言語プログラムを通じて移動してほしいとユーザが望む割合とは異なる場合があるからである。たとえば、データストリームのセットが頻繁には変わらないということをユーザが決定する場合があり、検索ストリングが1時間に1回ほど評価される場合があり、その一方でジョブの周期性は1分である。したがってユーザは、findブロックおよびデータストリーム言語プログラムに関する周期性の別々の値を指定する場合がある。
【0099】
実施形態においては、findブロックの評価は、固定された周期性には基づかず、計測分析システム100において発生する特定のイベントによってトリガーされる。たとえば、findブロックの評価は、メタデータにおけるいかなる更新によってもトリガーされる。メタデータにおける更新は、findブロックの結果を変化させて、そのfindブロックに基づいて入力データストリームの別のセットがデータストリーム言語プログラムによって処理されるという結果をもたらすことが可能である。実施形態においては、計測分析システム100は、findブロックをメタデータの特定の部分に関連付ける。実施形態においては、findブロックが特定のメタデータ属性に基づく場合には、それらのメタデータ属性に関連付けられているいかなる変化も、findブロックの実行をトリガーする。たとえば、findブロックが、「xyz」という領域からのすべてのデータストリームに関して真であると評価した場合には、データストリームの評価は、「xyz」という領域に対するデータストリームのいかなる追加または削除によってもトリガーされる。その他の領域に対するデータストリームの追加または削除は、findブロックの実行をトリガーすることはできない。計測分析システム100は、それぞれのfindブロックに関連付けられているメタデータ属性のセットを分析および識別する。計測分析システム100は、findブロックに関連付けられているメタデータ属性のセットに関連付けられているメタデータにおける変化が発生しているかどうかを検知する。findブロックに関連付けられているメタデータ属性のセットに関連付けられているメタデータにおける変化が発生しているということを計測分析システム100が検知した場合には、計測分析システム100は、そのfindブロックを再評価する。実施形態においては、計測分析システム100は、データストリームに関連付けられているプロパティーが変わったということを検知した場合には、findブロックを再評価する。実施形態においては、findブロックは、findブロックの定義が修正された場合に再評価される。
【0100】
実施形態においては、findブロックは、データストリームにおける変化があった場合に再評価される。たとえば、新たなデータストリームが計測分析システム100によって検知された場合、またはデータストリームが非アクティブであるということを計測分析システム100が決定した場合には、計測分析システム100は、findブロックを再評価する。生成されるデータストリームは、開発システム120などの外部システムから受信されるデータストリームであることが可能であり、またはデータストリームは、データストリーム言語プログラムの中間結果または最終結果によって生成されることが可能である。たとえば、本明細書において記述されているように、データストリーム言語プログラムの中間結果または最終結果は、開発システム120から受信されたデータストリームと同じに扱われる第一級市民として表される。したがって、これらのデータストリームのメタデータの追加、削除、または修正も、findブロックが再評価されることをもたらす。
【0101】
図7は、実施形態による、データストリーム言語プログラムへの入力を提供するためのfindブロックによるデータストリームのセットの選択を示している。図7において示されているように、findブロック710aは、「datacenter:east*」という検索ストリングによって指定された検索条件を有している。データストリーム言語プロセッサ200の探索モジュール310は、「datacenter」というメタデータタグ(または属性)が「east*」という正規表現を満たしているすべてのデータストリームを識別する。
【0102】
図7は、central_dev、east_dev、east_qa、west_dev、およびnorth_devというデータセンタータグ値を有しているデータストリームを含む、計測分析システム100によって受信されたデータストリームのセット740aを示している。探索モジュール310は、east_devおよびeast_qaというデータセンタータグ値を伴うデータストリームがfindブロック710aの検索条件を満たしているということを決定する。探索モジュール310は、識別されたデータストリームのセット750aをデータストリーム言語プログラムの後続のブロック730aに提供する。
【0103】
データストリーム言語プログラムの残りへの入力として提供されるデータストリームのセットは、findブロック710に関連付けられている検索条件に依存する。たとえば、findブロック710bは、findブロック710aの検索条件とは異なる「datacenter:*dev」という検索条件を有する。データストリーム言語プロセッサ200の探索モジュール310は、「datacenter」というメタデータタグ(または属性)が「*dev」という正規表現を満たしているすべてのデータストリームを識別することによってfindブロック710bの検索条件を処理する。
【0104】
図7は、central_dev、east_dev、east_qa、west_dev、およびnorth_devというデータセンタータグ値を有しているデータストリームを含む、計測分析システム100によって受信されたデータストリームのセット740bを示している。この例においては、セット740bは、セット740aと同じ要素を有している。探索モジュール310は、central_dev、east_dev、west_dev、およびnorth_devというデータセンタータグ値を伴うデータストリームがfindブロックの検索条件を満たしているということを決定する。探索モジュール310は、識別されたデータストリームのセット750bをデータストリーム言語プログラムの後続のブロック730bに提供する。
【0105】
図7は、データストリーム言語プログラムによって処理されるデータストリームのセットをデータストリーム言語プロセッサ200によって動的に決定することを示している。データストリーム言語によって処理されるデータストリームのセットは、findブロック710の検索条件と、計測分析システム100によって受信される現在利用可能なデータストリームとに基づいて決定される。
【0106】
実施形態においては、findブロックは、スケジュールに関連付けられており、それによって、データストリーム言語プロセッサ200の探索モジュール310は、そのスケジュールに従ってfindブロックを実行する。たとえば、findブロックは、周期性に関連付けられることが可能であり、それによって探索モジュール310は、その周期性に基づいて決定された割合でfindブロックを実行する。したがって探索モジュール310は、その周期性に基づくタイムインターバルにわたって待ち、findブロックの検索条件を満たすデータストリームのセットを再評価する。このプロセスは、(時間が、findブロックに関連付けられている「終了時刻」の値に達するまで)繰り返される。
【0107】
図8は、実施形態による、findブロックの周期的な再評価の結果としてのデータストリーム言語プログラムへの入力を提供するデータストリームのセットに対する動的な変化を示している。図8において示されているように、findブロックの検索条件は、時刻T1において、そして再び時刻T2において評価され、その結果、データストリームの別々のセット850が、データストリーム言語プログラムによって処理するために識別される。図8は、2つの異なる時点でfindブロックを再実行することを示している。
【0108】
時刻T1において、計測分析システム100は、central_dev、east_dev、east_qa、west_dev、およびnorth_devというデータセンタータグ値を伴うデータストリームのセット840aを受信する(同じデータセンタータグ値を伴う複数のデータストリームが存在することが可能であるということに留意されたい)。探索モジュール310は、「datacenter:east*」という検索条件を伴うfindブロック810aを評価する。したがって、探索モジュール310は、east_devおよびeast_qaというデータセンタータグ値を伴うデータストリームのセット850aを識別する。データストリーム言語プロセッサ200は、識別されたデータストリームのセット850aをデータストリーム言語プログラムの後続のブロック830aに提供する。
【0109】
探索モジュール310は、時刻T2においてfindブロックを再評価する。時刻T2において、計測分析システム100は、central_dev、east_dev、east_prod、west_dev、およびnorth_devというデータセンタータグ値を伴うデータストリームのセット840aを受信する。したがって探索モジュール310は、east_prodおよびeast_qaというデータセンタータグ値を伴うデータストリームのセット850bを識別する。
【0110】
時刻T1において識別されたセット850aと比較して、セット850bは、east_prodというデータセンタータグを伴う新たなデータストリームを含み、east_qaというデータセンタータグを伴うデータストリームが欠如している。データストリーム言語プロセッサ200は、識別されたデータストリームのセット850aをデータストリーム言語プログラムの後続のブロック830aに提供する。したがって、探索モジュールの同じ検索条件に基づくデータストリームのセット850のそれぞれの後続の評価は、データストリームの別のセットが後続のブロック830に提供されるという結果をもたらす場合がある。
【0111】
データストリーム言語プログラムによって処理されるデータストリームのセットを動的に変更できることは、計測分析システムへの入力を提供する動的に変わる環境にデータストリーム言語プログラムが適合することを可能にする。たとえば、企業は、データセンターに対してサーバを追加/除去すること、新たなデータセンターを追加すること、サービスを追加/除去/修正すること、サービスを変更して、計測手段が組み込まれたソフトウェアをさまざまな方法で実行することなどが可能である。データストリーム言語プログラムによって処理されるデータストリームのセットを指定できることは、企業が動的に変わるにつれて、それについて記述するデータを計測分析システムが報告することを、データストリーム言語プログラムを修正する必要を伴わずに可能にする。
【0112】
図9は、実施形態による、findブロックを使用してデータストリーム言語プログラムへの入力を提供するためのデータストリームのセットを識別するためのプロセスを示している。図9において示されているように、データストリーム言語プロセッサ200は、処理のためのデータストリーム言語プログラムを900で受信する。図9において示されているプロセスは、そのデータストリーム言語プログラムがfindブロックを有していて、その後に、残りのデータストリーム言語プログラムに対応するブロックのセットが続くという想定に基づいている。
【0113】
findブロックは、検索ストリングに関連付けられている。探索モジュール310は、findブロックに関連付けられている検索ストリングを910で受信する。探索モジュール310は、検索ストリングを920で解析して、その検索ストリングに対応する検索条件の表示、たとえば、解析木表示を構築する。探索モジュール310は、検索条件に対応するデータストリームのセットを930で識別する。探索モジュール310は、識別されたデータストリームのセットをデータストリーム言語プログラムの後続のブロック、たとえば、fetchブロックに提供する。データストリーム言語プロセッサ200は、検索条件に基づいて930で識別されたデータストリームからデータを取り出し、残りのデータストリーム言語プログラムを940で実行する。
【0114】
検索条件に基づいてデータストリームのセットを930で識別するステップ、およびデータストリーム言語プログラムの残りのブロックを940で実行するステップは、データストリーム言語プロセッサ200によって繰り返し実行される。ステップ930および940が繰り返される割合は異なる場合がある。たとえば、データストリームのセットを930で識別するステップは、データストリーム言語プログラムの残りのブロックが実行される割合と比較して、より遅い割合で実行される場合がある。データストリーム言語プログラムの残りのブロックの940での実行の割合、およびfindブロックの実行の割合は、データストリーム言語プログラムに対応するジョブに関して(たとえば、ユーザによって)指定される。
【0115】
データストリーム言語プログラムに関してデータストリームからデータを取り出すこと
実施形態においては、データストリーム言語プログラムは、データストリームの所与のセットからデータを取り出すためのfetchブロックを含む。典型的には、fetchブロックは、データストリーム言語プログラムのデータパイプラインにおいてfindブロックの後に配置される。言い換えれば、findブロックの出力は、入力としてfetchブロックへ提供される。したがってfetchブロックは、findブロックを処理した結果として探索モジュール310によって識別されたデータストリームのセットからデータを取り出す。フェッチモジュール320は、fetchブロックを実行する。
【0116】
図10は、実施形態による、fetchブロックを実行することによってデータストリームからデータを取り出すプロセスを示している。図10において示されている特定のステップは、図10において示されている順序とは異なる順序で実行されることが可能である。さらにステップは、本明細書において示されているモジュールとは異なるモジュールによって実行されることが可能である。
【0117】
データストリーム言語プロセッサ200は、データストリーム言語プログラムに基づくジョブの実行の開始時刻、終了時刻、および周期性を受信する。フェッチモジュール320は、データストリーム言語プログラムのfindブロックの検索条件に基づいて探索モジュール310からデータストリームのセットを受信する。フェッチモジュールは、データを取り出し、それを実行用としてデータストリーム言語プログラムの後続のブロックに提供する。フェッチモジュール320は、それぞれの後続のタイムインターバルに関してデータストリームからデータをフェッチするために下記のステップを実行する。
【0118】
フェッチモジュール320は、次のタイムインターバルを識別し、そのタイムインターバル中にデータが届くのを待つ。量子化モジュールは、それぞれの入力データストリームのデータに基づいて別々の周期性を有する複数の量子化されたデータストリームを生成する。たとえば、量子化されたデータストリームQ1が、5秒の周期性で生成されることが可能であり、別の量子化されたデータストリームQ2が、10秒の周期性で生成されることが可能であり、別の量子化されたデータストリームQ3が、1分の周期性で生成されることが可能である、といった具合である。フェッチモジュール320は、(データストリーム言語プログラムの周期性に基づいて決定された)データストリーム言語プログラムが実行される周期的なタイムインターバルよりも小さい最大の周期的なタイムインターバルを有する量子化されたデータストリームを1020で選択する。
【0119】
たとえば、データストリーム言語プログラムが実行される必要があるタイムインターバルのサイズが、データストリーム言語プログラムの周期性に基づいて30秒である場合には、フェッチモジュール320は、10秒の周期性を有する量子化されたデータストリームQ2を選択する。量子化されたデータストリームQ3は選択されない。なぜなら、それは、データストリーム言語プログラムの時間周期的なタイムインターバル(すなわち、30秒)よりも大きい1分(すなわち、60秒)の周期的なタイムインターバルを有するからである。量子化されたデータストリームQ3は選択されない。なぜなら、それは、データストリーム言語プログラムの周期的なタイムインターバルよりも小さい最大の周期的なタイムインターバルではない5秒の周期的なタイムインターバルを有するからである(それは、10秒であるQ2の周期的なタイムインターバルよりも小さいからである)。フェッチモジュール320は、(たとえば、現在の30秒のタイムインターバルにおいて発生する量子化されたデータストリームの3つのデータポイントのデータ値をアグリゲートすることによって、)選択された量子化されたデータストリームを再量子化して、周期性30秒の再量子化されたデータストリームを生成する。
【0120】
フェッチモジュール320は、時系列データストア260からデータを、データストリームから受信されているリアルタイムデータと組み合わせる必要がある場合に、1050で取り出す。フェッチモジュールは、その組み合わされたデータを後続のブロック、たとえば、統計計算ブロックに1060で提供する。たとえば、データストリーム言語プログラムがスクリーンに出力を発行し、ジョブの開始時刻がマイナス(たとえば、-1時間)と示されていると想定していただきたい。データは、チャートとして提示されることが可能であり、そのチャートは、受信された時点でのデータ、ならびに選択されたタイムインターバルに関する過去のデータを提示する。たとえば、ユーザは、チャート上にデータを提示するための1時間の時間ウィンドウを選択することができる。この状況においては、チャートが、データストリームにおいて受信されたリアルタイムデータに基づいてのみレンダリングされた場合には、計測分析システム100がデータストリーム言語プログラムを処理し始めた時点で、そのチャートは空であろう。表示されるチャートは、右からゆっくりと満ち始めて、表示されているウィンドウを1時間後に満たすであろう。これは、理想的ではないユーザ経験を提示する。理想的には、ユーザは、最初からチャートが表示されている1時間にわたって完全なチャートを(その1時間のデータとともに)見たいものである。
【0121】
フェッチモジュール320は、データストリームからのリアルタイムデータが利用可能になる時点の前に発生するチャートの部分をレンダリングするために時系列データストア260からデータを1050で取り出すことによって、上述の状況を改善する。たとえば、計測分析システム100がデータストリーム言語プログラムを処理し始めたときに、フェッチモジュール320は、時系列データストア260から入手されたデータを使用してチャート全体をレンダリングするためにデータを提示する。ますます多くのデータがデータストリームから受信されるにつれて、フェッチモジュール320は、時系列データストア260からのデータを、受信されたリアルタイムデータと組み合わせる。
【0122】
例として、10分後に、フェッチモジュール320は、データストリームから受信された10分間のデータと組み合わされた、時系列データストア260から取り出された50分間のデータを提示用として送信する。同様に、30分後に、フェッチモジュール320は、データストリームから受信された30分間のデータと組み合わされた、時系列データストア260から取り出された30分間のデータを提示用として送信する、といった具合である。データストリームの60分間よりも多くのデータが受信された後に、フェッチモジュール320は、データストリームから受信されたデータに基づいてチャートをレンダリングするためのすべてのデータをそれが送信することができるデータストリームに基づいて十分なデータを有しており、データストリームからのデータを、時系列データストア260の以前に格納されたデータと組み合わせる必要はない。
【0123】
フェッチモジュール320は、その他の状況において、たとえば、windowブロックに関して、データストリームから受信されたデータと組み合わせるために時系列データストア260からデータを1050で取り出すことができる。windowブロックは、指定された長さ(たとえばtw)のスライディング時間ウィンドウを提供し、そのウィンドウのデータ(たとえば平均値)の計算を実行して、1時間の時間ウィンドウにわたる移動平均を決定する。この状況においては、時間twの初期化待ち時間がある。なぜなら、データストリームからのデータは、ウィンドウ全体を満たすのに時間twのピリオドにわたって利用可能でないからである。したがって、データストリーム言語プログラムが時刻t1において開始した場合には、時刻t1~twから開始するデータが時系列データストア260からフェッチされてウィンドウを満たして、ウィンドウ計算のための有意なデータを提供する。任意の時刻t0>t1において(その一方で、t0~t1はtw未満である)、フェッチモジュール320は、長さt0~t1のウィンドウの終わりの部分を、データストリームから受信されたリアルタイムデータで満たし、そのウィンドウの最初の部分(すなわち、残りの部分)を、時系列データストア260から取り出されたデータで満たす。
【0124】
データストリーム言語プログラムが、複数のウィンドウの計算を含む場合には、フェッチモジュール320は、時系列データストア260からのデータ(必要な場合)と、データストリームから受信されたリアルタイムデータとを組み合わせることによって、フェッチされる必要がある最大ウィンドウのサイズのデータを保持する。最大ウィンドウのために保持されるデータは、より小さなウィンドウのためのデータを含む。
【0125】
図11A図11Cは、実施形態による、移動ウィンドウ計算のために時系列データストアからのデータと、データストリームからリアルタイムで受信されるデータとを組み合わせるプロセスを示している。移動ウィンドウの長さはTwであると想定される。例示的な計算は、データストリームのセットのデータにわたるアグリゲーション、たとえば、データストリームのそのセットにわたる移動ウィンドウ中に受信されたデータに基づく平均値またはパーセンタイル計算である。移動ウィンドウとは、シフトし続ける時間ウィンドウである。言い換えれば、移動ウィンドウのサイズは一定のままだが、ウィンドウは時間とともに進み続ける。
【0126】
ウィンドウ内で発生するデータポイントの数は、時間とともに変わる場合がある。処理されるデータストリームの数も、ウィンドウが進むにつれて、たとえば、新たなデータストリームの導入に起因して、またはデータストリームについて記述するメタデータに対する修正に起因して変わる場合がある。たとえば、移動ウィンドウが、「east」というデータセンターからのすべてのデータストリームにわたるデータの平均値を計算している場合には、時間とともに、「east」というデータセンターがサービスを開始/停止したならば、新たなサーバを導入したならば、またはデータストリームについて記述するメタデータが、特定のデータストリームとの間で「datacenter=east」というタグを追加/除去するように修正されたならば、データストリームの数が変わる場合がある。データストリーム言語プロセッサ200は、データストリームのセットを、そしてまた、ウィンドウ内で発生するデータポイントのセットを周期的に再評価し、選択されたデータストリームからのデータポイントに関して指定されたアグリゲート値を計算する。
【0127】
図11Aは、ウィンドウ計算が開始されたときにそのウィンドウの全データが時系列データストア260から取り出されることが可能であるシナリオを示している。図11Bは、いくらかの時間(それは、そのウィンドウの長さである時間Tw未満である)の後に、フェッチモジュール320が、時系列データストア260からのデータを、データストリームから受信されたリアルタイムデータと組み合わせるということを示している。図11Cは、ウィンドウの長さTwよりも長い時間の後には、フェッチモジュール320が、時系列データストア260からデータを取り出す必要がなく、データストリームから入手されたリアルタイムデータでウィンドウ全体を満たすことができるということを示している。
【0128】
図11Aにおいて示されているように、T2は、現在の時刻を示しており、サイズTwのウィンドウを与えられると、時刻T1は、時点T2-Twに相当する。ウィンドウ計算が時刻T2において開始すると想定していただきたい。したがって、このウィンドウは、T1~T2という時間範囲内にある。この時点でデータストリームから受信されたデータはない。ウィンドウ全体のためのデータは、時系列データストア260から取り出される。
【0129】
図11Bは、いくらかの時間の後に、現在の時刻がT4によって表されており、ウィンドウが時間範囲T3~T4へ進んでいるということを示している。リアルタイムデータが収集され、時間範囲T2~T4に関するウィンドウ計算において使用されている。なぜなら、時刻T2以降にリアルタイムデータが収集されたからである。時間範囲T3~T2に関して、フェッチモジュール320は、時系列データストア260からのデータを依然として使用している。図11Bにおいて示されているシナリオは、時間範囲T4~T2がTw未満であるすべての時間に関して(言い換えれば、ウィンドウのサイズ未満であるT2以降のすべての時間に関して)当てはまる。
【0130】
図11Cは、ウィンドウの長さ以上の時間に関するシナリオを示している。言い換えれば、T5が現在の時刻である場合には、図11Cは、T5-T2がウィンドウの長さTw以上であるようなすべての時間T5に関して当てはまる。これらのシナリオにおいては、フェッチモジュール320は、データストリームから十分なリアルタイムデータを蓄積しているので、フェッチモジュール320は、時系列データストア260からデータを取り出さない。言い換えれば、ウィンドウ計算は、データストリームからリアルタイムで受信されたすべてのデータを使用して実行される。
【0131】
図11A図11Cにおいて記述されているシナリオはまた、チャートを使用して(たとえば、ダッシュボードを介して)データを提示することに関して当てはまる。時系列データストア260からのデータは、時間が進むにつれてチャートがゆっくりと満ちるのを示すことを回避する目的でチャートの最初の部分を満たすために使用される。時系列データストア260からのデータでチャートを満たすことができることは、よりよいユーザ経験を提供する。なぜなら、ユーザは、ユーザによって選択された時間ウィンドウ全体に関するチャートを提示されるからである。
【0132】
データストリームをグループ化すること
図12は、実施形態による、データストリームのデータをグループ化して結果データストリームのセットを生成するためのプロセスを示している。グループ化ステートメントが、たとえば図4において示されているようにgroupbyブロックを使用して、データストリーム言語プログラムに含まれることが可能である。データストリーム言語プログラムのグループ化ステートメントは、データストリームについて記述する1つまたは複数のメタデータ属性を指定する。groupbyブロックは、データストリームのそれぞれのグループに関して実行されるアグリゲート計算に関連付けられている。
【0133】
グループ化モジュール360は、データストリームについて記述する1つまたは複数の属性を1210で受信する。その属性は、データストリームのデータとともに受信される属性(たとえば、ソース名およびメトリック名)、またはメタデータモジュール220によってデータストリームに関連付けられていてメタデータストア230において格納されているメタデータタグであることが可能である。グループ化モジュール360はまた、データストリームのそれぞれのグループに関して実行されることになる特定の計算、たとえば、データストリームのデータに基づいてアグリゲート値を決定する計算を受信する。
【0134】
データストリーム言語プロセッサ200(およびそのコンポーネントモジュール)は、データストリーム言語プログラムを実行するジョブに関して指定された周期性に基づいてそれぞれのタイムインターバルに関して下記の計算を実行する。グループ化モジュール360は、グループ化コマンドに関連付けられている1つまたは複数の属性の値のそれぞれの個別のセットに対応するデータストリームのグループを1220で識別する。たとえば、グループ化コマンドを用いて指定された属性が「datacenter」という属性である場合には、グループ化モジュール360は、データストリームのセットを識別し、それぞれのセットは、「datacenter」タグの個別の値を有している。
【0135】
グループ化モジュール360は、識別されたデータストリームのそれぞれのセット(またはグループ)に関して下記の計算を実行する。グループ化モジュール360は、その特定のタイムインターバルに関するセットのそれぞれのデータストリームに対応するデータを1230で受信する。グループ化モジュール360は、それぞれのグループのデータストリームからのデータに関するアグリゲート計算の値を1240で決定する。たとえば、グループ化が「datacenter」という属性に基づいており、指定された計算が平均である場合には、グループ化モジュール360は、所与のタイムインターバルに関して入手された特定のデータセンターに関するすべてのデータストリームのデータの平均を1240で決定する。グループ化モジュール360は、それぞれのグループに関する計算の結果をデータストリーム言語プログラムの後続のブロックへ1250で出力する。
【0136】
図12において示されているプロセスにおいて記述されているように、グループ化ステートメント(すなわち、groupbyブロック)は、入力としてデータストリームのセットを取り、結果データストリームのセットを生成する。グループ化ステートメントは、複数のメタデータ属性によってグループ化を行うことを指定することができる。生成される結果データストリームの数は、入力セット内に少なくとも1つのデータストリームが存在するグループ化属性の個別の属性値の数に等しい。言い換えれば、グループ化属性の値のそれぞれの個別の値の組合せを伴う属性を有するデータストリームが入力内に存在する場合には、個別の値のその組合せに関してデータストリームが生成される。
【0137】
図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は、dcという属性に関する同じ属性値を有している入力セット1340aからのデータストリームを収集するためにgroupby(“dc”)を指定するグループ化ブロック1310aを処理する。入力セット1340aは、dc=eastを伴う1つのデータストリームと、dc=westを伴う2つのデータストリームと、dc=northを伴う2つのデータストリームとを含む。
【0138】
実施形態においては、グループ化モジュール360は、値のその組合せを有している入力データストリームがない場合には、属性によるグループの個別の値を無視する。したがって、グループ化モジュール360は、これらの属性値に対応するいかなる結果データストリームも生成しない。たとえば、dcという属性が、その他の可能な値、たとえば「north-east」、「south-west」などを有することができ、かつ、これらの属性値を有している入力データストリームがない場合には、グループ化モジュール360は、メタデータ属性のこれらの個別の値に対応するいかなる結果データストリームも生成しない。
【0139】
したがって、図13において示されているように、グループ化モジュール360は、dc=eastに対応する第1の結果データストリーム、dc=westに対応する第2の結果データストリーム、およびdc=northに対応する第3のデータストリームという3つの結果データストリームを生成する。それぞれの結果データストリームは、group byブロックが実行される周期性(これは、データストリーム言語プログラムが実行される周期性である)で入力データストリームの対応するグループからのデータをアグリゲートすることによって生成されたデータ値を含む。
【0140】
グループ化モジュール360は、groupbyブロックがグループ化のための別の属性を指定した場合には、結果データストリームの別のセットを生成することができる。たとえば、図13Bは、「metric」という属性に基づくデータストリームのグループ化を示している。入力セット1340bは、セット1340aと同じデータストリームを有する。入力データストリームは、3つのデータストリームをグループ化して、metric=cpuLoadに対応する結果データストリームと、metric=cacheMissesに対応する別の結果データストリームとを生成する。
【0141】
図14は、実施形態による、時間に伴う入力データストリームにおける変化の結果としてgroupbyブロックによって生成される結果データストリームの動的な変化を示す例示的なシナリオを示している。たとえば、図13aにおいて示されているgroup byブロックは、データストリームの入力セット1440がセット1340aとは異なる場合には、後の時点で(たとえば、異なるタイムインターバルに関して)実行されることが可能である。図14において示されているように、入力セット1440は、dc=eastという属性を伴ういかなるデータストリームも含んでいない。さらに、入力セット1440は、dc=southを伴うデータストリームを含んでいる。したがって、グループ化モジュール360は、dc=westに対応する第1の結果データストリーム、dc=northに対応する第2の結果データストリーム、およびdc=southに対応する第3のデータストリームという3つの結果データストリームを伴う結果セット1450を生成する。したがって、グループ化モジュール360によって生成されるグループは、データストリームの入力セットが変わるにつれて動的に変わることが可能である。開発システム120において実行する計測手段が組み込まれたソフトウェアから受信されるデータストリームの入力セットは、さまざまな理由で、たとえば、新たな開発システム120を始動したこと、サービスを追加/除去したこと、またはメタデータストア230におけるデータストリームに関連付けられているメタデータを修正したことの結果として変わることが可能である。
【0142】
データストリームを第一級市民として発行すること
実施形態によれば、データストリーム言語プログラムは、計測分析システム100のその他のコンポーネントにデータストリームを提供することによってデータストリーム言語プログラムの実行の結果に基づいて1つまたは複数のデータストリームを発行する発行コマンド(すなわち、publishブロック)を含む。たとえば、データストリーム言語プログラムによって生成されたデータストリームは、ユーザインターフェースに対して発行されてリアルタイムのチャートまたはレポートとして提示されることが可能である。生成されたデータストリームは、第一級市民として表される。言い換えれば、生成されたデータストリームは、計測分析システム100によって開発システム120の計測手段が組み込まれたソフトウェアから受信されたデータストリームと同じように表される。
【0143】
生成されたデータストリームは、計測分析システム100のその他のコンポーネントにより、計測分析システム100によって受信されたデータストリームと同じように使用されることも可能である。生成されたデータストリームは、計測分析システム100によって自動的に、または管理システム160を介してシステム管理者によってメタデータ属性に関連付けられることが可能である。データストリーム言語プログラムのfindブロックは、外部システムから受信されたその他のデータストリームと同様、生成されたデータストリームを見つけ出すことができる。その他のデータストリーム言語プログラムを実行するジョブは、生成されたデータストリームを入力として受信し、それを処理することができる。そのデータストリームのデータは、計測分析システム100によって処理されるその他の任意のデータストリームと同様、ユーザインターフェースを介して提示されることが可能であり、ユーザから受信された入力に基づいて操作されることが可能である。
【0144】
データストリーム言語プロセッサ200は、結果データストリームをソフトウェアバス290上に発行する。任意の結果データストリーム(またはその他の任意のデータストリーム)に関するデータストリーム識別子を識別することができる計測分析システム100の任意のコンポーネントが、ソフトウェアバス290からデータストリームのデータを入手することができる。ソフトウェアバス290は、発行されたデータストリームのデータをメモリにおいて格納して、そのデータに対する迅速なアクセスを提供することができる。
【0145】
データストリーム言語プログラムは、発行するための複数の結果データストリームを生成することができる。たとえば、データストリーム言語プログラムは、データセンターによってグループ化されたメトリック(たとえば、cacheMisses)をアグリゲートすることができる。したがって、アグリゲート属性(たとえば、total cacheMisses)値が、それぞれのデータセンターに関して生成される。発行モジュール350は、それぞれの生成された結果データストリームについて記述するメタデータを生成し、そのメタデータをメタデータストア230において格納する。発行モジュール350は、データストリームを、そのデータストリームを生成しているデータストリーム言語プログラムに関連付けられている情報に関連付ける。したがって、発行モジュール350は、データストリームを生成しているデータストリーム言語プログラムのブロックを分析し、データストリーム言語プログラムのブロックからデータストリームを識別する情報を識別する。
【0146】
発行モジュール350は、発行されたデータストリームを生成しているデータストリーム言語プログラムによって入力として受信されたデータストリームの属性に基づいて、データストリームについて記述するメタデータ属性を生成することができる。たとえば、データストリーム言語プログラムが入力データストリームの移動平均を計算する場合には、発行モジュール350は、その入力データストリームに基づくメタデータ属性値を、発行されたデータストリームにも関連付ける。この状況においては、発行モジュール350は、入力データストリームのソース名を、入力データストリームのソース名として使用することができる。発行されたデータストリームが、複数の入力データストリームをアグリゲートすることによって入手されている場合には、発行モジュール350は、入力データストリームに基づく属性値をアグリゲートすることにより(たとえば、入力データストリームからの対応する属性値を連結することにより、または、入力データストリームからの属性値を短縮することによって入手されたサブストリングを連結することにより)、発行されたデータストリームに関する属性を生成することができる。たとえば、結果データストリームのソース名は、アグリゲートされる入力データストリームのソース名を連結することによって、または入力データストリームのソース名のプレフィックスストリングを連結することによって入手されることが可能である。
【0147】
実施形態においては、publishブロックは、発行されているデータのタイプを特徴付けるメトリック名に関連付けられている。発行モジュール350は、publishブロックのメトリック名を、publishブロックによって発行されたデータストリームに関連付ける。データストリーム言語プロセッサ200はまた、それぞれの結果データストリームを表すための識別子(時系列識別子と呼ばれる)を生成する。それぞれの結果データストリームのデータは、時系列データストア260において格納され、計測分析システムの任意のコンポーネントによる使用のために利用可能である。
【0148】
publishブロックがメトリック名に関連付けられていない場合には、発行モジュールは、発行されているデータストリームを生成したデータストリーム言語プログラムによって受信された入力データストリームに基づいてメトリック名を決定する。発行されているデータストリーム言語が、単一のデータストリームから生成されている場合には、発行モジュールは、その単一のデータストリームのメトリック名を、発行されているデータストリームのメトリック名として使用する。発行されているデータストリーム言語が、複数のデータストリームから生成されている場合には、発行モジュールは、それらの複数のデータストリームのメトリック名に基づいて、たとえば、メトリック名、またはメトリック名のサブストリング(たとえば、プレフィックスもしくはサフィックス)を連結することによって、発行されているデータストリームに関するメトリック名を生成する。
【0149】
図15は、実施形態による、データストリーム言語プログラムのpublishブロックを実行することによって入手される結果データストリームを発行するプロセスを示すフローチャートを示している。このデータストリーム言語プログラムは、publishブロックおよび1つまたは複数のgroupbyブロックを含むと想定される。そのpublishブロックは、メトリック名に関連付けられていると想定される。たとえば、このデータストリーム言語プログラムは、下記のとおりであることが可能である。
find(“source:analytics*”, “metric:load”))→
fetch()→
groupby(“datacenter”)→
stats!mean→
publish(“dc_load”)
【0150】
上述のデータストリーム言語プログラムは、「dc_load」というメトリック名を指定するpublishブロックを含んでいる。このデータストリーム言語プログラムはまた、データセンターによって入力データストリームをグループ化するためのgroupbyステートメントを含む。
【0151】
データストリーム言語プロセッサ200は、処理されているデータストリーム言語プログラムにおいてpublishブロックを1500で識別する。たとえば、上述のデータストリーム言語プログラムが処理されている場合には、データストリーム言語プロセッサ200は、このデータストリーム言語プログラムの最後のブロック、すなわち、publish(“dc_load”)を1500で識別する。発行モジュール350は、publishブロックに関連付けられているメトリック名を1510で決定する。たとえば、上で示されているデータストリーム言語プログラムのpublishブロックにおいては、発行モジュール350は、publishブロックに関連付けられている「dc_load」というメトリック名を1510で決定する。データストリーム言語プロセッサ200は、そのメトリック名を、結果データストリームについて記述するメタデータ属性として使用する。
【0152】
publishブロックの出力は、たとえばデータストリーム言語プログラムがgroupbyブロックを含む場合には、複数の結果データストリームを含むことができる。上述の例示的なデータストリーム言語プログラムは、それぞれのデータセンターに関して1つの、複数の結果データストリームを、すなわち、個別のデータセンター属性値を有しているすべてのデータストリームから周期的に入手された統計的な平均データ値に基づく1つの結果データストリームを生成することができる。その他のデータストリーム言語プログラムは、複数のgroupbyブロックを含むことができる。しかしながら、データストリーム言語プログラムによって生成される結果データストリームの数は、そのデータストリーム言語プログラムの最後のgroupbyブロックによって決定される。
【0153】
発行モジュール350は、データストリーム言語プログラムの最後のgroupbyブロックの属性のセットを1520で識別する。上述の例においては、groupby(“datacenter”)というブロックが、「datacenter」という単一の属性を有しており、その属性によってデータストリームがグループ化される。しかしながら、groupbyブロックは、データストリームをグループ化するための複数の属性を含むことができる。たとえば、groupby(“datacenter”, “region”)というgroupbyコマンドは、「datacenter」および「region」という2つの属性を指定し、それらの属性によってデータストリームがグループ化される。発行モジュール350は、データストリーム言語プログラムによって生成された結果データストリームを区別するための属性の識別されたセットの個別の値を使用する。
【0154】
データストリーム言語プロセッサ200(およびそのコンポーネントモジュール)は、それぞれの結果データストリームに関して下記のステップを実行する。発行モジュール350は、結果データストリームに関連付けられている最後のgroup byブロックの識別された属性の値を識別する。結果データストリームに関連付けられている識別された属性の値は、データストリームとともに受信されること、またはgroupbyブロックの入力データストリームの識別子を与えられてメタデータストア230からフェッチされることが可能である。データストリームの入力セットが、さまざまなデータセンター値、たとえば、「east」、「west」、「north」、「south」などを有しているデータストリームを含む場合には、groupbyブロックによって出力されるそれぞれの結果データストリーム(およびそのgroupbyブロックがデータストリーム言語プログラムの最後のgroupbyブロックである場合には、データストリーム言語プログラム)は、これらのデータセンター値のうちの1つに関連付けられる。groupbyブロックがグループ化のために複数の属性を指定している場合には、それぞれの結果データストリームは、グループ化のためにgroupbyブロックによって指定されているそれらの属性の値の個別のセットに関連付けられる。
【0155】
データストリームメタデータジェネレータ370は、結果データストリームに関連付けられている識別された属性の値、およびpublishブロックに関連付けられているメトリック名に基づいて、結果データストリームについて記述するメタデータを1540で生成する。たとえば、groupbyブロックが、(「east」、「west」、「north」、「south」という値を用いて)データセンター属性を指定していて、publishブロックを用いて指定されているメトリック名がcpu_loadである場合には、データストリームメタデータジェネレータ370は、それぞれの発行されたデータストリームを、cpu_loadというメトリック名、および(データストリームのグループに関連付けられている)データセンター属性の対応する値に関連付ける。データストリームメタデータジェネレータ370はまた、結果データストリームに関する識別子を生成する。データストリームメタデータジェネレータ370は、結果ストリームに関連付けられている属性を含むメタデータをメタデータストア230において1550で格納する。
【0156】
データストリーム言語プロセッサ200は、データストリーム言語プログラムの周期性によって指定されているようにデータストリーム言語プログラムを周期的に実行する。データストリーム言語プロセッサ200は、データストリーム言語プログラムが実行されたときに、それぞれの結果データストリームに関するデータを生成する。データストリーム言語プロセッサ200は、それぞれの結果データストリームに関する生成されたデータを、その結果データストリームに関する識別子に関連付けて1560で格納する。
【0157】
thresholdブロックを使用した異常検知
データストリーム言語プログラムは、データストリームのセットのデータがしきい値と比較されることを可能にするthresholdブロックをサポートする。比較されるデータストリームは、開発システム120の計測手段が組み込まれたソフトウェアから計測分析システム100によって受信されたデータストリーム、またはデータストリーム言語プログラムの1つまたは複数のブロックの実行の結果として入手されたデータストリームであることが可能である。thresholdブロックは、データポートおよびしきい値ポートを含む。データポートは、データ値を表す1つまたは複数のデータストリームを受信する。しきい値ポートは、しきい値を表す1つまたは複数のデータストリームを受信する。thresholdブロックは、データ値をしきい値と比較して、データ値が、しきい値によって指定されている範囲内にあるかどうかを決定する。実施形態においては、thresholdブロックは、複数のしきい値ポートを含む。たとえば、thresholdブロックは、低しきい値ポートおよび高しきい値ポートという2つのしきい値ポートを含むことができる。thresholdブロックは、データ値が、高しきい値ポートにおいて受信されたしきい値を下回っているかどうか、および低しきい値ポートにおいて受信されたしきい値を上回っているかどうかを決定する。
【0158】
thresholdブロックは、高しきい値および/または低しきい値の指定を可能にする。しきい値モジュール340は、着信ストリームにおいて受信されたデータ値を、thresholdブロックによって指定されたしきい値と比較することによって、thresholdブロックを処理する。thresholdブロックは、低しきい値および高しきい値を指定する。しきい値モジュール340は、thresholdブロックによって受信された入力データストリームからのデータ値が高しきい値および/または低しきい値の範囲セットから外れている場合には、イベントを生成する。言い換えれば、しきい値モジュール340は、データストリームのデータが高しきい値を超過した場合、または低しきい値よりも低下した場合には、イベントを生成する。それらのしきい値は、固定されていること、または動的であることが可能である。動的なしきい値は、データストリーム言語プログラムの実行の結果として入手される。thresholdブロックは、低/高しきい値のうちの一方または両方を指定することができる。
【0159】
thresholdブロックへの入力は、データストリーム言語プログラムのブロックを実行した結果として生成された複数のデータストリーム値、たとえば、入力データストリームのセットをグループ化した結果として入手された複数のデータストリームであることが可能である。この状況においては、低しきい値または高しきい値はまた、複数のデータストリームを生成するデータストリーム言語プログラムの出力として指定される。しきい値モジュール340は、thresholdブロックの入力ポートによって受信されたデータストリームを、低/高しきい値ポートによって受信されたデータストリームとマッチさせる。しきい値モジュール340は、入力ポートによって受信されたデータストリームのデータを、(データストリーム言語プログラムの周期性に基づく)それぞれのタイムインターバルに関して低/高しきい値ポートによって受信されたデータストリームのデータと比較し、その比較に基づくアクション(たとえば、イベントを送信すること)を行う。
【0160】
実施形態においては、thresholdブロックは、持続時間およびフラクション値を指定する。たとえば、thresholdブロックは、持続時間T(たとえば5分)を指定することができる。しきい値モジュール340は、入力データストリームのデータが、指定の持続時間Tよりも長い間にわたって指定のしきい値から外れている場合には、イベントを生成する。たとえば、入力データストリームのデータが、Tという時間単位よりも長い間にわたって高しきい値よりも高い場合には、しきい値モジュール340は、イベントを生成する。別の例として、入力データストリームのデータが、Tという時間単位よりも長い間にわたって低しきい値を下回っている場合には、しきい値モジュール340は、イベントを生成する。持続時間を指定できることは、しきい値限度から外れているデータストリームのデータの異常な挙動が、多大な量の時間にわたって持続しており、一時的な挙動ではないということを確実にする。
【0161】
実施形態においては、thresholdブロックは、持続時間Tとともにフラクション値F(たとえば0.8)を指定する。しきい値モジュール340は、入力データストリームのデータが、指定された長さTのウィンドウ中に持続時間Tの指定されたフラクションよりも長い間にわたってしきい値限度から外れている場合には、イベントを生成する。したがって、しきい値モジュール340は、たとえ入力データストリームのデータが持続時間Tの全体にわたってしきい値限度から外れていなくても、そのデータがその持続時間の少なくとも指定されたフラクションにわたってしきい値限度から外れている限り、イベントを生成する。
【0162】
図16は、実施形態による、特定の属性によってグループ化されているデータストリームに関する固定されたしきい値を伴うthresholdブロックの使用を示すデータストリーム言語プログラムの例を示している。データストリーム言語プロセッサ200は、図16において示されているデータストリーム言語プロセッサを受信し、それを処理する。
【0163】
探索モジュール310は、findブロック1610を実行して、データストリーム言語プログラム1600へ入力されるデータストリームのセットを識別する。フェッチモジュール320は、fetchブロック1615を実行して、データストリーム言語プログラムに関して指定されている周期性でデータストリームのデータをフェッチする。グループ化モジュール360は、groupbyブロック1620を実行して、findブロックによって識別されたデータストリームをデータセンター値に基づいてデータストリームのセットへとグループ化し、そのセットのそれぞれのデータストリームは、識別されたデータストリームにおいて発生している個別のデータセンター値に対応する。計算モジュール330は、statsブロック1625を実行して、それぞれのデータセンターからのデータに対応する平均値を決定する。計算モジュール330は、statsブロック1625の出力を、入力としてthresholdブロックの入力ポートへ提供する。
【0164】
しきい値モジュール340は、それぞれのデータストリーム入力のデータをthresholdブロック1630の高しきい値と比較する。図16において示されているように、thresholdブロック1630の高しきい値は、固定された値(すなわち、6という固定された値)である。したがって、(データセンターに対応する)いずれかのグループに関するデータストリームのいずれかのデータ値が、6という高しきい値を超過した場合には、しきい値モジュール340は、イベントを生成する。しきい値モジュール340は、そのイベントにおいてしきい値を超過しているデータストリームの詳細を名前/値ペアとして提供する。たとえば、しきい値モジュール340は、高しきい値を超過したデータストリームに対応するデータセンター属性値、高しきい値が超過された時刻のタイムスタンプなどの詳細を提供することができる。thresholdブロック1630は低しきい値を指定していないので、しきい値モジュール340は、thresholdブロック1630へ入力されたデータストリームのデータをいかなる低しきい値とも比較しない。
【0165】
図17は、実施形態による、メタデータ属性によってグループ化されているデータストリームに関する動的に変わるしきい値を伴うthresholdブロックを示すデータストリーム言語プログラムの例を示している。図17のthresholdブロック1760の入力ポートに入力を提供するデータブロックは、図16のthresholdブロック1630に入力を提供するデータブロックと同様である。したがって、図17のブロック1710、1715、1720、1725は、それぞれ図16のブロック1610、1615、1620、および1625に対応している。しかしながら、thresholdブロック1760の高ポートへの入力は、動的に変わる入力を受信する。さらに、thresholdブロック1760の高ポートは、入力として複数のデータストリームを受信する。しきい値モジュール340は、thresholdブロック1760の高ポートによって受信された複数のデータストリームを、入力ポートによって受信された複数のデータストリームとマッチさせる。
【0166】
フェッチモジュール320は、fetchブロック1730を実行して、データストリーム言語プログラムに関して指定されている周期性でデータストリームのデータをフェッチする。グループ化モジュール360は、groupbyブロック1735を実行して、findブロック1710によって識別されたデータストリームをデータセンター値によってデータストリームのセットへとグループ化し、そのセットのそれぞれのデータストリームは、データセンター値に対応する。ウィンドウモジュール380は、windowブロック1740を実行して、windowブロック1740へ入力されたそれぞれのデータストリームに関して1時間の移動ウィンドウに対応するデータポイントを識別する。計算モジュール330は、statsブロック1745を実行して、windowブロック1740によって出力されたそれぞれのデータストリームに対応する1時間の移動ウィンドウに関する1時間移動平均値を決定する。カスタマイズドブロックモジュール390は、データストリーム言語のビルトインブロックを組み合わせることによってユーザによって定義されたカスタマイズされたマクロを処理する。計算モジュール330は、scaleブロック1750を実行することによって150%の係数によってstatsブロック1745の出力を拡大する。scaleブロック1750の拡大された出力は、入力としてthresholdブロック1760の高ポートへ提供される。
【0167】
したがって、しきい値モジュール340は、それぞれのデータセンターからのデータストリームの平均を表す結果データストリームのセットを、150%で拡大されたそれぞれのデータセンターからのデータストリームのデータの1時間移動平均と比較する。入力ポートによって受信されたデータセンターに対応する結果データストリームのデータが、thresholdブロック1760の高ポートにおいて受信された同じデータセンターに関するデータストリームの拡大された移動平均値を超過している場合には、しきい値モジュール340は、イベントを生成する。したがって図17は、入力として受信されるデータストリームの動的に変わるセット、および比較のためにしきい値として提供されるデータストリームの動的に変わるセットの生成を示すデータストリーム言語プログラムの例を示している。
【0168】
図18は、実施形態による、thresholdブロックを含むデータストリーム言語プログラムを実行するプロセスを示すフローチャートを示している。しきい値モジュール340は、実行されているデータストリーム言語プログラムのthresholdブロックを1810で識別する。しきい値モジュール340は、入力ポート、低/高しきい値ポートを含むthresholdブロックについて記述するさまざまなコンポーネントおよびパラメータを1820で識別し、しきい値ウィンドウのサイズが指定され、しきい値ウィンドウに関連付けられているフラクション値が指定される。いくつかの実施形態においては、低および/または高しきい値は、一定の値であることが可能であり、そのケースにおいては、一定の値が、低/高しきい値ポートへの入力として指定されるか、または低/高しきい値が、(いずれの低/高しきい値ポートも指定することなく)thresholdブロックのパラメータとして指定される。
【0169】
データストリーム言語プロセッサ200は、入力ポートに入力を提供するデータストリーム言語プログラムの部分、および低/高しきい値ポートに入力を提供するデータストリーム言語プログラムの部分を実行する。この実行は、データストリーム言語プログラムに対応するジョブに関して指定されている周期性に基づいて繰り返される。しきい値モジュール340は、データストリーム言語プログラムの周期性に基づいてそれぞれのタイムインターバルに関して、入力ポートにおいて受信されたデータと、低/高しきい値ポートにおいて受信されたデータとの比較を実行する。入力ポート(または低もしくは高しきい値ポート)に入力を提供するデータストリーム言語プログラムの部分がgroupbyブロックを含む場合には、thresholdブロックの入力ポートは、データストリームのグループを受信する。それぞれのポートにおけるデータストリームの数は、対応するgroupbyブロックにおいて指定されているメタデータ属性(またはメタデータ属性のセット)の個別の値に依存する(メタデータ属性のその個別の値を有しているgroupbyブロックの入力において少なくとも1つのデータストリームがあるならば)。
【0170】
実施形態においては、データストリーム言語プロセッサ200は、入力ポートおよび低/高しきい値ポートにおいてデータを提供しているブロックを分析して、データがthresholdブロックに入力される前に発生する最後のgroupbyブロックを識別する。しきい値モジュール340は、それぞれのポートにおいて受信されたデータストリームを識別するために、たとえば、入力ポートからのデータストリームを低および/または高しきい値ポートからのデータストリームとマッチさせるために、およびデータストリームに基づいてイベントが生成された場合にイベントにおけるデータストリームを識別するために、最後のgroupbyブロックを使用する。しきい値モジュール340は、thresholdブロックの2つの異なるポートにおいて受信された2つのデータストリームが、groupbyブロックによって使用されたメタデータ属性の同じ個別の値を有している場合には、それらがマッチしているということを決定する。たとえば、thresholdブロックの2つのポートに入力として提供されるデータストリームを生成するためにデータストリーム言語プログラムによって使用されたgroupbyブロックが、データセンター属性に基づいてデータストリームをグループ化している場合には、特定のデータセンター(たとえばdatacenter east、またはdatacenter west)のデータをアグリゲートすることによって入手されたデータストリームどうしはマッチしていると決定される。
【0171】
しきい値モジュール340は、それぞれのポート(すなわち、入力ポート、低ポート、および高ポート)において受信されたそれぞれのデータストリームに関して下記の計算を実行する。しきい値モジュール340は、入力ポートにおいて受信されたデータ値を、低しきい値ポートおよび/または高しきい値ポートにおいて受信されたデータ値と1850で比較する。しきい値モジュール340は、入力ポートにおいて受信されたデータ値が、高しきい値ポートにおいて受信されたデータ値を超過しているか、または低しきい値ポートにおいて受信されたデータ値を下回っている場合には、イベントを生成する。生成されたイベントは、入力ポートにおいて受信されたデータストリームを、そのデータストリームに対応するメタデータ属性の値に基づいて識別する情報を含む。
【0172】
実施形態においては、thresholdブロックのデータポートは、メタデータ属性の第1のセット(たとえば、regionおよびdata_center)に基づいてデータストリームの入力セットをグループ化するgroup byコマンドに基づいてデータストリームの入力セットをグループ化した結果として生成された第1の複数のデータストリームを受信する。thresholdブロックのしきい値ポートは、メタデータ属性の第2のセットに基づいてデータストリームの入力セットをグループ化するgroup byコマンドに基づいてデータストリームの入力セットをグループ化した結果として生成された第2の複数のデータストリームを受信する。メタデータ属性の第2のセットは、メタデータ属性の第1のセットと同じであることが可能である。あるいは、メタデータ属性の第2のセットは、メタデータ属性の第1のセットとは異なることが可能である。とりわけ、メタデータ属性の第2のセットは、メタデータ属性の第1のセットのサブセットであることが可能である。たとえば、メタデータ属性の第1のセットがregionおよびdata_centerを含む場合に、メタデータ属性の第2のセットは、regionのみを含む。別の例として、メタデータ属性の第1のセットは、region、data_center、machine_idを含み、メタデータ属性の第2のセットは、regionおよびdata_centerのみを含む。したがって、しきい値入力は、thresholdブロックのデータ入力よりも少ないデータストリームを受信する。結果として、データポートにおいて受信された複数のデータストリームは、しきい値ポートにおいて受信された同じデータストリームと比較されることが可能である。上述の例においては、データポートは、region、data_center、machine_idの値のそれぞれの個別の組合せに関するデータストリームを受信し、しきい値ポートは、region、data_centerの値のそれぞれの個別の組合せに関するデータストリームを受信する。したがって、データポートにおいて受信されたregionおよびdata_centerに対応するすべてのデータストリームは、データポートにおいて受信されたデータストリームに関連付けられているmachine_idの値にかかわらずに、しきい値ポートにおいて受信された同じデータストリームと比較される。
【0173】
thresholdブロックがしきい値ウィンドウを指定している場合には、しきい値モジュール340は、指定されているしきい値ウィンドウサイズの最後のウィンドウ中に受信された入力ポートにおけるすべてのデータポイントを、低および/または高しきい値ポートにおいて受信されたデータ値と比較する。識別されたウィンドウ中に発生するすべてのデータ値が、しきい値に基づいて指定の境界から外れている(すなわち、高しきい値よりも大きいか、または低しきい値を下回っている)場合には、thresholdブロックは、イベントを生成する。
【0174】
thresholdブロックが、しきい値ウィンドウサイズに加えてフラクションパラメータを指定している場合には、しきい値モジュール340は、指定されているしきい値ウィンドウサイズの最後のウィンドウ中に入力ポートにおいて受信されたデータポイントを、低および/または高しきい値ポートにおいて受信されたデータ値と比較する。しきい値モジュール340は、識別されたウィンドウからのデータポイントの指定されているフラクションよりも多くが、thresholdブロックによって指定されている範囲から外れている場合には、イベントを生成する。たとえば、フラクション値が0.75(すなわち、75%)である場合には、しきい値モジュール340は、識別されたウィンドウからのデータポイントの75%よりも多くが、thresholdブロックによって指定されている範囲から外れている場合には、イベントを生成する。実施形態においては、しきい値モジュール340は、識別されたウィンドウの指定されているフラクションよりも多くの間に発生するデータポイントが、thresholdブロックによって指定されている範囲から外れている場合には、イベントを生成する。たとえば、フラクション値が0.75(すなわち、75%)である場合には、しきい値モジュール340は、識別されたウィンドウの75%よりも多くの間に発生するデータポイントが、thresholdブロックによって指定されている範囲から外れている場合には、イベントを生成する。
【0175】
データストリーム言語プログラムに関するカスタマイズされたブロック
データストリーム言語の既存のビルトインブロックを組み合わせることによって、カスタマイズされたブロックがユーザによって指定されることが可能である。カスタマイズされたブロックは、マクロブロックまたはカスタマイズされたマクロブロックとも呼ばれる。カスタマイズされたマクロブロックを定義できることは、データストリーム言語を拡張可能にする。カスタマイズされたブロックは、ビルトインブロックと同様、データストリーム言語プログラムに含まれることが可能である。カスタマイズされたブロックは、その他のカスタマイズされたマクロブロックを使用して、カスタマイズされたマクロブロックの任意のネスティングを可能にすることができる。ユーザは、カスタマイズされたブロックを使用して任意のアブストラクションを指定することができる。カスタマイズされたブロックは、そのカスタマイズされたマクロブロックを含むデータストリーム言語プログラムを実行するジョブに関して指定されている周期性で実行される。カスタマイズドブロックモジュール390は、それぞれのタイムインターバルに関して、カスタマイズされたマクロブロックのそれぞれの入力ポートに関する入力値を決定する。
【0176】
カスタマイズドブロックモジュール390は、カスタマイズされたマクロブロックの命令を実行し、それぞれの出力ポートに関するデータ値を生成する。出力ポートからの出力値は、後続のブロックへ提供されることが可能である。カスタマイズされたブロックへの入力が、groupbyブロックを含むブロックを含んでいる場合には、入力ポートは、入力として複数のデータストリームを受信することができる。カスタマイズドブロックモジュール390は、入力において受信されたそれぞれのデータストリームのそれぞれのデータポイントに関してカスタマイズドブロックモジュール390の命令を実行する。データストリームの数は、カスタマイズされたマクロブロックを含むデータストリーム言語プログラムによって受信されるデータストリームのセット全体における変化に基づいて動的に変わっている場合がある。カスタマイズされたマクロブロックは、そのカスタマイズされたブロックの命令において使用される1つまたは複数のパラメータに関連付けられることが可能である。カスタマイズされたマクロブロックの命令は、パラメータ値を使用する。しかしながら、カスタマイズされたマクロブロックがデータストリーム言語プログラムにおいて指定される場合には、それぞれのパラメータに関する特定の値が提供される。したがって、カスタマイズドブロックモジュール390は、カスタマイズされたマクロブロックの命令を実行している間は、パラメータ値の代わりにパラメータ名を使用する。
【0177】
図19は、実施形態による、データストリームのグループを含む入力に適用されるユーザ定義関数に基づいて結果データストリームを生成するためのカスタマイズされたブロックの使用を示すデータストリーム言語プログラムの例を示している。例示的なカスタマイズされたマクロブロック1960は、2つの入力データストリームのデータを組み合わせて、入力データ値に基づいて関数を生成する。combineブロック1960は、hitsおよびmissesという2つの入力ポート、ならびにoutという1つの出力ポートを有している。それぞれの入力ポートへの入力は、データストリーム言語プログラムの部分によって生成される。
【0178】
たとえば、hitsという入力ポートへの入力は、statsブロック1925の出力として生成され、missesという入力ポートの入力は、startsブロック1945の出力として生成される。探索モジュール310は、findブロック1900を実行して、cacheHitsというメトリック値を有する計測分析システム100によって受信されたすべてのデータストリームを見つけ出す。たとえば、探索モジュール310は、findブロック1900を実行して、キャッシュヒットの値を提供する開発システム120から受信されたすべてのデータストリームを見つけ出すことができる。フェッチモジュール320は、fetchブロック1915を実行して、findブロック1900によって識別されたデータストリームのデータをフェッチする。グループ化モジュールは、groupbyブロック1920を実行して、データセンター属性によってデータストリームをグループ化する。計算モジュール330は、statsブロック1925を実行して、それぞれの個別のデータセンターに関するすべてのデータストリームからのデータの平均を生成し、そのデータを、入力としてcombineブロック1960のhitsポートへ提供する。
【0179】
同様に、探索モジュール310は、findブロック1910を実行して、cacheMissesというメトリック値を有する計測分析システム100によって受信されたすべてのデータストリームを見つけ出す。たとえば、探索モジュール310は、findブロック1910を実行して、キャッシュミスの値を提供する開発システム120から受信されたすべてのデータストリームを見つけ出すことができる。フェッチモジュール320は、fetchブロック1930を実行して、findブロック1900によって識別されたデータストリームのデータをフェッチする。グループ化モジュールは、groupbyブロック1935を実行して、データセンター属性によってデータストリームをグループ化する。計算モジュール330は、statsブロック1945を実行して、それぞれの個別のデータセンターに関するすべてのデータストリームからのデータの平均を生成し、そのデータを、入力としてcombineブロック1960のhitsポートへ提供する。
【0180】
カスタマイズドブロックモジュール390は、combineブロックに関して指定された命令のセット1910を実行する。したがって、それぞれのタイムインターバルに関して、カスタマイズドブロックモジュール390は、Hが、hits入力ポートにおいて受信されたデータ値を表しており、Mが、missesポートにおいて受信されたミスの値を表している場合に、H/(H+M)の値を決定する。カスタマイズドブロックモジュール390は、上述の式の値を出力ポートに提供する。データストリーム言語プロセッサ200は、出力ポートからのデータ値を、後続のブロックがあればそのブロックの入力ポートへ提供する。
【0181】
図20は、実施形態による、カスタマイズされたブロックを伴うデータストリーム言語プログラムを実行するプロセスを示すフローチャートを示している。データストリーム言語プロセッサは、データストリーム言語プログラムのカスタマイズされたブロックを2010で識別する。カスタマイズドブロックモジュール390は、カスタマイズされたブロックの入力ポートおよび出力ポートを2020で識別する。カスタマイズされたブロックがパラメータ値を指定している場合には、カスタマイズドブロックモジュール390は、パラメータの代わりに使用されることになる値を受信し、それらの値を、カスタマイズされたブロックによって指定された命令において代用する。
【0182】
カスタマイズドブロックモジュール390は、それぞれのタイムインターバルに関して下記のステップを繰り返す。カスタマイズドブロックモジュール390は、それぞれの入力ポートに関する入力データ値を決定する。入力ポートに関する入力を生成するデータストリーム言語プログラムの部分がgroupbyブロックを含む場合には、そのポートへの入力は、そのgroupbyブロックによって生成されたそれぞれのデータストリームに対応する複数のデータ値を含むことができる。
【0183】
カスタマイズドブロックモジュール390は、それぞれのデータ値に関して、カスタマイズされたブロックの命令を実行する。それぞれのポートにおいて入力された複数のデータストリームがある場合には、カスタマイズドブロックモジュール390は、それぞれの入力ポートに関するgroupbyブロックのメタデータ属性の値どうしを比較することによって、マッチするデータストリームを識別する。カスタマイズドブロックモジュール390は、入力ポートへ入力されるそれぞれのデータストリームに関する命令を2040で実行する。入力ポートが、一定の入力値を有していて、別の入力ポートが、複数のデータストリームを有している場合には、カスタマイズドブロックモジュール390は、その一定の値をその別の入力ポートのそれぞれのデータストリームに適用する。
【0184】
カスタマイズドブロックモジュール390は、カスタマイズされたブロックの命令の実行の結果の値を、カスタマイズされたブロックの命令において指定されているように出力ポートに提供する。データストリーム言語プロセッサ200は、出力ポートにおける値を、出力ポートに接続されているデータストリーム言語プログラムのブロックに提供する。カスタマイズされたブロックは、出力ポートにおいて複数のデータストリームを出力することができる。たとえば、カスタマイズされたブロックの入力ポートは、複数のデータストリームをそれぞれ受信することができ、カスタマイズされたブロックは、それぞれの入力ポートにおいて受信されたマッチしているデータストリームからの値を含むタプル上で特定の計算を実行することができる。
【0185】
カスタマイズされたデータブロックの命令は、その他のカスタマイズされたデータブロックを含むことができる。したがって、図20において示されている上述のプロセスは、それぞれのカスタマイズされたブロックに関して実行される。
【0186】
データストリーム言語プログラムを使用してレポートを生成するためのユーザインターフェース
いくつかの実施形態においては、計測分析システム100は、データストリームに基づくレポートを見ることに関心があるエンドユーザのためにデータストリーム言語プログラムを生成するユーザインターフェースを提供する。ユーザは、データストリーム言語の複雑さを隠すユーザフレンドリーなユーザインターフェースを提供される。計測分析システムによって提供されたユーザインターフェースは、レポートを生成すること、ロールアップを実行すること、データストリームをグループ化することなどを行うためのメトリックを選択するなどのアクションをユーザが取ることを可能にするさまざまなウィジェットを示している。
【0187】
図21は、実施形態による、計測分析システムによって受信されたデータストリームを示すデータストリーム言語プログラムの実行の結果を表示しているユーザインターフェースのスクリーンショットを示している。このスクリーンショットは、service.cache.hitsというメトリック2120を表すデータストリームを表示しているいくつかのチャート2120を示している。このメトリックは、開発システム120上で実行している計測手段が組み込まれたソフトウェアから受信されたキャッシュヒット値を表している。これらの値は、1秒のタイムインターバルへロールアップされる。したがって、それぞれの1秒のタイムインターバルにおいて受信されたキャッシュヒット値が足し合わされる。service.cache.hitsというメトリックを報告する多数のサービスが存在することがあり、それに応じて多数のチャート2120が表示される。図21は、ユーザがアクションを取ること、たとえば、ユーザインターフェースによって報告されるメトリックを選択することや、ロールアップを実行することを可能にするさまざまなウィジェットを示している。
【0188】
図22は、実施形態による、計測分析システムによって受信されたデータストリームのデータの1分平均を示すデータストリーム言語プログラムの実行の結果を表示しているユーザインターフェースのスクリーンショットを示している。図22は、データストリーム上で実行されることになる特定の計算をユーザが指定することを可能にするウィジェットを示している。具体的には、図22は、それぞれのデータストリームに関する1分平均を計算するウィジェット2220を示している。結果として、チャート2210は、図21において示されているチャートよりも平滑である。しかしながら、図22において示されているチャート2210の数は、図21において示されているチャート2210の数と同じである。
【0189】
大企業は、非常に多数の開発システム120を有する場合がある。それぞれの開発システムは、複数のサービスを実行する場合があり、それぞれのサービスがメトリックを報告する。結果として、図21および図22において表示されているチャートの数は、非常に多くなる可能性がある。ユーザは、図23において示されているようにデータストリームをグループ化することにより、データストリームによって報告されたデータへのよりよい洞察を得ることができる。
【0190】
図23は、実施形態による、データセンターによってグループ化されたデータストリームの合計を示すデータストリーム言語プログラムの実行の結果を表示しているユーザインターフェースのスクリーンショットを示している。図23は、属性の指定を可能にするウィジェット2320を示しており、その属性によってデータストリームがグループ化され、それぞれのグループに関してアグリゲーションオペレーションが実行される。図23において示されているように、ユーザは、データセンターによってグループ化を行うこと、およびそれぞれのグループに関して合計オペレーションを実行することを要求している。2つのデータセンターしかないと想定して、チャートの数は、2つに削減されている。それぞれのチャート2310は、特定のデータセンターから受信されたデータストリームのデータ値の合計を示している。
【0191】
図24は、実施形態による、データセンターによってグループ化されたデータストリームに関する、キャッシュヒット率と、キャッシュヒット率およびミス率の合計との比率を決定するカスタマイズされたマクロブロックを含むデータストリーム言語プログラムの実行の結果を表示しているユーザインターフェースのスクリーンショットを示している。図24において示されているように、ユーザは、ウィジェット2430を使用してservice.cache.hitというメトリックを報告するデータストリームをAと呼ぶ。ユーザはさらに、ウィジェット2440を使用してservice.cache.missというメトリックを報告するデータストリームをBと呼ぶ。ユーザは、計算A/(A+B)を、キャッシュヒットおよびキャッシュミスの合計に対するキャッシュヒットの比率と定義する。ユーザはさらに、ウィジェット2450を使用して、計算されたA/(A+B)の値が100の倍数によって拡大されるべきであるということを指定している。この計算は、データセンターに基づいてデータストリームのそれぞれのグループに関して実行される。したがってチャート2410は、それぞれのデータセンターに関して生成されて、そのデータセンターから受信されたすべてのデータストリームに関してキャッシュヒット比率のリアルタイムの値を報告する。
【0192】
代替実施形態
本発明の図および記述は、本発明を明確に理解することに関連している要素を例示するように簡略化されており、その一方で明確さの目的から、典型的なシステムにおいて見受けられるその他の多くの要素を除外しているということを理解されたい。その他の要素および/またはステップも、本発明を実施する上で望ましく、および/または必要とされるということを当技術分野における標準的な技術者なら認識することができる。しかしながら、そのような要素およびステップは当技術分野においてよく知られているので、ならびにそれらは、本発明のさらによい理解を容易にするものではないので、そのような要素およびステップの論考は、本明細書においては提供されていない。本明細書における開示は、当業者に知られているそのような要素および方法に対するすべてのそのような変形形態および修正形態にも向けられている。
【0193】
上述の記述のいくつかの部分は、情報に関するオペレーションのアルゴリズムおよびシンボル表示という点から実施形態について記述している。これらのアルゴリズム的な記述および表示は一般に、データ処理技術分野における技術者たちによって、それらの技術者たちの作業の実体を他の当業者たちに対して効果的に伝達するために使用されている。これらのオペレーションは、機能的に、計算処理的に、または論理的に記述されているが、コンピュータプログラムまたは均等な電気回路、マイクロコードなどによって実施されるということが理解される。さらに、一般性を失うことなく、モジュールとしてオペレーションのこれらの構成に言及することが時として好都合であることもわかっている。記述されているオペレーションおよびそれらの関連付けられているモジュールは、ソフトウェア、ファームウェア、ハードウェア、またはそれらの任意の組合せで具体化されることが可能である。
【0194】
本明細書において使用される際には、「一実施形態」または「実施形態」へのいかなる言及も、その実施形態に関連して記述されている特定の要素、機能、構造、または特徴が、少なくとも1つの実施形態に含まれているということを意味する。「一実施形態においては」という語句が、本明細書におけるさまざまな個所に登場しても、それらは、必ずしもすべて同じ実施形態を指しているとは限らない。
【0195】
いくつかの実施形態は、「結合される」および「接続される」という表現をそれらの派生語とともに使用して記述されているかもしれない。これらの用語は、互いにとっての同義語として意図されているものではないということを理解されたい。たとえば、いくつかの実施形態は、複数の要素が互いに直接の物理的なまたは電気的な接触状態にあるということを示すために、「接続される」という用語を使用して記述されているかもしれない。別の例においては、いくつかの実施形態は、複数の要素が直接の物理的なまたは電気的な接触状態にあるということを示すために、「結合される」という用語を使用して記述されているかもしれない。しかしながら、「結合される」という用語は、複数の要素が互いに直接の接触状態にはないが、それでもなお互いに協力または対話しているということを意味する場合もある。実施形態は、このコンテキストにおいて限定されるものではない。
【0196】
本明細書において使用される際には、「comprises」、「comprising」、「includes」、「including」、「has」、「having」という用語、またはそれらのその他の任意の変形は、非排他的な包含をカバーすることを意図されている。たとえば、要素のリストを含むプロセス、方法、製品、または装置は、それらの要素だけに必ずしも限定されず、明示的にリストアップされてはいない、またはそのようなプロセス、方法、製品、もしくは装置に固有のその他の要素を含むことができる。さらに、そうではないと明示されていない限り、「または(もしくは)」は、排他的な「または(もしくは)」ではなく、包括的な「または(もしくは)」を指す。たとえば、AまたはBという条件は、「Aが真であり(または存在して)、Bが偽である(または存在しない)」、「Aが偽であり(または存在せず)、Bが真である(または存在する)」、ならびに「AおよびBの両方が真である(または存在する)」のうちのいずれか1つによって満たされる。
【0197】
加えて、「a」または「an」の使用は、本明細書における実施形態の要素およびコンポーネントについて記述するために採用されている。これは、便宜上、および本発明の一般的な意味を与えるために行われているにすぎない。この記述は、1つまたは少なくとも1つを含むと読み取られるべきであり、単数は複数も含む(ただし、そうではないことが意味されているということが明らかである場合は除く)。当業者なら、本開示を読めば、本明細書における開示されている原理を通じて、計測手段が組み込まれたソフトウェアに基づいてレポートを生成するためのシステムおよびプロセスのためのまたさらなる代替の構造的なおよび機能的な設計を理解するであろう。したがって、特定の実施形態および応用例が示され記述されているが、開示されている実施形態は、本明細書において開示されている厳密な構造およびコンポーネントに限定されるものではないということを理解されたい。当業者にとって明らかであろうさまざまな修正、変更、および変形が、添付の特許請求の範囲において定義されている趣旨および範囲から逸脱することなく、本明細書において開示されている方法および装置の構成、オペレーション、および詳細において行われることが可能である。
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13A
図13B
図14
図15
図16
図17
図18
図19
図20
図21
図22
図23
図24