(57)【要約】【課題】計測されたソフトウェアから受信されたデータストリームを処理する。【解決手段】計測分析システムが、データストリーム言語プログラムを使用して指定された命令を実行してデータストリームを処理する。データストリーム言語は、ユーザがデータストリーム言語プログラムにより処理されるデータストリームのセットを識別するためにｆｉｎｄブロックを使用して検索条件を指定することを可能にする。識別されるデータストリームのセットは動的に変わり得る。データストリーム言語は、ユーザが、入力データストリームに関連付けられている１以上のメタデータ属性の個別の値に基づきデータストリームをデータストリームのセットにグループ化することを可能にする。データストリーム言語は、入力データストリームのデータ値が低／高しきい値を使用して指定されている境界外にあるかを決定するためにユーザがｔｈｒｅｓｈｏｌｄブロックを指定することを可能にする。【選択図】図１
2020074157.tif 000002
【特許請求の範囲】
【請求項１】
データストリーム言語プログラムを使用してデータストリームの動的に変わるセットを処理するための方法であって、
複数のデータストリームについて記述するメタデータを計測分析システムによって格納するステップと、
データストリーム言語を使用して指定された命令のセットを含むデータストリーム言語プログラムを受信するステップであって、前記命令は、検索式に関連付けられているｆｉｎｄブロックを含み、前記検索式は、データストリームに関連付けられているメタデータ属性に基づく、受信するステップと、
前記検索式を評価して、前記検索式に適合する前記複数のデータストリームからのデータストリームのセットを識別するステップと、
前記データストリーム言語プログラムを繰り返し実行するステップであって、前記実行は、
データストリームの前記識別されたセットのそれぞれのデータストリームからデータ値を受信するステップ、
前記データストリーム言語プログラムのそれぞれのブロックを実行するステップ、
前記実行に基づいて１つまたは複数の結果データ値を生成するステップであって、前記結果データ値は、前記データストリーム言語プログラムによって生成される結果データストリームに対応する、生成するステップ、および
前記１つまたは複数の結果データ値を格納するステップを含む、繰り返し実行するステップとを含むことを特徴とする方法。
【請求項２】
前記検索式は、前記データストリーム言語プログラムの前記実行中に繰り返し評価されることを特徴とする請求項１に記載の方法。
【請求項３】
第１のタイムインターバル中に評価された識別されたデータストリームの前記セットは、第２のタイムインターバル中に評価された識別されたデータストリームの前記セットとは異なることを特徴とする請求項２に記載の方法。
【請求項４】
前記ｆｉｎｄブロックは、周期性に関連付けられており、前記検索式は、前記ｆｉｎｄブロックに関連付けられている周期性に基づいて決定されたそれぞれのタイムインターバルに関して周期的に評価されることを特徴とする請求項２に記載の方法。
【請求項５】
前記検索式は、前記データストリームに関連付けられているメタデータにおける変化に応答して評価されることを特徴とする請求項２に記載の方法。
【請求項６】
前記検索式は、前記複数のデータストリームにおける変化に応答して評価され、前記変化は、データストリームの追加またはデータストリームの削除を含むことを特徴とする請求項２に記載の方法。
【請求項７】
前記検索式は、前記検索式の仕様における変化に応答して評価されることを特徴とする請求項２に記載の方法。
【請求項８】
前記ｆｉｎｄブロックが実行される割合は、前記データストリーム言語プログラムの１つまたは複数のその他のブロックが実行される割合とは異なることを特徴とする請求項７に記載の方法。
【請求項９】
前記複数のデータストリームは、外部システムから受信されるデータストリームを含むことを特徴とする請求項１に記載の方法。
【請求項１０】
前記複数のデータストリームは、別のデータストリーム言語プログラムの実行の結果として生成されるデータストリームを含むことを特徴とする請求項１に記載の方法。
【請求項１１】
前記検索式は、データストリームに関連付けられているメタデータに基づく正規表現であることを特徴とする請求項１に記載の方法。
【請求項１２】
その上に命令を格納しているコンピュータ可読非一時的ストレージメディアであって、前記命令は、プロセッサによって実行されたときに、
複数のデータストリームを計測分析システムによって格納するステップであって、それぞれのデータストリームはメタデータ属性に関連付けられている、格納するステップと、
データストリーム言語を使用して指定された命令のセットを含むデータストリーム言語プログラムを受信するステップであって、前記命令は、検索式に関連付けられているｆｉｎｄブロックを含み、前記検索式は、データストリームに関連付けられているメタデータ属性に基づく、受信するステップと、
前記検索式を評価して、前記検索式に適合する前記複数のデータストリームからのデータストリームのセットを識別するステップと、
前記データストリーム言語プログラムを繰り返し実行するステップであって、前記実行は、
データストリームの前記識別されたセットのそれぞれのデータストリームからデータ値を受信するステップ、
前記データストリーム言語プログラムのそれぞれのブロックを実行するステップ、
前記実行に基づいて１つまたは複数の結果データ値を生成するステップであって、前記結果データ値は、前記データストリーム言語プログラムによって生成される結果データストリームに対応する、生成するステップ、および
前記１つまたは複数の結果データ値を格納するステップを含む、繰り返し実行するステップとを前記プロセッサに実行させることを特徴とするコンピュータ可読非一時的ストレージメディア。
【請求項１３】
前記検索式は、前記データストリーム言語プログラムの前記実行中に繰り返し評価されることを特徴とする請求項１２に記載のコンピュータ可読非一時的ストレージメディア。
【請求項１４】
第１のタイムインターバル中に評価された識別されたデータストリームの前記セットは、第２のタイムインターバル中に評価された識別されたデータストリームの前記セットとは異なることを特徴とする請求項１３に記載のコンピュータ可読非一時的ストレージメディア。
【請求項１５】
前記ｆｉｎｄブロックは、周期性に関連付けられており、前記検索式は、前記ｆｉｎｄブロックに関連付けられている周期性に基づいて決定されたそれぞれのタイムインターバルに関して周期的に評価されることを特徴とする請求項１３に記載のコンピュータ可読非一時的ストレージメディア。
【請求項１６】
前記検索式は、前記データストリームに関連付けられているメタデータにおける変化に応答して評価されることを特徴とする請求項１２に記載のコンピュータ可読非一時的ストレージメディア。
【請求項１７】
前記検索式は、前記複数のデータストリームにおける変化に応答して評価され、前記変化は、データストリームの追加またはデータストリームの削除を含むことを特徴とする請求項１２に記載のコンピュータ可読非一時的ストレージメディア。
【請求項１８】
前記ｆｉｎｄブロックは、周期性に関連付けられており、前記検索式は、前記ｆｉｎｄブロックに関連付けられている周期性に基づいて決定されたそれぞれのタイムインターバルに関して周期的に評価されることを特徴とする請求項１２に記載のコンピュータ可読非一時的ストレージメディア。
【請求項１９】
前記ｆｉｎｄブロックが実行される割合は、前記データストリーム言語プログラムの１つまたは複数のその他のブロックが実行される割合とは異なることを特徴とする請求項１８に記載のコンピュータ可読非一時的ストレージメディア。
【請求項２０】
計測されたソフトウェアによって生成されたデータを処理するためのコンピュータ実施システムであって、
コンピュータプロセッサと、
その上に命令を格納しているコンピュータ可読非一時的ストレージメディアであって、前記命令は、プロセッサによって実行されたときに、
複数のデータストリームを計測分析システムによって格納するステップであって、それぞれのデータストリームはメタデータ属性に関連付けられている、格納するステップ、
データストリーム言語を使用して指定された命令のセットを含むデータストリーム言語プログラムを受信するステップであって、前記命令は、検索式に関連付けられているｆｉｎｄブロックを含み、前記検索式は、データストリームに関連付けられているメタデータ属性に基づく、受信するステップ、
前記検索式を評価して、前記検索式に適合する前記複数のデータストリームからのデータストリームのセットを識別するステップ、ならびに
前記データストリーム言語プログラムを繰り返し実行するステップであって、前記実行は、
データストリームの前記識別されたセットのそれぞれのデータストリームからデータ値を受信するステップ、
前記データストリーム言語プログラムのそれぞれのブロックを実行するステップ、
前記実行に基づいて１つまたは複数の結果データ値を生成するステップであって、前記結果データ値は、前記データストリーム言語プログラムによって生成される結果データストリームに対応する、生成するステップ、および
前記１つまたは複数の結果データ値を格納するステップを含む、繰り返し実行するステップを前記プロセッサに実行させるコンピュータ可読非一時的ストレージメディアとを含むことを特徴とするシステム。
【請求項２１】
データストリーム言語プログラムによって生成されるデータストリームを生成して格納するための方法であって、
複数のデータストリームからデータを受信するステップと、
前記複数のデータストリームについて記述するメタデータを格納するステップであって、それぞれのデータストリームに関する前記メタデータは、前記データストリームに関連付けられている１つまたは複数の属性を含む、格納するステップと、
前記複数のデータストリームを処理するためにデータストリーム言語プログラムを使用して指定された命令のセットを受信するステップと、
命令の前記セットを実行することによって１つまたは複数の結果データストリームを生成するステップと、
前記１つまたは複数の結果データストリームのそれぞれに関して、
前記結果データストリームについて記述する属性の値のセットを決定するステップであって、前記決定は命令の前記セットに基づく、決定するステップと、
前記結果データストリームについて記述するメタデータとして値の前記セットを格納するステップと、
前記結果データストリームに関する識別子を生成して、前記識別子を、前記結果データストリームについて記述する前記メタデータに関連付けるステップと、
前記結果データストリームのデータを前記識別子に関連付けて格納するステップとを含むことを特徴とする方法。
【請求項２２】
属性の値の前記セットは、前記データストリーム言語プログラムにおいて指定されているグループ化コマンドに基づくことを特徴とする請求項２１に記載の方法。
【請求項２３】
前記データストリーム言語プログラムは、複数のグループ化コマンドを指定し、属性の値の前記セットは、前記データストリーム言語プログラムにおいて指定されている前記複数のグループ化コマンドからの最後のグループ化コマンドに基づくことを特徴とする請求項２２に記載の方法。
【請求項２４】
前記グループ化コマンドは、メタデータ属性のセットによって前記データストリームの前記データをグループ化し、それぞれの結果データストリームは、メタデータ属性の前記セットの値の個別のセットに対応することを特徴とする請求項２２に記載の方法。
【請求項２５】
前記結果データストリームの前記データを、別のデータストリーム言語プログラムの別のブロックへの入力として使用するステップ
をさらに含むことを特徴とする請求項２１に記載の方法。
【請求項２６】
前記結果データストリームの前記データを、スクリーン上に表示するために送信するステップ
をさらに含むことを特徴とする請求項２１に記載の方法。
【請求項２７】
結果データストリームの前記セットは、ｐｕｂｌｉｓｈブロックに関連付けられており、前記ｐｕｂｌｉｓｈブロックは、メトリック名に関連付けられており、前記方法は、
前記ｐｕｂｌｉｓｈブロックの前記メトリック名を、前記結果データストリームのそれぞれについて記述する属性として使用するステップと、
前記メトリック名に基づく前記属性を、前記データストリームについて記述する前記メタデータとともに格納するステップとをさらに含むことを特徴とする請求項２１に記載の方法。
【請求項２８】
前記複数のデータストリームからの１つまたは複数のデータストリームは、外部システム上で実行している計測されたソフトウェアのインスタンスによって生成されることを特徴とする請求項２１に記載の方法。
【請求項２９】
前記複数のデータストリームからの１つまたは複数のデータストリームは、別のデータストリーム言語プログラムの命令の実行の結果として入手される結果データストリームとして生成されることを特徴とする請求項２１に記載の方法。
【請求項３０】
データストリーム言語プログラムに基づいてデータストリームを生成して格納するための方法であって、
複数のデータストリームからデータを受信するステップであって、それぞれのデータストリームは、システム上で実行している計測されたソフトウェアのインスタンスによって生成される、受信するステップと、
前記複数のデータストリームについて記述するメタデータを格納するステップであって、それぞれのデータストリームに関する前記メタデータは、前記データストリームに関連付けられている１つまたは複数の属性を含む、格納するステップと、
前記複数のデータストリームを処理するためにデータストリーム言語プログラムを使用して指定された命令のセットを受信するステップであって、前記命令は、データストリームをグループ化するための１つまたは複数のグループ化コマンドを含み、それぞれのグループ化コマンドは、データストリームの１つまたは複数の属性およびアグリゲーションオペレーションに関連付けられている、受信するステップと、
命令の前記セットを実行することによって１つまたは複数の結果データストリームを生成するステップと、
命令の前記セットにおいて実行された最後のグループ化コマンドを識別するステップと、
前記最後のグループ化コマンドに関連付けられている属性の前記セットを決定するステップと、
前記１つまたは複数の結果データストリームのそれぞれに関して、
前記結果データストリームに関連付けられている前記最後のグループ化コマンドの属性のセットの値を決定するステップと、
前記結果データストリームについて記述するメタデータとして前記最後のグループ化コマンドの属性の前記セットの前記値を格納するステップと、
前記結果データストリームに関する識別子を生成して、前記識別子を、前記データストリームについて記述する前記メタデータに関連付けるステップと、
前記結果データストリームのデータを前記識別子に関連付けて格納するステップとを含むことを特徴とする方法。
【請求項３１】
複数のデータストリームからデータを受信するための命令と、
前記複数のデータストリームについて記述するメタデータを格納するための命令であって、それぞれのデータストリームに関する前記メタデータは、前記データストリームに関連付けられている１つまたは複数の属性を含む、命令と、
前記複数のデータストリームを処理するためにデータストリーム言語プログラムを使用して指定された命令のセットを受信するための命令と、
命令の前記セットを実行することによって１つまたは複数の結果データストリームを生成するための命令と、
前記１つまたは複数の結果データストリームのそれぞれに関して、
前記結果データストリームについて記述する属性の値のセットを決定するための命令であって、前記決定は命令の前記セットに基づく、命令と、
前記結果データストリームについて記述するメタデータとして値の前記セットを格納するための命令と、
前記結果データストリームに関する識別子を生成して、前記識別子を、前記結果データストリームについて記述する前記メタデータに関連付けるための命令と、
前記結果データストリームのデータを前記識別子に関連付けて格納するための命令と
を格納していることを特徴とするコンピュータ可読非一時的ストレージメディア。
【請求項３２】
前記メタデータについて記述する値の前記セットは、前記データストリーム言語プログラムにおいて指定されているグループ化コマンドに基づくことを特徴とする請求項３１に記載のコンピュータ可読非一時的ストレージメディア。
【請求項３３】
前記データストリーム言語プログラムは、複数のグループ化コマンドを指定し、属性の値の前記セットは、前記データストリーム言語プログラムにおいて指定されている前記複数のグループ化コマンドからの最後のグループ化コマンドに基づくことを特徴とする請求項３２に記載のコンピュータ可読非一時的ストレージメディア。
【請求項３４】
前記グループ化コマンドは、メタデータ属性のセットによって前記データストリームの前記データをグループ化し、それぞれの結果データストリームは、メタデータ属性の前記セットの値の個別のセットに対応することを特徴とする請求項３２に記載のコンピュータ可読非一時的ストレージメディア。
【請求項３５】
結果データストリームの前記セットは、ｐｕｂｌｉｓｈブロックに関連付けられており、前記ｐｕｂｌｉｓｈブロックは、メトリック名に関連付けられており、前記コンピュータ可読非一時的ストレージメディアは、
前記ｐｕｂｌｉｓｈブロックの前記メトリック名を、前記結果データストリームのそれぞれについて記述する属性として使用するための命令と、
前記メトリック名に基づく前記属性を、前記データストリームについて記述する前記メタデータとともに格納するための命令とをさらに格納していることを特徴とする請求項３１に記載のコンピュータ可読非一時的ストレージメディア。
【請求項３６】
結果ストリームの前記データを、別のデータストリーム言語プログラムの別のブロックへの入力として使用するための命令
をさらに格納していることを特徴とする請求項３１に記載のコンピュータ可読非一時的ストレージメディア。
【請求項３７】
結果ストリームの前記データを、スクリーン上に表示するために送信するための命令
をさらに格納していることを特徴とする請求項３１に記載のコンピュータ可読非一時的ストレージメディア。
【請求項３８】
前記複数のデータストリームからの１つまたは複数のデータストリームは、外部システム上で実行している計測されたソフトウェアのインスタンスによって生成されることを特徴とする請求項３１に記載のコンピュータ可読非一時的ストレージメディア。
【請求項３９】
前記複数のデータストリームからの１つまたは複数のデータストリームは、別のデータストリーム言語プログラムの命令の実行の結果として入手される結果データストリームとして生成されることを特徴とする請求項３１に記載のコンピュータ可読非一時的ストレージメディア。
【請求項４０】
コンピュータプロセッサと、
複数のデータストリームからデータを受信するための命令、
前記複数のデータストリームについて記述するメタデータを格納するための命令であって、それぞれのデータストリームに関する前記メタデータは、前記データストリームに関連付けられている１つまたは複数の属性を含む、格納するための命令、
前記複数のデータストリームを処理するためにデータストリーム言語プログラムを使用して指定された命令のセットを受信するための命令、
命令の前記セットを実行することによって１つまたは複数の結果データストリームを生成するための命令、
前記１つまたは複数の結果データストリームのそれぞれに関して、
命令の前記セットに基づいて、前記結果データストリームについて記述する属性の値のセットを決定するための命令、
前記結果データストリームについて記述するメタデータとして値の前記セットを格納するための命令、
時系列に関する時系列識別子を生成して、前記時系列識別子を、前記データストリームについて記述する前記メタデータに関連付けるための命令、および
前記結果データストリームのデータを前記時系列識別子に関連付けて格納するための命令
を格納しているコンピュータ可読非一時的ストレージメディアと
を含むことを特徴とするコンピュータシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、一般にはデータストリーム処理に関し、より具体的には、計測されたソフトウェアから受信されたデータストリームを処理するためのデータストリーム処理言語に関する。
【背景技術】
【０００２】
ソフトウェア開発者たちは、彼らがソフトウェアを計測することによって開発するソフトウェアのさまざまな側面をモニタする。これらは、ソフトウェアの実行、ソフトウェアの実行中に直面されるエラー、ソフトウェアの実行中に直面される重大なイベント、コードのどの部分が実行されているか、およびどの部分が実行されていないかについて記述する情報などを含む。コードを計測するための従来の技術は、さまざまなタイプの情報をログファイルへ記録するか、または情報をスクリーン上に印刷する、そのコード内のステートメントを含む。この技術は、シンプルなアプリケーション、たとえば、シングルプロセッサ上で実行する実行のシンプルなフローを有するアプリケーションに適している。しかしながら、ソフトウェアを計測するためのこれらの技術は、複数のシステムにわたって分散されてそれぞれのシステムが実行の複数のプロセスまたはスレッドを実行する場合がある複雑なアプリケーションには適していない。
【０００３】
そのような複雑なシステムを計測するための別の従来の技術は、コードを計測する際にエキスパートを使用することである。特定のベンダーは、コードの計測を支援するエキスパートサービスを提供している。しかしながら、これらのベンダーは典型的には、しばしばあまりフレキシブルではない標準的なサービスを提供している。さらに、これらのベンダーに基づくソリューションは、ベンダーによってコードを計測するために必要とされる時間という点で多大なオーバーヘッドを有している。したがって、これらのソリューションは、ゆっくりとした開発サイクル、たとえば、１年がかりの開発サイクルに適している。しかしながら、ソフトウェア製品に関するソフトウェア開発およびリリースサイクルは、短くなってきている。たとえば、ソフトウェア開発者たちが毎月、毎週、または毎日でさえ変更を作成してそれらを展開するいくつかのオンラインシステムがある。ベンダーに基づく計測ソリューションの多大なオーバーヘッドに起因して、開発者たちは、これらのサービスを速いペースの開発環境において使用することは困難であると感じている。
【０００４】
さらに、コードを計測するための従来の技術は、情報を取り入れ、情報を格納し、情報を分析して、レポートを生成する際に多大な遅延をもたらす。結果として、ソフトウェアにおいて問題が生じる時点と、コードの計測を介してその問題が検知される時点との間において多大な遅延がある可能性がある。したがって、ソフトウェアの計測に基づいてレポートを生成するための従来のシステムはしばしば、複雑なアプリケーションの速いペースの開発サイクルにおいては不適切である。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】米国特許出願第１４／８００，６７７号明細書
【特許文献２】米国特許出願第１４／８００，６７９号明細書
【発明の概要】
【０００６】
計測分析システムの実施形態は、データストリーム言語において指定された命令に基づいてデータストリームを処理する。それらのデータストリームは、外部システム上で実行している計測されたコードから受信される。データストリーム言語のコマンドは、ブロックとして指定される。ブロックは、特定のタイプのオペレーション（または計算、たとえば、データを取り出すこと、データを処理することなど）を実行する。ブロックは、入力ポート、出力ポート、およびパラメータを任意選択で含む。入力ポートは、外部システムから受信されること、またはその他のブロックによって生成されることが可能であるデータストリームのデータを受信する。ブロックの計算の結果は、出力としてブロックの出力ポートへ提供される。ブロックに関連付けられているパラメータが、ブロックの計算の指定において使用される。たとえば、パラメータは、データストリームを見つけ出すブロックに関する検索ストリングを指定する。データストリーム言語プログラムは、ブロックのネットワークを含み、ブロックの出力は、入力としてその他のブロックなどへ提供されることが可能である。ジョブは、データストリーム言語プログラムの実行を表す。複数のジョブが、同じデータストリーム言語プログラムに関して実行されることが可能である。ジョブは、開始時刻、停止時刻、および周期性に関連付けられている。ジョブは、開始時刻において開始され、停止時刻まで実行される。ジョブは、指定されている周期性に基づくタイムインターバルで周期的に実行される命令を含む。それぞれのタイムインターバルに関して、ジョブは、データストリームのセットからデータ値を受信し、データストリーム言語のブロックを実行して、出力データ値を生成する。その他の実施形態は、本明細書において示されている機能を、異なるシンタックスおよび異なるプログラミングパラダイムを伴って実施する。
【０００７】
計測分析システムの実施形態は、データストリーム言語において指定された命令に基づいてデータストリームを処理する。それらのデータストリームは、外部システム上で実行している計測されたコードから受信されるか、計測された分析システムによってデータストリーム言語プログラムの結果として生成されることが可能である。計測分析システムは、データストリームとしきい値との比較を実行するデータストリーム言語プログラムを受信する。たとえば、データストリームのデータは、低しきい値および／または高しきい値と比較されることが可能である。低／高しきい値は、一定の値または動的に変わる値であることが可能である。低／高しきい値は、データストリームを生成するデータストリーム言語プログラムによって指定されることが可能である。
【０００８】
ｔｈｒｅｓｈｏｌｄブロックは、第１の入力および第２の入力を受信するように構成されている。たとえば、第１の入力は、ｔｈｒｅｓｈｏｌｄブロックのデータポートによって受信され、第２の入力は、ｔｈｒｅｓｈｏｌｄブロックのしきい値ポートによって受信される。データストリーム言語プログラムの命令の第１のセットは、第１の入力を生成し、データストリーム言語プログラムの命令の第２のセットは、第２の入力を生成する。システムは、データストリームの入力セットを受信する。システムは、命令の第１のセットを実行して、データストリームの入力セットのデータをアグリゲートして、ｔｈｒｅｓｈｏｌｄブロックの第１の入力として提供されるデータ値を含む第１の複数のデータストリームを生成する。システムは、命令の第２のセットを実行して、データストリームの入力セットのデータをアグリゲートして、ｔｈｒｅｓｈｏｌｄブロックの第２の入力として提供されるしきい値を含む第２の複数のデータストリームを生成する。システムは、データ値としての第１の入力として受信されたデータストリームを、しきい値としての第２の入力において受信されたデータストリームとマッチさせる。第１の入力において受信されたそれぞれのデータストリームに関して、システムは、データストリームのデータ値を、第２の複数のデータストリームからの対応するデータストリームからのしきい値と比較し、データ値およびしきい値の比較の結果に基づいて、イベントを生成するかどうかを決定する。
【０００９】
実施形態においては、生成されたイベントは、システムによって分析されているデータストリームにおいて検知された異常として報告される。たとえば、異常は、特定のデータストリーム、またはデータストリームのセットに基づくアグリゲート値が、ｔｈｒｅｓｈｏｌｄブロックの低しきい値および高しきい値によって設定されている範囲を超過したということを示す場合がある。低しきい値および高しきい値は、それら自体が動的に変わることが可能であり、たとえば、低しきい値および高しきい値は、特定の入力データストリームに基づく移動平均として定義されることが可能である。
【００１０】
実施形態は、データストリーム言語において指定された命令に基づいてデータストリームを処理する計測分析システムについて記述している。このシステムは、複数のデータストリームについて記述するメタデータを格納する。このシステムは、実行のためのデータストリーム言語プログラムを受信する。このデータストリーム言語プログラムは、データストリーム言語を使用して指定された命令のセットを含む。これらの命令は、受信されたデータストリームに関連付けられているメタデータ属性に基づく検索式に関連付けられているｆｉｎｄブロックを含む。このシステムは、検索式を評価して、検索式に適合するデータストリームのセットを識別する。このシステムは、次のステップを実行することによってデータストリーム言語プログラムを繰り返し実行する。このシステムは、データストリームの識別されたセットのそれぞれのデータストリームからデータ値を受信する。このシステムは、データストリーム言語プログラムのそれぞれのブロックを実行し、その実行に基づいて結果データ値を生成する。それらの結果値は、データストリーム言語プログラムによって生成される結果データストリームに対応する。このシステムは、１つまたは複数の結果データ値を格納する。
【００１１】
実施形態においては、ｆｉｎｄブロックは、データストリーム言語プログラムの第１のブロックである。このシステムは、ｆｉｎｄブロックを繰り返し評価する。ｆｉｎｄブロックによって識別されるデータストリームのセットは、ｆｉｎｄブロックの評価ごとに変わる可能性がある。ｆｉｎｄブロックは、データストリーム言語プログラムのブロックのうちの残りの実行の割合とは異なる割合で評価されることが可能である。
【００１２】
システムの実施形態は、データストリーム言語において指定された命令に基づいてデータストリームを処理する。システムは、システムによって処理されるデータストリームについて記述するメタデータを格納する。それぞれのデータストリームに関するメタデータは、そのデータストリームに関連付けられている属性を含む。たとえば、データストリームは、「ｄａｔａｂａｎｋ  １」という値を有している「ｓｏｕｒｃｅ」という属性、および「ｎｕｍＣａｃｈｅＭｉｓｓｅｓ」という値を有している「ｍｅｔｒｉｃ＿ｎａｍｅ」という属性に関連付けられている場合がある。システムは、入力データストリームを処理するためにデータストリーム言語プログラムを使用して指定された命令のセットを受信する。システムは、命令のセットを実行することによって結果データストリームを生成する。たとえば、データストリーム言語プログラムは、受信されたデータストリームを特定の属性によってグループ化するための命令を含むことができ、データストリーム言語プログラムの結果は、識別されたグループの数に基づいて複数の結果データストリームを含むことができる。システムは、結果データストリームのうちのそれぞれの次のステップを実行する。システムは、結果データストリームについて記述する属性の値のセットを決定する。システムは、結果データストリームについて記述するメタデータとして値のそのセットを格納する。システムは、データストリームに関する識別子を生成して、その識別子を、データストリームについて記述するメタデータに関連付ける。システムは、結果データストリームのデータを識別子に関連付けて格納する。
【００１３】
実施形態においては、データストリーム言語プログラムは、複数のｇｒｏｕｐｂｙコマンドを指定する。計測分析システムは、データストリーム言語プログラムの最後のｇｒｏｕｐｂｙコマンドに関連付けて指定されているメタデータ属性の値をそれぞれの結果データストリームに関連付ける。
【００１４】
本明細書において記述されている特徴および利点は、すべてを網羅したものではなく、とりわけ、図面、明細書、および特許請求の範囲を考慮すれば、当技術分野における標準的な技術者にとっては、多くのさらなる特徴および利点が明らかになるであろう。その上、本明細書において使用されている言葉は、主として読みやすさおよび教示上の目的で選択されており、開示されている主題の線引きまたは画定を行うために選択されてはいない場合があるということに留意されたい。
【図面の簡単な説明】
【００１５】
開示されている実施形態は、その他の利点および特徴を有しており、それらは、発明を実施するための形態、添付の特許請求の範囲、および添付の図（または図面）から、さらに容易に明らかになるであろう。図の簡単な紹介は、下記のとおりである。
【図１】実施形態による、計測されたソフトウェアに基づいて報告を行うための全体的なシステム環境を示す図である。
【図２】実施形態による、計測されたソフトウェアから受信されたデータストリームを処理するためのデータストリーム言語プログラムを実行するためのシステムのアーキテクチャーを示す図である。
【図３】実施形態による、データストリーム言語プログラムのブロックを処理するためのデータストリーム言語プロセッサのアーキテクチャーを示す図である。
【図４】実施形態による、データストリーム言語の特徴を示すためのデータストリーム言語プログラムの例を示す図である。
【図５】実施形態による、データストリームから受信されたデータをデータストリーム言語プログラムに基づいて処理するための計測分析システムの全体的なプロセスを示す図である。
【図６】実施形態による、計測されたソフトウェアから受信されたデータストリームの量子化のプロセスを示す図である。
【図７】実施形態による、データストリーム言語プログラムへの入力を提供するためのｆｉｎｄブロックによるデータストリームのセットの選択を示す図である。
【図８】実施形態による、ｆｉｎｄブロックの周期的な再評価の結果としてのデータストリーム言語プログラムへの入力を提供するデータストリームのセットに対する動的な変化を示す図である。
【図９】実施形態による、ｆｉｎｄブロックを使用してデータストリーム言語プログラムへの入力を提供するためのデータストリームのセットを識別するためのプロセスを示す図である。
【図１０】実施形態による、ｆｅｔｃｈブロックを実行することによってデータストリームからデータを取り出すプロセスを示す図である。
【図１１】図１１Ａ〜Ｃは、実施形態による、移動ウィンドウ計算のために時系列データストアからのデータと、データストリームからリアルタイムで受信されるデータとを組み合わせるプロセスを示す図である。
【図１２】実施形態による、データストリームのデータをグループ化して結果データストリームのセットを生成するためのプロセスを示す図である。
【図１３Ａ】実施形態による、データストリームを、それらのデータストリームについて記述するさまざまなメタデータ属性に基づいてグループ化することを示す例示的なシナリオを示す図である。
【図１３Ｂ】実施形態による、データストリームを、それらのデータストリームについて記述するさまざまなメタデータ属性に基づいてグループ化することを示す例示的なシナリオを示す図である。
【図１４】実施形態による、時間に伴う入力データストリームにおける変化の結果としてｇｒｏｕｐｂｙブロックによって生成される結果データストリームの動的な変化を示す例示的なシナリオを示す図である。
【図１５】実施形態による、データストリーム言語プログラムのｐｕｂｌｉｓｈブロックを実行することによって入手される結果データストリームを発行するプロセスを示すフローチャートである。
【図１６】実施形態による、特定の属性によってグループ化されているデータストリームに関する固定されたしきい値を伴うｔｈｒｅｓｈｏｌｄブロックの使用を示すデータストリーム言語プログラムの例を示す図である。
【図１７】実施形態による、メタデータ属性によってグループ化されているデータストリームに関する動的に変わるしきい値を伴うｔｈｒｅｓｈｏｌｄブロックの使用を示すデータストリーム言語プログラムの例を示す図である。
【図１８】実施形態による、ｔｈｒｅｓｈｏｌｄブロックを含むデータストリーム言語プログラムを実行するプロセスを示すフローチャートである。
【図１９】実施形態による、データストリームのグループを含む入力に適用されるユーザ定義関数に基づいて結果データストリームを生成するためのカスタマイズされたブロックの使用を示すデータストリーム言語プログラムの例を示す図である。
【図２０】実施形態による、カスタマイズされたブロックを伴うデータストリーム言語プログラムを実行するプロセスを示すフローチャートである。
【図２１】実施形態による、計測分析システムによって受信されたデータストリームを示すデータストリーム言語プログラムの実行の結果を表示しているユーザインターフェースのスクリーンショットを示す図である。
【図２２】実施形態による、計測分析システムによって受信されたデータストリームのデータの１分平均を示すデータストリーム言語プログラムの実行の結果を表示しているユーザインターフェースのスクリーンショットを示す図である。
【図２３】実施形態による、データセンターによってグループ化されたデータストリームの合計を示すデータストリーム言語プログラムの実行の結果を表示しているユーザインターフェースのスクリーンショットを示す図である。
【図２４】実施形態による、データセンターによってグループ化されたデータストリームに関する、キャッシュヒット率と、キャッシュヒット率およびミス率の合計との比率を決定するカスタマイズされたマクロブロックを含むデータストリーム言語プログラムの実行の結果を表示しているユーザインターフェースのスクリーンショットを示す図である。
【００１６】
次いで、いくつかの実施形態に対して詳細に参照が行われ、それらの実施形態の例が、添付の図において示されている。実用的である場合は常に、類似のまたは同様の参照番号が、図において使用されることが可能であり、類似のまたは同様の機能を示すことができるということが留意される。それらの図は、開示されているシステム（または方法）の実施形態を、例示のみの目的で示している。本明細書において示されている構造および方法の代替実施形態が、本明細書において記述されている原理から逸脱することなく採用されることが可能であるということを、当業者なら、以降の説明から容易に認識するであろう。
【発明を実施するための形態】
【００１７】
全体的なシステム環境
図１は、実施形態による、計測されたソフトウェアに基づいて報告を行うための全体的なシステム環境を示している。この全体的なシステム環境は、計測分析システム１００、１つまたは複数の開発システム１２０、管理システム１６０、および報告システム１５０を含む。その他の実施形態においては、図１において示されているよりも多くのコンポーネントまたは少ないコンポーネントが使用されることが可能である。たとえば、開発システム１２０、管理システム１６０、および報告システム１５０は、ネットワーク（図１においては示されていない）を介して計測分析システム１００と対話することができる。さらに、図１において示されているそれぞれのシステムのさらに多くのインスタンスまたはさらに少ないインスタンスが存在することが可能であり、たとえば、複数の報告システム１５０が存在することが可能である。
【００１８】
図１およびその他の図は、同様の参照番号を使用して、同様の要素を識別している。参照番号の後の文字、たとえば「１３０ａ」は、そのテキストが、その特定の参照番号を有している要素を特に指しているということを示している。テキストにおいて後続の文字を伴わない参照番号、たとえば「１３０」は、図においてその参照番号を有している要素のうちのいずれかまたはすべてを指す（たとえば、テキストにおける「１３０」は、図における参照番号「１３０ａ」および／または「１３０ｂ」を指す）。
【００１９】
計測分析システム１００は、別々の開発システム１２０によって送信されたメトリックの値を含むデータを受信する（計測分析システム１００は、本明細書においては分析システムまたはデータ分析システムと呼ばれる場合もある）。開発システム１２０は、計測されたソフトウェア、たとえば、アプリケーション１３０を実行する。アプリケーション１３０は、計測されたソフトウェアの例として図１において示されているが、本明細書において開示されている技術は、アプリケーションソフトウェアに限定されず、その他の種類のソフトウェア、たとえば、サーバソフトウェアや、クライアントデバイス、ウェブサイトなどの上で実行するソフトウェアに適用可能である。さらに、開発システム１２０は、計測されたソフトウェアを、それが新たなソフトウェアの開発のために使用されるか否かを問わずに実行するように構成されている任意のコンピューティングシステムを含む。たとえば、開発システム１２０は、テストの目的、ステージングの目的、または、企業において実行する任意のプロダクションシステムのために使用されるコンピューティングシステムであることが可能である。
【００２０】
開発システム１２０上で実行するソフトウェアは、ソフトウェアを計測した結果として生成された情報を計測分析システム１００へ送信するように構成されている。たとえば、アプリケーション１３０は、さまざまなメトリックに対応する値を、それらが生成された際に計測分析システム１００へ送信することができる。アプリケーション１３０は、メトリックのグループ値を送信すること、およびそれらを周期的に計測分析システム１００へ送信することが可能である。別々のアプリケーション１３０は、同じメトリックを、または別々の割合で別々のメトリックを送信することができる。同じアプリケーションは、別々の割合で別々のメトリックを送信することができる。アプリケーション１３０は、計測分析システム１００によってサポートされているアプリケーションプログラミングインターフェース（ＡＰＩ）を呼び出すことによって、計測分析システム１００へデータを送信する。
【００２１】
ソフトウェアプログラムは、アプリケーションにカウンタまたはゲージを加えるように計測されることが可能である。カウンタは、ソフトウェアにおける特定のイベントの発生時にインクリメントされる値を格納する命令を含む。カウンタは、コードの特定の部分、たとえば、関数またはメソッド、条件付きコードの特定の分岐、例外、ループなどが実行される回数を決定するために使用されることが可能である。
【００２２】
典型的には、カウンタ値は単調に変わり、たとえば、カウンタ値は単調に増大（または減少）することが可能である。たとえば、システムが実行を開始して以降にイベントが発生した回数をカウンタが追跡把握する場合には、カウンタ値は、イベントの発生がシステムによって検知されるたびに増大する。カウンタの値どうしが比較されて、２つの異なる時点における特定のカウンタ値の変化を決定することが可能である。たとえば、時刻ｔ１とｔ２との間におけるタイムインターバル内に特定のイベントが発生する回数は、対応するカウンタ値におけるｔ１からｔ２への変化を計算することによって決定されることが可能である。カウンタの現在の値を計測分析システム１００へ送信するために、アプリケーション１３０によって計測分析システムのＡＰＩが呼び出されることが可能である。
【００２３】
下記は、アプリケーション１３０の計測されたコードの例である。計測されているコード内に含まれている下記の命令は、アクションまたはエンティティーのカウントを追跡把握するためのカウンタオブジェクトを作成する。
ｃｏｕｎｔｅｒ  １＝ｃｒｅａｔｅＣｏｕｎｔｅｒ（ｓｏｕｒｃｅ＝“ｗｅｂ  １”，  ｍｅｔｒｉｃ＝“ｍｅｔｒｉｃ  １”）；
【００２４】
上記の命令は、カウンタオブジェクトを作成し、それを変数ｃｏｕｎｔｅｒ  １に割り振る。そのカウンタオブジェクトは、ソース「ｗｅｂ  １」およびメトリック「ｍｅｔｒｉｃ  １」に関連付けられている。実施形態においては、ソースおよびメトリック値は、カウンタ（またはゲージ）に関連付けられているデータストリームを一意に識別する。その他の実施形態においては、データストリームを一意に識別するために、より多くのまたはより少ないキー値ペアが使用されることが可能である。
【００２５】
カウンタの作成中に指定された値のうちの１つまたは複数は、そのカウンタに対応するデータが、計測されたコードによって計測分析システム１００へ送信されたときに受信される。実施形態は、それぞれのデータストリームとともに送信される情報の量を削減するためにアプリケーション１３０が計測されることを可能にする。これは、コードを計測した結果としてアプリケーション１３０においてもたらされるオーバーヘッドの量を削減する。
【００２６】
アプリケーション１３０の計測されたコードは、そのコード内のさまざまな場所でカウンタ値を更新するための命令を含むことができる。たとえば、ｃｏｕｎｔｅｒ  １というカウンタは、「ｃｏｕｎｔｅｒ  １  ．ｉｎｃｒｅｍｅｎｔ（）」という命令を実行することによってインクリメントされることが可能である。カウンタは、コードに関連付けられているさまざまなアクションまたはエンティティーを追跡把握するためにインクリメントされることが可能である。たとえば、カウンタは、特定の関数またはメソッドがコールされたときは常にインクリメントされることが可能であり、カウンタは、条件式の特定の分岐が実行されたときは常にインクリメントされることが可能であり、カウンタは、特定のタイプのオブジェクトが、たとえば、オブジェクトのコンストラクタにおいて作成されたときは常にインクリメントされることが可能である。カウンタのインクリメント命令は、条件付きで、たとえば、関数がパラメータの特定の組合せとともに呼び出された場合にコールされることが可能である。アプリケーション１３０は、計測分析システム１００のＡＰＩを呼び出すことによってカウンタ値を計測分析システム１００へ通信する。
【００２７】
ゲージは、アプリケーション１３０の特定のランタイム特徴、たとえば、ヒープサイズ、キャッシュミスまたはヒットの数、使用されているアクティブメモリ、ＣＰＵ（中央処理装置）利用状況、要求に応答するためにかかる合計時間、サービスに接続するためにかかる時間などを測定するための命令を含む。ゲージは、特定のアプリケーション固有パラメータまたはビジネス関連の値、たとえば、トランザクションの数、ユーザの数などを追跡把握するために使用されることも可能である。ゲージは、構成可能であるインターバルに基づいて周期的に呼び出されることが可能である。ゲージの値は、計測分析システム１００へ周期的に送信される。
【００２８】
管理システム１６０は、特権を有するユーザ、たとえば、システム管理者がデータストリームをメタデータに関連付けることを可能にする。管理システム１６０は、システム管理者がメタデータを指定するためのユーザインターフェースを提供する管理アプリケーション１７０を含む。メタデータは、プロパティー、たとえば名前／値ペアを含む。計測分析システム１００は、データストリームについて記述するメタデータを受信し、そのメタデータを格納する。データストリームについて記述するメタデータを、それぞれのデータストリームから受信されるデータから独立して指定できることは、データストリームに基づいてレポートを生成する際にいくつかの利点を提供する。
【００２９】
例として、計測分析システム１００は、それぞれのデータストリームについて記述するメタデータに対する修正を、アプリケーション１３０の計測されたソフトウェアに対するいかなる修正も必要とせずに受信することができる。結果として、計測分析システム１００は、新たなレポートの仕様および既存のレポートに対する修正を受信し、開発者がアプリケーション１３０を修正することを必要とすることなく、新たなレポート／修正されたレポートに基づく結果を生成する。
【００３０】
これは、ソフトウェアを計測するための新たなパラダイムを提供する。なぜなら、開発者は、ソフトウェアを計測するための命令を加えている間に生成される必要があるレポートのタイプを考慮する必要がないからである。開発者は、自分のソフトウェアを単に計測して、生データを生成し、それらの生データは、生成されるレポートにおいてさまざまな方法で組み合わされることが可能である。ソフトウェアの計測に基づいてリアルタイムの報告を行うためのシステムおよび方法は、２０１５年７月１５日に出願された特許文献１において記述されており、この特許文献１は、その全体が参照によって本明細書に組み込まれている。
【００３１】
さらに、計測されたソフトウェアを生成することにおけるエキスパートである人は、ソフトウェア開発者とは異なることがある。たとえば、開発者ではないデータ分析におけるエキスパートは、開発プロセスに巻き込まれることなく、データストリームに関するメタデータを定義し、レポートを生成することができる。これは重要である。なぜなら、データを分析するために必要とされるスキルは、典型的には、ソフトウェアを開発するために必要とされるスキルとは異なるからである。
【００３２】
さらに、計測分析システム１００は、既存のレポートを合成して新たなアナリティクス機能を加えることによって既存のレポートの上に構築されたレポートを受信して処理することもできる。計測分析システム１００は、新たなレポートの結果を生成し、それらの結果を、計測されたソフトウェアからのデータストリームを計測分析システム１００が受信した際にリアルタイムで提示するために送信する。計測分析システム１００は、アプリケーション１３０の計測されたコードに対するいかなる修正も必要とすることなく、これらのさらなるレポートを生成し、既存のレポートを修正する。
【００３３】
さらに、計測分析システム１００は、データストリームについて記述するメタデータと、データストリームのデータとの分離を提供する。したがって、開発システム１２０から計測分析システム１００へ伝送される必要があるデータの量が削減される。それぞれのアプリケーション１３０は、メトリックのデータ値、およびメトリックを識別する情報のみを伝送する。メタデータ情報は、データストリームのデータソースから独立したソースから別個に受信される。したがって、それぞれのデータストリームのデータの量を増大させることなく、いかなる量のメタデータも導入されることが可能である。
【００３４】
報告システム１５０は、クライアントデバイスであることが可能である。報告システム１５０は、ユーザが計測分析システム１００と対話することを可能にするクライアントアプリケーション１４０を含む。実施形態においては、クライアントアプリケーション１４０は、インターネットブラウザであり、このインターネットブラウザは、計測分析システム１００にアクセスするためのクライアント側コード（たとえば、Ｊａｖａスクリプト）を含むことができる。その他の実施形態においては、クライアントアプリケーション１４０は、計測分析システム１００と対話するために開発されたプロプライエタリアプリケーションである。
【００３５】
報告システム１５０は、従来のコンピュータシステム（たとえば、デスクトップコンピュータもしくはラップトップコンピュータ）、タブレット、またはコンピュータ機能を有するデバイス、たとえば、携帯情報端末（ＰＤＡ）、モバイル電話、スマートフォン、または別の適切なデバイスであることが可能である。報告システム１５０は、ネットワークを介して計測分析システム１００と対話する。そのネットワークは、有線通信システムおよび／またはワイヤレス通信システムの両方を使用する、ローカルエリアネットワークおよび／またはワイドエリアネットワークの任意の組合せを含むことができる。一実施形態においては、そのネットワークは、標準的な通信テクノロジーおよび／またはプロトコルを使用する。
【００３６】
計測分析システム１００は、１つまたは複数のプロセッサと、メモリと、セカンダリーストレージと、入力／出力コントローラとを含むコンピューティングシステム上でホストされることが可能である。計測分析システム１００をホストするために使用されるコンピューティングシステムは典型的に、たとえば、報告システム１５０として使用される典型的なコンピューティングシステムと比較して、強力なプロセッサ、大きなメモリ、および高速の入力／出力システムを使用するサーバクラスシステムである。
【００３７】
実施形態においては、いくつかの開発システム１２０からのデータが、たとえば、サーバによって統合されることが可能であり、組み合わされたデータは、計測分析システム１００へ送信されることが可能である。たとえば、企業は、内部で別々の開発システム１２０からデータストリームを受信して組み合わされたデータをバッチ形態で計測分析システム１００へ周期的に送信するサーバをインストールすることができる。これは、企業からの外部通信の効率性を可能にする。しかしながら、この構成は、計測分析システム１００へ情報を通信する際の遅延と、報告システム１５０によってデータを報告する際の対応する遅延とをもたらす場合がある。
【００３８】
次元をデータストリームに関連付けること
データストリームは、データストリームに関連付けられている次元の値を表す座標のセットを使用することによって識別されることが可能である。次元とは、値のセットの１つの値を取ることができるデータストリームのプロパティーを指す。それぞれのデータストリームは、次元に関する値に関連付けられることが可能である。たとえば、次元は、データストリームのソース、またはデータストリームに関連付けられているメトリック名であることが可能である。データストリームのソースは、サーバ名、サービス名などによって識別されることが可能である。メトリック名の例は、ｃｐｕ（中央処理装置）負荷、キャッシュミス、キャッシュヒットなどである。次元の値は、データストリームの座標値とも呼ばれる。座標値は、メタデータストア２３０において格納されているメタデータ属性として表されることが可能である。ソースおよびメトリックという２つの次元を与えられると、ソースおよびメトリックを表す２つの座標、たとえば、（ｓｅｒｖｅｒ  １，  ｃｐｕ＿ｌｏａｄ）または（ｓｅｒｖｅｒ２，  ｍｅｍｏｒｙ＿ｕｓａｇｅ）を提供することによって、データストリームが識別されることが可能である。
【００３９】
データストリームは、複数の次元（すなわち、上述の２つの次元、すなわち、ソースおよびメトリック名よりも多く）によって特徴付けられることが可能である。たとえば、それぞれのサーバが複数のＣＰＵを有している場合には、ｃｐｕ＿ｉｄという次元が含まれることが可能である。したがって、システムから入手されるそれぞれのデータストリームは、（ｓｏｕｒｃｅ＿ｉｄ，  ｃｐｕ＿ｉｄ，  ｍｅｔｒｉｃ＿ｎａｍｅ）、すなわち、ソース識別子、ｃｐｕ識別子、およびメトリックを表す名前によって特徴付けられることが可能である。３つの座標を使用して識別されるデータストリームの例は、（ｓｅｒｖｅｒ  １，  ｃｐｕ  １，  ｌｏａｄ）、（ｓｅｒｖｅｒ  １，  ｃｐｕ２，  ｌｏａｄ）、（ｓｅｒｖｅｒ２，  ｃｐｕ  １，  ｌｏａｄ）、（ｓｅｒｖｅｒ２，  ｃｐｕ２，  ｌｏａｄ）などを含む。
【００４０】
次元の別の例として、システムは、顧客名を次元として定義することができる。顧客の名前は、計測されたソフトウェアによって、たとえば、開発システム１２０上で実行する計測されたソフトウェアの構成パラメータに基づいて報告されることが可能である。顧客名は、システムプロパティーを使用して、計測されたソフトウェアに関して指定されることが可能である。計測されたソフトウェアは、顧客名が、その特定の顧客に関連付けられているデータストリームを識別する場合には、それを含める。データストリームを顧客に関連付けることができることは、計測分析システムが、顧客に固有の分析を実行すること、たとえば、それぞれの顧客に関するシステムの使用について報告すること、しきい値数よりも多くのエラーを報告する顧客を識別することなどを可能にする。
【００４１】
データストリームは、計測されたソフトウェアから入手されることが可能であり、または計測分析システム内のデータストリーム言語プログラムのブロックの実行の結果として生成されることが可能である。データストリームは、計測分析システムにおいて、たとえば、データストア（本明細書において記述されている時系列データストア２６０など）において格納されているデータを含むこともできる。
【００４２】
計測分析システムのシステムアーキテクチャー
図２は、実施形態による、計測されたソフトウェアから受信されたデータストリームを処理するためのデータストリーム言語プログラムを実行するためのシステムのアーキテクチャーを示している。計測分析システム１００は、インターフェースモジュール２１０、量子化モジュール２４０、メタデータモジュール２２０、メタデータストア２３０、データポイントルーティングモジュール２５０、アナリティクスエンジン２７０、ユーザインターフェースマネージャー２８０、データストリーム言語プロセッサ２００、時系列データストア２６０、およびソフトウェアバス２９０を含む。その他の実施形態においては、計測分析システム１００は、本明細書において記述されていないその他のモジュールを含むことができる。特定のモジュールによって提供されるものとして示されている機能は、代わりにその他のモジュールによって実施されることが可能である。
【００４３】
インターフェースモジュール２１０は、計測分析システム１００と通信する外部システム、たとえば、開発システム１２０からの要求を受信する。インターフェースモジュール２１０は、外部システムが呼び出すことができるさまざまなアプリケーションプログラミングインターフェース（ＡＰＩ）をサポートする。インターフェースモジュール２１０は、さまざまなベンダーによって提供される機能を使用して計測されるアプリケーション１３０によって提供されるデータを、計測されたコードが、インターフェースモジュール２１０によって処理されることが可能であるフォーマットで情報を送信する限り、受信して処理することができる。
【００４４】
インターフェースモジュール２１０は、１つまたは複数の開発システム１２０からデータストリームの形態でデータを受信する。実施形態においては、インターフェースモジュール２１０は、データを受信し、着信データをタプルとして表す。したがって、それぞれのデータストリームは、複数のタプルとして表され、それぞれのタプルは、データポイントを表す。インターフェースモジュール２１０によって受信されるデータのタプルは、さまざまな要素を含む。データのタプルは、メトリック識別子、たとえば、そのタプルに対応するメトリックの名前、およびメトリックの値を含む。受信されるデータのタプルは、その他の要素、たとえば、そのデータを送信しているアプリケーション１３０によってそのデータが取り込まれた時刻に対応するタイムスタンプ、そのデータに関連付けられている１つまたは複数のプロパティーをさらに含むことができる。
【００４５】
実施形態においては、タプルに関連付けられているタイムスタンプは、データ値が計測分析システム１００によって受信された時刻を表す。データに関連付けられているプロパティーは、名前／値ペアの形態で提供されることが可能である。これらのプロパティーは、受信されたデータについて記述するさらなる情報、たとえば、ソースに関連付けられているホスト名、サーバ名、デバイス名、またはサービス名、データに関連付けられているメソッド名または関数名、アプリケーションインスタンス識別子等など、データのソースについて記述する情報を提供することができる。
【００４６】
実施形態においては、インターフェースモジュール２１０は、インターフェースモジュール２１０によって受信されたレコードに対して識別子を生成して割り振る。その識別子は、本明細書においては時系列識別子と呼ばれる（本明細書においてはＴＳＩＤまたはｔｓｉｄとも呼ばれる）。メトリック名にマッチするすべてのタプル、およびタプルとともに受信されたプロパティーのセットに対して、一意の時系列識別子が割り振られる。したがって、タプル（メトリック名、プロパティー、メトリック値、タイムスタンプ）が、タプル（ｔｓｉｄ、メトリック値、タイムスタンプ）にマップされる。たとえば、ｍｌというメトリック名、およびｈｉというホスト名をタプルが提供する場合には、ｍｌというメトリック名およびｈｉというホスト名を伴うすべてのタプルが、同じ時系列識別子を割り振られる。したがって、ｔｓｉｄは、計測分析システム１００によって受信されるデータストリームのすべてのタプルを一意に識別する。
【００４７】
量子化モジュール２４０は、受信されたデータ値を処理して、任意のタイムインターバルでデータが利用可能であるデータの入力時系列を、規則的なタイムインターバルでデータが利用可能である時系列に変換する。たとえば、入力時系列で受信されるデータ値は、不規則なインターバルで発生する場合があるが、量子化モジュール２４０は、その時系列のデータを処理して、周期的に、たとえば、１秒ごとに、または５秒ごとに、または１５秒ごとに、といった具合にデータが発生する時系列を生成する。このプロセスは、本明細書においては時系列の量子化と呼ばれる。実施形態においては、インターフェースモジュール２１０は、複数のスレッドまたはプロセスを作成し、それぞれのスレッドまたはプロセスは、データストリームに対応するデータを受信するように構成されている。それぞれのスレッドまたはプロセスは、それぞれのタイムインターバルに関してそれぞれのデータストリームについて受信されたデータの量子化を実行するために量子化モジュール２４０を呼び出す。計測されたソフトウェアのデータストリームの量子化のためのシステムおよび方法は、２０１５年７月１５日に出願された特許文献２において記述されており、この特許文献２は、その全体が参照によって本明細書に組み込まれている。
【００４８】
メタデータモジュール２２０は、開発システム１２０から受信されたさまざまなデータストリームについて記述するメタデータ情報を受信して格納する。実施形態においては、メタデータモジュール２２０において格納されるメタデータは、ユーザ、たとえば、管理システム１６０を使用して計測分析システム１００と対話するシステム管理者から受信される。
【００４９】
メタデータは、名前／値ペアとして表されることが可能である。実施形態においては、メタデータは、メタデータオブジェクトとして表され、それぞれのオブジェクトは、名前／値ペアとして表されることが可能であるプロパティーのセットを定義する。データストリームのセットが、メタデータオブジェクトに関連付けられることが可能である。したがって、メタデータオブジェクトによって表されるすべてのプロパティーは、そのメタデータオブジェクトに関連付けられているそれぞれのデータストリームに関連付けられている。
【００５０】
メタデータデータストア２３０は、メタデータオブジェクト、およびそれらのメタデータオブジェクトとデータストリームとの関連付けを格納する。メタデータデータストア２３０は、それぞれのメタデータオブジェクトに関する識別子（ＩＤ）と、そのメタデータオブジェクトによって表されるプロパティーとを格納する。実施形態においては、それぞれのデータストリームは、そのデータストリームを一意に識別する時系列識別子に関連付けられている。メタデータデータストア２３０は、それぞれのメタデータオブジェクトを時系列識別子の値のセットにマップするインデックスを格納する。メタデータストア２３０は、メタデータオブジェクトを修正するための命令を受信することができる。たとえば、メタデータストア２３０は、メタデータオブジェクトによって表されるいくつかのプロパティーを修正、追加、または削除するための命令を受信することができる。あるいは、メタデータストア２３０は、メタデータオブジェクトからデータストリームへのマッピングを修正するための命令を受信することができる。たとえば、メタデータストア２３０は、データストリームをメタデータオブジェクトに関連付けるための命令、またはメタデータオブジェクトとデータストリームとの間における関連付けを削除するための命令を受信することができる。
【００５１】
実施形態においては、メタデータストア２３０は、リレーショナルデータベースとして表されているが、その他の任意のタイプのデータベースまたはデータストアとして表されることが可能である。たとえば、メタデータストア２３０は、メタデータオブジェクトＩＤを、データストリームを識別する時系列ＩＤにマップするテーブルを格納するリレーショナルデータベースであることが可能である。その他のデータベーステーブルは、それぞれのメタデータオブジェクトに関連付けられているプロパティーを、メタデータオブジェクトＩＤから、名前／値ペアとして表されるそれぞれのプロパティーへのマッピングとして格納することができる。
【００５２】
ユーザインターフェースマネージャー２８０は、ユーザがデータストリーム言語プログラムのパラメータを指定すること、およびデータストリーム言語プログラムの実行の結果を提示することを可能にするためのユーザインターフェースをレンダリングする。ユーザインターフェースマネージャー２８０は、データストリーム言語プログラムのリアルタイムの結果を、データストリームのデータが受信されるにつれて周期的に更新される１つまたは複数のチャートとして表示することができる。ユーザインターフェースマネージャー２８０はまた、ユーザがデータストリーム言語プログラムをテキストによってではなく視覚的に指定することを可能にするユーザインターフェースを提示する。ユーザインターフェースマネージャー２８０によって提示されるユーザインターフェースのスクリーンショットの例が、本明細書において記述されている。
【００５３】
時系列データストア２６０は、さまざまなソース、たとえば、開発システム１２０から受信されたデータを格納する。時系列データストア２６０は、本明細書においては時系列データベース（またはＴＳＤＢ）とも呼ばれる。実施形態においては、時系列データストア２６０はまた、データが量子化された後の時系列データを格納する。時系列データストア２６０は、それぞれの時系列に関するロールアップデータを格納することもできる。時系列データストア２６０はまた、さまざまなアナリティクス要求の結果、たとえば、ユーザによって要求されたさまざまなレポートの結果を格納する。アナリティクスエンジン２７０は、特定のレポートに関する結果、たとえば、時系列データストア２６０において格納されているデータを、さまざまなソースからのデータストリームとして入手された新たなデータと組み合わせることによる時間のインターバルにわたる移動平均を計算する。
【００５４】
ソフトウェアバス２９０は、計測分析システム１００のモジュールが、データストリームのデータを計測分析システム１００のその他のモジュールに提供するためのメカニズムを提供する。データストリーム言語プログラムは、データストリームをソフトウェアバス２９０へ送信することができる。その他のモジュール、たとえば、フェッチモジュール３２０、探索モジュール３１０、ウィンドウモジュール３８０などは、ソフトウェアバス２９０からのデータを読み取って、そのデータ上でさらなる処理を実行することができる。たとえば、ソフトウェアバス２９０上で発行されたデータストリーム言語プログラムのデータストリーム出力は、ジョブとして実行する別のデータストリーム言語プログラムのｆｉｎｄブロックによって識別されることが可能である。
【００５５】
データストリーム言語プロセッサ２００は、データストリーム言語を使用して指定されたプログラムを実行する。データストリーム言語プロセッサ２００は、データストリーム言語プログラムを受信し、そのデータストリーム言語プログラムを解析して、そのプログラムを検証する。データストリーム言語プロセッサ２００は、データストリーム言語プログラムの表示を生成し、その表示を使用してデータストリーム言語プログラムを実行する。
【００５６】
データストリーム言語を使用して指定される要求は、さまざまな開発システム１２０から受信されるデータに関連付けられているメタデータに基づくクエリーである。データストリーム言語は、さまざまなタイプのアナリティック機能、たとえば、アグリゲーションおよび変換をサポートする。データストリーム言語は、アグリゲーションおよび変換を含むさまざまな機能をさまざまな方法で合成する能力を提供する。実施形態においては、データストリーム言語プロセッサ２００は、データストリーム言語を使用して指定されたプログラムを解析し、そのプログラムの実行可能な表示を生成し、その生成された表示を実行する。
【００５７】
データストリーム言語
データストリーム言語を使用して指定されるプログラムは、ブロックと呼ばれる計算の単位を含む。それぞれのブロックは、データブロックによって実行される特定の処理または計算に関連付けられている。それぞれのブロックは、１つまたは複数の入力ポートおよび１つまたは複数の出力ポートを有することもできる。ブロックは、入力ポートを介して入力を受信し、そのデータを使用して特定の計算を実行し、その計算の結果を出力ポートへ送信する。このプロセスは、事前に指定された周期性で繰り返される。したがって、入力ポートは、データをブロックに提供するためのメカニズムの役割を果たし、出力ポートは、ブロックのデータを出力するためのメカニズムの役割を果たす。
【００５８】
実施形態においては、それぞれのブロックは、そのブロックのタイプに関連付けられている。ブロックのタイプは、そのブロックによって実行される計算を決定する。データストリーム言語によってサポートされるブロックのタイプは、ｆｉｎｄブロック、ｆｅｔｃｈブロック、統計計算ブロック、ｔｈｒｅｓｈｏｌｄブロックなどを含む。ブロックは、特定の構成パラメータに関連付けられることが可能である。たとえば、ｆｉｎｄブロックは、入力としての表現を取ることができる。データストリーム言語プログラムは、ブロックのタイプのインスタンスを含む。たとえば、特定の検索式を伴うｆｉｎｄブロックは、データストリーム言語プログラム内に含まれているｆｉｎｄブロックのインスタンスである。
【００５９】
実施形態においては、ブロックの入力ポートは、「？」という文字で識別され、出力ポートは、「！」という文字で識別される。その他の実施形態は、その他のシンタックスを使用して入力／出力ポートを識別することができる。たとえば、ブロックＢｌが入力ポートｉｎ１およびｉｎ２を有している場合には、特定の入力ポート（たとえばｉｎ２）は、「Ｂ１？ｉｎ２」として識別されることが可能である。同様に、ブロックＢ１が出力ポートｏｕｔ１およびｏｕｔ２を有している場合には、特定の出力ポート（たとえばｏｕｔ２）は、「Ｂ２！ｏｕｔ２」として指定されることが可能である。ブロックが単一の入力／出力ポートを有している場合には、データストリーム言語プログラムは、そのポートを識別することができない。たとえば、ブロックＢ２が単一の入力ポートを有している場合には、その入力ポートは、「Ｂ２」と呼ばれることが可能である。同様に、ブロックＢ２が単一の出力ポートを有している場合には、その出力ポートは、「Ｂ２」と呼ばれることが可能である。
【００６０】
２つのブロックは、一方のブロックの出力が他方のブロックの入力として提供されるということを指定することによって接続されることが可能である。したがって、データストリーム言語プログラムは、ブロックのネットワークとみなされることが可能である。実施形態においては、２つのブロックの間における接続は、それらの２つのブロックの間における矢印を使用して指定される。たとえば、Ｂ１およびＢ２の両方が、単一の入力ポートおよび単一の入力ポートを有している場合には、「Ｂ１→Ｂ２」は、Ｂ１の出力がブロックＢ２の入力として提供されるということを指定する。同様に、Ｂ１が、２つの出力ポートｏｕｔ１およびｏｕｔ２を有していて、Ｂ２が、２つの入力ポートｉ１およびｉｎ２を有している場合には、「Ｂ１！ｏｕｔ１→Ｂ２？ｉｎ２」という表現によって、Ｂ１のｏｕｔ１ポートがＢ２のｉｎ２ポートに接続されることが可能である。
【００６１】
データストリーム言語プロセッサ２００は、データストリーム言語プログラムに基づいて複数のジョブを実行することができる。それぞれのジョブは、開始時刻、終了時刻、および周期性に関連付けられることが可能である。したがって、ジョブは、周期性によって指定されたインターバルで開始時刻から終了時刻まで実行される。周期性は、データがデータストリーム言語プログラムによって処理される割合を指定する。ユーザは、同じデータストリーム言語プログラムに基づいて実行のための別々のジョブを指定することができ、それぞれのジョブは、別々の開始時刻、終了時刻、および周期性に関連付けられている。
【００６２】
図３は、実施形態による、データストリーム言語プログラムのブロックを処理するためのデータストリーム言語プロセッサのアーキテクチャーを示している。図３において示されているように、データストリーム言語プロセッサ２００は、データストリーム言語のさまざまなタイプのブロックを処理するためのモジュールを含む。したがって、データストリーム言語プロセッサ２００は、探索モジュール３１０、フェッチモジュール３２０、計算モジュール３３０、しきい値モジュール３４０、発行モジュール３５０、グループ化モジュール３６０、ウィンドウモジュール３８０、データストリームメタデータジェネレータ３７０、およびカスタマイズドブロックモジュール３９０を含む。その他の実施形態は、図３において示されているモジュールよりも多くのモジュールまたは少ないモジュールを含むことができる。特定のモジュール、たとえばパーサは、図３においては示されていない。それぞれのモジュールの詳細は、それぞれのモジュールによって処理されるブロックのタイプの詳細とともに本明細書においてさらに記述されている。
【００６３】
探索モジュール３１０は、データストリーム言語プログラムの残りによって処理するためのデータストリームのセットを識別するためにｆｉｎｄブロックを実行する。フェッチモジュール３２０は、識別されたデータストリームからデータをフェッチし、そのデータを、データストリーム言語プログラムの後続のブロックによって処理するために提供する。計算モジュール３３０は、データストリーム言語プログラムにおいて指定されている統計計算、たとえば、平均、メジアン、合計などを実行する。しきい値モジュール３４０は、着信データストリームのデータをしきい値と比較して、その着信データが特定の範囲を超過しているかどうかを決定する。比較のために指定されるしきい値は、動的に変わることが可能であり、たとえば、しきい値は、特定の係数によって拡大された入力データストリームの１時間移動平均として指定されることが可能である。発行モジュール３５０は、ｐｕｂｌｉｓｈブロックを実行し、このｐｕｂｌｉｓｈブロックは、このｐｕｂｌｉｓｈブロックに先立つブロックの出力を、結果を提示するために、データベースにおいて格納するために、またはさらなる処理のためにその他のブロックに提供するために、ユーザインターフェース（たとえば、ダッシュボード）を含むさまざまな受信機に提供する。グループ化モジュール３６０は、入力データストリームのデータのグループ化を実行して、それぞれのグループに対応する結果データストリームのセットを生成する。それらのグループは、グループ化コマンドを用いて指定された１つまたは複数の属性、たとえば、それぞれのデータセンターからのデータストリームのグループに基づくことが可能である。データストリームメタデータジェネレータ３７０は、データストリーム言語プログラムを実行した結果として生成された結果データストリームを表すメタデータを生成し、計測分析システム１００のその他のコンポーネントがその結果データストリームを使用することを可能にするためにそのメタデータをメタデータストア２３０において格納する。カスタマイズドブロックモジュール３９０は、ユーザによって定義されたブロック（カスタマイズされたブロック）をデータストリーム言語プログラムにおいて処理する。
【００６４】
例示的なデータストリーム言語プログラム
図４は、実施形態による、データストリーム言語の特徴を示すためのデータストリーム言語プログラムの例を示している。図４は、データストリーム言語プログラムをブロックという点から表している。図４において示されているデータストリーム言語プログラムは、下記のように指定されることが可能である。
ｆｉｎｄ（“ｓｏｕｒｃｅ：ａｎａｌｙｔｉｃｓ*”）→ｆｅｔｃｈ
→ｇｒｏｕｐｂｙ（“ｄａｔａｃｅｎｔｅｒ”）
→ｓｔａｔｓ！ｍｅａｎ
→ｐｕｂｌｉｓｈ
【００６５】
上述のデータストリーム言語プログラムの第１のブロックは、検索式を指定するストリングパラメータを取るｆｉｎｄブロック４１０である。ｆｉｎｄブロックは、検索式を満たす、計測分析システム１００によって受信されたデータストリームのセットを見つけ出す。たとえば、ｆｉｎｄブロック４１０は、「ｄｅｖ」というメタデータ属性値の「ｓｏｕｒｃｅ」となるすべてのデータストリームを識別する検索式“ｓｏｕｒｃｅ：ｄｅｖ”を取る。たとえば、企業が、すべての開発システムを「ｄｅｖ」というソース値に関連付ける場合がある。ｆｉｎｄブロックの出力は、入力としてｆｅｔｃｈブロック４２０へ提供される。
【００６６】
ｆｅｔｃｈブロック４２０は、ｆｉｎｄブロックによって識別されたデータストリームからデータを取り出す。ｆｅｔｃｈブロックは、事前に指定された周期性でデータを受信する。ｆｅｔｃｈブロックは、インターフェースモジュール２１０によって受信されて量子化モジュール２４０によって量子化されたデータストリームのリアルタイムデータを受信することができる。ｆｅｔｃｈブロック４２０は、時系列データストア２６０において格納されているデータストリームのデータを受信することもできる。ｆｅｔｃｈブロック４２０の出力は、入力としてｇｒｏｕｐｂｙブロック４３０へ提供される。
【００６７】
ｇｒｏｕｐｂｙブロック４３０は、入力としてデータストリームの１つまたは複数の属性の名前を取る。ｇｒｏｕｐｂｙブロック４３０は、指定された属性によってデータストリームをグループ化する。上述の例において示されているように、ｇｒｏｕｐｂｙブロック４３０は、入力として「ｄａｔａｃｅｎｔｅｒ」という属性を取り、データストリームをそれらのデータセンター値によってグループ化する。したがって、同じデータセンターを有しているすべてのデータストリームのデータは、ともにグループ化される。ｇｒｏｕｐｂｙブロック４３０は、データセンターのそれぞれの値に対応するデータストリームを出力する。ｇｒｏｕｐｂｙブロック４３０の出力は、入力としてｓｔａｔｓブロック４４０（これは、統計計算ブロックのタイプである）へ提供される。
【００６８】
ｓｔａｔｓブロック４４０は、複数の出力、たとえば、平均、メジアン、合計などを有する。それぞれの出力ポートは、出力の名前によって指定された計算のタイプに基づく値を提供する。ｓｔａｔｓブロック４４０は、ｇｒｏｕｐｂｙブロック４３０からの入力として受信されたデータストリームのそれぞれのグループに関する平均値を計算する。したがって、ｓｔａｔｓブロック４４０は、それぞれのデータセンターのデータストリームから受信されたデータの平均を決定する。図４において示されているように、ｓｔａｔｓブロックの平均出力ポートは、ｐｕｂｌｉｓｈブロック４５０への入力を提供する。
【００６９】
ｐｕｂｌｉｓｈブロック４５０は、受信された入力をダッシュボード上に発行するように構成されることが可能である。ｐｕｂｌｉｓｈブロックは、データをソフトウェアバス２９０上に発行するように構成されることが可能である。ソフトウェアバス２９０は、そのデータを計測分析システム１００のその他のすべての他のモジュールに提供する。データストリーム言語プロセッサ２００は、上で指定されたさまざまなブロックを、データストリーム言語プログラムに関して指定された周期性で実行する。
【００７０】
データストリーム言語プログラムの実行の全体的なプロセス
図５は、実施形態による、データストリームから受信されたデータをデータストリーム言語プログラムに基づいて処理するための計測分析システムの全体的なプロセスを示している。メタデータモジュール２２０は、データストリームについて記述するメタデータを５１０で受信する。メタデータ定義は、データストリームそのもののデータから独立して受信される。たとえば、データストリームは、いかなるプロパティー（たとえば、名前／値ペア）も提供することなく、データ値と、そのデータ値に関連付けられているタイムスタンプとを含むタプルを単に提供することができる。メタデータモジュール２２０は、データストリームについて記述するプロパティーを、そのデータストリームを提供しているソースとは異なるソースから受信する。たとえば、データストリームは、開発システム１２０上で実行している計測されたソフトウェアのインスタンスによって提供され、メタデータ定義は、管理システム１６０を介してシステム管理者によって提供されることが可能である。
【００７１】
アナリティクスエンジン２７０は、データストリームについて記述するメタデータ属性を使用してデータストリーム言語プログラムを５２０で受信する。データストリーム言語プログラムは、計測されたソフトウェアについて記述するレポートを生成するために、およびリアルタイムで、すなわち、データストリームのデータが受信されるにつれて結果を提供するために計測分析システム１００に提供される命令のセットに相当することが可能である。
【００７２】
計測分析システム１００は、さまざまな開発システム１２０から計測分析システム１００によってさまざまなデータストリームのデータが受信されるにつれて下記のステップを繰り返す。インターフェースモジュール２１０は、さまざまなデータストリームのデータを５３０で受信する。実施形態においては、インターフェースモジュール２１０は、固定された時間のインターバル、たとえば、１秒または数秒にわたって待ち、さまざまなデータストリームから受信されたデータを収集する。実施形態においては、量子化モジュール２４０は、それぞれのタイムインターバルに関してそれぞれの着信データストリームについてデータの量子化を実行する。したがって、それぞれのデータストリームからのデータは、そのタイムインターバルに関するデータストリームに関連付けられている単一の値へとアグリゲートされる。
【００７３】
アナリティクスエンジン２７０は、タイムインターバルに関するデータストリームのデータに基づいてデータストリーム言語プログラムを５４０で実行する。それぞれのデータストリームに関してデータが量子化された場合には、アナリティクスエンジン２７０は、それぞれのデータストリームからの量子化された値を使用してデータストリーム言語プログラムを５４０で実行する。データストリーム言語プログラムは、たとえば、ユーザインターフェースに提示するためにデータストリーム言語プログラムの評価の結果を送信することをアナリティクスエンジン２７０に行わせるｐｕｂｌｉｓｈブロックを含むことができる。
【００７４】
データストリーム言語プログラムは、１つまたは複数のデータストリームを生成することができる。アナリティクスエンジン２７０はまた、データストリーム言語プログラムの評価の結果として生成されたデータストリームを、たとえば、時系列データストア２６０において格納する。アナリティクスエンジン２７０は、データストリーム言語プログラムの結果を表す１つまたは複数の新たなデータストリーム（または時系列）を作成する。それらの新たなデータストリームは、時系列データストア２６０において格納される。これは、そのデータストリーム言語プログラムの結果がその他のデータストリーム言語プログラムへの入力として使用されることを可能にする。たとえば、データストリーム言語プログラムが、複数のデータストリームから受信された値の９５番目のパーセンタイルを表すデータを生成する場合がある。このデータストリーム言語プログラムの結果は、新たなデータストリームとして時系列データストア２６０において格納されることが可能である。アナリティクスエンジン２７０は、生成されたデータストリームに基づいて移動平均値を計算する別のデータストリーム言語プログラムをさらに実行することができる。
【００７５】
量子化
入力データストリームの量子化は、量子化されたデータストリームを使用してデータの処理を簡略化する。たとえば、それぞれのタイムインターバルに関して、受信された複数のデータストリームに基づくアグリゲート値が決定されることが可能である。これは、特定のタイムインターバルに関して複数のデータストリームにわたってデータをさらにアグリゲートすることによって実行される。実施形態においては、入力データストリームの量子化は、それぞれのタイムインターバルの終わりに実行され、それによって、そのタイムインターバルに関する量子化されたデータが、処理に利用できるようになる。
【００７６】
さらに、計測分析システム１００は、個々のデータストリームに関する量子化されたデータを格納し、それによって、複数のデータストリームにわたるデータが、さまざまな方法で、たとえば、要求において指定されているように組み合わされることが可能になる。言い換えれば、ユーザは、複数のデータストリームにわたるデータを第１の様式で組み合わせる第１の要求を送信することができる。その後、そのユーザは、別のデータストリームにわたるデータを別の様式で組み合わせることを求める新たな要求を送信することができる。たとえば、ユーザは、データストリームにわたるデータを組み合わせて、さまざまなデータセンターにわたって計算されたアグリゲートを見ることができる。しかしながら、その後、ユーザは、別々のタイプのアプリケーション、別々のタイプのサーバ、別々の地理的領域などにわたって計算されたアグリゲートを見るために要求を変更することができる。
【００７７】
計測分析システム１００は、前のデータストリームがアグリゲートされたデータストリームのセットをユーザが修正する要求を受信することもできる。たとえば、ユーザは、アグリゲートされているデータストリームのセットから１つまたは複数のデータストリームを除去するよう計測分析システム１００に要求し、訂正されたセットに基づいてアグリゲートを要求することができる。ユーザは、サーバ、アプリケーションを除去すること、もしくは新たに追加すること、またはシステム構成に対してその他の任意の修正を行うことの影響を分析するために、そのような要求を送信することができる。計測分析システム１００は、量子化されたデータストリームのデータを保持し、これらの要求に基づいて、別々のタイムインターバルに関する量子化されたデータストリームデータを組み合わせる。計測分析システム１００は、量子化されたデータストリームデータを格納しているので、計測分析システム１００は、必要に応じてデータストリームにわたってデータを効率よく組み合わせる能力を有している。
【００７８】
計測分析システム１００は、データストリームにわたってデータを組み合わせて、複数のデータストリームにわたって移動アグリゲート計算を実行することができる。計測分析システム１００は、所与の長さのタイムインターバルにわたる任意の移動アグリゲート値、たとえば、１時間移動平均、１５分移動平均などを継続的に計算することができる。
【００７９】
量子化モジュール２４０は、それぞれのタイムインターバルに関して入力データストリームの値をアグリゲートし、タイムインターバルに関するアグリゲート値を生成する。したがって、量子化モジュール２４０は、任意のタイムインターバルの後にデータ値が発生する可能性があるデータストリームを受信する。量子化モジュール２４０は、入力データストリームを処理して、規則的なタイムインターバルでデータが利用可能であるデータストリームを生成する。量子化モジュール２４０の詳細は、本明細書においてさらに記述されている。
【００８０】
量子化モジュール２４０は、データストリームにおいて受信された値のタイプ、たとえば、その値が特定のアクションまたはエンティティーのカウントであるかどうか、その値が特定の値のアグリゲーションによって入手されたかどうか、その値が値の所与のセットの最大／最小値に相当するかどうかなどについて記述する情報を受信する。データストリームの値のタイプは、その値を入手するために実行されたオペレーションのタイプについて記述する。量子化モジュール２４０は、データストリームの値のさまざまなタイプから、インターバルに関するデータストリームの入力値上で、そのタイムインターバルを代表する結果値を入手するために実行されたオペレーションのタイプへのマッピングを格納する。
【００８１】
実施形態においては、量子化モジュール２４０は、特定のタイムインターバルに関する入力として受信されるデータ値を格納するためのバッファを含む。量子化モジュール２４０のバッファは、任意の数の値を格納することができるデータ構造を使用する。なぜなら、タイムインターバルにおいて受信される値の数は、事前にはわからず、タイムインターバルごとに変わる可能性があるからである。たとえば、量子化モジュール２４０は、入力データストリームの値を格納するためにリストデータ構造またはスタックデータ構造を使用することができる。
【００８２】
量子化モジュール２４０は、それぞれのタイムインターバルに関して受信されたデータストリームのデータ値を収集する。量子化モジュール２４０は、時間を追跡把握する。現在のタイムインターバルの終わりが到達されているということを量子化モジュール２４０が決定した場合には、量子化モジュール２４０は、そのタイムインターバルにおいて受信されたすべてのデータ値を処理して、そのタイムインターバルを代表するアグリゲート値を決定する。量子化モジュール２４０は、その後、入力値を表すために使用されたバッファをクリアし、それを、次のタイムインターバルに関する値を格納するために使用する。実施形態においては、量子化モジュール２４０は、複数のバッファを使用し、それによって、バッファにおいて格納されている前のタイムインターバルのデータが処理されている間に、次のタイムインターバルに関する新たなデータが別のバッファにおいて格納されることが可能である。
【００８３】
図６は、実施形態による、計測されたソフトウェアから受信されたデータストリームの量子化のプロセスを示している。図６は、時間軸６２０ａおよび６２０ｂを示しており、それぞれは、一連のデータ値を伴うタイムラインを表している。時間軸６２０ａは、入力データストリーム６００のデータ値を示しており、時間軸６２０ｂは、量子化モジュール２４０によって生成された量子化されたデータストリーム６１０の値を示している。
【００８４】
図６において示されているように、４つのデータ値Ｄ１１、Ｄ１２、Ｄ１３、およびＤ１４が、タイムインターバルＩ１（時刻Ｔ０からＴ１を表している）において受信されており、２つのデータ値Ｄ２１およびＤ２２が、タイムインターバルＩ２（時刻Ｔ１からＴ２を表している）において受信されており、３つのデータ値Ｄ３１、Ｄ３２、およびＤ３３が、タイムインターバルＩ３（時刻Ｔ２からＴ３を表している）において受信されている。ＴｍとＴｎとの間におけるそれぞれのタイムインターバルは、開始時点Ｔｍを含むと想定されることが可能である（それによって、終了時点Ｔｎは、次のタイムインターバルに含まれる）。ＴｍとＴｎとの間におけるタイムインターバルのその他の任意の解釈が使用されることが可能であり、たとえば、終了時点Ｔｎがそのタイムインターバルに含まれることが可能であり、開始時点Ｔｍが前のタイムインターバルに含まれることが可能である。
【００８５】
量子化モジュール２４０は、それぞれのタイムインターバルのデータ値を処理して、時間軸６２０ｂにおいて示されている対応する結果値を生成する。たとえば、量子化モジュール２４０は、タイムインターバルＩ１において受信された値Ｄ１１、Ｄ１２、Ｄ１３、およびＤ１４をアグリゲートして、時間軸６２０ｂにおいて示されている値Ｄ１を生成し、量子化モジュール２４０は、タイムインターバルＩ２において受信された値Ｄ２１およびＤ２２をアグリゲートして、時間軸６２０ｂにおいて示されている値Ｄ２を生成し、量子化モジュール２４０は、タイムインターバルＩ３において受信された値Ｄ３１、Ｄ３２、およびＤ３３をアグリゲートして、時間軸６２０ｂにおいて示されている値Ｄ３を生成する。
【００８６】
データストリームの入力値をアグリゲートするために実行されるオペレーションのタイプは、入力データストリームによって表されるデータのタイプに依存する。入力データストリームのそれぞれのタプルが、特定の値のカウント、たとえば、ソフトウェアによって実行されたアクションのカウントである場合には、量子化モジュール２４０は、入力値をアグリゲートして、カウントを足し合わせることによって、それぞれのタイムインターバルに関する出力データストリーム値を決定する。受信された入力データストリームのそれぞれのタプルが、値のセットの最小（または最大）である場合には、量子化モジュール２４０は、タイムインターバルに関する入力値をアグリゲートして、そのタイムインターバルに関する入力値の最小（または最大）を決定することによって、そのタイムインターバルに関する出力値を決定する。受信された入力データストリームのそれぞれのタプルが、値のセットの平均である場合には、量子化モジュール２４０は、そのタイムインターバルに関連付けられている入力値をアグリゲートして、そのタイムインターバルの入力値の平均を決定することによって、それぞれのタイムインターバルに関する出力データストリーム値を決定する。受信された入力データストリームのそれぞれのタプルが、その時点でのメトリックの最後の利用可能な値である場合には、量子化モジュール２４０は、タイムインターバルに関する入力値をアグリゲートして、そのデータストリームの最後の値を単に使用することによって、そのタイムインターバルに関する出力値を決定する。
【００８７】
メトリックデータストリームおよびイベントデータストリーム
実施形態においては、計測分析システム１００は、メトリックデータストリームおよびイベントデータストリームという２つのタイプのデータストリームをサポートする。イベントは、典型的には、システムにおいて発生している例外的な状況、たとえば、特定のしきい値を超過している負荷、または特定のしきい値を超過しているメモリ使用状況を指す。イベントは、システムにおいて、たとえば、開発システム１２０のシステム管理者によって実行される特定のアクションを指す場合もある。メトリックデータストリームは、計測されたソフトウェアから入手されること、または計測されたソフトウェアから入手されたメトリックデータストリームから得られることが可能であるメトリックの値を表すデータを含む。本明細書において言及されるデータストリームは、別段の記載がない限り、メトリックデータストリームである。メトリックデータストリームは、メトリック時系列とも呼ばれ、イベントデータストリームは、イベント時系列とも呼ばれる。
【００８８】
メトリックデータストリームは、データストリーム識別子と、タイムスタンプ値と、データ値とを使用して表されるデータポイントを含む。データストリーム識別子は、データポイントが属するデータストリームを識別する。タイムスタンプ値は、データポイントを時刻、たとえば、そのデータポイントが報告された時刻、またはそのデータポイントが計測分析システム１００によって受信された時刻に関連付ける。データ値は、報告されているメトリックの値、たとえば、特定の時刻のサーバにおけるＣＰＵ負荷を表す値、または特定の時刻のサーバにおけるメモリ使用状況の測定値である。メトリック時系列は、典型的には、大量のデータを計測分析システムに提供し、たとえば、それぞれのデータストリームは、毎秒いくつかのデータポイントを報告することができ、それぞれの企業に関して多数のデータストリームが存在する場合がある。
【００８９】
イベントデータストリームは、データストリーム識別子と、タイムスタンプ値と、イベントについて記述する１つまたは複数のキー値ペアとを使用して表されるデータポイントを含む。イベントデータストリームのデータストリーム識別子およびタイムスタンプ値は、メトリックデータストリームと同様である。しかしながら、イベントは典型的に、メトリックデータストリームのデータポイントと比較して、より少ない頻度で発生する。たとえば、イベントは、メンテナンスウィンドウを始動することなど、システム管理者によって実行されるアクションに相当することが可能である。イベントのキー値ペアは、イベントについて記述する。たとえば、メンテナンスウィンドウを開始したシステム管理者の名前、メンテナンスウィンドウの目的、メンテナンスウィンドウの範囲などである。イベントは典型的に、不規則な割合で発生し、たとえば、イベントは、いくつかのシステムによっては報告されるがその他のシステムによっては報告されない場合があり、イベントは、一度発生する場合があり、多大な時間にわたって発生しない場合がある、といった具合である。結果として、イベントとともに格納される情報の量は多くなる可能性がある。
【００９０】
イベントは、システムにおいて発生する特定の具体的な状況、たとえば、特定の特徴を表示する特定のメトリックについて記述する場合もある。例として、イベントは、サーバのｃｐｕ負荷またはメモリ使用状況が特定のしきい値を超過している場合に報告されることが可能である。これらのイベントは、データストリーム言語プログラムの実行の結果として計測分析システム１００によって生成される。
【００９１】
計測分析システム１００は、データを処理するという点でイベント時系列をメトリック時系列と同じように扱う。たとえば、計測分析システム１００は、データストリームのいずれかのタイプに基づいて情報のリアルタイムの報告を可能にする。計測分析システム１００は、イベントデータストリームがメトリックデータストリームと比較されることを可能にして、ユーザがそれら２つを相関付けることを可能にする。たとえば、メトリックデータストリームを、イベントが生成された際のメトリック値を示すイベントデータストリームとオーバーレイするレポートが生成されることが可能である。
【００９２】
データストリーム言語プログラムに関するデータストリームの動的な選択
ｆｉｎｄブロックは、データストリーム言語プログラムに関して入力されるデータストリームの動的な選択を可能にする。ｆｉｎｄブロックは、データストリームを識別するための検索条件を指定する。実施形態においては、検索条件は、データストリームについて記述する属性（またはメタデータタグ）に基づく表現である。これらの属性は、データストリームの一部として受信されて、または、たとえば計測分析システム１００に加えられるメタデータとして、データストリームに関連付けられて、メタデータストア２３０において格納されることが可能である。検索条件を実行することによって識別されたデータストリームは、入力としてデータストリーム言語プログラムの後続のブロックへ提供される。
【００９３】
データストリーム言語プロセッサ２００は、周期的にｆｉｎｄブロックの検索条件を評価し、それによって、データストリーム言語プログラムへの入力として提供されるデータストリームのセットを再評価することができる。結果として、データストリーム言語プログラムへの入力として提供されるデータストリームのセットは、動的に変更される。たとえば、開発システム１２０は、新たなサーバを加えること、サービスを開始もしくは停止すること、または既存のサービスを再構成することが可能である。さらに、新たな開発システム１２０は、データストリームを計測分析システム１００へ送信することができる。結果として、計測分析システム１００によって受信されるデータストリームのセットは、動的に変わる。
【００９４】
ｆｉｎｄブロックの検索条件は、データストリームの特徴に基づいてデータストリームのセットを識別するために使用されることが可能である。たとえば、検索条件は、特定のデータセンターに属しているサービス、特定のアプリケーションに対応するサービス、複数のデータセンターにわたって分散している場合がある組織に関連付けられているサービス、ソフトウェアの特定のバージョン（たとえばオペレーティングシステム、または特定のパッチを有しているアプリケーション）を稼働させるサービスを識別するために使用されることが可能である。ｆｉｎｄブロックに関して指定される検索条件のタイプは、データストリームに関して定義されてメタデータストア２３０において格納されるメタデータタグのタイプに依存する。
【００９５】
ｆｉｎｄブロックの検索条件は、開発システムなどの外部システムから受信されたすべてのデータストリーム、ならびに計測分析システム１００内で生成されたデータストリームにわたって、たとえばデータストリーム言語プログラムの中間結果または最終結果として、評価される。たとえば、本明細書において記述されているように、データストリーム言語プログラムの中間結果または最終結果は、開発システム１２０から受信されたデータストリームと同じに扱われる第一級市民として表される。したがって、ｆｉｎｄブロックの検索条件が評価される場合には、結果は、開発システム１２０から受信されたデータストリーム、ならびに計測分析システム１００内の内部で生成されたデータストリームを含むことができる。
【００９６】
下記は、ｆｉｎｄブロックに関して指定される検索条件の若干の例である。ユーザが、アナリティクスサーバ上の負荷を知りたいと望んでおり、それらのアナリティクスサーバは、ａｎａｌｙｔｉｃ１、ａｎａｌｙｔｉｃ２、ａｎａｌｙｔｉｃ３、．．．、およびａｎａｌｙｔｉｃＮと名付けられていると想定していただきたい。アナリティクスサーバのこのセットは、「ａｎａｌｙｔｉｃ*」という正規表現を満たすメタデータタグ値を伴うすべてのデータストリームとして検索条件を指定するｆｉｎｄ（“ｓｏｕｒｃｅ：ａｎａｌｙｔｉｃ*”）というｆｉｎｄブロックを使用することによって識別されることが可能である。
【００９７】
検索条件は、論理式であることが可能である。たとえば、ｆｉｎｄ（“ｓｏｕｒｃｅ：ｄａｔａｂａｎｋ*  ＡＮＤ  ｍｅｔｒｉｃ：ｎｕｍＣａｃｈｅＨｉｔｓ”）というｆｉｎｄブロックは、「ｄａｔａｂａｎｋ*」という形式のソース属性と、ｎｕｍＣａｃｈｅＨｉｔｓというメトリック名とを有しているすべてのデータストリームを見つけ出す。したがって、このｆｉｎｄブロックを伴うデータストリーム言語プログラムは、「ｄａｔａｂａｎｋ*」として識別されたソースからｎｕｍＣａｃｈｅＨｉｔｓというメトリックを提供しているすべてのデータストリームに関して評価される。同様に、ｆｉｎｄ（“ｓｏｕｒｃｅ：ｄａｔａｂａｎｋ*  ＡＮＤ  ｍｅｔｒｉｃ：ｎｕｍＣａｃｈｅＭｉｓｓｅｓ”）というｆｉｎｄブロックは、「ｄａｔａｂａｎｋ*」として識別されたソースからｎｕｍＣａｃｈｅＭｉｓｓｅｓというメトリックを提供しているすべてのデータストリームを見つけ出す。別の例として、ｆｉｎｄ（“ｓｏｕｒｃｅ：ｚｋ*  ＡＮＤ  ｓｍｅｔｒｉｃ：ｃｐｕ  ＡＮＤ  ｒｅｇｉｏｎ：ｏｒｅ１”）というｆｉｎｄブロックは、「ｃｐｕ」というメトリックを有している「ｏｒｅ１」という領域から、「ｚｋ*」という形式のソース名を有しているすべてのデータストリームを見つけ出す。
【００９８】
ｆｉｎｄブロックは、開始時刻、停止時刻、および周期性のうちの１つまたは複数を指定する構成パラメータに関連付けられることが可能である。ｆｉｎｄブロックの周期性は、そのｆｉｎｄブロックが属するデータストリーム言語プログラムのジョブの周期性とは異なる場合がある。これがそうであるのは、データストリームのセットが変わる割合が、データがデータストリーム言語プログラムを通じて移動してほしいとユーザが望む割合とは異なる場合があるからである。たとえば、データストリームのセットが頻繁には変わらないということをユーザが決定する場合があり、検索ストリングが１時間に１回ほど評価される場合があり、その一方でジョブの周期性は１分である。したがってユーザは、ｆｉｎｄブロックおよびデータストリーム言語プログラムに関する周期性の別々の値を指定する場合がある。
【００９９】
実施形態においては、ｆｉｎｄブロックの評価は、固定された周期性には基づかず、計測分析システム１００において発生する特定のイベントによってトリガーされる。たとえば、ｆｉｎｄブロックの評価は、メタデータにおけるいかなる更新によってもトリガーされる。メタデータにおける更新は、ｆｉｎｄブロックの結果を変化させて、そのｆｉｎｄブロックに基づいて入力データストリームの別のセットがデータストリーム言語プログラムによって処理されるという結果をもたらすことが可能である。実施形態においては、計測分析システム１００は、ｆｉｎｄブロックをメタデータの特定の部分に関連付ける。実施形態においては、ｆｉｎｄブロックが特定のメタデータ属性に基づく場合には、それらのメタデータ属性に関連付けられているいかなる変化も、ｆｉｎｄブロックの実行をトリガーする。たとえば、ｆｉｎｄブロックが、「ｘｙｚ」という領域からのすべてのデータストリームに関して真であると評価した場合には、データストリームの評価は、「ｘｙｚ」という領域に対するデータストリームのいかなる追加または削除によってもトリガーされる。その他の領域に対するデータストリームの追加または削除は、ｆｉｎｄブロックの実行をトリガーすることはできない。計測分析システム１００は、それぞれのｆｉｎｄブロックに関連付けられているメタデータ属性のセットを分析および識別する。計測分析システム１００は、ｆｉｎｄブロックに関連付けられているメタデータ属性のセットに関連付けられているメタデータにおける変化が発生しているかどうかを検知する。ｆｉｎｄブロックに関連付けられているメタデータ属性のセットに関連付けられているメタデータにおける変化が発生しているということを計測分析システム１００が検知した場合には、計測分析システム１００は、そのｆｉｎｄブロックを再評価する。実施形態においては、計測分析システム１００は、データストリームに関連付けられているプロパティーが変わったということを検知した場合には、ｆｉｎｄブロックを再評価する。実施形態においては、ｆｉｎｄブロックは、ｆｉｎｄブロックの定義が修正された場合に再評価される。
【０１００】
実施形態においては、ｆｉｎｄブロックは、データストリームにおける変化があった場合に再評価される。たとえば、新たなデータストリームが計測分析システム１００によって検知された場合、またはデータストリームが非アクティブであるということを計測分析システム１００が決定した場合には、計測分析システム１００は、ｆｉｎｄブロックを再評価する。生成されるデータストリームは、開発システム１２０などの外部システムから受信されるデータストリームであることが可能であり、またはデータストリームは、データストリーム言語プログラムの中間結果または最終結果によって生成されることが可能である。たとえば、本明細書において記述されているように、データストリーム言語プログラムの中間結果または最終結果は、開発システム１２０から受信されたデータストリームと同じに扱われる第一級市民として表される。したがって、これらのデータストリームのメタデータの追加、削除、または修正も、ｆｉｎｄブロックが再評価されることをもたらす。
【０１０１】
図７は、実施形態による、データストリーム言語プログラムへの入力を提供するためのｆｉｎｄブロックによるデータストリームのセットの選択を示している。図７において示されているように、ｆｉｎｄブロック７１０ａは、「ｄａｔａｃｅｎｔｅｒ：ｅａｓｔ*」という検索ストリングによって指定された検索条件を有している。データストリーム言語プロセッサ２００の探索モジュール３１０は、「ｄａｔａｃｅｎｔｅｒ」というメタデータタグ（または属性）が「ｅａｓｔ*」という正規表現を満たしているすべてのデータストリームを識別する。
【０１０２】
図７は、ｃｅｎｔｒａｌ＿ｄｅｖ、ｅａｓｔ＿ｄｅｖ、ｅａｓｔ＿ｑａ、ｗｅｓｔ＿ｄｅｖ、およびｎｏｒｔｈ＿ｄｅｖというデータセンタータグ値を有しているデータストリームを含む、計測分析システム１００によって受信されたデータストリームのセット７４０ａを示している。探索モジュール３１０は、ｅａｓｔ＿ｄｅｖおよびｅａｓｔ＿ｑａというデータセンタータグ値を伴うデータストリームがｆｉｎｄブロック７１０ａの検索条件を満たしているということを決定する。探索モジュール３１０は、識別されたデータストリームのセット７５０ａをデータストリーム言語プログラムの後続のブロック７３０ａに提供する。
【０１０３】
データストリーム言語プログラムの残りへの入力として提供されるデータストリームのセットは、ｆｉｎｄブロック７１０に関連付けられている検索条件に依存する。たとえば、ｆｉｎｄブロック７１０ｂは、ｆｉｎｄブロック７１０ａの検索条件とは異なる「ｄａｔａｃｅｎｔｅｒ：*ｄｅｖ」という検索条件を有する。データストリーム言語プロセッサ２００の探索モジュール３１０は、「ｄａｔａｃｅｎｔｅｒ」というメタデータタグ（または属性）が「*ｄｅｖ」という正規表現を満たしているすべてのデータストリームを識別することによってｆｉｎｄブロック７１０ｂの検索条件を処理する。
【０１０４】
図７は、ｃｅｎｔｒａｌ＿ｄｅｖ、ｅａｓｔ＿ｄｅｖ、ｅａｓｔ＿ｑａ、ｗｅｓｔ＿ｄｅｖ、およびｎｏｒｔｈ＿ｄｅｖというデータセンタータグ値を有しているデータストリームを含む、計測分析システム１００によって受信されたデータストリームのセット７４０ｂを示している。この例においては、セット７４０ｂは、セット７４０ａと同じ要素を有している。探索モジュール３１０は、ｃｅｎｔｒａｌ＿ｄｅｖ、ｅａｓｔ＿ｄｅｖ、ｗｅｓｔ＿ｄｅｖ、およびｎｏｒｔｈ＿ｄｅｖというデータセンタータグ値を伴うデータストリームがｆｉｎｄブロックの検索条件を満たしているということを決定する。探索モジュール３１０は、識別されたデータストリームのセット７５０ｂをデータストリーム言語プログラムの後続のブロック７３０ｂに提供する。
【０１０５】
図７は、データストリーム言語プログラムによって処理されるデータストリームのセットをデータストリーム言語プロセッサ２００によって動的に決定することを示している。データストリーム言語によって処理されるデータストリームのセットは、ｆｉｎｄブロック７１０の検索条件と、計測分析システム１００によって受信される現在利用可能なデータストリームとに基づいて決定される。
【０１０６】
実施形態においては、ｆｉｎｄブロックは、スケジュールに関連付けられており、それによって、データストリーム言語プロセッサ２００の探索モジュール３１０は、そのスケジュールに従ってｆｉｎｄブロックを実行する。たとえば、ｆｉｎｄブロックは、周期性に関連付けられることが可能であり、それによって探索モジュール３１０は、その周期性に基づいて決定された割合でｆｉｎｄブロックを実行する。したがって探索モジュール３１０は、その周期性に基づくタイムインターバルにわたって待ち、ｆｉｎｄブロックの検索条件を満たすデータストリームのセットを再評価する。このプロセスは、（時間が、ｆｉｎｄブロックに関連付けられている「終了時刻」の値に達するまで）繰り返される。
【０１０７】
図８は、実施形態による、ｆｉｎｄブロックの周期的な再評価の結果としてのデータストリーム言語プログラムへの入力を提供するデータストリームのセットに対する動的な変化を示している。図８において示されているように、ｆｉｎｄブロックの検索条件は、時刻Ｔ１において、そして再び時刻Ｔ２において評価され、その結果、データストリームの別々のセット８５０が、データストリーム言語プログラムによって処理するために識別される。図８は、２つの異なる時点でｆｉｎｄブロックを再実行することを示している。
【０１０８】
時刻Ｔ１において、計測分析システム１００は、ｃｅｎｔｒａｌ＿ｄｅｖ、ｅａｓｔ＿ｄｅｖ、ｅａｓｔ＿ｑａ、ｗｅｓｔ＿ｄｅｖ、およびｎｏｒｔｈ＿ｄｅｖというデータセンタータグ値を伴うデータストリームのセット８４０ａを受信する（同じデータセンタータグ値を伴う複数のデータストリームが存在することが可能であるということに留意されたい）。探索モジュール３１０は、「ｄａｔａｃｅｎｔｅｒ：ｅａｓｔ*」という検索条件を伴うｆｉｎｄブロック８１０ａを評価する。したがって、探索モジュール３１０は、ｅａｓｔ＿ｄｅｖおよびｅａｓｔ＿ｑａというデータセンタータグ値を伴うデータストリームのセット８５０ａを識別する。データストリーム言語プロセッサ２００は、識別されたデータストリームのセット８５０ａをデータストリーム言語プログラムの後続のブロック８３０ａに提供する。
【０１０９】
探索モジュール３１０は、時刻Ｔ２においてｆｉｎｄブロックを再評価する。時刻Ｔ２において、計測分析システム１００は、ｃｅｎｔｒａｌ＿ｄｅｖ、ｅａｓｔ＿ｄｅｖ、ｅａｓｔ＿ｐｒｏｄ、ｗｅｓｔ＿ｄｅｖ、およびｎｏｒｔｈ＿ｄｅｖというデータセンタータグ値を伴うデータストリームのセット８４０ａを受信する。したがって探索モジュール３１０は、ｅａｓｔ＿ｐｒｏｄおよびｅａｓｔ＿ｑａというデータセンタータグ値を伴うデータストリームのセット８５０ｂを識別する。
【０１１０】
時刻Ｔ１において識別されたセット８５０ａと比較して、セット８５０ｂは、ｅａｓｔ＿ｐｒｏｄというデータセンタータグを伴う新たなデータストリームを含み、ｅａｓｔ＿ｑａというデータセンタータグを伴うデータストリームが欠如している。データストリーム言語プロセッサ２００は、識別されたデータストリームのセット８５０ａをデータストリーム言語プログラムの後続のブロック８３０ａに提供する。したがって、探索モジュールの同じ検索条件に基づくデータストリームのセット８５０のそれぞれの後続の評価は、データストリームの別のセットが後続のブロック８３０に提供されるという結果をもたらす場合がある。
【０１１１】
データストリーム言語プログラムによって処理されるデータストリームのセットを動的に変更できることは、計測分析システムへの入力を提供する動的に変わる環境にデータストリーム言語プログラムが適合することを可能にする。たとえば、企業は、データセンターに対してサーバを追加／除去すること、新たなデータセンターを追加すること、サービスを追加／除去／修正すること、サービスを変更して、計測されたソフトウェアをさまざまな方法で実行することなどが可能である。データストリーム言語プログラムによって処理されるデータストリームのセットを指定できることは、企業が動的に変わるにつれて、それについて記述するデータを計測分析システムが報告することを、データストリーム言語プログラムを修正する必要を伴わずに可能にする。
【０１１２】
図９は、実施形態による、ｆｉｎｄブロックを使用してデータストリーム言語プログラムへの入力を提供するためのデータストリームのセットを識別するためのプロセスを示している。図９において示されているように、データストリーム言語プロセッサ２００は、処理のためのデータストリーム言語プログラムを９００で受信する。図９において示されているプロセスは、そのデータストリーム言語プログラムがｆｉｎｄブロックを有していて、その後に、残りのデータストリーム言語プログラムに対応するブロックのセットが続くという想定に基づいている。
【０１１３】
ｆｉｎｄブロックは、検索ストリングに関連付けられている。探索モジュール３１０は、ｆｉｎｄブロックに関連付けられている検索ストリングを９１０で受信する。探索モジュール３１０は、検索ストリングを９２０で解析して、その検索ストリングに対応する検索条件の表示、たとえば、解析木表示を構築する。探索モジュール３１０は、検索条件に対応するデータストリームのセットを９３０で識別する。探索モジュール３１０は、識別されたデータストリームのセットをデータストリーム言語プログラムの後続のブロック、たとえば、ｆｅｔｃｈブロックに提供する。データストリーム言語プロセッサ２００は、検索条件に基づいて９３０で識別されたデータストリームからデータを取り出し、残りのデータストリーム言語プログラムを９４０で実行する。
【０１１４】
検索条件に基づいてデータストリームのセットを９３０で識別するステップ、およびデータストリーム言語プログラムの残りのブロックを９４０で実行するステップは、データストリーム言語プロセッサ２００によって繰り返し実行される。ステップ９３０および９４０が繰り返される割合は異なる場合がある。たとえば、データストリームのセットを９３０で識別するステップは、データストリーム言語プログラムの残りのブロックが実行される割合と比較して、より遅い割合で実行される場合がある。データストリーム言語プログラムの残りのブロックの９４０での実行の割合、およびｆｉｎｄブロックの実行の割合は、データストリーム言語プログラムに対応するジョブに関して（たとえば、ユーザによって）指定される。
【０１１５】
データストリーム言語プログラムに関してデータストリームからデータを取り出すこと
実施形態においては、データストリーム言語プログラムは、データストリームの所与のセットからデータを取り出すためのｆｅｔｃｈブロックを含む。典型的には、ｆｅｔｃｈブロックは、データストリーム言語プログラムのデータパイプラインにおいてｆｉｎｄブロックの後に配置される。言い換えれば、ｆｉｎｄブロックの出力は、入力としてｆｅｔｃｈブロックへ提供される。したがってｆｅｔｃｈブロックは、ｆｉｎｄブロックを処理した結果として探索モジュール３１０によって識別されたデータストリームのセットからデータを取り出す。フェッチモジュール３２０は、ｆｅｔｃｈブロックを実行する。
【０１１６】
図１０は、実施形態による、ｆｅｔｃｈブロックを実行することによってデータストリームからデータを取り出すプロセスを示している。図１０において示されている特定のステップは、図１０において示されている順序とは異なる順序で実行されることが可能である。さらにステップは、本明細書において示されているモジュールとは異なるモジュールによって実行されることが可能である。
【０１１７】
データストリーム言語プロセッサ２００は、データストリーム言語プログラムに基づくジョブの実行の開始時刻、終了時刻、および周期性を受信する。フェッチモジュール３２０は、データストリーム言語プログラムのｆｉｎｄブロックの検索条件に基づいて探索モジュール３１０からデータストリームのセットを受信する。フェッチモジュールは、データを取り出し、それを実行用としてデータストリーム言語プログラムの後続のブロックに提供する。フェッチモジュール３２０は、それぞれの後続のタイムインターバルに関してデータストリームからデータをフェッチするために下記のステップを実行する。
【０１１８】
フェッチモジュール３２０は、次のタイムインターバルを識別し、そのタイムインターバル中にデータが届くのを待つ。量子化モジュールは、それぞれの入力データストリームのデータに基づいて別々の周期性を有する複数の量子化されたデータストリームを生成する。たとえば、量子化されたデータストリームＱ１が、５秒の周期性で生成されることが可能であり、別の量子化されたデータストリームＱ２が、１０秒の周期性で生成されることが可能であり、別の量子化されたデータストリームＱ３が、１分の周期性で生成されることが可能である、といった具合である。フェッチモジュール３２０は、（データストリーム言語プログラムの周期性に基づいて決定された）データストリーム言語プログラムが実行される周期的なタイムインターバルよりも小さい最大の周期的なタイムインターバルを有する量子化されたデータストリームを１０２０で選択する。
【０１１９】
たとえば、データストリーム言語プログラムが実行される必要があるタイムインターバルのサイズが、データストリーム言語プログラムの周期性に基づいて３０秒である場合には、フェッチモジュール３２０は、１０秒の周期性を有する量子化されたデータストリームＱ２を選択する。量子化されたデータストリームＱ３は選択されない。なぜなら、それは、データストリーム言語プログラムの時間周期的なタイムインターバル（すなわち、３０秒）よりも大きい１分（すなわち、６０秒）の周期的なタイムインターバルを有するからである。量子化されたデータストリームＱ３は選択されない。なぜなら、それは、データストリーム言語プログラムの周期的なタイムインターバルよりも小さい最大の周期的なタイムインターバルではない５秒の周期的なタイムインターバルを有するからである（それは、１０秒であるＱ２の周期的なタイムインターバルよりも小さいからである）。フェッチモジュール３２０は、（たとえば、現在の３０秒のタイムインターバルにおいて発生する量子化されたデータストリームの３つのデータポイントのデータ値をアグリゲートすることによって、）選択された量子化されたデータストリームを再量子化して、周期性３０秒の再量子化されたデータストリームを生成する。
【０１２０】
フェッチモジュール３２０は、時系列データストア２６０からデータを、データストリームから受信されているリアルタイムデータと組み合わせる必要がある場合に、１０５０で取り出す。フェッチモジュールは、その組み合わされたデータを後続のブロック、たとえば、統計計算ブロックに１０６０で提供する。たとえば、データストリーム言語プログラムがスクリーンに出力を発行し、ジョブの開始時刻がマイナス（たとえば、−１時間）と示されていると想定していただきたい。データは、チャートとして提示されることが可能であり、そのチャートは、受信された時点でのデータ、ならびに選択されたタイムインターバルに関する過去のデータを提示する。たとえば、ユーザは、チャート上にデータを提示するための１時間の時間ウィンドウを選択することができる。この状況においては、チャートが、データストリームにおいて受信されたリアルタイムデータに基づいてのみレンダリングされた場合には、計測分析システム１００がデータストリーム言語プログラムを処理し始めた時点で、そのチャートは空であろう。表示されるチャートは、右からゆっくりと満ち始めて、表示されているウィンドウを１時間後に満たすであろう。これは、理想的ではないユーザ経験を提示する。理想的には、ユーザは、最初からチャートが表示されている１時間にわたって完全なチャートを（その１時間のデータとともに）見たいものである。
【０１２１】
フェッチモジュール３２０は、データストリームからのリアルタイムデータが利用可能になる時点の前に発生するチャートの部分をレンダリングするために時系列データストア２６０からデータを１０５０で取り出すことによって、上述の状況を改善する。たとえば、計測分析システム１００がデータストリーム言語プログラムを処理し始めたときに、フェッチモジュール３２０は、時系列データストア２６０から入手されたデータを使用してチャート全体をレンダリングするためにデータを提示する。ますます多くのデータがデータストリームから受信されるにつれて、フェッチモジュール３２０は、時系列データストア２６０からのデータを、受信されたリアルタイムデータと組み合わせる。
【０１２２】
例として、１０分後に、フェッチモジュール３２０は、データストリームから受信された１０分間のデータと組み合わされた、時系列データストア２６０から取り出された５０分間のデータを提示用として送信する。同様に、３０分後に、フェッチモジュール３２０は、データストリームから受信された３０分間のデータと組み合わされた、時系列データストア２６０から取り出された３０分間のデータを提示用として送信する、といった具合である。データストリームの６０分間よりも多くのデータが受信された後に、フェッチモジュール３２０は、データストリームから受信されたデータに基づいてチャートをレンダリングするためのすべてのデータをそれが送信することができるデータストリームに基づいて十分なデータを有しており、データストリームからのデータを、時系列データストア２６０の以前に格納されたデータと組み合わせる必要はない。
【０１２３】
フェッチモジュール３２０は、その他の状況において、たとえば、ｗｉｎｄｏｗブロックに関して、データストリームから受信されたデータと組み合わせるために時系列データストア２６０からデータを１０５０で取り出すことができる。ｗｉｎｄｏｗブロックは、指定された長さ（たとえばｔｗ）のスライディング時間ウィンドウを提供し、そのウィンドウのデータ（たとえば平均値）の計算を実行して、１時間の時間ウィンドウにわたる移動平均を決定する。この状況においては、時間ｔｗの初期化待ち時間がある。なぜなら、データストリームからのデータは、ウィンドウ全体を満たすのに時間ｔｗのピリオドにわたって利用可能でないからである。したがって、データストリーム言語プログラムが時刻ｔ１において開始した場合には、時刻ｔ１〜ｔｗから開始するデータが時系列データストア２６０からフェッチされてウィンドウを満たして、ウィンドウ計算のための有意なデータを提供する。任意の時刻ｔ０＞ｔ１において（その一方で、ｔ０〜ｔ１はｔｗ未満である）、フェッチモジュール３２０は、長さｔ０〜ｔ１のウィンドウの終わりの部分を、データストリームから受信されたリアルタイムデータで満たし、そのウィンドウの最初の部分（すなわち、残りの部分）を、時系列データストア２６０から取り出されたデータで満たす。
【０１２４】
データストリーム言語プログラムが、複数のウィンドウの計算を含む場合には、フェッチモジュール３２０は、時系列データストア２６０からのデータ（必要な場合）と、データストリームから受信されたリアルタイムデータとを組み合わせることによって、フェッチされる必要がある最大ウィンドウのサイズのデータを保持する。最大ウィンドウのために保持されるデータは、より小さなウィンドウのためのデータを含む。
【０１２５】
図１１Ａ〜図１１Ｃは、実施形態による、移動ウィンドウ計算のために時系列データストアからのデータと、データストリームからリアルタイムで受信されるデータとを組み合わせるプロセスを示している。移動ウィンドウの長さはＴｗであると想定される。例示的な計算は、データストリームのセットのデータにわたるアグリゲーション、たとえば、データストリームのそのセットにわたる移動ウィンドウ中に受信されたデータに基づく平均値またはパーセンタイル計算である。移動ウィンドウとは、シフトし続ける時間ウィンドウである。言い換えれば、移動ウィンドウのサイズは一定のままだが、ウィンドウは時間とともに進み続ける。
【０１２６】
ウィンドウ内で発生するデータポイントの数は、時間とともに変わる場合がある。処理されるデータストリームの数も、ウィンドウが進むにつれて、たとえば、新たなデータストリームの導入に起因して、またはデータストリームについて記述するメタデータに対する修正に起因して変わる場合がある。たとえば、移動ウィンドウが、「ｅａｓｔ」というデータセンターからのすべてのデータストリームにわたるデータの平均値を計算している場合には、時間とともに、「ｅａｓｔ」というデータセンターがサービスを開始／停止したならば、新たなサーバを導入したならば、またはデータストリームについて記述するメタデータが、特定のデータストリームとの間で「ｄａｔａｃｅｎｔｅｒ＝ｅａｓｔ」というタグを追加／除去するように修正されたならば、データストリームの数が変わる場合がある。データストリーム言語プロセッサ２００は、データストリームのセットを、そしてまた、ウィンドウ内で発生するデータポイントのセットを周期的に再評価し、選択されたデータストリームからのデータポイントに関して指定されたアグリゲート値を計算する。
【０１２７】
図１１Ａは、ウィンドウ計算が開始されたときにそのウィンドウの全データが時系列データストア２６０から取り出されることが可能であるシナリオを示している。図１１Ｂは、いくらかの時間（それは、そのウィンドウの長さである時間Ｔｗ未満である）の後に、フェッチモジュール３２０が、時系列データストア２６０からのデータを、データストリームから受信されたリアルタイムデータと組み合わせるということを示している。図１１Ｃは、ウィンドウの長さＴｗよりも長い時間の後には、フェッチモジュール３２０が、時系列データストア２６０からデータを取り出す必要がなく、データストリームから入手されたリアルタイムデータでウィンドウ全体を満たすことができるということを示している。
【０１２８】
図１１Ａにおいて示されているように、Ｔ２は、現在の時刻を示しており、サイズＴｗのウィンドウを与えられると、時刻Ｔ１は、時点Ｔ２−Ｔｗに相当する。ウィンドウ計算が時刻Ｔ２において開始すると想定していただきたい。したがって、このウィンドウは、Ｔ１〜Ｔ２という時間範囲内にある。この時点でデータストリームから受信されたデータはない。ウィンドウ全体のためのデータは、時系列データストア２６０から取り出される。
【０１２９】
図１１Ｂは、いくらかの時間の後に、現在の時刻がＴ４によって表されており、ウィンドウが時間範囲Ｔ３〜Ｔ４へ進んでいるということを示している。リアルタイムデータが収集され、時間範囲Ｔ２〜Ｔ４に関するウィンドウ計算において使用されている。なぜなら、時刻Ｔ２以降にリアルタイムデータが収集されたからである。時間範囲Ｔ３〜Ｔ２に関して、フェッチモジュール３２０は、時系列データストア２６０からのデータを依然として使用している。図１１Ｂにおいて示されているシナリオは、時間範囲Ｔ４〜Ｔ２がＴｗ未満であるすべての時間に関して（言い換えれば、ウィンドウのサイズ未満であるＴ２以降のすべての時間に関して）当てはまる。
【０１３０】
図１１Ｃは、ウィンドウの長さ以上の時間に関するシナリオを示している。言い換えれば、Ｔ５が現在の時刻である場合には、図１１Ｃは、Ｔ５−Ｔ２がウィンドウの長さＴｗ以上であるようなすべての時間Ｔ５に関して当てはまる。これらのシナリオにおいては、フェッチモジュール３２０は、データストリームから十分なリアルタイムデータを蓄積しているので、フェッチモジュール３２０は、時系列データストア２６０からデータを取り出さない。言い換えれば、ウィンドウ計算は、データストリームからリアルタイムで受信されたすべてのデータを使用して実行される。
【０１３１】
図１１Ａ〜図１１Ｃにおいて記述されているシナリオはまた、チャートを使用して（たとえば、ダッシュボードを介して）データを提示することに関して当てはまる。時系列データストア２６０からのデータは、時間が進むにつれてチャートがゆっくりと満ちるのを示すことを回避する目的でチャートの最初の部分を満たすために使用される。時系列データストア２６０からのデータでチャートを満たすことができることは、よりよいユーザ経験を提供する。なぜなら、ユーザは、ユーザによって選択された時間ウィンドウ全体に関するチャートを提示されるからである。
【０１３２】
データストリームをグループ化すること
図１２は、実施形態による、データストリームのデータをグループ化して結果データストリームのセットを生成するためのプロセスを示している。グループ化ステートメントが、たとえば図４において示されているようにｇｒｏｕｐｂｙブロックを使用して、データストリーム言語プログラムに含まれることが可能である。データストリーム言語プログラムのグループ化ステートメントは、データストリームについて記述する１つまたは複数のメタデータ属性を指定する。ｇｒｏｕｐｂｙブロックは、データストリームのそれぞれのグループに関して実行されるアグリゲート計算に関連付けられている。
【０１３３】
グループ化モジュール３６０は、データストリームについて記述する１つまたは複数の属性を１２１０で受信する。その属性は、データストリームのデータとともに受信される属性（たとえば、ソース名およびメトリック名）、またはメタデータモジュール２２０によってデータストリームに関連付けられていてメタデータストア２３０において格納されているメタデータタグであることが可能である。グループ化モジュール３６０はまた、データストリームのそれぞれのグループに関して実行されることになる特定の計算、たとえば、データストリームのデータに基づいてアグリゲート値を決定する計算を受信する。
【０１３４】
データストリーム言語プロセッサ２００（およびそのコンポーネントモジュール）は、データストリーム言語プログラムを実行するジョブに関して指定された周期性に基づいてそれぞれのタイムインターバルに関して下記の計算を実行する。グループ化モジュール３６０は、グループ化コマンドに関連付けられている１つまたは複数の属性の値のそれぞれの個別のセットに対応するデータストリームのグループを１２２０で識別する。たとえば、グループ化コマンドを用いて指定された属性が「ｄａｔａｃｅｎｔｅｒ」という属性である場合には、グループ化モジュール３６０は、データストリームのセットを識別し、それぞれのセットは、「ｄａｔａｃｅｎｔｅｒ」タグの個別の値を有している。
【０１３５】
グループ化モジュール３６０は、識別されたデータストリームのそれぞれのセット（またはグループ）に関して下記の計算を実行する。グループ化モジュール３６０は、その特定のタイムインターバルに関するセットのそれぞれのデータストリームに対応するデータを１２３０で受信する。グループ化モジュール３６０は、それぞれのグループのデータストリームからのデータに関するアグリゲート計算の値を１２４０で決定する。たとえば、グループ化が「ｄａｔａｃｅｎｔｅｒ」という属性に基づいており、指定された計算が平均である場合には、グループ化モジュール３６０は、所与のタイムインターバルに関して入手された特定のデータセンターに関するすべてのデータストリームのデータの平均を１２４０で決定する。グループ化モジュール３６０は、それぞれのグループに関する計算の結果をデータストリーム言語プログラムの後続のブロックへ１２５０で出力する。
【０１３６】
図１２において示されているプロセスにおいて記述されているように、グループ化ステートメント（すなわち、ｇｒｏｕｐｂｙブロック）は、入力としてデータストリームのセットを取り、結果データストリームのセットを生成する。グループ化ステートメントは、複数のメタデータ属性によってグループ化を行うことを指定することができる。生成される結果データストリームの数は、入力セット内に少なくとも１つのデータストリームが存在するグループ化属性の個別の属性値の数に等しい。言い換えれば、グループ化属性の値のそれぞれの個別の値の組合せを伴う属性を有するデータストリームが入力内に存在する場合には、個別の値のその組合せに関してデータストリームが生成される。
【０１３７】
図１３Ａ〜図１３Ｂは、実施形態による、データストリームを、それらのデータストリームについて記述するさまざまなメタデータ属性に基づいてグループ化することを示す例示的なシナリオを示している。図１３Ａは、「ｄｃ」という属性（データセンターを表している）に基づいてデータストリームのセットをグループ化することを示している。データストリームの入力セット１３４０ａは、ｄｃ＝ｅａｓｔおよびｍｅｔｒｉｃ＝ｃｐｕＬｏａｄという属性を伴うデータストリームと、ｄｃ＝ｗｅｓｔおよびｍｅｔｒｉｃ＝ｃｐｕＬｏａｄを伴うデータストリームと、ｄｃ＝ｎｏｒｔｈおよびｍｅｔｒｉｃ＝ｃｐｕＬｏａｄを伴うデータストリームと、ｄｃ＝ｗｅｓｔおよびｍｅｔｒｉｃ＝ｃａｃｈｅＭｉｓｓｅｓを伴うデータストリームと、ｄｃ＝ｎｏｒｔｈおよびｍｅｔｒｉｃ＝ｃａｃｈｅＭｉｓｓｅｓを伴うデータストリームとを含む。グループ化モジュール３６０は、ｄｃという属性に関する同じ属性値を有している入力セット１３４０ａからのデータストリームを収集するためにｇｒｏｕｐｂｙ（“ｄｃ”）を指定するグループ化ブロック１３１０ａを処理する。入力セット１３４０ａは、ｄｃ＝ｅａｓｔを伴う１つのデータストリームと、ｄｃ＝ｗｅｓｔを伴う２つのデータストリームと、ｄｃ＝ｎｏｒｔｈを伴う２つのデータストリームとを含む。
【０１３８】
実施形態においては、グループ化モジュール３６０は、値のその組合せを有している入力データストリームがない場合には、属性によるグループの個別の値を無視する。したがって、グループ化モジュール３６０は、これらの属性値に対応するいかなる結果データストリームも生成しない。たとえば、ｄｃという属性が、その他の可能な値、たとえば「ｎｏｒｔｈ−ｅａｓｔ」、「ｓｏｕｔｈ−ｗｅｓｔ」などを有することができ、かつ、これらの属性値を有している入力データストリームがない場合には、グループ化モジュール３６０は、メタデータ属性のこれらの個別の値に対応するいかなる結果データストリームも生成しない。
【０１３９】
したがって、図１３において示されているように、グループ化モジュール３６０は、ｄｃ＝ｅａｓｔに対応する第１の結果データストリーム、ｄｃ＝ｗｅｓｔに対応する第２の結果データストリーム、およびｄｃ＝ｎｏｒｔｈに対応する第３のデータストリームという３つの結果データストリームを生成する。それぞれの結果データストリームは、ｇｒｏｕｐ  ｂｙブロックが実行される周期性（これは、データストリーム言語プログラムが実行される周期性である）で入力データストリームの対応するグループからのデータをアグリゲートすることによって生成されたデータ値を含む。
【０１４０】
グループ化モジュール３６０は、ｇｒｏｕｐｂｙブロックがグループ化のための別の属性を指定した場合には、結果データストリームの別のセットを生成することができる。たとえば、図１３Ｂは、「ｍｅｔｒｉｃ」という属性に基づくデータストリームのグループ化を示している。入力セット１３４０ｂは、セット１３４０ａと同じデータストリームを有する。入力データストリームは、３つのデータストリームをグループ化して、ｍｅｔｒｉｃ＝ｃｐｕＬｏａｄに対応する結果データストリームと、ｍｅｔｒｉｃ＝ｃａｃｈｅＭｉｓｓｅｓに対応する別の結果データストリームとを生成する。
【０１４１】
図１４は、実施形態による、時間に伴う入力データストリームにおける変化の結果としてｇｒｏｕｐｂｙブロックによって生成される結果データストリームの動的な変化を示す例示的なシナリオを示している。たとえば、図１３ａにおいて示されているｇｒｏｕｐ  ｂｙブロックは、データストリームの入力セット１４４０がセット１３４０ａとは異なる場合には、後の時点で（たとえば、異なるタイムインターバルに関して）実行されることが可能である。図１４において示されているように、入力セット１４４０は、ｄｃ＝ｅａｓｔという属性を伴ういかなるデータストリームも含んでいない。さらに、入力セット１４４０は、ｄｃ＝ｓｏｕｔｈを伴うデータストリームを含んでいる。したがって、グループ化モジュール３６０は、ｄｃ＝ｗｅｓｔに対応する第１の結果データストリーム、ｄｃ＝ｎｏｒｔｈに対応する第２の結果データストリーム、およびｄｃ＝ｓｏｕｔｈに対応する第３のデータストリームという３つの結果データストリームを伴う結果セット１４５０を生成する。したがって、グループ化モジュール３６０によって生成されるグループは、データストリームの入力セットが変わるにつれて動的に変わることが可能である。開発システム１２０において実行する計測されたソフトウェアから受信されるデータストリームの入力セットは、さまざまな理由で、たとえば、新たな開発システム１２０を始動したこと、サービスを追加／除去したこと、またはメタデータストア２３０におけるデータストリームに関連付けられているメタデータを修正したことの結果として変わることが可能である。
【０１４２】
データストリームを第一級市民として発行すること
実施形態によれば、データストリーム言語プログラムは、計測分析システム１００のその他のコンポーネントにデータストリームを提供することによってデータストリーム言語プログラムの実行の結果に基づいて１つまたは複数のデータストリームを発行する発行コマンド（すなわち、ｐｕｂｌｉｓｈブロック）を含む。たとえば、データストリーム言語プログラムによって生成されたデータストリームは、ユーザインターフェースに対して発行されてリアルタイムのチャートまたはレポートとして提示されることが可能である。生成されたデータストリームは、第一級市民として表される。言い換えれば、生成されたデータストリームは、計測分析システム１００によって開発システム１２０の計測されたソフトウェアから受信されたデータストリームと同じように表される。
【０１４３】
生成されたデータストリームは、計測分析システム１００のその他のコンポーネントにより、計測分析システム１００によって受信されたデータストリームと同じように使用されることも可能である。生成されたデータストリームは、計測分析システム１００によって自動的に、または管理システム１６０を介してシステム管理者によってメタデータ属性に関連付けられることが可能である。データストリーム言語プログラムのｆｉｎｄブロックは、外部システムから受信されたその他のデータストリームと同様、生成されたデータストリームを見つけ出すことができる。その他のデータストリーム言語プログラムを実行するジョブは、生成されたデータストリームを入力として受信し、それを処理することができる。そのデータストリームのデータは、計測分析システム１００によって処理されるその他の任意のデータストリームと同様、ユーザインターフェースを介して提示されることが可能であり、ユーザから受信された入力に基づいて操作されることが可能である。
【０１４４】
データストリーム言語プロセッサ２００は、結果データストリームをソフトウェアバス２９０上に発行する。任意の結果データストリーム（またはその他の任意のデータストリーム）に関するデータストリーム識別子を識別することができる計測分析システム１００の任意のコンポーネントが、ソフトウェアバス２９０からデータストリームのデータを入手することができる。ソフトウェアバス２９０は、発行されたデータストリームのデータをメモリにおいて格納して、そのデータに対する迅速なアクセスを提供することができる。
【０１４５】
データストリーム言語プログラムは、発行するための複数の結果データストリームを生成することができる。たとえば、データストリーム言語プログラムは、データセンターによってグループ化されたメトリック（たとえば、ｃａｃｈｅＭｉｓｓｅｓ）をアグリゲートすることができる。したがって、アグリゲート属性（たとえば、ｔｏｔａｌ  ｃａｃｈｅＭｉｓｓｅｓ）値が、それぞれのデータセンターに関して生成される。発行モジュール３５０は、それぞれの生成された結果データストリームについて記述するメタデータを生成し、そのメタデータをメタデータストア２３０において格納する。発行モジュール３５０は、データストリームを、そのデータストリームを生成しているデータストリーム言語プログラムに関連付けられている情報に関連付ける。したがって、発行モジュール３５０は、データストリームを生成しているデータストリーム言語プログラムのブロックを分析し、データストリーム言語プログラムのブロックからデータストリームを識別する情報を識別する。
【０１４６】
発行モジュール３５０は、発行されたデータストリームを生成しているデータストリーム言語プログラムによって入力として受信されたデータストリームの属性に基づいて、データストリームについて記述するメタデータ属性を生成することができる。たとえば、データストリーム言語プログラムが入力データストリームの移動平均を計算する場合には、発行モジュール３５０は、その入力データストリームに基づくメタデータ属性値を、発行されたデータストリームにも関連付ける。この状況においては、発行モジュール３５０は、入力データストリームのソース名を、入力データストリームのソース名として使用することができる。発行されたデータストリームが、複数の入力データストリームをアグリゲートすることによって入手されている場合には、発行モジュール３５０は、入力データストリームに基づく属性値をアグリゲートすることにより（たとえば、入力データストリームからの対応する属性値を連結することにより、または、入力データストリームからの属性値を短縮することによって入手されたサブストリングを連結することにより）、発行されたデータストリームに関する属性を生成することができる。たとえば、結果データストリームのソース名は、アグリゲートされる入力データストリームのソース名を連結することによって、または入力データストリームのソース名のプレフィックスストリングを連結することによって入手されることが可能である。
【０１４７】
実施形態においては、ｐｕｂｌｉｓｈブロックは、発行されているデータのタイプを特徴付けるメトリック名に関連付けられている。発行モジュール３５０は、ｐｕｂｌｉｓｈブロックのメトリック名を、ｐｕｂｌｉｓｈブロックによって発行されたデータストリームに関連付ける。データストリーム言語プロセッサ２００はまた、それぞれの結果データストリームを表すための識別子（時系列識別子と呼ばれる）を生成する。それぞれの結果データストリームのデータは、時系列データストア２６０において格納され、計測分析システムの任意のコンポーネントによる使用のために利用可能である。
【０１４８】
ｐｕｂｌｉｓｈブロックがメトリック名に関連付けられていない場合には、発行モジュールは、発行されているデータストリームを生成したデータストリーム言語プログラムによって受信された入力データストリームに基づいてメトリック名を決定する。発行されているデータストリーム言語が、単一のデータストリームから生成されている場合には、発行モジュールは、その単一のデータストリームのメトリック名を、発行されているデータストリームのメトリック名として使用する。発行されているデータストリーム言語が、複数のデータストリームから生成されている場合には、発行モジュールは、それらの複数のデータストリームのメトリック名に基づいて、たとえば、メトリック名、またはメトリック名のサブストリング（たとえば、プレフィックスもしくはサフィックス）を連結することによって、発行されているデータストリームに関するメトリック名を生成する。
【０１４９】
図１５は、実施形態による、データストリーム言語プログラムのｐｕｂｌｉｓｈブロックを実行することによって入手される結果データストリームを発行するプロセスを示すフローチャートを示している。このデータストリーム言語プログラムは、ｐｕｂｌｉｓｈブロックおよび１つまたは複数のｇｒｏｕｐｂｙブロックを含むと想定される。そのｐｕｂｌｉｓｈブロックは、メトリック名に関連付けられていると想定される。たとえば、このデータストリーム言語プログラムは、下記のとおりであることが可能である。
ｆｉｎｄ（“ｓｏｕｒｃｅ：ａｎａｌｙｔｉｃｓ*”，  “ｍｅｔｒｉｃ：ｌｏａｄ”））→
ｆｅｔｃｈ（）→
ｇｒｏｕｐｂｙ（“ｄａｔａｃｅｎｔｅｒ”）→
ｓｔａｔｓ！ｍｅａｎ→
ｐｕｂｌｉｓｈ（“ｄｃ＿ｌｏａｄ”）
【０１５０】
上述のデータストリーム言語プログラムは、「ｄｃ＿ｌｏａｄ」というメトリック名を指定するｐｕｂｌｉｓｈブロックを含んでいる。このデータストリーム言語プログラムはまた、データセンターによって入力データストリームをグループ化するためのｇｒｏｕｐｂｙステートメントを含む。
【０１５１】
データストリーム言語プロセッサ２００は、処理されているデータストリーム言語プログラムにおいてｐｕｂｌｉｓｈブロックを１５００で識別する。たとえば、上述のデータストリーム言語プログラムが処理されている場合には、データストリーム言語プロセッサ２００は、このデータストリーム言語プログラムの最後のブロック、すなわち、ｐｕｂｌｉｓｈ（“ｄｃ＿ｌｏａｄ”）を１５００で識別する。発行モジュール３５０は、ｐｕｂｌｉｓｈブロックに関連付けられているメトリック名を１５１０で決定する。たとえば、上で示されているデータストリーム言語プログラムのｐｕｂｌｉｓｈブロックにおいては、発行モジュール３５０は、ｐｕｂｌｉｓｈブロックに関連付けられている「ｄｃ＿ｌｏａｄ」というメトリック名を１５１０で決定する。データストリーム言語プロセッサ２００は、そのメトリック名を、結果データストリームについて記述するメタデータ属性として使用する。
【０１５２】
ｐｕｂｌｉｓｈブロックの出力は、たとえばデータストリーム言語プログラムがｇｒｏｕｐｂｙブロックを含む場合には、複数の結果データストリームを含むことができる。上述の例示的なデータストリーム言語プログラムは、それぞれのデータセンターに関して１つの、複数の結果データストリームを、すなわち、個別のデータセンター属性値を有しているすべてのデータストリームから周期的に入手された統計的な平均データ値に基づく１つの結果データストリームを生成することができる。その他のデータストリーム言語プログラムは、複数のｇｒｏｕｐｂｙブロックを含むことができる。しかしながら、データストリーム言語プログラムによって生成される結果データストリームの数は、そのデータストリーム言語プログラムの最後のｇｒｏｕｐｂｙブロックによって決定される。
【０１５３】
発行モジュール３５０は、データストリーム言語プログラムの最後のｇｒｏｕｐｂｙブロックの属性のセットを１５２０で識別する。上述の例においては、ｇｒｏｕｐｂｙ（“ｄａｔａｃｅｎｔｅｒ”）というブロックが、「ｄａｔａｃｅｎｔｅｒ」という単一の属性を有しており、その属性によってデータストリームがグループ化される。しかしながら、ｇｒｏｕｐｂｙブロックは、データストリームをグループ化するための複数の属性を含むことができる。たとえば、ｇｒｏｕｐｂｙ（“ｄａｔａｃｅｎｔｅｒ”，  “ｒｅｇｉｏｎ”）というｇｒｏｕｐｂｙコマンドは、「ｄａｔａｃｅｎｔｅｒ」および「ｒｅｇｉｏｎ」という２つの属性を指定し、それらの属性によってデータストリームがグループ化される。発行モジュール３５０は、データストリーム言語プログラムによって生成された結果データストリームを区別するための属性の識別されたセットの個別の値を使用する。
【０１５４】
データストリーム言語プロセッサ２００（およびそのコンポーネントモジュール）は、それぞれの結果データストリームに関して下記のステップを実行する。発行モジュール３５０は、結果データストリームに関連付けられている最後のｇｒｏｕｐ  ｂｙブロックの識別された属性の値を識別する。結果データストリームに関連付けられている識別された属性の値は、データストリームとともに受信されること、またはｇｒｏｕｐｂｙブロックの入力データストリームの識別子を与えられてメタデータストア２３０からフェッチされることが可能である。データストリームの入力セットが、さまざまなデータセンター値、たとえば、「ｅａｓｔ」、「ｗｅｓｔ」、「ｎｏｒｔｈ」、「ｓｏｕｔｈ」などを有しているデータストリームを含む場合には、ｇｒｏｕｐｂｙブロックによって出力されるそれぞれの結果データストリーム（およびそのｇｒｏｕｐｂｙブロックがデータストリーム言語プログラムの最後のｇｒｏｕｐｂｙブロックである場合には、データストリーム言語プログラム）は、これらのデータセンター値のうちの１つに関連付けられる。ｇｒｏｕｐｂｙブロックがグループ化のために複数の属性を指定している場合には、それぞれの結果データストリームは、グループ化のためにｇｒｏｕｐｂｙブロックによって指定されているそれらの属性の値の個別のセットに関連付けられる。
【０１５５】
データストリームメタデータジェネレータ３７０は、結果データストリームに関連付けられている識別された属性の値、およびｐｕｂｌｉｓｈブロックに関連付けられているメトリック名に基づいて、結果データストリームについて記述するメタデータを１５４０で生成する。たとえば、ｇｒｏｕｐｂｙブロックが、（「ｅａｓｔ」、「ｗｅｓｔ」、「ｎｏｒｔｈ」、「ｓｏｕｔｈ」という値を用いて）データセンター属性を指定していて、ｐｕｂｌｉｓｈブロックを用いて指定されているメトリック名がｃｐｕ＿ｌｏａｄである場合には、データストリームメタデータジェネレータ３７０は、それぞれの発行されたデータストリームを、ｃｐｕ＿ｌｏａｄというメトリック名、および（データストリームのグループに関連付けられている）データセンター属性の対応する値に関連付ける。データストリームメタデータジェネレータ３７０はまた、結果データストリームに関する識別子を生成する。データストリームメタデータジェネレータ３７０は、結果ストリームに関連付けられている属性を含むメタデータをメタデータストア２３０において１５５０で格納する。
【０１５６】
データストリーム言語プロセッサ２００は、データストリーム言語プログラムの周期性によって指定されているようにデータストリーム言語プログラムを周期的に実行する。データストリーム言語プロセッサ２００は、データストリーム言語プログラムが実行されたときに、それぞれの結果データストリームに関するデータを生成する。データストリーム言語プロセッサ２００は、それぞれの結果データストリームに関する生成されたデータを、その結果データストリームに関する識別子に関連付けて１５６０で格納する。
【０１５７】
ｔｈｒｅｓｈｏｌｄブロックを使用した異常検知
データストリーム言語プログラムは、データストリームのセットのデータがしきい値と比較されることを可能にするｔｈｒｅｓｈｏｌｄブロックをサポートする。比較されるデータストリームは、開発システム１２０の計測されたソフトウェアから計測分析システム１００によって受信されたデータストリーム、またはデータストリーム言語プログラムの１つまたは複数のブロックの実行の結果として入手されたデータストリームであることが可能である。ｔｈｒｅｓｈｏｌｄブロックは、データポートおよびしきい値ポートを含む。データポートは、データ値を表す１つまたは複数のデータストリームを受信する。しきい値ポートは、しきい値を表す１つまたは複数のデータストリームを受信する。ｔｈｒｅｓｈｏｌｄブロックは、データ値をしきい値と比較して、データ値が、しきい値によって指定されている範囲内にあるかどうかを決定する。実施形態においては、ｔｈｒｅｓｈｏｌｄブロックは、複数のしきい値ポートを含む。たとえば、ｔｈｒｅｓｈｏｌｄブロックは、低しきい値ポートおよび高しきい値ポートという２つのしきい値ポートを含むことができる。ｔｈｒｅｓｈｏｌｄブロックは、データ値が、高しきい値ポートにおいて受信されたしきい値を下回っているかどうか、および低しきい値ポートにおいて受信されたしきい値を上回っているかどうかを決定する。
【０１５８】
ｔｈｒｅｓｈｏｌｄブロックは、高しきい値および／または低しきい値の指定を可能にする。しきい値モジュール３４０は、着信ストリームにおいて受信されたデータ値を、ｔｈｒｅｓｈｏｌｄブロックによって指定されたしきい値と比較することによって、ｔｈｒｅｓｈｏｌｄブロックを処理する。ｔｈｒｅｓｈｏｌｄブロックは、低しきい値および高しきい値を指定する。しきい値モジュール３４０は、ｔｈｒｅｓｈｏｌｄブロックによって受信された入力データストリームからのデータ値が高しきい値および／または低しきい値の範囲セットから外れている場合には、イベントを生成する。言い換えれば、しきい値モジュール３４０は、データストリームのデータが高しきい値を超過した場合、または低しきい値よりも低下した場合には、イベントを生成する。それらのしきい値は、固定されていること、または動的であることが可能である。動的なしきい値は、データストリーム言語プログラムの実行の結果として入手される。ｔｈｒｅｓｈｏｌｄブロックは、低／高しきい値のうちの一方または両方を指定することができる。
【０１５９】
ｔｈｒｅｓｈｏｌｄブロックへの入力は、データストリーム言語プログラムのブロックを実行した結果として生成された複数のデータストリーム値、たとえば、入力データストリームのセットをグループ化した結果として入手された複数のデータストリームであることが可能である。この状況においては、低しきい値または高しきい値はまた、複数のデータストリームを生成するデータストリーム言語プログラムの出力として指定される。しきい値モジュール３４０は、ｔｈｒｅｓｈｏｌｄブロックの入力ポートによって受信されたデータストリームを、低／高しきい値ポートによって受信されたデータストリームとマッチさせる。しきい値モジュール３４０は、入力ポートによって受信されたデータストリームのデータを、（データストリーム言語プログラムの周期性に基づく）それぞれのタイムインターバルに関して低／高しきい値ポートによって受信されたデータストリームのデータと比較し、その比較に基づくアクション（たとえば、イベントを送信すること）を行う。
【０１６０】
実施形態においては、ｔｈｒｅｓｈｏｌｄブロックは、持続時間およびフラクション値を指定する。たとえば、ｔｈｒｅｓｈｏｌｄブロックは、持続時間Ｔ（たとえば５分）を指定することができる。しきい値モジュール３４０は、入力データストリームのデータが、指定の持続時間Ｔよりも長い間にわたって指定のしきい値から外れている場合には、イベントを生成する。たとえば、入力データストリームのデータが、Ｔという時間単位よりも長い間にわたって高しきい値よりも高い場合には、しきい値モジュール３４０は、イベントを生成する。別の例として、入力データストリームのデータが、Ｔという時間単位よりも長い間にわたって低しきい値を下回っている場合には、しきい値モジュール３４０は、イベントを生成する。持続時間を指定できることは、しきい値限度から外れているデータストリームのデータの異常な挙動が、多大な量の時間にわたって持続しており、一時的な挙動ではないということを確実にする。
【０１６１】
実施形態においては、ｔｈｒｅｓｈｏｌｄブロックは、持続時間Ｔとともにフラクション値Ｆ（たとえば０．８）を指定する。しきい値モジュール３４０は、入力データストリームのデータが、指定された長さＴのウィンドウ中に持続時間Ｔの指定されたフラクションよりも長い間にわたってしきい値限度から外れている場合には、イベントを生成する。したがって、しきい値モジュール３４０は、たとえ入力データストリームのデータが持続時間Ｔの全体にわたってしきい値限度から外れていなくても、そのデータがその持続時間の少なくとも指定されたフラクションにわたってしきい値限度から外れている限り、イベントを生成する。
【０１６２】
図１６は、実施形態による、特定の属性によってグループ化されているデータストリームに関する固定されたしきい値を伴うｔｈｒｅｓｈｏｌｄブロックの使用を示すデータストリーム言語プログラムの例を示している。データストリーム言語プロセッサ２００は、図１６において示されているデータストリーム言語プロセッサを受信し、それを処理する。
【０１６３】
探索モジュール３１０は、ｆｉｎｄブロック１６１０を実行して、データストリーム言語プログラム１６００へ入力されるデータストリームのセットを識別する。フェッチモジュール３２０は、ｆｅｔｃｈブロック１６１５を実行して、データストリーム言語プログラムに関して指定されている周期性でデータストリームのデータをフェッチする。グループ化モジュール３６０は、ｇｒｏｕｐｂｙブロック１６２０を実行して、ｆｉｎｄブロックによって識別されたデータストリームをデータセンター値に基づいてデータストリームのセットへとグループ化し、そのセットのそれぞれのデータストリームは、識別されたデータストリームにおいて発生している個別のデータセンター値に対応する。計算モジュール３３０は、ｓｔａｔｓブロック１６２５を実行して、それぞれのデータセンターからのデータに対応する平均値を決定する。計算モジュール３３０は、ｓｔａｔｓブロック１６２５の出力を、入力としてｔｈｒｅｓｈｏｌｄブロックの入力ポートへ提供する。
【０１６４】
しきい値モジュール３４０は、それぞれのデータストリーム入力のデータをｔｈｒｅｓｈｏｌｄブロック１６３０の高しきい値と比較する。図１６において示されているように、ｔｈｒｅｓｈｏｌｄブロック１６３０の高しきい値は、固定された値（すなわち、６という固定された値）である。したがって、（データセンターに対応する）いずれかのグループに関するデータストリームのいずれかのデータ値が、６という高しきい値を超過した場合には、しきい値モジュール３４０は、イベントを生成する。しきい値モジュール３４０は、そのイベントにおいてしきい値を超過しているデータストリームの詳細を名前／値ペアとして提供する。たとえば、しきい値モジュール３４０は、高しきい値を超過したデータストリームに対応するデータセンター属性値、高しきい値が超過された時刻のタイムスタンプなどの詳細を提供することができる。ｔｈｒｅｓｈｏｌｄブロック１６３０は低しきい値を指定していないので、しきい値モジュール３４０は、ｔｈｒｅｓｈｏｌｄブロック１６３０へ入力されたデータストリームのデータをいかなる低しきい値とも比較しない。
【０１６５】
図１７は、実施形態による、メタデータ属性によってグループ化されているデータストリームに関する動的に変わるしきい値を伴うｔｈｒｅｓｈｏｌｄブロックを示すデータストリーム言語プログラムの例を示している。図１７のｔｈｒｅｓｈｏｌｄブロック１７６０の入力ポートに入力を提供するデータブロックは、図１６のｔｈｒｅｓｈｏｌｄブロック１６３０に入力を提供するデータブロックと同様である。したがって、図１７のブロック１７１０、１７１５、１７２０、１７２５は、それぞれ図１６のブロック１６１０、１６１５、１６２０、および１６２５に対応している。しかしながら、ｔｈｒｅｓｈｏｌｄブロック１７６０の高ポートへの入力は、動的に変わる入力を受信する。さらに、ｔｈｒｅｓｈｏｌｄブロック１７６０の高ポートは、入力として複数のデータストリームを受信する。しきい値モジュール３４０は、ｔｈｒｅｓｈｏｌｄブロック１７６０の高ポートによって受信された複数のデータストリームを、入力ポートによって受信された複数のデータストリームとマッチさせる。
【０１６６】
フェッチモジュール３２０は、ｆｅｔｃｈブロック１７３０を実行して、データストリーム言語プログラムに関して指定されている周期性でデータストリームのデータをフェッチする。グループ化モジュール３６０は、ｇｒｏｕｐｂｙブロック１７３５を実行して、ｆｉｎｄブロック１７１０によって識別されたデータストリームをデータセンター値によってデータストリームのセットへとグループ化し、そのセットのそれぞれのデータストリームは、データセンター値に対応する。ウィンドウモジュール３８０は、ｗｉｎｄｏｗブロック１７４０を実行して、ｗｉｎｄｏｗブロック１７４０へ入力されたそれぞれのデータストリームに関して１時間の移動ウィンドウに対応するデータポイントを識別する。計算モジュール３３０は、ｓｔａｔｓブロック１７４５を実行して、ｗｉｎｄｏｗブロック１７４０によって出力されたそれぞれのデータストリームに対応する１時間の移動ウィンドウに関する１時間移動平均値を決定する。カスタマイズドブロックモジュール３９０は、データストリーム言語のビルトインブロックを組み合わせることによってユーザによって定義されたカスタマイズされたマクロを処理する。計算モジュール３３０は、ｓｃａｌｅブロック１７５０を実行することによって１５０％の係数によってｓｔａｔｓブロック１７４５の出力を拡大する。ｓｃａｌｅブロック１７５０の拡大された出力は、入力としてｔｈｒｅｓｈｏｌｄブロック１７６０の高ポートへ提供される。
【０１６７】
したがって、しきい値モジュール３４０は、それぞれのデータセンターからのデータストリームの平均を表す結果データストリームのセットを、１５０％で拡大されたそれぞれのデータセンターからのデータストリームのデータの１時間移動平均と比較する。入力ポートによって受信されたデータセンターに対応する結果データストリームのデータが、ｔｈｒｅｓｈｏｌｄブロック１７６０の高ポートにおいて受信された同じデータセンターに関するデータストリームの拡大された移動平均値を超過している場合には、しきい値モジュール３４０は、イベントを生成する。したがって図１７は、入力として受信されるデータストリームの動的に変わるセット、および比較のためにしきい値として提供されるデータストリームの動的に変わるセットの生成を示すデータストリーム言語プログラムの例を示している。
【０１６８】
図１８は、実施形態による、ｔｈｒｅｓｈｏｌｄブロックを含むデータストリーム言語プログラムを実行するプロセスを示すフローチャートを示している。しきい値モジュール３４０は、実行されているデータストリーム言語プログラムのｔｈｒｅｓｈｏｌｄブロックを１８１０で識別する。しきい値モジュール３４０は、入力ポート、低／高しきい値ポートを含むｔｈｒｅｓｈｏｌｄブロックについて記述するさまざまなコンポーネントおよびパラメータを１８２０で識別し、しきい値ウィンドウのサイズが指定され、しきい値ウィンドウに関連付けられているフラクション値が指定される。いくつかの実施形態においては、低および／または高しきい値は、一定の値であることが可能であり、そのケースにおいては、一定の値が、低／高しきい値ポートへの入力として指定されるか、または低／高しきい値が、（いずれの低／高しきい値ポートも指定することなく）ｔｈｒｅｓｈｏｌｄブロックのパラメータとして指定される。
【０１６９】
データストリーム言語プロセッサ２００は、入力ポートに入力を提供するデータストリーム言語プログラムの部分、および低／高しきい値ポートに入力を提供するデータストリーム言語プログラムの部分を実行する。この実行は、データストリーム言語プログラムに対応するジョブに関して指定されている周期性に基づいて繰り返される。しきい値モジュール３４０は、データストリーム言語プログラムの周期性に基づいてそれぞれのタイムインターバルに関して、入力ポートにおいて受信されたデータと、低／高しきい値ポートにおいて受信されたデータとの比較を実行する。入力ポート（または低もしくは高しきい値ポート）に入力を提供するデータストリーム言語プログラムの部分がｇｒｏｕｐｂｙブロックを含む場合には、ｔｈｒｅｓｈｏｌｄブロックの入力ポートは、データストリームのグループを受信する。それぞれのポートにおけるデータストリームの数は、対応するｇｒｏｕｐｂｙブロックにおいて指定されているメタデータ属性（またはメタデータ属性のセット）の個別の値に依存する（メタデータ属性のその個別の値を有しているｇｒｏｕｐｂｙブロックの入力において少なくとも１つのデータストリームがあるならば）。
【０１７０】
実施形態においては、データストリーム言語プロセッサ２００は、入力ポートおよび低／高しきい値ポートにおいてデータを提供しているブロックを分析して、データがｔｈｒｅｓｈｏｌｄブロックに入力される前に発生する最後のｇｒｏｕｐｂｙブロックを識別する。しきい値モジュール３４０は、それぞれのポートにおいて受信されたデータストリームを識別するために、たとえば、入力ポートからのデータストリームを低および／または高しきい値ポートからのデータストリームとマッチさせるために、およびデータストリームに基づいてイベントが生成された場合にイベントにおけるデータストリームを識別するために、最後のｇｒｏｕｐｂｙブロックを使用する。しきい値モジュール３４０は、ｔｈｒｅｓｈｏｌｄブロックの２つの異なるポートにおいて受信された２つのデータストリームが、ｇｒｏｕｐｂｙブロックによって使用されたメタデータ属性の同じ個別の値を有している場合には、それらがマッチしているということを決定する。たとえば、ｔｈｒｅｓｈｏｌｄブロックの２つのポートに入力として提供されるデータストリームを生成するためにデータストリーム言語プログラムによって使用されたｇｒｏｕｐｂｙブロックが、データセンター属性に基づいてデータストリームをグループ化している場合には、特定のデータセンター（たとえばｄａｔａｃｅｎｔｅｒ  ｅａｓｔ、またはｄａｔａｃｅｎｔｅｒ  ｗｅｓｔ）のデータをアグリゲートすることによって入手されたデータストリームどうしはマッチしていると決定される。
【０１７１】
しきい値モジュール３４０は、それぞれのポート（すなわち、入力ポート、低ポート、および高ポート）において受信されたそれぞれのデータストリームに関して下記の計算を実行する。しきい値モジュール３４０は、入力ポートにおいて受信されたデータ値を、低しきい値ポートおよび／または高しきい値ポートにおいて受信されたデータ値と１８５０で比較する。しきい値モジュール３４０は、入力ポートにおいて受信されたデータ値が、高しきい値ポートにおいて受信されたデータ値を超過しているか、または低しきい値ポートにおいて受信されたデータ値を下回っている場合には、イベントを生成する。生成されたイベントは、入力ポートにおいて受信されたデータストリームを、そのデータストリームに対応するメタデータ属性の値に基づいて識別する情報を含む。
【０１７２】
実施形態においては、ｔｈｒｅｓｈｏｌｄブロックのデータポートは、メタデータ属性の第１のセット（たとえば、ｒｅｇｉｏｎおよびｄａｔａ＿ｃｅｎｔｅｒ）に基づいてデータストリームの入力セットをグループ化するｇｒｏｕｐ  ｂｙコマンドに基づいてデータストリームの入力セットをグループ化した結果として生成された第１の複数のデータストリームを受信する。ｔｈｒｅｓｈｏｌｄブロックのしきい値ポートは、メタデータ属性の第２のセットに基づいてデータストリームの入力セットをグループ化するｇｒｏｕｐ  ｂｙコマンドに基づいてデータストリームの入力セットをグループ化した結果として生成された第２の複数のデータストリームを受信する。メタデータ属性の第２のセットは、メタデータ属性の第１のセットと同じであることが可能である。あるいは、メタデータ属性の第２のセットは、メタデータ属性の第１のセットとは異なることが可能である。とりわけ、メタデータ属性の第２のセットは、メタデータ属性の第１のセットのサブセットであることが可能である。たとえば、メタデータ属性の第１のセットがｒｅｇｉｏｎおよびｄａｔａ＿ｃｅｎｔｅｒを含む場合に、メタデータ属性の第２のセットは、ｒｅｇｉｏｎのみを含む。別の例として、メタデータ属性の第１のセットは、ｒｅｇｉｏｎ、ｄａｔａ＿ｃｅｎｔｅｒ、ｍａｃｈｉｎｅ＿ｉｄを含み、メタデータ属性の第２のセットは、ｒｅｇｉｏｎおよびｄａｔａ＿ｃｅｎｔｅｒのみを含む。したがって、しきい値入力は、ｔｈｒｅｓｈｏｌｄブロックのデータ入力よりも少ないデータストリームを受信する。結果として、データポートにおいて受信された複数のデータストリームは、しきい値ポートにおいて受信された同じデータストリームと比較されることが可能である。上述の例においては、データポートは、ｒｅｇｉｏｎ、ｄａｔａ＿ｃｅｎｔｅｒ、ｍａｃｈｉｎｅ＿ｉｄの値のそれぞれの個別の組合せに関するデータストリームを受信し、しきい値ポートは、ｒｅｇｉｏｎ、ｄａｔａ＿ｃｅｎｔｅｒの値のそれぞれの個別の組合せに関するデータストリームを受信する。したがって、データポートにおいて受信されたｒｅｇｉｏｎおよびｄａｔａ＿ｃｅｎｔｅｒに対応するすべてのデータストリームは、データポートにおいて受信されたデータストリームに関連付けられているｍａｃｈｉｎｅ＿ｉｄの値にかかわらずに、しきい値ポートにおいて受信された同じデータストリームと比較される。
【０１７３】
ｔｈｒｅｓｈｏｌｄブロックがしきい値ウィンドウを指定している場合には、しきい値モジュール３４０は、指定されているしきい値ウィンドウサイズの最後のウィンドウ中に受信された入力ポートにおけるすべてのデータポイントを、低および／または高しきい値ポートにおいて受信されたデータ値と比較する。識別されたウィンドウ中に発生するすべてのデータ値が、しきい値に基づいて指定の境界から外れている（すなわち、高しきい値よりも大きいか、または低しきい値を下回っている）場合には、ｔｈｒｅｓｈｏｌｄブロックは、イベントを生成する。
【０１７４】
ｔｈｒｅｓｈｏｌｄブロックが、しきい値ウィンドウサイズに加えてフラクションパラメータを指定している場合には、しきい値モジュール３４０は、指定されているしきい値ウィンドウサイズの最後のウィンドウ中に入力ポートにおいて受信されたデータポイントを、低および／または高しきい値ポートにおいて受信されたデータ値と比較する。しきい値モジュール３４０は、識別されたウィンドウからのデータポイントの指定されているフラクションよりも多くが、ｔｈｒｅｓｈｏｌｄブロックによって指定されている範囲から外れている場合には、イベントを生成する。たとえば、フラクション値が０．７５（すなわち、７５％）である場合には、しきい値モジュール３４０は、識別されたウィンドウからのデータポイントの７５％よりも多くが、ｔｈｒｅｓｈｏｌｄブロックによって指定されている範囲から外れている場合には、イベントを生成する。実施形態においては、しきい値モジュール３４０は、識別されたウィンドウの指定されているフラクションよりも多くの間に発生するデータポイントが、ｔｈｒｅｓｈｏｌｄブロックによって指定されている範囲から外れている場合には、イベントを生成する。たとえば、フラクション値が０．７５（すなわち、７５％）である場合には、しきい値モジュール３４０は、識別されたウィンドウの７５％よりも多くの間に発生するデータポイントが、ｔｈｒｅｓｈｏｌｄブロックによって指定されている範囲から外れている場合には、イベントを生成する。
【０１７５】
データストリーム言語プログラムに関するカスタマイズされたブロック
データストリーム言語の既存のビルトインブロックを組み合わせることによって、カスタマイズされたブロックがユーザによって指定されることが可能である。カスタマイズされたブロックは、マクロブロックまたはカスタマイズされたマクロブロックとも呼ばれる。カスタマイズされたマクロブロックを定義できることは、データストリーム言語を拡張可能にする。カスタマイズされたブロックは、ビルトインブロックと同様、データストリーム言語プログラムに含まれることが可能である。カスタマイズされたブロックは、その他のカスタマイズされたマクロブロックを使用して、カスタマイズされたマクロブロックの任意のネスティングを可能にすることができる。ユーザは、カスタマイズされたブロックを使用して任意のアブストラクションを指定することができる。カスタマイズされたブロックは、そのカスタマイズされたマクロブロックを含むデータストリーム言語プログラムを実行するジョブに関して指定されている周期性で実行される。カスタマイズドブロックモジュール３９０は、それぞれのタイムインターバルに関して、カスタマイズされたマクロブロックのそれぞれの入力ポートに関する入力値を決定する。
【０１７６】
カスタマイズドブロックモジュール３９０は、カスタマイズされたマクロブロックの命令を実行し、それぞれの出力ポートに関するデータ値を生成する。出力ポートからの出力値は、後続のブロックへ提供されることが可能である。カスタマイズされたブロックへの入力が、ｇｒｏｕｐｂｙブロックを含むブロックを含んでいる場合には、入力ポートは、入力として複数のデータストリームを受信することができる。カスタマイズドブロックモジュール３９０は、入力において受信されたそれぞれのデータストリームのそれぞれのデータポイントに関してカスタマイズドブロックモジュール３９０の命令を実行する。データストリームの数は、カスタマイズされたマクロブロックを含むデータストリーム言語プログラムによって受信されるデータストリームのセット全体における変化に基づいて動的に変わっている場合がある。カスタマイズされたマクロブロックは、そのカスタマイズされたブロックの命令において使用される１つまたは複数のパラメータに関連付けられることが可能である。カスタマイズされたマクロブロックの命令は、パラメータ値を使用する。しかしながら、カスタマイズされたマクロブロックがデータストリーム言語プログラムにおいて指定される場合には、それぞれのパラメータに関する特定の値が提供される。したがって、カスタマイズドブロックモジュール３９０は、カスタマイズされたマクロブロックの命令を実行している間は、パラメータ値の代わりにパラメータ名を使用する。
【０１７７】
図１９は、実施形態による、データストリームのグループを含む入力に適用されるユーザ定義関数に基づいて結果データストリームを生成するためのカスタマイズされたブロックの使用を示すデータストリーム言語プログラムの例を示している。例示的なカスタマイズされたマクロブロック１９６０は、２つの入力データストリームのデータを組み合わせて、入力データ値に基づいて関数を生成する。ｃｏｍｂｉｎｅブロック１９６０は、ｈｉｔｓおよびｍｉｓｓｅｓという２つの入力ポート、ならびにｏｕｔという１つの出力ポートを有している。それぞれの入力ポートへの入力は、データストリーム言語プログラムの部分によって生成される。
【０１７８】
たとえば、ｈｉｔｓという入力ポートへの入力は、ｓｔａｔｓブロック１９２５の出力として生成され、ｍｉｓｓｅｓという入力ポートの入力は、ｓｔａｒｔｓブロック１９４５の出力として生成される。探索モジュール３１０は、ｆｉｎｄブロック１９００を実行して、ｃａｃｈｅＨｉｔｓというメトリック値を有する計測分析システム１００によって受信されたすべてのデータストリームを見つけ出す。たとえば、探索モジュール３１０は、ｆｉｎｄブロック１９００を実行して、キャッシュヒットの値を提供する開発システム１２０から受信されたすべてのデータストリームを見つけ出すことができる。フェッチモジュール３２０は、ｆｅｔｃｈブロック１９１５を実行して、ｆｉｎｄブロック１９００によって識別されたデータストリームのデータをフェッチする。グループ化モジュールは、ｇｒｏｕｐｂｙブロック１９２０を実行して、データセンター属性によってデータストリームをグループ化する。計算モジュール３３０は、ｓｔａｔｓブロック１９２５を実行して、それぞれの個別のデータセンターに関するすべてのデータストリームからのデータの平均を生成し、そのデータを、入力としてｃｏｍｂｉｎｅブロック１９６０のｈｉｔｓポートへ提供する。
【０１７９】
同様に、探索モジュール３１０は、ｆｉｎｄブロック１９１０を実行して、ｃａｃｈｅＭｉｓｓｅｓというメトリック値を有する計測分析システム１００によって受信されたすべてのデータストリームを見つけ出す。たとえば、探索モジュール３１０は、ｆｉｎｄブロック１９１０を実行して、キャッシュミスの値を提供する開発システム１２０から受信されたすべてのデータストリームを見つけ出すことができる。フェッチモジュール３２０は、ｆｅｔｃｈブロック１９３０を実行して、ｆｉｎｄブロック１９００によって識別されたデータストリームのデータをフェッチする。グループ化モジュールは、ｇｒｏｕｐｂｙブロック１９３５を実行して、データセンター属性によってデータストリームをグループ化する。計算モジュール３３０は、ｓｔａｔｓブロック１９４５を実行して、それぞれの個別のデータセンターに関するすべてのデータストリームからのデータの平均を生成し、そのデータを、入力としてｃｏｍｂｉｎｅブロック１９６０のｈｉｔｓポートへ提供する。
【０１８０】
カスタマイズドブロックモジュール３９０は、ｃｏｍｂｉｎｅブロックに関して指定された命令のセット１９１０を実行する。したがって、それぞれのタイムインターバルに関して、カスタマイズドブロックモジュール３９０は、Ｈが、ｈｉｔｓ入力ポートにおいて受信されたデータ値を表しており、Ｍが、ｍｉｓｓｅｓポートにおいて受信されたミスの値を表している場合に、Ｈ／（Ｈ＋Ｍ）の値を決定する。カスタマイズドブロックモジュール３９０は、上述の式の値を出力ポートに提供する。データストリーム言語プロセッサ２００は、出力ポートからのデータ値を、後続のブロックがあればそのブロックの入力ポートへ提供する。
【０１８１】
図２０は、実施形態による、カスタマイズされたブロックを伴うデータストリーム言語プログラムを実行するプロセスを示すフローチャートを示している。データストリーム言語プロセッサは、データストリーム言語プログラムのカスタマイズされたブロックを２０１０で識別する。カスタマイズドブロックモジュール３９０は、カスタマイズされたブロックの入力ポートおよび出力ポートを２０２０で識別する。カスタマイズされたブロックがパラメータ値を指定している場合には、カスタマイズドブロックモジュール３９０は、パラメータの代わりに使用されることになる値を受信し、それらの値を、カスタマイズされたブロックによって指定された命令において代用する。
【０１８２】
カスタマイズドブロックモジュール３９０は、それぞれのタイムインターバルに関して下記のステップを繰り返す。カスタマイズドブロックモジュール３９０は、それぞれの入力ポートに関する入力データ値を決定する。入力ポートに関する入力を生成するデータストリーム言語プログラムの部分がｇｒｏｕｐｂｙブロックを含む場合には、そのポートへの入力は、そのｇｒｏｕｐｂｙブロックによって生成されたそれぞれのデータストリームに対応する複数のデータ値を含むことができる。
【０１８３】
カスタマイズドブロックモジュール３９０は、それぞれのデータ値に関して、カスタマイズされたブロックの命令を実行する。それぞれのポートにおいて入力された複数のデータストリームがある場合には、カスタマイズドブロックモジュール３９０は、それぞれの入力ポートに関するｇｒｏｕｐｂｙブロックのメタデータ属性の値どうしを比較することによって、マッチするデータストリームを識別する。カスタマイズドブロックモジュール３９０は、入力ポートへ入力されるそれぞれのデータストリームに関する命令を２０４０で実行する。入力ポートが、一定の入力値を有していて、別の入力ポートが、複数のデータストリームを有している場合には、カスタマイズドブロックモジュール３９０は、その一定の値をその別の入力ポートのそれぞれのデータストリームに適用する。
【０１８４】
カスタマイズドブロックモジュール３９０は、カスタマイズされたブロックの命令の実行の結果の値を、カスタマイズされたブロックの命令において指定されているように出力ポートに提供する。データストリーム言語プロセッサ２００は、出力ポートにおける値を、出力ポートに接続されているデータストリーム言語プログラムのブロックに提供する。カスタマイズされたブロックは、出力ポートにおいて複数のデータストリームを出力することができる。たとえば、カスタマイズされたブロックの入力ポートは、複数のデータストリームをそれぞれ受信することができ、カスタマイズされたブロックは、それぞれの入力ポートにおいて受信されたマッチしているデータストリームからの値を含むタプル上で特定の計算を実行することができる。
【０１８５】
カスタマイズされたデータブロックの命令は、その他のカスタマイズされたデータブロックを含むことができる。したがって、図２０において示されている上述のプロセスは、それぞれのカスタマイズされたブロックに関して実行される。
【０１８６】
データストリーム言語プログラムを使用してレポートを生成するためのユーザインターフェース
いくつかの実施形態においては、計測分析システム１００は、データストリームに基づくレポートを見ることに関心があるエンドユーザのためにデータストリーム言語プログラムを生成するユーザインターフェースを提供する。ユーザは、データストリーム言語の複雑さを隠すユーザフレンドリーなユーザインターフェースを提供される。計測分析システムによって提供されたユーザインターフェースは、レポートを生成すること、ロールアップを実行すること、データストリームをグループ化することなどを行うためのメトリックを選択するなどのアクションをユーザが取ることを可能にするさまざまなウィジェットを示している。
【０１８７】
図２１は、実施形態による、計測分析システムによって受信されたデータストリームを示すデータストリーム言語プログラムの実行の結果を表示しているユーザインターフェースのスクリーンショットを示している。このスクリーンショットは、ｓｅｒｖｉｃｅ．ｃａｃｈｅ．ｈｉｔｓというメトリック２１２０を表すデータストリームを表示しているいくつかのチャート２１２０を示している。このメトリックは、開発システム１２０上で実行している計測されたソフトウェアから受信されたキャッシュヒット値を表している。これらの値は、１秒のタイムインターバルへロールアップされる。したがって、それぞれの１秒のタイムインターバルにおいて受信されたキャッシュヒット値が足し合わされる。ｓｅｒｖｉｃｅ．ｃａｃｈｅ．ｈｉｔｓというメトリックを報告する多数のサービスが存在することがあり、それに応じて多数のチャート２１２０が表示される。図２１は、ユーザがアクションを取ること、たとえば、ユーザインターフェースによって報告されるメトリックを選択することや、ロールアップを実行することを可能にするさまざまなウィジェットを示している。
【０１８８】
図２２は、実施形態による、計測分析システムによって受信されたデータストリームのデータの１分平均を示すデータストリーム言語プログラムの実行の結果を表示しているユーザインターフェースのスクリーンショットを示している。図２２は、データストリーム上で実行されることになる特定の計算をユーザが指定することを可能にするウィジェットを示している。具体的には、図２２は、それぞれのデータストリームに関する１分平均を計算するウィジェット２２２０を示している。結果として、チャート２２１０は、図２１において示されているチャートよりも平滑である。しかしながら、図２２において示されているチャート２２１０の数は、図２１において示されているチャート２２１０の数と同じである。
【０１８９】
大企業は、非常に多数の開発システム１２０を有する場合がある。それぞれの開発システムは、複数のサービスを実行する場合があり、それぞれのサービスがメトリックを報告する。結果として、図２１および図２２において表示されているチャートの数は、非常に多くなる可能性がある。ユーザは、図２３において示されているようにデータストリームをグループ化することにより、データストリームによって報告されたデータへのよりよい洞察を得ることができる。
【０１９０】
図２３は、実施形態による、データセンターによってグループ化されたデータストリームの合計を示すデータストリーム言語プログラムの実行の結果を表示しているユーザインターフェースのスクリーンショットを示している。図２３は、属性の指定を可能にするウィジェット２３２０を示しており、その属性によってデータストリームがグループ化され、それぞれのグループに関してアグリゲーションオペレーションが実行される。図２３において示されているように、ユーザは、データセンターによってグループ化を行うこと、およびそれぞれのグループに関して合計オペレーションを実行することを要求している。２つのデータセンターしかないと想定して、チャートの数は、２つに削減されている。それぞれのチャート２３１０は、特定のデータセンターから受信されたデータストリームのデータ値の合計を示している。
【０１９１】
図２４は、実施形態による、データセンターによってグループ化されたデータストリームに関する、キャッシュヒット率と、キャッシュヒット率およびミス率の合計との比率を決定するカスタマイズされたマクロブロックを含むデータストリーム言語プログラムの実行の結果を表示しているユーザインターフェースのスクリーンショットを示している。図２４において示されているように、ユーザは、ウィジェット２４３０を使用してｓｅｒｖｉｃｅ．ｃａｃｈｅ．ｈｉｔというメトリックを報告するデータストリームをＡと呼ぶ。ユーザはさらに、ウィジェット２４４０を使用してｓｅｒｖｉｃｅ．ｃａｃｈｅ．ｍｉｓｓというメトリックを報告するデータストリームをＢと呼ぶ。ユーザは、計算Ａ／（Ａ＋Ｂ）を、キャッシュヒットおよびキャッシュミスの合計に対するキャッシュヒットの比率と定義する。ユーザはさらに、ウィジェット２４５０を使用して、計算されたＡ／（Ａ＋Ｂ）の値が１００の倍数によって拡大されるべきであるということを指定している。この計算は、データセンターに基づいてデータストリームのそれぞれのグループに関して実行される。したがってチャート２４１０は、それぞれのデータセンターに関して生成されて、そのデータセンターから受信されたすべてのデータストリームに関してキャッシュヒット比率のリアルタイムの値を報告する。
【０１９２】
代替実施形態
本発明の図および記述は、本発明を明確に理解することに関連している要素を例示するように簡略化されており、その一方で明確さの目的から、典型的なシステムにおいて見受けられるその他の多くの要素を除外しているということを理解されたい。その他の要素および／またはステップも、本発明を実施する上で望ましく、および／または必要とされるということを当技術分野における標準的な技術者なら認識することができる。しかしながら、そのような要素およびステップは当技術分野においてよく知られているので、ならびにそれらは、本発明のさらによい理解を容易にするものではないので、そのような要素およびステップの論考は、本明細書においては提供されていない。本明細書における開示は、当業者に知られているそのような要素および方法に対するすべてのそのような変形形態および修正形態にも向けられている。
【０１９３】
上述の記述のいくつかの部分は、情報に関するオペレーションのアルゴリズムおよびシンボル表示という点から実施形態について記述している。これらのアルゴリズム的な記述および表示は一般に、データ処理技術分野における技術者たちによって、それらの技術者たちの作業の実体を他の当業者たちに対して効果的に伝達するために使用されている。これらのオペレーションは、機能的に、計算処理的に、または論理的に記述されているが、コンピュータプログラムまたは均等な電気回路、マイクロコードなどによって実施されるということが理解される。さらに、一般性を失うことなく、モジュールとしてオペレーションのこれらの構成に言及することが時として好都合であることもわかっている。記述されているオペレーションおよびそれらの関連付けられているモジュールは、ソフトウェア、ファームウェア、ハードウェア、またはそれらの任意の組合せで具体化されることが可能である。
【０１９４】
本明細書において使用される際には、「一実施形態」または「実施形態」へのいかなる言及も、その実施形態に関連して記述されている特定の要素、機能、構造、または特徴が、少なくとも１つの実施形態に含まれているということを意味する。「一実施形態においては」という語句が、本明細書におけるさまざまな個所に登場しても、それらは、必ずしもすべて同じ実施形態を指しているとは限らない。
【０１９５】
いくつかの実施形態は、「結合される」および「接続される」という表現をそれらの派生語とともに使用して記述されているかもしれない。これらの用語は、互いにとっての同義語として意図されているものではないということを理解されたい。たとえば、いくつかの実施形態は、複数の要素が互いに直接の物理的なまたは電気的な接触状態にあるということを示すために、「接続される」という用語を使用して記述されているかもしれない。別の例においては、いくつかの実施形態は、複数の要素が直接の物理的なまたは電気的な接触状態にあるということを示すために、「結合される」という用語を使用して記述されているかもしれない。しかしながら、「結合される」という用語は、複数の要素が互いに直接の接触状態にはないが、それでもなお互いに協力または対話しているということを意味する場合もある。実施形態は、このコンテキストにおいて限定されるものではない。
【０１９６】
本明細書において使用される際には、「ｃｏｍｐｒｉｓｅｓ」、「ｃｏｍｐｒｉｓｉｎｇ」、「ｉｎｃｌｕｄｅｓ」、「ｉｎｃｌｕｄｉｎｇ」、「ｈａｓ」、「ｈａｖｉｎｇ」という用語、またはそれらのその他の任意の変形は、非排他的な包含をカバーすることを意図されている。たとえば、要素のリストを含むプロセス、方法、製品、または装置は、それらの要素だけに必ずしも限定されず、明示的にリストアップされてはいない、またはそのようなプロセス、方法、製品、もしくは装置に固有のその他の要素を含むことができる。さらに、そうではないと明示されていない限り、「または（もしくは）」は、排他的な「または（もしくは）」ではなく、包括的な「または（もしくは）」を指す。たとえば、ＡまたはＢという条件は、「Ａが真であり（または存在して）、Ｂが偽である（または存在しない）」、「Ａが偽であり（または存在せず）、Ｂが真である（または存在する）」、ならびに「ＡおよびＢの両方が真である（または存在する）」のうちのいずれか１つによって満たされる。
【０１９７】
加えて、「ａ」または「ａｎ」の使用は、本明細書における実施形態の要素およびコンポーネントについて記述するために採用されている。これは、便宜上、および本発明の一般的な意味を与えるために行われているにすぎない。この記述は、１つまたは少なくとも１つを含むと読み取られるべきであり、単数は複数も含む（ただし、そうではないことが意味されているということが明らかである場合は除く）。当業者なら、本開示を読めば、本明細書における開示されている原理を通じて、計測されたソフトウェアに基づいてレポートを生成するためのシステムおよびプロセスのためのまたさらなる代替の構造的なおよび機能的な設計を理解するであろう。したがって、特定の実施形態および応用例が示され記述されているが、開示されている実施形態は、本明細書において開示されている厳密な構造およびコンポーネントに限定されるものではないということを理解されたい。当業者にとって明らかであろうさまざまな修正、変更、および変形が、添付の特許請求の範囲において定義されている趣旨および範囲から逸脱することなく、本明細書において開示されている方法および装置の構成、オペレーション、および詳細において行われることが可能である。
【図１】
2020074157.tif 000003
【図２】
2020074157.tif 000004
【図３】
2020074157.tif 000005
【図４】
2020074157.tif 000006
【図５】
2020074157.tif 000007
【図６】
2020074157.tif 000008
【図７】
2020074157.tif 000009
【図８】
2020074157.tif 000010
【図９】
2020074157.tif 000011
【図１０】
2020074157.tif 000012
【図１１】
2020074157.tif 000013
【図１２】
2020074157.tif 000014
【図１３Ａ】
2020074157.tif 000015
【図１３Ｂ】
2020074157.tif 000016
【図１４】
2020074157.tif 000017
【図１５】
2020074157.tif 000018
【図１６】
2020074157.tif 000019
【図１７】
2020074157.tif 000020
【図１８】
2020074157.tif 000021
【図１９】
2020074157.tif 000022
【図２０】
2020074157.tif 000023
【図２１】
2020074157.tif 000024
【図２２】
2020074157.tif 000025
【図２３】
2020074157.tif 000026
【図２４】
2020074157.tif 000027
【手続補正書】
【提出日】令和2年2月14日(2020.2.14)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
データストリーム言語プログラムを使用してデータストリームの動的に変わるセットを処理するための方法であって、
複数のデータストリームについて記述するメタデータを計測分析システムによって格納するステップと、
データストリーム言語を使用して指定された命令のセットを含むデータストリーム言語プログラムを受信するステップであって、前記命令は、検索式に関連付けられているｆｉｎｄブロックを含み、前記検索式は、データストリームに関連付けられているメタデータ属性に基づく、受信するステップと、
前記検索式を評価して、前記検索式に適合する前記複数のデータストリームからのデータストリームのセットを識別するステップと、
前記データストリーム言語プログラムを繰り返し実行するステップであって、前記実行は、
データストリームの前記識別されたセットのそれぞれのデータストリームからデータ値を受信するステップ、
前記データストリーム言語プログラムのそれぞれのブロックを実行するステップ、
前記実行に基づいて１つまたは複数の結果データ値を生成するステップであって、前記結果データ値は、前記データストリーム言語プログラムによって生成される結果データストリームに対応する、生成するステップ、および
前記１つまたは複数の結果データ値を格納するステップを含む、繰り返し実行するステップとを含むことを特徴とする方法。
【請求項２】
前記検索式は、前記データストリーム言語プログラムの前記実行中に繰り返し評価されることを特徴とする請求項１に記載の方法。
【請求項３】
第１のタイムインターバル中に評価された識別されたデータストリームの前記セットは、第２のタイムインターバル中に評価された識別されたデータストリームの前記セットとは異なることを特徴とする請求項２に記載の方法。
【請求項４】
前記ｆｉｎｄブロックは、周期性に関連付けられており、前記検索式は、前記ｆｉｎｄブロックに関連付けられている周期性に基づいて決定されたそれぞれのタイムインターバルに関して周期的に評価されることを特徴とする請求項２に記載の方法。
【請求項５】
前記検索式は、前記データストリームに関連付けられているメタデータにおける変化に応答して評価されることを特徴とする請求項２に記載の方法。
【請求項６】
前記検索式は、前記複数のデータストリームにおける変化に応答して評価され、前記変化は、データストリームの追加またはデータストリームの削除を含むことを特徴とする請求項２に記載の方法。
【請求項７】
前記検索式は、前記検索式の仕様における変化に応答して評価されることを特徴とする請求項２に記載の方法。
【請求項８】
前記ｆｉｎｄブロックが実行される割合は、前記データストリーム言語プログラムの１つまたは複数のその他のブロックが実行される割合とは異なることを特徴とする請求項７に記載の方法。
【請求項９】
前記複数のデータストリームは、外部システムから受信されるデータストリームを含むことを特徴とする請求項１に記載の方法。
【請求項１０】
前記複数のデータストリームは、別のデータストリーム言語プログラムの実行の結果として生成されるデータストリームを含むことを特徴とする請求項１に記載の方法。
【請求項１１】
前記検索式は、データストリームに関連付けられているメタデータに基づく正規表現であることを特徴とする請求項１に記載の方法。
【請求項１２】
その上に命令を格納しているコンピュータ可読非一時的ストレージメディアであって、前記命令は、プロセッサによって実行されたときに、
複数のデータストリームを計測分析システムによって格納するステップであって、それぞれのデータストリームはメタデータ属性に関連付けられている、格納するステップと、
データストリーム言語を使用して指定された命令のセットを含むデータストリーム言語プログラムを受信するステップであって、前記命令は、検索式に関連付けられているｆｉｎｄブロックを含み、前記検索式は、データストリームに関連付けられているメタデータ属性に基づく、受信するステップと、
前記検索式を評価して、前記検索式に適合する前記複数のデータストリームからのデータストリームのセットを識別するステップと、
前記データストリーム言語プログラムを繰り返し実行するステップであって、前記実行は、
データストリームの前記識別されたセットのそれぞれのデータストリームからデータ値を受信するステップ、
前記データストリーム言語プログラムのそれぞれのブロックを実行するステップ、
前記実行に基づいて１つまたは複数の結果データ値を生成するステップであって、前記結果データ値は、前記データストリーム言語プログラムによって生成される結果データストリームに対応する、生成するステップ、および
前記１つまたは複数の結果データ値を格納するステップを含む、繰り返し実行するステップとを前記プロセッサに実行させることを特徴とするコンピュータ可読非一時的ストレージメディア。
【請求項１３】
前記検索式は、前記データストリーム言語プログラムの前記実行中に繰り返し評価されることを特徴とする請求項１２に記載のコンピュータ可読非一時的ストレージメディア。
【請求項１４】
第１のタイムインターバル中に評価された識別されたデータストリームの前記セットは、第２のタイムインターバル中に評価された識別されたデータストリームの前記セットとは異なることを特徴とする請求項１３に記載のコンピュータ可読非一時的ストレージメディア。
【請求項１５】
前記ｆｉｎｄブロックは、周期性に関連付けられており、前記検索式は、前記ｆｉｎｄブロックに関連付けられている周期性に基づいて決定されたそれぞれのタイムインターバルに関して周期的に評価されることを特徴とする請求項１３に記載のコンピュータ可読非一時的ストレージメディア。
【請求項１６】
前記検索式は、前記データストリームに関連付けられているメタデータにおける変化に応答して評価されることを特徴とする請求項１２に記載のコンピュータ可読非一時的ストレージメディア。
【請求項１７】
前記検索式は、前記複数のデータストリームにおける変化に応答して評価され、前記変化は、データストリームの追加またはデータストリームの削除を含むことを特徴とする請求項１２に記載のコンピュータ可読非一時的ストレージメディア。
【請求項１８】
前記ｆｉｎｄブロックは、周期性に関連付けられており、前記検索式は、前記ｆｉｎｄブロックに関連付けられている周期性に基づいて決定されたそれぞれのタイムインターバルに関して周期的に評価されることを特徴とする請求項１２に記載のコンピュータ可読非一時的ストレージメディア。
【請求項１９】
前記ｆｉｎｄブロックが実行される割合は、前記データストリーム言語プログラムの１つまたは複数のその他のブロックが実行される割合とは異なることを特徴とする請求項１８に記載のコンピュータ可読非一時的ストレージメディア。
【請求項２０】
計測手段が組み込まれたソフトウェアによって生成されたデータを処理するためのコンピュータ実施システムであって、
コンピュータプロセッサと、
その上に命令を格納しているコンピュータ可読非一時的ストレージメディアであって、前記命令は、プロセッサによって実行されたときに、
複数のデータストリームを計測分析システムによって格納するステップであって、それぞれのデータストリームはメタデータ属性に関連付けられている、格納するステップ、
データストリーム言語を使用して指定された命令のセットを含むデータストリーム言語プログラムを受信するステップであって、前記命令は、検索式に関連付けられているｆｉｎｄブロックを含み、前記検索式は、データストリームに関連付けられているメタデータ属性に基づく、受信するステップ、
前記検索式を評価して、前記検索式に適合する前記複数のデータストリームからのデータストリームのセットを識別するステップ、ならびに
前記データストリーム言語プログラムを繰り返し実行するステップであって、前記実行は、
データストリームの前記識別されたセットのそれぞれのデータストリームからデータ値を受信するステップ、
前記データストリーム言語プログラムのそれぞれのブロックを実行するステップ、
前記実行に基づいて１つまたは複数の結果データ値を生成するステップであって、前記結果データ値は、前記データストリーム言語プログラムによって生成される結果データストリームに対応する、生成するステップ、および
前記１つまたは複数の結果データ値を格納するステップを含む、繰り返し実行するステップを前記プロセッサに実行させるコンピュータ可読非一時的ストレージメディアとを含むことを特徴とするシステム。
【請求項２１】
データストリーム言語プログラムによって生成されるデータストリームを生成して格納するための方法であって、
複数のデータストリームからデータを受信するステップと、
前記複数のデータストリームについて記述するメタデータを格納するステップであって、それぞれのデータストリームに関する前記メタデータは、前記データストリームに関連付けられている１つまたは複数の属性を含む、格納するステップと、
前記複数のデータストリームを処理するためにデータストリーム言語プログラムを使用して指定された命令のセットを受信するステップと、
命令の前記セットを実行することによって１つまたは複数の結果データストリームを生成するステップと、
前記１つまたは複数の結果データストリームのそれぞれに関して、
前記結果データストリームについて記述する属性の値のセットを決定するステップであって、前記決定は命令の前記セットに基づく、決定するステップと、
前記結果データストリームについて記述するメタデータとして値の前記セットを格納するステップと、
前記結果データストリームに関する識別子を生成して、前記識別子を、前記結果データストリームについて記述する前記メタデータに関連付けるステップと、
前記結果データストリームのデータを前記識別子に関連付けて格納するステップとを含むことを特徴とする方法。
【請求項２２】
属性の値の前記セットは、前記データストリーム言語プログラムにおいて指定されているグループ化コマンドに基づくことを特徴とする請求項２１に記載の方法。
【請求項２３】
前記データストリーム言語プログラムは、複数のグループ化コマンドを指定し、属性の値の前記セットは、前記データストリーム言語プログラムにおいて指定されている前記複数のグループ化コマンドからの最後のグループ化コマンドに基づくことを特徴とする請求項２２に記載の方法。
【請求項２４】
前記グループ化コマンドは、メタデータ属性のセットによって前記データストリームの前記データをグループ化し、それぞれの結果データストリームは、メタデータ属性の前記セットの値の個別のセットに対応することを特徴とする請求項２２に記載の方法。
【請求項２５】
前記結果データストリームの前記データを、別のデータストリーム言語プログラムの別のブロックへの入力として使用するステップ
をさらに含むことを特徴とする請求項２１に記載の方法。
【請求項２６】
前記結果データストリームの前記データを、スクリーン上に表示するために送信するステップ
をさらに含むことを特徴とする請求項２１に記載の方法。
【請求項２７】
結果データストリームの前記セットは、ｐｕｂｌｉｓｈブロックに関連付けられており、前記ｐｕｂｌｉｓｈブロックは、メトリック名に関連付けられており、前記方法は、
前記ｐｕｂｌｉｓｈブロックの前記メトリック名を、前記結果データストリームのそれぞれについて記述する属性として使用するステップと、
前記メトリック名に基づく前記属性を、前記データストリームについて記述する前記メタデータとともに格納するステップとをさらに含むことを特徴とする請求項２１に記載の方法。
【請求項２８】
前記複数のデータストリームからの１つまたは複数のデータストリームは、外部システム上で実行している計測手段が組み込まれたソフトウェアのインスタンスによって生成されることを特徴とする請求項２１に記載の方法。
【請求項２９】
前記複数のデータストリームからの１つまたは複数のデータストリームは、別のデータストリーム言語プログラムの命令の実行の結果として入手される結果データストリームとして生成されることを特徴とする請求項２１に記載の方法。
【請求項３０】
データストリーム言語プログラムに基づいてデータストリームを生成して格納するための方法であって、
複数のデータストリームからデータを受信するステップであって、それぞれのデータストリームは、システム上で実行している計測手段が組み込まれたソフトウェアのインスタンスによって生成される、受信するステップと、
前記複数のデータストリームについて記述するメタデータを格納するステップであって、それぞれのデータストリームに関する前記メタデータは、前記データストリームに関連付けられている１つまたは複数の属性を含む、格納するステップと、
前記複数のデータストリームを処理するためにデータストリーム言語プログラムを使用して指定された命令のセットを受信するステップであって、前記命令は、データストリームをグループ化するための１つまたは複数のグループ化コマンドを含み、それぞれのグループ化コマンドは、データストリームの１つまたは複数の属性およびアグリゲーションオペレーションに関連付けられている、受信するステップと、
命令の前記セットを実行することによって１つまたは複数の結果データストリームを生成するステップと、
命令の前記セットにおいて実行された最後のグループ化コマンドを識別するステップと、
前記最後のグループ化コマンドに関連付けられている属性の前記セットを決定するステップと、
前記１つまたは複数の結果データストリームのそれぞれに関して、
前記結果データストリームに関連付けられている前記最後のグループ化コマンドの属性のセットの値を決定するステップと、
前記結果データストリームについて記述するメタデータとして前記最後のグループ化コマンドの属性の前記セットの前記値を格納するステップと、
前記結果データストリームに関する識別子を生成して、前記識別子を、前記データストリームについて記述する前記メタデータに関連付けるステップと、
前記結果データストリームのデータを前記識別子に関連付けて格納するステップとを含むことを特徴とする方法。
【請求項３１】
複数のデータストリームからデータを受信するための命令と、
前記複数のデータストリームについて記述するメタデータを格納するための命令であって、それぞれのデータストリームに関する前記メタデータは、前記データストリームに関連付けられている１つまたは複数の属性を含む、命令と、
前記複数のデータストリームを処理するためにデータストリーム言語プログラムを使用して指定された命令のセットを受信するための命令と、
命令の前記セットを実行することによって１つまたは複数の結果データストリームを生成するための命令と、
前記１つまたは複数の結果データストリームのそれぞれに関して、
前記結果データストリームについて記述する属性の値のセットを決定するための命令であって、前記決定は命令の前記セットに基づく、命令と、
前記結果データストリームについて記述するメタデータとして値の前記セットを格納するための命令と、
前記結果データストリームに関する識別子を生成して、前記識別子を、前記結果データストリームについて記述する前記メタデータに関連付けるための命令と、
前記結果データストリームのデータを前記識別子に関連付けて格納するための命令と
を格納していることを特徴とするコンピュータ可読非一時的ストレージメディア。
【請求項３２】
前記メタデータについて記述する値の前記セットは、前記データストリーム言語プログラムにおいて指定されているグループ化コマンドに基づくことを特徴とする請求項３１に記載のコンピュータ可読非一時的ストレージメディア。
【請求項３３】
前記データストリーム言語プログラムは、複数のグループ化コマンドを指定し、属性の値の前記セットは、前記データストリーム言語プログラムにおいて指定されている前記複数のグループ化コマンドからの最後のグループ化コマンドに基づくことを特徴とする請求項３２に記載のコンピュータ可読非一時的ストレージメディア。
【請求項３４】
前記グループ化コマンドは、メタデータ属性のセットによって前記データストリームの前記データをグループ化し、それぞれの結果データストリームは、メタデータ属性の前記セットの値の個別のセットに対応することを特徴とする請求項３２に記載のコンピュータ可読非一時的ストレージメディア。
【請求項３５】
結果データストリームの前記セットは、ｐｕｂｌｉｓｈブロックに関連付けられており、前記ｐｕｂｌｉｓｈブロックは、メトリック名に関連付けられており、前記コンピュータ可読非一時的ストレージメディアは、
前記ｐｕｂｌｉｓｈブロックの前記メトリック名を、前記結果データストリームのそれぞれについて記述する属性として使用するための命令と、
前記メトリック名に基づく前記属性を、前記データストリームについて記述する前記メタデータとともに格納するための命令とをさらに格納していることを特徴とする請求項３１に記載のコンピュータ可読非一時的ストレージメディア。
【請求項３６】
結果ストリームの前記データを、別のデータストリーム言語プログラムの別のブロックへの入力として使用するための命令
をさらに格納していることを特徴とする請求項３１に記載のコンピュータ可読非一時的ストレージメディア。
【請求項３７】
結果ストリームの前記データを、スクリーン上に表示するために送信するための命令
をさらに格納していることを特徴とする請求項３１に記載のコンピュータ可読非一時的ストレージメディア。
【請求項３８】
前記複数のデータストリームからの１つまたは複数のデータストリームは、外部システム上で実行している計測手段が組み込まれたソフトウェアのインスタンスによって生成されることを特徴とする請求項３１に記載のコンピュータ可読非一時的ストレージメディア。
【請求項３９】
前記複数のデータストリームからの１つまたは複数のデータストリームは、別のデータストリーム言語プログラムの命令の実行の結果として入手される結果データストリームとして生成されることを特徴とする請求項３１に記載のコンピュータ可読非一時的ストレージメディア。
【請求項４０】
コンピュータプロセッサと、
複数のデータストリームからデータを受信するための命令、
前記複数のデータストリームについて記述するメタデータを格納するための命令であって、それぞれのデータストリームに関する前記メタデータは、前記データストリームに関連付けられている１つまたは複数の属性を含む、格納するための命令、
前記複数のデータストリームを処理するためにデータストリーム言語プログラムを使用して指定された命令のセットを受信するための命令、
命令の前記セットを実行することによって１つまたは複数の結果データストリームを生成するための命令、
前記１つまたは複数の結果データストリームのそれぞれに関して、
命令の前記セットに基づいて、前記結果データストリームについて記述する属性の値のセットを決定するための命令、
前記結果データストリームについて記述するメタデータとして値の前記セットを格納するための命令、
時系列に関する時系列識別子を生成して、前記時系列識別子を、前記データストリームについて記述する前記メタデータに関連付けるための命令、および
前記結果データストリームのデータを前記時系列識別子に関連付けて格納するための命令
を格納しているコンピュータ可読非一時的ストレージメディアと
を含むことを特徴とするコンピュータシステム。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、一般にはデータストリーム処理に関し、より具体的には、計測手段が組み込まれたソフトウェアから受信されたデータストリームを処理するためのデータストリーム処理言語に関する。
【背景技術】
【０００２】
ソフトウェア開発者たちは、彼らがソフトウェアに計測手段を組み込むことによって開発するソフトウェアのさまざまな側面をモニタする。これらは、ソフトウェアの実行、ソフトウェアの実行中に直面されるエラー、ソフトウェアの実行中に直面される重大なイベント、コードのどの部分が実行されているか、およびどの部分が実行されていないかについて記述する情報などを含む。コードに計測手段を組み込むための従来の技術は、さまざまなタイプの情報をログファイルへ記録するか、または情報をスクリーン上に印刷する、そのコード内のステートメントを含む。この技術は、シンプルなアプリケーション、たとえば、シングルプロセッサ上で実行する実行のシンプルなフローを有するアプリケーションに適している。しかしながら、ソフトウェアに計測手段を組み込むためのこれらの技術は、複数のシステムにわたって分散されてそれぞれのシステムが実行の複数のプロセスまたはスレッドを実行する場合がある複雑なアプリケーションには適していない。
【０００３】
そのような複雑なシステムに計測手段を組み込むための別の従来の技術は、コードに計測手段を組み込む際にエキスパートを使用することである。特定のベンダーは、コードの計測を支援するエキスパートサービスを提供している。しかしながら、これらのベンダーは典型的には、しばしばあまりフレキシブルではない標準的なサービスを提供している。さらに、これらのベンダーに基づくソリューションは、ベンダーによってコードに計測手段を組み込むために必要とされる時間という点で多大なオーバーヘッドを有している。したがって、これらのソリューションは、ゆっくりとした開発サイクル、たとえば、１年がかりの開発サイクルに適している。しかしながら、ソフトウェア製品に関するソフトウェア開発およびリリースサイクルは、短くなってきている。たとえば、ソフトウェア開発者たちが毎月、毎週、または毎日でさえ変更を作成してそれらを展開するいくつかのオンラインシステムがある。ベンダーに基づく計測ソリューションの多大なオーバーヘッドに起因して、開発者たちは、これらのサービスを速いペースの開発環境において使用することは困難であると感じている。
【０００４】
さらに、コードに計測手段を組み込むための従来の技術は、情報を取り入れ、情報を格納し、情報を分析して、レポートを生成する際に多大な遅延をもたらす。結果として、ソフトウェアにおいて問題が生じる時点と、コードの計測を介してその問題が検知される時点との間において多大な遅延がある可能性がある。したがって、ソフトウェアの計測に基づいてレポートを生成するための従来のシステムはしばしば、複雑なアプリケーションの速いペースの開発サイクルにおいては不適切である。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】米国特許出願第１４／８００，６７７号明細書
【特許文献２】米国特許出願第１４／８００，６７９号明細書
【発明の概要】
【０００６】
計測分析システムの実施形態は、データストリーム言語において指定された命令に基づいてデータストリームを処理する。それらのデータストリームは、外部システム上で実行している計測手段が組み込まれたコードから受信される。データストリーム言語のコマンドは、ブロックとして指定される。ブロックは、特定のタイプのオペレーション（または計算、たとえば、データを取り出すこと、データを処理することなど）を実行する。ブロックは、入力ポート、出力ポート、およびパラメータを任意選択で含む。入力ポートは、外部システムから受信されること、またはその他のブロックによって生成されることが可能であるデータストリームのデータを受信する。ブロックの計算の結果は、出力としてブロックの出力ポートへ提供される。ブロックに関連付けられているパラメータが、ブロックの計算の指定において使用される。たとえば、パラメータは、データストリームを見つけ出すブロックに関する検索ストリングを指定する。データストリーム言語プログラムは、ブロックのネットワークを含み、ブロックの出力は、入力としてその他のブロックなどへ提供されることが可能である。ジョブは、データストリーム言語プログラムの実行を表す。複数のジョブが、同じデータストリーム言語プログラムに関して実行されることが可能である。ジョブは、開始時刻、停止時刻、および周期性に関連付けられている。ジョブは、開始時刻において開始され、停止時刻まで実行される。ジョブは、指定されている周期性に基づくタイムインターバルで周期的に実行される命令を含む。それぞれのタイムインターバルに関して、ジョブは、データストリームのセットからデータ値を受信し、データストリーム言語のブロックを実行して、出力データ値を生成する。その他の実施形態は、本明細書において示されている機能を、異なるシンタックスおよび異なるプログラミングパラダイムを伴って実施する。
【０００７】
計測分析システムの実施形態は、データストリーム言語において指定された命令に基づいてデータストリームを処理する。それらのデータストリームは、外部システム上で実行している計測手段が組み込まれたコードから受信されるか、計測手段が組み込まれた分析システムによってデータストリーム言語プログラムの結果として生成されることが可能である。計測分析システムは、データストリームとしきい値との比較を実行するデータストリーム言語プログラムを受信する。たとえば、データストリームのデータは、低しきい値および／または高しきい値と比較されることが可能である。低／高しきい値は、一定の値または動的に変わる値であることが可能である。低／高しきい値は、データストリームを生成するデータストリーム言語プログラムによって指定されることが可能である。
【０００８】
ｔｈｒｅｓｈｏｌｄブロックは、第１の入力および第２の入力を受信するように構成されている。たとえば、第１の入力は、ｔｈｒｅｓｈｏｌｄブロックのデータポートによって受信され、第２の入力は、ｔｈｒｅｓｈｏｌｄブロックのしきい値ポートによって受信される。データストリーム言語プログラムの命令の第１のセットは、第１の入力を生成し、データストリーム言語プログラムの命令の第２のセットは、第２の入力を生成する。システムは、データストリームの入力セットを受信する。システムは、命令の第１のセットを実行して、データストリームの入力セットのデータをアグリゲートして、ｔｈｒｅｓｈｏｌｄブロックの第１の入力として提供されるデータ値を含む第１の複数のデータストリームを生成する。システムは、命令の第２のセットを実行して、データストリームの入力セットのデータをアグリゲートして、ｔｈｒｅｓｈｏｌｄブロックの第２の入力として提供されるしきい値を含む第２の複数のデータストリームを生成する。システムは、データ値としての第１の入力として受信されたデータストリームを、しきい値としての第２の入力において受信されたデータストリームとマッチさせる。第１の入力において受信されたそれぞれのデータストリームに関して、システムは、データストリームのデータ値を、第２の複数のデータストリームからの対応するデータストリームからのしきい値と比較し、データ値およびしきい値の比較の結果に基づいて、イベントを生成するかどうかを決定する。
【０００９】
実施形態においては、生成されたイベントは、システムによって分析されているデータストリームにおいて検知された異常として報告される。たとえば、異常は、特定のデータストリーム、またはデータストリームのセットに基づくアグリゲート値が、ｔｈｒｅｓｈｏｌｄブロックの低しきい値および高しきい値によって設定されている範囲を超過したということを示す場合がある。低しきい値および高しきい値は、それら自体が動的に変わることが可能であり、たとえば、低しきい値および高しきい値は、特定の入力データストリームに基づく移動平均として定義されることが可能である。
【００１０】
実施形態は、データストリーム言語において指定された命令に基づいてデータストリームを処理する計測分析システムについて記述している。このシステムは、複数のデータストリームについて記述するメタデータを格納する。このシステムは、実行のためのデータストリーム言語プログラムを受信する。このデータストリーム言語プログラムは、データストリーム言語を使用して指定された命令のセットを含む。これらの命令は、受信されたデータストリームに関連付けられているメタデータ属性に基づく検索式に関連付けられているｆｉｎｄブロックを含む。このシステムは、検索式を評価して、検索式に適合するデータストリームのセットを識別する。このシステムは、次のステップを実行することによってデータストリーム言語プログラムを繰り返し実行する。このシステムは、データストリームの識別されたセットのそれぞれのデータストリームからデータ値を受信する。このシステムは、データストリーム言語プログラムのそれぞれのブロックを実行し、その実行に基づいて結果データ値を生成する。それらの結果値は、データストリーム言語プログラムによって生成される結果データストリームに対応する。このシステムは、１つまたは複数の結果データ値を格納する。
【００１１】
実施形態においては、ｆｉｎｄブロックは、データストリーム言語プログラムの第１のブロックである。このシステムは、ｆｉｎｄブロックを繰り返し評価する。ｆｉｎｄブロックによって識別されるデータストリームのセットは、ｆｉｎｄブロックの評価ごとに変わる可能性がある。ｆｉｎｄブロックは、データストリーム言語プログラムのブロックのうちの残りの実行の割合とは異なる割合で評価されることが可能である。
【００１２】
システムの実施形態は、データストリーム言語において指定された命令に基づいてデータストリームを処理する。システムは、システムによって処理されるデータストリームについて記述するメタデータを格納する。それぞれのデータストリームに関するメタデータは、そのデータストリームに関連付けられている属性を含む。たとえば、データストリームは、「ｄａｔａｂａｎｋ  １」という値を有している「ｓｏｕｒｃｅ」という属性、および「ｎｕｍＣａｃｈｅＭｉｓｓｅｓ」という値を有している「ｍｅｔｒｉｃ＿ｎａｍｅ」という属性に関連付けられている場合がある。システムは、入力データストリームを処理するためにデータストリーム言語プログラムを使用して指定された命令のセットを受信する。システムは、命令のセットを実行することによって結果データストリームを生成する。たとえば、データストリーム言語プログラムは、受信されたデータストリームを特定の属性によってグループ化するための命令を含むことができ、データストリーム言語プログラムの結果は、識別されたグループの数に基づいて複数の結果データストリームを含むことができる。システムは、結果データストリームのうちのそれぞれの次のステップを実行する。システムは、結果データストリームについて記述する属性の値のセットを決定する。システムは、結果データストリームについて記述するメタデータとして値のそのセットを格納する。システムは、データストリームに関する識別子を生成して、その識別子を、データストリームについて記述するメタデータに関連付ける。システムは、結果データストリームのデータを識別子に関連付けて格納する。
【００１３】
実施形態においては、データストリーム言語プログラムは、複数のｇｒｏｕｐｂｙコマンドを指定する。計測分析システムは、データストリーム言語プログラムの最後のｇｒｏｕｐｂｙコマンドに関連付けて指定されているメタデータ属性の値をそれぞれの結果データストリームに関連付ける。
【００１４】
本明細書において記述されている特徴および利点は、すべてを網羅したものではなく、とりわけ、図面、明細書、および特許請求の範囲を考慮すれば、当技術分野における標準的な技術者にとっては、多くのさらなる特徴および利点が明らかになるであろう。その上、本明細書において使用されている言葉は、主として読みやすさおよび教示上の目的で選択されており、開示されている主題の線引きまたは画定を行うために選択されてはいない場合があるということに留意されたい。
【図面の簡単な説明】
【００１５】
開示されている実施形態は、その他の利点および特徴を有しており、それらは、発明を実施するための形態、添付の特許請求の範囲、および添付の図（または図面）から、さらに容易に明らかになるであろう。図の簡単な紹介は、下記のとおりである。
【図１】実施形態による、計測手段が組み込まれたソフトウェアに基づいて報告を行うための全体的なシステム環境を示す図である。
【図２】実施形態による、計測手段が組み込まれたソフトウェアから受信されたデータストリームを処理するためのデータストリーム言語プログラムを実行するためのシステムのアーキテクチャーを示す図である。
【図３】実施形態による、データストリーム言語プログラムのブロックを処理するためのデータストリーム言語プロセッサのアーキテクチャーを示す図である。
【図４】実施形態による、データストリーム言語の特徴を示すためのデータストリーム言語プログラムの例を示す図である。
【図５】実施形態による、データストリームから受信されたデータをデータストリーム言語プログラムに基づいて処理するための計測分析システムの全体的なプロセスを示す図である。
【図６】実施形態による、計測手段が組み込まれたソフトウェアから受信されたデータストリームの量子化のプロセスを示す図である。
【図７】実施形態による、データストリーム言語プログラムへの入力を提供するためのｆｉｎｄブロックによるデータストリームのセットの選択を示す図である。
【図８】実施形態による、ｆｉｎｄブロックの周期的な再評価の結果としてのデータストリーム言語プログラムへの入力を提供するデータストリームのセットに対する動的な変化を示す図である。
【図９】実施形態による、ｆｉｎｄブロックを使用してデータストリーム言語プログラムへの入力を提供するためのデータストリームのセットを識別するためのプロセスを示す図である。
【図１０】実施形態による、ｆｅｔｃｈブロックを実行することによってデータストリームからデータを取り出すプロセスを示す図である。
【図１１】図１１Ａ〜Ｃは、実施形態による、移動ウィンドウ計算のために時系列データストアからのデータと、データストリームからリアルタイムで受信されるデータとを組み合わせるプロセスを示す図である。
【図１２】実施形態による、データストリームのデータをグループ化して結果データストリームのセットを生成するためのプロセスを示す図である。
【図１３Ａ】実施形態による、データストリームを、それらのデータストリームについて記述するさまざまなメタデータ属性に基づいてグループ化することを示す例示的なシナリオを示す図である。
【図１３Ｂ】実施形態による、データストリームを、それらのデータストリームについて記述するさまざまなメタデータ属性に基づいてグループ化することを示す例示的なシナリオを示す図である。
【図１４】実施形態による、時間に伴う入力データストリームにおける変化の結果としてｇｒｏｕｐｂｙブロックによって生成される結果データストリームの動的な変化を示す例示的なシナリオを示す図である。
【図１５】実施形態による、データストリーム言語プログラムのｐｕｂｌｉｓｈブロックを実行することによって入手される結果データストリームを発行するプロセスを示すフローチャートである。
【図１６】実施形態による、特定の属性によってグループ化されているデータストリームに関する固定されたしきい値を伴うｔｈｒｅｓｈｏｌｄブロックの使用を示すデータストリーム言語プログラムの例を示す図である。
【図１７】実施形態による、メタデータ属性によってグループ化されているデータストリームに関する動的に変わるしきい値を伴うｔｈｒｅｓｈｏｌｄブロックの使用を示すデータストリーム言語プログラムの例を示す図である。
【図１８】実施形態による、ｔｈｒｅｓｈｏｌｄブロックを含むデータストリーム言語プログラムを実行するプロセスを示すフローチャートである。
【図１９】実施形態による、データストリームのグループを含む入力に適用されるユーザ定義関数に基づいて結果データストリームを生成するためのカスタマイズされたブロックの使用を示すデータストリーム言語プログラムの例を示す図である。
【図２０】実施形態による、カスタマイズされたブロックを伴うデータストリーム言語プログラムを実行するプロセスを示すフローチャートである。
【図２１】実施形態による、計測分析システムによって受信されたデータストリームを示すデータストリーム言語プログラムの実行の結果を表示しているユーザインターフェースのスクリーンショットを示す図である。
【図２２】実施形態による、計測分析システムによって受信されたデータストリームのデータの１分平均を示すデータストリーム言語プログラムの実行の結果を表示しているユーザインターフェースのスクリーンショットを示す図である。
【図２３】実施形態による、データセンターによってグループ化されたデータストリームの合計を示すデータストリーム言語プログラムの実行の結果を表示しているユーザインターフェースのスクリーンショットを示す図である。
【図２４】実施形態による、データセンターによってグループ化されたデータストリームに関する、キャッシュヒット率と、キャッシュヒット率およびミス率の合計との比率を決定するカスタマイズされたマクロブロックを含むデータストリーム言語プログラムの実行の結果を表示しているユーザインターフェースのスクリーンショットを示す図である。
【００１６】
次いで、いくつかの実施形態に対して詳細に参照が行われ、それらの実施形態の例が、添付の図において示されている。実用的である場合は常に、類似のまたは同様の参照番号が、図において使用されることが可能であり、類似のまたは同様の機能を示すことができるということが留意される。それらの図は、開示されているシステム（または方法）の実施形態を、例示のみの目的で示している。本明細書において示されている構造および方法の代替実施形態が、本明細書において記述されている原理から逸脱することなく採用されることが可能であるということを、当業者なら、以降の説明から容易に認識するであろう。
【発明を実施するための形態】
【００１７】
全体的なシステム環境
図１は、実施形態による、計測手段が組み込まれたソフトウェアに基づいて報告を行うための全体的なシステム環境を示している。この全体的なシステム環境は、計測分析システム１００、１つまたは複数の開発システム１２０、管理システム１６０、および報告システム１５０を含む。その他の実施形態においては、図１において示されているよりも多くのコンポーネントまたは少ないコンポーネントが使用されることが可能である。たとえば、開発システム１２０、管理システム１６０、および報告システム１５０は、ネットワーク（図１においては示されていない）を介して計測分析システム１００と対話することができる。さらに、図１において示されているそれぞれのシステムのさらに多くのインスタンスまたはさらに少ないインスタンスが存在することが可能であり、たとえば、複数の報告システム１５０が存在することが可能である。
【００１８】
図１およびその他の図は、同様の参照番号を使用して、同様の要素を識別している。参照番号の後の文字、たとえば「１３０ａ」は、そのテキストが、その特定の参照番号を有している要素を特に指しているということを示している。テキストにおいて後続の文字を伴わない参照番号、たとえば「１３０」は、図においてその参照番号を有している要素のうちのいずれかまたはすべてを指す（たとえば、テキストにおける「１３０」は、図における参照番号「１３０ａ」および／または「１３０ｂ」を指す）。
【００１９】
計測分析システム１００は、別々の開発システム１２０によって送信されたメトリックの値を含むデータを受信する（計測分析システム１００は、本明細書においては分析システムまたはデータ分析システムと呼ばれる場合もある）。開発システム１２０は、計測手段が組み込まれたソフトウェア、たとえば、アプリケーション１３０を実行する。アプリケーション１３０は、計測手段が組み込まれたソフトウェアの例として図１において示されているが、本明細書において開示されている技術は、アプリケーションソフトウェアに限定されず、その他の種類のソフトウェア、たとえば、サーバソフトウェアや、クライアントデバイス、ウェブサイトなどの上で実行するソフトウェアに適用可能である。さらに、開発システム１２０は、計測手段が組み込まれたソフトウェアを、それが新たなソフトウェアの開発のために使用されるか否かを問わずに実行するように構成されている任意のコンピューティングシステムを含む。たとえば、開発システム１２０は、テストの目的、ステージングの目的、または、企業において実行する任意のプロダクションシステムのために使用されるコンピューティングシステムであることが可能である。
【００２０】
開発システム１２０上で実行するソフトウェアは、ソフトウェアに計測手段を組み込んだ結果として生成された情報を計測分析システム１００へ送信するように構成されている。たとえば、アプリケーション１３０は、さまざまなメトリックに対応する値を、それらが生成された際に計測分析システム１００へ送信することができる。アプリケーション１３０は、メトリックのグループ値を送信すること、およびそれらを周期的に計測分析システム１００へ送信することが可能である。別々のアプリケーション１３０は、同じメトリックを、または別々の割合で別々のメトリックを送信することができる。同じアプリケーションは、別々の割合で別々のメトリックを送信することができる。アプリケーション１３０は、計測分析システム１００によってサポートされているアプリケーションプログラミングインターフェース（ＡＰＩ）を呼び出すことによって、計測分析システム１００へデータを送信する。
【００２１】
ソフトウェアプログラムは、アプリケーションにカウンタまたはゲージを加えるように計測手段が組み込まれることが可能である。カウンタは、ソフトウェアにおける特定のイベントの発生時にインクリメントされる値を格納する命令を含む。カウンタは、コードの特定の部分、たとえば、関数またはメソッド、条件付きコードの特定の分岐、例外、ループなどが実行される回数を決定するために使用されることが可能である。
【００２２】
典型的には、カウンタ値は単調に変わり、たとえば、カウンタ値は単調に増大（または減少）することが可能である。たとえば、システムが実行を開始して以降にイベントが発生した回数をカウンタが追跡把握する場合には、カウンタ値は、イベントの発生がシステムによって検知されるたびに増大する。カウンタの値どうしが比較されて、２つの異なる時点における特定のカウンタ値の変化を決定することが可能である。たとえば、時刻ｔ１とｔ２との間におけるタイムインターバル内に特定のイベントが発生する回数は、対応するカウンタ値におけるｔ１からｔ２への変化を計算することによって決定されることが可能である。カウンタの現在の値を計測分析システム１００へ送信するために、アプリケーション１３０によって計測分析システムのＡＰＩが呼び出されることが可能である。
【００２３】
下記は、アプリケーション１３０の計測手段が組み込まれたコードの例である。計測手段が組み込まれているコード内に含まれている下記の命令は、アクションまたはエンティティーのカウントを追跡把握するためのカウンタオブジェクトを作成する。
ｃｏｕｎｔｅｒ  １＝ｃｒｅａｔｅＣｏｕｎｔｅｒ（ｓｏｕｒｃｅ＝“ｗｅｂ  １”，  ｍｅｔｒｉｃ＝“ｍｅｔｒｉｃ  １”）；
【００２４】
上記の命令は、カウンタオブジェクトを作成し、それを変数ｃｏｕｎｔｅｒ  １に割り振る。そのカウンタオブジェクトは、ソース「ｗｅｂ  １」およびメトリック「ｍｅｔｒｉｃ  １」に関連付けられている。実施形態においては、ソースおよびメトリック値は、カウンタ（またはゲージ）に関連付けられているデータストリームを一意に識別する。その他の実施形態においては、データストリームを一意に識別するために、より多くのまたはより少ないキー値ペアが使用されることが可能である。
【００２５】
カウンタの作成中に指定された値のうちの１つまたは複数は、そのカウンタに対応するデータが、計測手段が組み込まれたコードによって計測分析システム１００へ送信されたときに受信される。実施形態は、それぞれのデータストリームとともに送信される情報の量を削減するためにアプリケーション１３０に計測手段が組み込まれることを可能にする。これは、コードに計測手段を組み込んだ結果としてアプリケーション１３０においてもたらされるオーバーヘッドの量を削減する。
【００２６】
アプリケーション１３０の計測手段が組み込まれたコードは、そのコード内のさまざまな場所でカウンタ値を更新するための命令を含むことができる。たとえば、ｃｏｕｎｔｅｒ  １というカウンタは、「ｃｏｕｎｔｅｒ  １  ．ｉｎｃｒｅｍｅｎｔ（）」という命令を実行することによってインクリメントされることが可能である。カウンタは、コードに関連付けられているさまざまなアクションまたはエンティティーを追跡把握するためにインクリメントされることが可能である。たとえば、カウンタは、特定の関数またはメソッドがコールされたときは常にインクリメントされることが可能であり、カウンタは、条件式の特定の分岐が実行されたときは常にインクリメントされることが可能であり、カウンタは、特定のタイプのオブジェクトが、たとえば、オブジェクトのコンストラクタにおいて作成されたときは常にインクリメントされることが可能である。カウンタのインクリメント命令は、条件付きで、たとえば、関数がパラメータの特定の組合せとともに呼び出された場合にコールされることが可能である。アプリケーション１３０は、計測分析システム１００のＡＰＩを呼び出すことによってカウンタ値を計測分析システム１００へ通信する。
【００２７】
ゲージは、アプリケーション１３０の特定のランタイム特徴、たとえば、ヒープサイズ、キャッシュミスまたはヒットの数、使用されているアクティブメモリ、ＣＰＵ（中央処理装置）利用状況、要求に応答するためにかかる合計時間、サービスに接続するためにかかる時間などを測定するための命令を含む。ゲージは、特定のアプリケーション固有パラメータまたはビジネス関連の値、たとえば、トランザクションの数、ユーザの数などを追跡把握するために使用されることも可能である。ゲージは、構成可能であるインターバルに基づいて周期的に呼び出されることが可能である。ゲージの値は、計測分析システム１００へ周期的に送信される。
【００２８】
管理システム１６０は、特権を有するユーザ、たとえば、システム管理者がデータストリームをメタデータに関連付けることを可能にする。管理システム１６０は、システム管理者がメタデータを指定するためのユーザインターフェースを提供する管理アプリケーション１７０を含む。メタデータは、プロパティー、たとえば名前／値ペアを含む。計測分析システム１００は、データストリームについて記述するメタデータを受信し、そのメタデータを格納する。データストリームについて記述するメタデータを、それぞれのデータストリームから受信されるデータから独立して指定できることは、データストリームに基づいてレポートを生成する際にいくつかの利点を提供する。
【００２９】
例として、計測分析システム１００は、それぞれのデータストリームについて記述するメタデータに対する修正を、アプリケーション１３０の計測手段が組み込まれたソフトウェアに対するいかなる修正も必要とせずに受信することができる。結果として、計測分析システム１００は、新たなレポートの仕様および既存のレポートに対する修正を受信し、開発者がアプリケーション１３０を修正することを必要とすることなく、新たなレポート／修正されたレポートに基づく結果を生成する。
【００３０】
これは、ソフトウェアに計測手段を組み込むための新たなパラダイムを提供する。なぜなら、開発者は、ソフトウェアに計測手段を組み込むための命令を加えている間に生成される必要があるレポートのタイプを考慮する必要がないからである。開発者は、自分のソフトウェアに単に計測手段を組み込んで、生データを生成し、それらの生データは、生成されるレポートにおいてさまざまな方法で組み合わされることが可能である。ソフトウェアの計測に基づいてリアルタイムの報告を行うためのシステムおよび方法は、２０１５年７月１５日に出願された特許文献１において記述されており、この特許文献１は、その全体が参照によって本明細書に組み込まれている。
【００３１】
さらに、計測手段が組み込まれたソフトウェアを生成することにおけるエキスパートである人は、ソフトウェア開発者とは異なることがある。たとえば、開発者ではないデータ分析におけるエキスパートは、開発プロセスに巻き込まれることなく、データストリームに関するメタデータを定義し、レポートを生成することができる。これは重要である。なぜなら、データを分析するために必要とされるスキルは、典型的には、ソフトウェアを開発するために必要とされるスキルとは異なるからである。
【００３２】
さらに、計測分析システム１００は、既存のレポートを合成して新たなアナリティクス機能を加えることによって既存のレポートの上に構築されたレポートを受信して処理することもできる。計測分析システム１００は、新たなレポートの結果を生成し、それらの結果を、計測手段が組み込まれたソフトウェアからのデータストリームを計測分析システム１００が受信した際にリアルタイムで提示するために送信する。計測分析システム１００は、アプリケーション１３０の計測手段が組み込まれたコードに対するいかなる修正も必要とすることなく、これらのさらなるレポートを生成し、既存のレポートを修正する。
【００３３】
さらに、計測分析システム１００は、データストリームについて記述するメタデータと、データストリームのデータとの分離を提供する。したがって、開発システム１２０から計測分析システム１００へ伝送される必要があるデータの量が削減される。それぞれのアプリケーション１３０は、メトリックのデータ値、およびメトリックを識別する情報のみを伝送する。メタデータ情報は、データストリームのデータソースから独立したソースから別個に受信される。したがって、それぞれのデータストリームのデータの量を増大させることなく、いかなる量のメタデータも導入されることが可能である。
【００３４】
報告システム１５０は、クライアントデバイスであることが可能である。報告システム１５０は、ユーザが計測分析システム１００と対話することを可能にするクライアントアプリケーション１４０を含む。実施形態においては、クライアントアプリケーション１４０は、インターネットブラウザであり、このインターネットブラウザは、計測分析システム１００にアクセスするためのクライアント側コード（たとえば、Ｊａｖａスクリプト）を含むことができる。その他の実施形態においては、クライアントアプリケーション１４０は、計測分析システム１００と対話するために開発されたプロプライエタリアプリケーションである。
【００３５】
報告システム１５０は、従来のコンピュータシステム（たとえば、デスクトップコンピュータもしくはラップトップコンピュータ）、タブレット、またはコンピュータ機能を有するデバイス、たとえば、携帯情報端末（ＰＤＡ）、モバイル電話、スマートフォン、または別の適切なデバイスであることが可能である。報告システム１５０は、ネットワークを介して計測分析システム１００と対話する。そのネットワークは、有線通信システムおよび／またはワイヤレス通信システムの両方を使用する、ローカルエリアネットワークおよび／またはワイドエリアネットワークの任意の組合せを含むことができる。一実施形態においては、そのネットワークは、標準的な通信テクノロジーおよび／またはプロトコルを使用する。
【００３６】
計測分析システム１００は、１つまたは複数のプロセッサと、メモリと、セカンダリーストレージと、入力／出力コントローラとを含むコンピューティングシステム上でホストされることが可能である。計測分析システム１００をホストするために使用されるコンピューティングシステムは典型的に、たとえば、報告システム１５０として使用される典型的なコンピューティングシステムと比較して、強力なプロセッサ、大きなメモリ、および高速の入力／出力システムを使用するサーバクラスシステムである。
【００３７】
実施形態においては、いくつかの開発システム１２０からのデータが、たとえば、サーバによって統合されることが可能であり、組み合わされたデータは、計測分析システム１００へ送信されることが可能である。たとえば、企業は、内部で別々の開発システム１２０からデータストリームを受信して組み合わされたデータをバッチ形態で計測分析システム１００へ周期的に送信するサーバをインストールすることができる。これは、企業からの外部通信の効率性を可能にする。しかしながら、この構成は、計測分析システム１００へ情報を通信する際の遅延と、報告システム１５０によってデータを報告する際の対応する遅延とをもたらす場合がある。
【００３８】
次元をデータストリームに関連付けること
データストリームは、データストリームに関連付けられている次元の値を表す座標のセットを使用することによって識別されることが可能である。次元とは、値のセットの１つの値を取ることができるデータストリームのプロパティーを指す。それぞれのデータストリームは、次元に関する値に関連付けられることが可能である。たとえば、次元は、データストリームのソース、またはデータストリームに関連付けられているメトリック名であることが可能である。データストリームのソースは、サーバ名、サービス名などによって識別されることが可能である。メトリック名の例は、ｃｐｕ（中央処理装置）負荷、キャッシュミス、キャッシュヒットなどである。次元の値は、データストリームの座標値とも呼ばれる。座標値は、メタデータストア２３０において格納されているメタデータ属性として表されることが可能である。ソースおよびメトリックという２つの次元を与えられると、ソースおよびメトリックを表す２つの座標、たとえば、（ｓｅｒｖｅｒ  １，  ｃｐｕ＿ｌｏａｄ）または（ｓｅｒｖｅｒ２，  ｍｅｍｏｒｙ＿ｕｓａｇｅ）を提供することによって、データストリームが識別されることが可能である。
【００３９】
データストリームは、複数の次元（すなわち、上述の２つの次元、すなわち、ソースおよびメトリック名よりも多く）によって特徴付けられることが可能である。たとえば、それぞれのサーバが複数のＣＰＵを有している場合には、ｃｐｕ＿ｉｄという次元が含まれることが可能である。したがって、システムから入手されるそれぞれのデータストリームは、（ｓｏｕｒｃｅ＿ｉｄ，  ｃｐｕ＿ｉｄ，  ｍｅｔｒｉｃ＿ｎａｍｅ）、すなわち、ソース識別子、ｃｐｕ識別子、およびメトリックを表す名前によって特徴付けられることが可能である。３つの座標を使用して識別されるデータストリームの例は、（ｓｅｒｖｅｒ  １，  ｃｐｕ  １，  ｌｏａｄ）、（ｓｅｒｖｅｒ  １，  ｃｐｕ２，  ｌｏａｄ）、（ｓｅｒｖｅｒ２，  ｃｐｕ  １，  ｌｏａｄ）、（ｓｅｒｖｅｒ２，  ｃｐｕ２，  ｌｏａｄ）などを含む。
【００４０】
次元の別の例として、システムは、顧客名を次元として定義することができる。顧客の名前は、計測手段が組み込まれたソフトウェアによって、たとえば、開発システム１２０上で実行する計測手段が組み込まれたソフトウェアの構成パラメータに基づいて報告されることが可能である。顧客名は、システムプロパティーを使用して、計測手段が組み込まれたソフトウェアに関して指定されることが可能である。計測手段が組み込まれたソフトウェアは、顧客名が、その特定の顧客に関連付けられているデータストリームを識別する場合には、それを含める。データストリームを顧客に関連付けることができることは、計測分析システムが、顧客に固有の分析を実行すること、たとえば、それぞれの顧客に関するシステムの使用について報告すること、しきい値数よりも多くのエラーを報告する顧客を識別することなどを可能にする。
【００４１】
データストリームは、計測手段が組み込まれたソフトウェアから入手されることが可能であり、または計測分析システム内のデータストリーム言語プログラムのブロックの実行の結果として生成されることが可能である。データストリームは、計測分析システムにおいて、たとえば、データストア（本明細書において記述されている時系列データストア２６０など）において格納されているデータを含むこともできる。
【００４２】
計測分析システムのシステムアーキテクチャー
図２は、実施形態による、計測手段が組み込まれたソフトウェアから受信されたデータストリームを処理するためのデータストリーム言語プログラムを実行するためのシステムのアーキテクチャーを示している。計測分析システム１００は、インターフェースモジュール２１０、量子化モジュール２４０、メタデータモジュール２２０、メタデータストア２３０、データポイントルーティングモジュール２５０、アナリティクスエンジン２７０、ユーザインターフェースマネージャー２８０、データストリーム言語プロセッサ２００、時系列データストア２６０、およびソフトウェアバス２９０を含む。その他の実施形態においては、計測分析システム１００は、本明細書において記述されていないその他のモジュールを含むことができる。特定のモジュールによって提供されるものとして示されている機能は、代わりにその他のモジュールによって実施されることが可能である。
【００４３】
インターフェースモジュール２１０は、計測分析システム１００と通信する外部システム、たとえば、開発システム１２０からの要求を受信する。インターフェースモジュール２１０は、外部システムが呼び出すことができるさまざまなアプリケーションプログラミングインターフェース（ＡＰＩ）をサポートする。インターフェースモジュール２１０は、さまざまなベンダーによって提供される機能を使用して計測手段が組み込まれるアプリケーション１３０によって提供されるデータを、計測手段が組み込まれたコードが、インターフェースモジュール２１０によって処理されることが可能であるフォーマットで情報を送信する限り、受信して処理することができる。
【００４４】
インターフェースモジュール２１０は、１つまたは複数の開発システム１２０からデータストリームの形態でデータを受信する。実施形態においては、インターフェースモジュール２１０は、データを受信し、着信データをタプルとして表す。したがって、それぞれのデータストリームは、複数のタプルとして表され、それぞれのタプルは、データポイントを表す。インターフェースモジュール２１０によって受信されるデータのタプルは、さまざまな要素を含む。データのタプルは、メトリック識別子、たとえば、そのタプルに対応するメトリックの名前、およびメトリックの値を含む。受信されるデータのタプルは、その他の要素、たとえば、そのデータを送信しているアプリケーション１３０によってそのデータが取り込まれた時刻に対応するタイムスタンプ、そのデータに関連付けられている１つまたは複数のプロパティーをさらに含むことができる。
【００４５】
実施形態においては、タプルに関連付けられているタイムスタンプは、データ値が計測分析システム１００によって受信された時刻を表す。データに関連付けられているプロパティーは、名前／値ペアの形態で提供されることが可能である。これらのプロパティーは、受信されたデータについて記述するさらなる情報、たとえば、ソースに関連付けられているホスト名、サーバ名、デバイス名、またはサービス名、データに関連付けられているメソッド名または関数名、アプリケーションインスタンス識別子等など、データのソースについて記述する情報を提供することができる。
【００４６】
実施形態においては、インターフェースモジュール２１０は、インターフェースモジュール２１０によって受信されたレコードに対して識別子を生成して割り振る。その識別子は、本明細書においては時系列識別子と呼ばれる（本明細書においてはＴＳＩＤまたはｔｓｉｄとも呼ばれる）。メトリック名にマッチするすべてのタプル、およびタプルとともに受信されたプロパティーのセットに対して、一意の時系列識別子が割り振られる。したがって、タプル（メトリック名、プロパティー、メトリック値、タイムスタンプ）が、タプル（ｔｓｉｄ、メトリック値、タイムスタンプ）にマップされる。たとえば、ｍｌというメトリック名、およびｈｉというホスト名をタプルが提供する場合には、ｍｌというメトリック名およびｈｉというホスト名を伴うすべてのタプルが、同じ時系列識別子を割り振られる。したがって、ｔｓｉｄは、計測分析システム１００によって受信されるデータストリームのすべてのタプルを一意に識別する。
【００４７】
量子化モジュール２４０は、受信されたデータ値を処理して、任意のタイムインターバルでデータが利用可能であるデータの入力時系列を、規則的なタイムインターバルでデータが利用可能である時系列に変換する。たとえば、入力時系列で受信されるデータ値は、不規則なインターバルで発生する場合があるが、量子化モジュール２４０は、その時系列のデータを処理して、周期的に、たとえば、１秒ごとに、または５秒ごとに、または１５秒ごとに、といった具合にデータが発生する時系列を生成する。このプロセスは、本明細書においては時系列の量子化と呼ばれる。実施形態においては、インターフェースモジュール２１０は、複数のスレッドまたはプロセスを作成し、それぞれのスレッドまたはプロセスは、データストリームに対応するデータを受信するように構成されている。それぞれのスレッドまたはプロセスは、それぞれのタイムインターバルに関してそれぞれのデータストリームについて受信されたデータの量子化を実行するために量子化モジュール２４０を呼び出す。計測手段が組み込まれたソフトウェアのデータストリームの量子化のためのシステムおよび方法は、２０１５年７月１５日に出願された特許文献２において記述されており、この特許文献２は、その全体が参照によって本明細書に組み込まれている。
【００４８】
メタデータモジュール２２０は、開発システム１２０から受信されたさまざまなデータストリームについて記述するメタデータ情報を受信して格納する。実施形態においては、メタデータモジュール２２０において格納されるメタデータは、ユーザ、たとえば、管理システム１６０を使用して計測分析システム１００と対話するシステム管理者から受信される。
【００４９】
メタデータは、名前／値ペアとして表されることが可能である。実施形態においては、メタデータは、メタデータオブジェクトとして表され、それぞれのオブジェクトは、名前／値ペアとして表されることが可能であるプロパティーのセットを定義する。データストリームのセットが、メタデータオブジェクトに関連付けられることが可能である。したがって、メタデータオブジェクトによって表されるすべてのプロパティーは、そのメタデータオブジェクトに関連付けられているそれぞれのデータストリームに関連付けられている。
【００５０】
メタデータデータストア２３０は、メタデータオブジェクト、およびそれらのメタデータオブジェクトとデータストリームとの関連付けを格納する。メタデータデータストア２３０は、それぞれのメタデータオブジェクトに関する識別子（ＩＤ）と、そのメタデータオブジェクトによって表されるプロパティーとを格納する。実施形態においては、それぞれのデータストリームは、そのデータストリームを一意に識別する時系列識別子に関連付けられている。メタデータデータストア２３０は、それぞれのメタデータオブジェクトを時系列識別子の値のセットにマップするインデックスを格納する。メタデータストア２３０は、メタデータオブジェクトを修正するための命令を受信することができる。たとえば、メタデータストア２３０は、メタデータオブジェクトによって表されるいくつかのプロパティーを修正、追加、または削除するための命令を受信することができる。あるいは、メタデータストア２３０は、メタデータオブジェクトからデータストリームへのマッピングを修正するための命令を受信することができる。たとえば、メタデータストア２３０は、データストリームをメタデータオブジェクトに関連付けるための命令、またはメタデータオブジェクトとデータストリームとの間における関連付けを削除するための命令を受信することができる。
【００５１】
実施形態においては、メタデータストア２３０は、リレーショナルデータベースとして表されているが、その他の任意のタイプのデータベースまたはデータストアとして表されることが可能である。たとえば、メタデータストア２３０は、メタデータオブジェクトＩＤを、データストリームを識別する時系列ＩＤにマップするテーブルを格納するリレーショナルデータベースであることが可能である。その他のデータベーステーブルは、それぞれのメタデータオブジェクトに関連付けられているプロパティーを、メタデータオブジェクトＩＤから、名前／値ペアとして表されるそれぞれのプロパティーへのマッピングとして格納することができる。
【００５２】
ユーザインターフェースマネージャー２８０は、ユーザがデータストリーム言語プログラムのパラメータを指定すること、およびデータストリーム言語プログラムの実行の結果を提示することを可能にするためのユーザインターフェースをレンダリングする。ユーザインターフェースマネージャー２８０は、データストリーム言語プログラムのリアルタイムの結果を、データストリームのデータが受信されるにつれて周期的に更新される１つまたは複数のチャートとして表示することができる。ユーザインターフェースマネージャー２８０はまた、ユーザがデータストリーム言語プログラムをテキストによってではなく視覚的に指定することを可能にするユーザインターフェースを提示する。ユーザインターフェースマネージャー２８０によって提示されるユーザインターフェースのスクリーンショットの例が、本明細書において記述されている。
【００５３】
時系列データストア２６０は、さまざまなソース、たとえば、開発システム１２０から受信されたデータを格納する。時系列データストア２６０は、本明細書においては時系列データベース（またはＴＳＤＢ）とも呼ばれる。実施形態においては、時系列データストア２６０はまた、データが量子化された後の時系列データを格納する。時系列データストア２６０は、それぞれの時系列に関するロールアップデータを格納することもできる。時系列データストア２６０はまた、さまざまなアナリティクス要求の結果、たとえば、ユーザによって要求されたさまざまなレポートの結果を格納する。アナリティクスエンジン２７０は、特定のレポートに関する結果、たとえば、時系列データストア２６０において格納されているデータを、さまざまなソースからのデータストリームとして入手された新たなデータと組み合わせることによる時間のインターバルにわたる移動平均を計算する。
【００５４】
ソフトウェアバス２９０は、計測分析システム１００のモジュールが、データストリームのデータを計測分析システム１００のその他のモジュールに提供するためのメカニズムを提供する。データストリーム言語プログラムは、データストリームをソフトウェアバス２９０へ送信することができる。その他のモジュール、たとえば、フェッチモジュール３２０、探索モジュール３１０、ウィンドウモジュール３８０などは、ソフトウェアバス２９０からのデータを読み取って、そのデータ上でさらなる処理を実行することができる。たとえば、ソフトウェアバス２９０上で発行されたデータストリーム言語プログラムのデータストリーム出力は、ジョブとして実行する別のデータストリーム言語プログラムのｆｉｎｄブロックによって識別されることが可能である。
【００５５】
データストリーム言語プロセッサ２００は、データストリーム言語を使用して指定されたプログラムを実行する。データストリーム言語プロセッサ２００は、データストリーム言語プログラムを受信し、そのデータストリーム言語プログラムを解析して、そのプログラムを検証する。データストリーム言語プロセッサ２００は、データストリーム言語プログラムの表示を生成し、その表示を使用してデータストリーム言語プログラムを実行する。
【００５６】
データストリーム言語を使用して指定される要求は、さまざまな開発システム１２０から受信されるデータに関連付けられているメタデータに基づくクエリーである。データストリーム言語は、さまざまなタイプのアナリティック機能、たとえば、アグリゲーションおよび変換をサポートする。データストリーム言語は、アグリゲーションおよび変換を含むさまざまな機能をさまざまな方法で合成する能力を提供する。実施形態においては、データストリーム言語プロセッサ２００は、データストリーム言語を使用して指定されたプログラムを解析し、そのプログラムの実行可能な表示を生成し、その生成された表示を実行する。
【００５７】
データストリーム言語
データストリーム言語を使用して指定されるプログラムは、ブロックと呼ばれる計算の単位を含む。それぞれのブロックは、データブロックによって実行される特定の処理または計算に関連付けられている。それぞれのブロックは、１つまたは複数の入力ポートおよび１つまたは複数の出力ポートを有することもできる。ブロックは、入力ポートを介して入力を受信し、そのデータを使用して特定の計算を実行し、その計算の結果を出力ポートへ送信する。このプロセスは、事前に指定された周期性で繰り返される。したがって、入力ポートは、データをブロックに提供するためのメカニズムの役割を果たし、出力ポートは、ブロックのデータを出力するためのメカニズムの役割を果たす。
【００５８】
実施形態においては、それぞれのブロックは、そのブロックのタイプに関連付けられている。ブロックのタイプは、そのブロックによって実行される計算を決定する。データストリーム言語によってサポートされるブロックのタイプは、ｆｉｎｄブロック、ｆｅｔｃｈブロック、統計計算ブロック、ｔｈｒｅｓｈｏｌｄブロックなどを含む。ブロックは、特定の構成パラメータに関連付けられることが可能である。たとえば、ｆｉｎｄブロックは、入力としての表現を取ることができる。データストリーム言語プログラムは、ブロックのタイプのインスタンスを含む。たとえば、特定の検索式を伴うｆｉｎｄブロックは、データストリーム言語プログラム内に含まれているｆｉｎｄブロックのインスタンスである。
【００５９】
実施形態においては、ブロックの入力ポートは、「？」という文字で識別され、出力ポートは、「！」という文字で識別される。その他の実施形態は、その他のシンタックスを使用して入力／出力ポートを識別することができる。たとえば、ブロックＢｌが入力ポートｉｎ１およびｉｎ２を有している場合には、特定の入力ポート（たとえばｉｎ２）は、「Ｂ１？ｉｎ２」として識別されることが可能である。同様に、ブロックＢ１が出力ポートｏｕｔ１およびｏｕｔ２を有している場合には、特定の出力ポート（たとえばｏｕｔ２）は、「Ｂ２！ｏｕｔ２」として指定されることが可能である。ブロックが単一の入力／出力ポートを有している場合には、データストリーム言語プログラムは、そのポートを識別することができない。たとえば、ブロックＢ２が単一の入力ポートを有している場合には、その入力ポートは、「Ｂ２」と呼ばれることが可能である。同様に、ブロックＢ２が単一の出力ポートを有している場合には、その出力ポートは、「Ｂ２」と呼ばれることが可能である。
【００６０】
２つのブロックは、一方のブロックの出力が他方のブロックの入力として提供されるということを指定することによって接続されることが可能である。したがって、データストリーム言語プログラムは、ブロックのネットワークとみなされることが可能である。実施形態においては、２つのブロックの間における接続は、それらの２つのブロックの間における矢印を使用して指定される。たとえば、Ｂ１およびＢ２の両方が、単一の入力ポートおよび単一の入力ポートを有している場合には、「Ｂ１→Ｂ２」は、Ｂ１の出力がブロックＢ２の入力として提供されるということを指定する。同様に、Ｂ１が、２つの出力ポートｏｕｔ１およびｏｕｔ２を有していて、Ｂ２が、２つの入力ポートｉ１およびｉｎ２を有している場合には、「Ｂ１！ｏｕｔ１→Ｂ２？ｉｎ２」という表現によって、Ｂ１のｏｕｔ１ポートがＢ２のｉｎ２ポートに接続されることが可能である。
【００６１】
データストリーム言語プロセッサ２００は、データストリーム言語プログラムに基づいて複数のジョブを実行することができる。それぞれのジョブは、開始時刻、終了時刻、および周期性に関連付けられることが可能である。したがって、ジョブは、周期性によって指定されたインターバルで開始時刻から終了時刻まで実行される。周期性は、データがデータストリーム言語プログラムによって処理される割合を指定する。ユーザは、同じデータストリーム言語プログラムに基づいて実行のための別々のジョブを指定することができ、それぞれのジョブは、別々の開始時刻、終了時刻、および周期性に関連付けられている。
【００６２】
図３は、実施形態による、データストリーム言語プログラムのブロックを処理するためのデータストリーム言語プロセッサのアーキテクチャーを示している。図３において示されているように、データストリーム言語プロセッサ２００は、データストリーム言語のさまざまなタイプのブロックを処理するためのモジュールを含む。したがって、データストリーム言語プロセッサ２００は、探索モジュール３１０、フェッチモジュール３２０、計算モジュール３３０、しきい値モジュール３４０、発行モジュール３５０、グループ化モジュール３６０、ウィンドウモジュール３８０、データストリームメタデータジェネレータ３７０、およびカスタマイズドブロックモジュール３９０を含む。その他の実施形態は、図３において示されているモジュールよりも多くのモジュールまたは少ないモジュールを含むことができる。特定のモジュール、たとえばパーサは、図３においては示されていない。それぞれのモジュールの詳細は、それぞれのモジュールによって処理されるブロックのタイプの詳細とともに本明細書においてさらに記述されている。
【００６３】
探索モジュール３１０は、データストリーム言語プログラムの残りによって処理するためのデータストリームのセットを識別するためにｆｉｎｄブロックを実行する。フェッチモジュール３２０は、識別されたデータストリームからデータをフェッチし、そのデータを、データストリーム言語プログラムの後続のブロックによって処理するために提供する。計算モジュール３３０は、データストリーム言語プログラムにおいて指定されている統計計算、たとえば、平均、メジアン、合計などを実行する。しきい値モジュール３４０は、着信データストリームのデータをしきい値と比較して、その着信データが特定の範囲を超過しているかどうかを決定する。比較のために指定されるしきい値は、動的に変わることが可能であり、たとえば、しきい値は、特定の係数によって拡大された入力データストリームの１時間移動平均として指定されることが可能である。発行モジュール３５０は、ｐｕｂｌｉｓｈブロックを実行し、このｐｕｂｌｉｓｈブロックは、このｐｕｂｌｉｓｈブロックに先立つブロックの出力を、結果を提示するために、データベースにおいて格納するために、またはさらなる処理のためにその他のブロックに提供するために、ユーザインターフェース（たとえば、ダッシュボード）を含むさまざまな受信機に提供する。グループ化モジュール３６０は、入力データストリームのデータのグループ化を実行して、それぞれのグループに対応する結果データストリームのセットを生成する。それらのグループは、グループ化コマンドを用いて指定された１つまたは複数の属性、たとえば、それぞれのデータセンターからのデータストリームのグループに基づくことが可能である。データストリームメタデータジェネレータ３７０は、データストリーム言語プログラムを実行した結果として生成された結果データストリームを表すメタデータを生成し、計測分析システム１００のその他のコンポーネントがその結果データストリームを使用することを可能にするためにそのメタデータをメタデータストア２３０において格納する。カスタマイズドブロックモジュール３９０は、ユーザによって定義されたブロック（カスタマイズされたブロック）をデータストリーム言語プログラムにおいて処理する。
【００６４】
例示的なデータストリーム言語プログラム
図４は、実施形態による、データストリーム言語の特徴を示すためのデータストリーム言語プログラムの例を示している。図４は、データストリーム言語プログラムをブロックという点から表している。図４において示されているデータストリーム言語プログラムは、下記のように指定されることが可能である。
ｆｉｎｄ（“ｓｏｕｒｃｅ：ａｎａｌｙｔｉｃｓ*”）→ｆｅｔｃｈ
→ｇｒｏｕｐｂｙ（“ｄａｔａｃｅｎｔｅｒ”）
→ｓｔａｔｓ！ｍｅａｎ
→ｐｕｂｌｉｓｈ
【００６５】
上述のデータストリーム言語プログラムの第１のブロックは、検索式を指定するストリングパラメータを取るｆｉｎｄブロック４１０である。ｆｉｎｄブロックは、検索式を満たす、計測分析システム１００によって受信されたデータストリームのセットを見つけ出す。たとえば、ｆｉｎｄブロック４１０は、「ｄｅｖ」というメタデータ属性値の「ｓｏｕｒｃｅ」となるすべてのデータストリームを識別する検索式“ｓｏｕｒｃｅ：ｄｅｖ”を取る。たとえば、企業が、すべての開発システムを「ｄｅｖ」というソース値に関連付ける場合がある。ｆｉｎｄブロックの出力は、入力としてｆｅｔｃｈブロック４２０へ提供される。
【００６６】
ｆｅｔｃｈブロック４２０は、ｆｉｎｄブロックによって識別されたデータストリームからデータを取り出す。ｆｅｔｃｈブロックは、事前に指定された周期性でデータを受信する。ｆｅｔｃｈブロックは、インターフェースモジュール２１０によって受信されて量子化モジュール２４０によって量子化されたデータストリームのリアルタイムデータを受信することができる。ｆｅｔｃｈブロック４２０は、時系列データストア２６０において格納されているデータストリームのデータを受信することもできる。ｆｅｔｃｈブロック４２０の出力は、入力としてｇｒｏｕｐｂｙブロック４３０へ提供される。
【００６７】
ｇｒｏｕｐｂｙブロック４３０は、入力としてデータストリームの１つまたは複数の属性の名前を取る。ｇｒｏｕｐｂｙブロック４３０は、指定された属性によってデータストリームをグループ化する。上述の例において示されているように、ｇｒｏｕｐｂｙブロック４３０は、入力として「ｄａｔａｃｅｎｔｅｒ」という属性を取り、データストリームをそれらのデータセンター値によってグループ化する。したがって、同じデータセンターを有しているすべてのデータストリームのデータは、ともにグループ化される。ｇｒｏｕｐｂｙブロック４３０は、データセンターのそれぞれの値に対応するデータストリームを出力する。ｇｒｏｕｐｂｙブロック４３０の出力は、入力としてｓｔａｔｓブロック４４０（これは、統計計算ブロックのタイプである）へ提供される。
【００６８】
ｓｔａｔｓブロック４４０は、複数の出力、たとえば、平均、メジアン、合計などを有する。それぞれの出力ポートは、出力の名前によって指定された計算のタイプに基づく値を提供する。ｓｔａｔｓブロック４４０は、ｇｒｏｕｐｂｙブロック４３０からの入力として受信されたデータストリームのそれぞれのグループに関する平均値を計算する。したがって、ｓｔａｔｓブロック４４０は、それぞれのデータセンターのデータストリームから受信されたデータの平均を決定する。図４において示されているように、ｓｔａｔｓブロックの平均出力ポートは、ｐｕｂｌｉｓｈブロック４５０への入力を提供する。
【００６９】
ｐｕｂｌｉｓｈブロック４５０は、受信された入力をダッシュボード上に発行するように構成されることが可能である。ｐｕｂｌｉｓｈブロックは、データをソフトウェアバス２９０上に発行するように構成されることが可能である。ソフトウェアバス２９０は、そのデータを計測分析システム１００のその他のすべての他のモジュールに提供する。データストリーム言語プロセッサ２００は、上で指定されたさまざまなブロックを、データストリーム言語プログラムに関して指定された周期性で実行する。
【００７０】
データストリーム言語プログラムの実行の全体的なプロセス
図５は、実施形態による、データストリームから受信されたデータをデータストリーム言語プログラムに基づいて処理するための計測分析システムの全体的なプロセスを示している。メタデータモジュール２２０は、データストリームについて記述するメタデータを５１０で受信する。メタデータ定義は、データストリームそのもののデータから独立して受信される。たとえば、データストリームは、いかなるプロパティー（たとえば、名前／値ペア）も提供することなく、データ値と、そのデータ値に関連付けられているタイムスタンプとを含むタプルを単に提供することができる。メタデータモジュール２２０は、データストリームについて記述するプロパティーを、そのデータストリームを提供しているソースとは異なるソースから受信する。たとえば、データストリームは、開発システム１２０上で実行している計測手段が組み込まれたソフトウェアのインスタンスによって提供され、メタデータ定義は、管理システム１６０を介してシステム管理者によって提供されることが可能である。
【００７１】
アナリティクスエンジン２７０は、データストリームについて記述するメタデータ属性を使用してデータストリーム言語プログラムを５２０で受信する。データストリーム言語プログラムは、計測手段が組み込まれたソフトウェアについて記述するレポートを生成するために、およびリアルタイムで、すなわち、データストリームのデータが受信されるにつれて結果を提供するために計測分析システム１００に提供される命令のセットに相当することが可能である。
【００７２】
計測分析システム１００は、さまざまな開発システム１２０から計測分析システム１００によってさまざまなデータストリームのデータが受信されるにつれて下記のステップを繰り返す。インターフェースモジュール２１０は、さまざまなデータストリームのデータを５３０で受信する。実施形態においては、インターフェースモジュール２１０は、固定された時間のインターバル、たとえば、１秒または数秒にわたって待ち、さまざまなデータストリームから受信されたデータを収集する。実施形態においては、量子化モジュール２４０は、それぞれのタイムインターバルに関してそれぞれの着信データストリームについてデータの量子化を実行する。したがって、それぞれのデータストリームからのデータは、そのタイムインターバルに関するデータストリームに関連付けられている単一の値へとアグリゲートされる。
【００７３】
アナリティクスエンジン２７０は、タイムインターバルに関するデータストリームのデータに基づいてデータストリーム言語プログラムを５４０で実行する。それぞれのデータストリームに関してデータが量子化された場合には、アナリティクスエンジン２７０は、それぞれのデータストリームからの量子化された値を使用してデータストリーム言語プログラムを５４０で実行する。データストリーム言語プログラムは、たとえば、ユーザインターフェースに提示するためにデータストリーム言語プログラムの評価の結果を送信することをアナリティクスエンジン２７０に行わせるｐｕｂｌｉｓｈブロックを含むことができる。
【００７４】
データストリーム言語プログラムは、１つまたは複数のデータストリームを生成することができる。アナリティクスエンジン２７０はまた、データストリーム言語プログラムの評価の結果として生成されたデータストリームを、たとえば、時系列データストア２６０において格納する。アナリティクスエンジン２７０は、データストリーム言語プログラムの結果を表す１つまたは複数の新たなデータストリーム（または時系列）を作成する。それらの新たなデータストリームは、時系列データストア２６０において格納される。これは、そのデータストリーム言語プログラムの結果がその他のデータストリーム言語プログラムへの入力として使用されることを可能にする。たとえば、データストリーム言語プログラムが、複数のデータストリームから受信された値の９５番目のパーセンタイルを表すデータを生成する場合がある。このデータストリーム言語プログラムの結果は、新たなデータストリームとして時系列データストア２６０において格納されることが可能である。アナリティクスエンジン２７０は、生成されたデータストリームに基づいて移動平均値を計算する別のデータストリーム言語プログラムをさらに実行することができる。
【００７５】
量子化
入力データストリームの量子化は、量子化されたデータストリームを使用してデータの処理を簡略化する。たとえば、それぞれのタイムインターバルに関して、受信された複数のデータストリームに基づくアグリゲート値が決定されることが可能である。これは、特定のタイムインターバルに関して複数のデータストリームにわたってデータをさらにアグリゲートすることによって実行される。実施形態においては、入力データストリームの量子化は、それぞれのタイムインターバルの終わりに実行され、それによって、そのタイムインターバルに関する量子化されたデータが、処理に利用できるようになる。
【００７６】
さらに、計測分析システム１００は、個々のデータストリームに関する量子化されたデータを格納し、それによって、複数のデータストリームにわたるデータが、さまざまな方法で、たとえば、要求において指定されているように組み合わされることが可能になる。言い換えれば、ユーザは、複数のデータストリームにわたるデータを第１の様式で組み合わせる第１の要求を送信することができる。その後、そのユーザは、別のデータストリームにわたるデータを別の様式で組み合わせることを求める新たな要求を送信することができる。たとえば、ユーザは、データストリームにわたるデータを組み合わせて、さまざまなデータセンターにわたって計算されたアグリゲートを見ることができる。しかしながら、その後、ユーザは、別々のタイプのアプリケーション、別々のタイプのサーバ、別々の地理的領域などにわたって計算されたアグリゲートを見るために要求を変更することができる。
【００７７】
計測分析システム１００は、前のデータストリームがアグリゲートされたデータストリームのセットをユーザが修正する要求を受信することもできる。たとえば、ユーザは、アグリゲートされているデータストリームのセットから１つまたは複数のデータストリームを除去するよう計測分析システム１００に要求し、訂正されたセットに基づいてアグリゲートを要求することができる。ユーザは、サーバ、アプリケーションを除去すること、もしくは新たに追加すること、またはシステム構成に対してその他の任意の修正を行うことの影響を分析するために、そのような要求を送信することができる。計測分析システム１００は、量子化されたデータストリームのデータを保持し、これらの要求に基づいて、別々のタイムインターバルに関する量子化されたデータストリームデータを組み合わせる。計測分析システム１００は、量子化されたデータストリームデータを格納しているので、計測分析システム１００は、必要に応じてデータストリームにわたってデータを効率よく組み合わせる能力を有している。
【００７８】
計測分析システム１００は、データストリームにわたってデータを組み合わせて、複数のデータストリームにわたって移動アグリゲート計算を実行することができる。計測分析システム１００は、所与の長さのタイムインターバルにわたる任意の移動アグリゲート値、たとえば、１時間移動平均、１５分移動平均などを継続的に計算することができる。
【００７９】
量子化モジュール２４０は、それぞれのタイムインターバルに関して入力データストリームの値をアグリゲートし、タイムインターバルに関するアグリゲート値を生成する。したがって、量子化モジュール２４０は、任意のタイムインターバルの後にデータ値が発生する可能性があるデータストリームを受信する。量子化モジュール２４０は、入力データストリームを処理して、規則的なタイムインターバルでデータが利用可能であるデータストリームを生成する。量子化モジュール２４０の詳細は、本明細書においてさらに記述されている。
【００８０】
量子化モジュール２４０は、データストリームにおいて受信された値のタイプ、たとえば、その値が特定のアクションまたはエンティティーのカウントであるかどうか、その値が特定の値のアグリゲーションによって入手されたかどうか、その値が値の所与のセットの最大／最小値に相当するかどうかなどについて記述する情報を受信する。データストリームの値のタイプは、その値を入手するために実行されたオペレーションのタイプについて記述する。量子化モジュール２４０は、データストリームの値のさまざまなタイプから、インターバルに関するデータストリームの入力値上で、そのタイムインターバルを代表する結果値を入手するために実行されたオペレーションのタイプへのマッピングを格納する。
【００８１】
実施形態においては、量子化モジュール２４０は、特定のタイムインターバルに関する入力として受信されるデータ値を格納するためのバッファを含む。量子化モジュール２４０のバッファは、任意の数の値を格納することができるデータ構造を使用する。なぜなら、タイムインターバルにおいて受信される値の数は、事前にはわからず、タイムインターバルごとに変わる可能性があるからである。たとえば、量子化モジュール２４０は、入力データストリームの値を格納するためにリストデータ構造またはスタックデータ構造を使用することができる。
【００８２】
量子化モジュール２４０は、それぞれのタイムインターバルに関して受信されたデータストリームのデータ値を収集する。量子化モジュール２４０は、時間を追跡把握する。現在のタイムインターバルの終わりが到達されているということを量子化モジュール２４０が決定した場合には、量子化モジュール２４０は、そのタイムインターバルにおいて受信されたすべてのデータ値を処理して、そのタイムインターバルを代表するアグリゲート値を決定する。量子化モジュール２４０は、その後、入力値を表すために使用されたバッファをクリアし、それを、次のタイムインターバルに関する値を格納するために使用する。実施形態においては、量子化モジュール２４０は、複数のバッファを使用し、それによって、バッファにおいて格納されている前のタイムインターバルのデータが処理されている間に、次のタイムインターバルに関する新たなデータが別のバッファにおいて格納されることが可能である。
【００８３】
図６は、実施形態による、計測手段が組み込まれたソフトウェアから受信されたデータストリームの量子化のプロセスを示している。図６は、時間軸６２０ａおよび６２０ｂを示しており、それぞれは、一連のデータ値を伴うタイムラインを表している。時間軸６２０ａは、入力データストリーム６００のデータ値を示しており、時間軸６２０ｂは、量子化モジュール２４０によって生成された量子化されたデータストリーム６１０の値を示している。
【００８４】
図６において示されているように、４つのデータ値Ｄ１１、Ｄ１２、Ｄ１３、およびＤ１４が、タイムインターバルＩ１（時刻Ｔ０からＴ１を表している）において受信されており、２つのデータ値Ｄ２１およびＤ２２が、タイムインターバルＩ２（時刻Ｔ１からＴ２を表している）において受信されており、３つのデータ値Ｄ３１、Ｄ３２、およびＤ３３が、タイムインターバルＩ３（時刻Ｔ２からＴ３を表している）において受信されている。ＴｍとＴｎとの間におけるそれぞれのタイムインターバルは、開始時点Ｔｍを含むと想定されることが可能である（それによって、終了時点Ｔｎは、次のタイムインターバルに含まれる）。ＴｍとＴｎとの間におけるタイムインターバルのその他の任意の解釈が使用されることが可能であり、たとえば、終了時点Ｔｎがそのタイムインターバルに含まれることが可能であり、開始時点Ｔｍが前のタイムインターバルに含まれることが可能である。
【００８５】
量子化モジュール２４０は、それぞれのタイムインターバルのデータ値を処理して、時間軸６２０ｂにおいて示されている対応する結果値を生成する。たとえば、量子化モジュール２４０は、タイムインターバルＩ１において受信された値Ｄ１１、Ｄ１２、Ｄ１３、およびＤ１４をアグリゲートして、時間軸６２０ｂにおいて示されている値Ｄ１を生成し、量子化モジュール２４０は、タイムインターバルＩ２において受信された値Ｄ２１およびＤ２２をアグリゲートして、時間軸６２０ｂにおいて示されている値Ｄ２を生成し、量子化モジュール２４０は、タイムインターバルＩ３において受信された値Ｄ３１、Ｄ３２、およびＤ３３をアグリゲートして、時間軸６２０ｂにおいて示されている値Ｄ３を生成する。
【００８６】
データストリームの入力値をアグリゲートするために実行されるオペレーションのタイプは、入力データストリームによって表されるデータのタイプに依存する。入力データストリームのそれぞれのタプルが、特定の値のカウント、たとえば、ソフトウェアによって実行されたアクションのカウントである場合には、量子化モジュール２４０は、入力値をアグリゲートして、カウントを足し合わせることによって、それぞれのタイムインターバルに関する出力データストリーム値を決定する。受信された入力データストリームのそれぞれのタプルが、値のセットの最小（または最大）である場合には、量子化モジュール２４０は、タイムインターバルに関する入力値をアグリゲートして、そのタイムインターバルに関する入力値の最小（または最大）を決定することによって、そのタイムインターバルに関する出力値を決定する。受信された入力データストリームのそれぞれのタプルが、値のセットの平均である場合には、量子化モジュール２４０は、そのタイムインターバルに関連付けられている入力値をアグリゲートして、そのタイムインターバルの入力値の平均を決定することによって、それぞれのタイムインターバルに関する出力データストリーム値を決定する。受信された入力データストリームのそれぞれのタプルが、その時点でのメトリックの最後の利用可能な値である場合には、量子化モジュール２４０は、タイムインターバルに関する入力値をアグリゲートして、そのデータストリームの最後の値を単に使用することによって、そのタイムインターバルに関する出力値を決定する。
【００８７】
メトリックデータストリームおよびイベントデータストリーム
実施形態においては、計測分析システム１００は、メトリックデータストリームおよびイベントデータストリームという２つのタイプのデータストリームをサポートする。イベントは、典型的には、システムにおいて発生している例外的な状況、たとえば、特定のしきい値を超過している負荷、または特定のしきい値を超過しているメモリ使用状況を指す。イベントは、システムにおいて、たとえば、開発システム１２０のシステム管理者によって実行される特定のアクションを指す場合もある。メトリックデータストリームは、計測手段が組み込まれたソフトウェアから入手されること、または計測手段が組み込まれたソフトウェアから入手されたメトリックデータストリームから得られることが可能であるメトリックの値を表すデータを含む。本明細書において言及されるデータストリームは、別段の記載がない限り、メトリックデータストリームである。メトリックデータストリームは、メトリック時系列とも呼ばれ、イベントデータストリームは、イベント時系列とも呼ばれる。
【００８８】
メトリックデータストリームは、データストリーム識別子と、タイムスタンプ値と、データ値とを使用して表されるデータポイントを含む。データストリーム識別子は、データポイントが属するデータストリームを識別する。タイムスタンプ値は、データポイントを時刻、たとえば、そのデータポイントが報告された時刻、またはそのデータポイントが計測分析システム１００によって受信された時刻に関連付ける。データ値は、報告されているメトリックの値、たとえば、特定の時刻のサーバにおけるＣＰＵ負荷を表す値、または特定の時刻のサーバにおけるメモリ使用状況の測定値である。メトリック時系列は、典型的には、大量のデータを計測分析システムに提供し、たとえば、それぞれのデータストリームは、毎秒いくつかのデータポイントを報告することができ、それぞれの企業に関して多数のデータストリームが存在する場合がある。
【００８９】
イベントデータストリームは、データストリーム識別子と、タイムスタンプ値と、イベントについて記述する１つまたは複数のキー値ペアとを使用して表されるデータポイントを含む。イベントデータストリームのデータストリーム識別子およびタイムスタンプ値は、メトリックデータストリームと同様である。しかしながら、イベントは典型的に、メトリックデータストリームのデータポイントと比較して、より少ない頻度で発生する。たとえば、イベントは、メンテナンスウィンドウを始動することなど、システム管理者によって実行されるアクションに相当することが可能である。イベントのキー値ペアは、イベントについて記述する。たとえば、メンテナンスウィンドウを開始したシステム管理者の名前、メンテナンスウィンドウの目的、メンテナンスウィンドウの範囲などである。イベントは典型的に、不規則な割合で発生し、たとえば、イベントは、いくつかのシステムによっては報告されるがその他のシステムによっては報告されない場合があり、イベントは、一度発生する場合があり、多大な時間にわたって発生しない場合がある、といった具合である。結果として、イベントとともに格納される情報の量は多くなる可能性がある。
【００９０】
イベントは、システムにおいて発生する特定の具体的な状況、たとえば、特定の特徴を表示する特定のメトリックについて記述する場合もある。例として、イベントは、サーバのｃｐｕ負荷またはメモリ使用状況が特定のしきい値を超過している場合に報告されることが可能である。これらのイベントは、データストリーム言語プログラムの実行の結果として計測分析システム１００によって生成される。
【００９１】
計測分析システム１００は、データを処理するという点でイベント時系列をメトリック時系列と同じように扱う。たとえば、計測分析システム１００は、データストリームのいずれかのタイプに基づいて情報のリアルタイムの報告を可能にする。計測分析システム１００は、イベントデータストリームがメトリックデータストリームと比較されることを可能にして、ユーザがそれら２つを相関付けることを可能にする。たとえば、メトリックデータストリームを、イベントが生成された際のメトリック値を示すイベントデータストリームとオーバーレイするレポートが生成されることが可能である。
【００９２】
データストリーム言語プログラムに関するデータストリームの動的な選択
ｆｉｎｄブロックは、データストリーム言語プログラムに関して入力されるデータストリームの動的な選択を可能にする。ｆｉｎｄブロックは、データストリームを識別するための検索条件を指定する。実施形態においては、検索条件は、データストリームについて記述する属性（またはメタデータタグ）に基づく表現である。これらの属性は、データストリームの一部として受信されて、または、たとえば計測分析システム１００に加えられるメタデータとして、データストリームに関連付けられて、メタデータストア２３０において格納されることが可能である。検索条件を実行することによって識別されたデータストリームは、入力としてデータストリーム言語プログラムの後続のブロックへ提供される。
【００９３】
データストリーム言語プロセッサ２００は、周期的にｆｉｎｄブロックの検索条件を評価し、それによって、データストリーム言語プログラムへの入力として提供されるデータストリームのセットを再評価することができる。結果として、データストリーム言語プログラムへの入力として提供されるデータストリームのセットは、動的に変更される。たとえば、開発システム１２０は、新たなサーバを加えること、サービスを開始もしくは停止すること、または既存のサービスを再構成することが可能である。さらに、新たな開発システム１２０は、データストリームを計測分析システム１００へ送信することができる。結果として、計測分析システム１００によって受信されるデータストリームのセットは、動的に変わる。
【００９４】
ｆｉｎｄブロックの検索条件は、データストリームの特徴に基づいてデータストリームのセットを識別するために使用されることが可能である。たとえば、検索条件は、特定のデータセンターに属しているサービス、特定のアプリケーションに対応するサービス、複数のデータセンターにわたって分散している場合がある組織に関連付けられているサービス、ソフトウェアの特定のバージョン（たとえばオペレーティングシステム、または特定のパッチを有しているアプリケーション）を稼働させるサービスを識別するために使用されることが可能である。ｆｉｎｄブロックに関して指定される検索条件のタイプは、データストリームに関して定義されてメタデータストア２３０において格納されるメタデータタグのタイプに依存する。
【００９５】
ｆｉｎｄブロックの検索条件は、開発システムなどの外部システムから受信されたすべてのデータストリーム、ならびに計測分析システム１００内で生成されたデータストリームにわたって、たとえばデータストリーム言語プログラムの中間結果または最終結果として、評価される。たとえば、本明細書において記述されているように、データストリーム言語プログラムの中間結果または最終結果は、開発システム１２０から受信されたデータストリームと同じに扱われる第一級市民として表される。したがって、ｆｉｎｄブロックの検索条件が評価される場合には、結果は、開発システム１２０から受信されたデータストリーム、ならびに計測分析システム１００内の内部で生成されたデータストリームを含むことができる。
【００９６】
下記は、ｆｉｎｄブロックに関して指定される検索条件の若干の例である。ユーザが、アナリティクスサーバ上の負荷を知りたいと望んでおり、それらのアナリティクスサーバは、ａｎａｌｙｔｉｃ１、ａｎａｌｙｔｉｃ２、ａｎａｌｙｔｉｃ３、．．．、およびａｎａｌｙｔｉｃＮと名付けられていると想定していただきたい。アナリティクスサーバのこのセットは、「ａｎａｌｙｔｉｃ*」という正規表現を満たすメタデータタグ値を伴うすべてのデータストリームとして検索条件を指定するｆｉｎｄ（“ｓｏｕｒｃｅ：ａｎａｌｙｔｉｃ*”）というｆｉｎｄブロックを使用することによって識別されることが可能である。
【００９７】
検索条件は、論理式であることが可能である。たとえば、ｆｉｎｄ（“ｓｏｕｒｃｅ：ｄａｔａｂａｎｋ*  ＡＮＤ  ｍｅｔｒｉｃ：ｎｕｍＣａｃｈｅＨｉｔｓ”）というｆｉｎｄブロックは、「ｄａｔａｂａｎｋ*」という形式のソース属性と、ｎｕｍＣａｃｈｅＨｉｔｓというメトリック名とを有しているすべてのデータストリームを見つけ出す。したがって、このｆｉｎｄブロックを伴うデータストリーム言語プログラムは、「ｄａｔａｂａｎｋ*」として識別されたソースからｎｕｍＣａｃｈｅＨｉｔｓというメトリックを提供しているすべてのデータストリームに関して評価される。同様に、ｆｉｎｄ（“ｓｏｕｒｃｅ：ｄａｔａｂａｎｋ*  ＡＮＤ  ｍｅｔｒｉｃ：ｎｕｍＣａｃｈｅＭｉｓｓｅｓ”）というｆｉｎｄブロックは、「ｄａｔａｂａｎｋ*」として識別されたソースからｎｕｍＣａｃｈｅＭｉｓｓｅｓというメトリックを提供しているすべてのデータストリームを見つけ出す。別の例として、ｆｉｎｄ（“ｓｏｕｒｃｅ：ｚｋ*  ＡＮＤ  ｓｍｅｔｒｉｃ：ｃｐｕ  ＡＮＤ  ｒｅｇｉｏｎ：ｏｒｅ１”）というｆｉｎｄブロックは、「ｃｐｕ」というメトリックを有している「ｏｒｅ１」という領域から、「ｚｋ*」という形式のソース名を有しているすべてのデータストリームを見つけ出す。
【００９８】
ｆｉｎｄブロックは、開始時刻、停止時刻、および周期性のうちの１つまたは複数を指定する構成パラメータに関連付けられることが可能である。ｆｉｎｄブロックの周期性は、そのｆｉｎｄブロックが属するデータストリーム言語プログラムのジョブの周期性とは異なる場合がある。これがそうであるのは、データストリームのセットが変わる割合が、データがデータストリーム言語プログラムを通じて移動してほしいとユーザが望む割合とは異なる場合があるからである。たとえば、データストリームのセットが頻繁には変わらないということをユーザが決定する場合があり、検索ストリングが１時間に１回ほど評価される場合があり、その一方でジョブの周期性は１分である。したがってユーザは、ｆｉｎｄブロックおよびデータストリーム言語プログラムに関する周期性の別々の値を指定する場合がある。
【００９９】
実施形態においては、ｆｉｎｄブロックの評価は、固定された周期性には基づかず、計測分析システム１００において発生する特定のイベントによってトリガーされる。たとえば、ｆｉｎｄブロックの評価は、メタデータにおけるいかなる更新によってもトリガーされる。メタデータにおける更新は、ｆｉｎｄブロックの結果を変化させて、そのｆｉｎｄブロックに基づいて入力データストリームの別のセットがデータストリーム言語プログラムによって処理されるという結果をもたらすことが可能である。実施形態においては、計測分析システム１００は、ｆｉｎｄブロックをメタデータの特定の部分に関連付ける。実施形態においては、ｆｉｎｄブロックが特定のメタデータ属性に基づく場合には、それらのメタデータ属性に関連付けられているいかなる変化も、ｆｉｎｄブロックの実行をトリガーする。たとえば、ｆｉｎｄブロックが、「ｘｙｚ」という領域からのすべてのデータストリームに関して真であると評価した場合には、データストリームの評価は、「ｘｙｚ」という領域に対するデータストリームのいかなる追加または削除によってもトリガーされる。その他の領域に対するデータストリームの追加または削除は、ｆｉｎｄブロックの実行をトリガーすることはできない。計測分析システム１００は、それぞれのｆｉｎｄブロックに関連付けられているメタデータ属性のセットを分析および識別する。計測分析システム１００は、ｆｉｎｄブロックに関連付けられているメタデータ属性のセットに関連付けられているメタデータにおける変化が発生しているかどうかを検知する。ｆｉｎｄブロックに関連付けられているメタデータ属性のセットに関連付けられているメタデータにおける変化が発生しているということを計測分析システム１００が検知した場合には、計測分析システム１００は、そのｆｉｎｄブロックを再評価する。実施形態においては、計測分析システム１００は、データストリームに関連付けられているプロパティーが変わったということを検知した場合には、ｆｉｎｄブロックを再評価する。実施形態においては、ｆｉｎｄブロックは、ｆｉｎｄブロックの定義が修正された場合に再評価される。
【０１００】
実施形態においては、ｆｉｎｄブロックは、データストリームにおける変化があった場合に再評価される。たとえば、新たなデータストリームが計測分析システム１００によって検知された場合、またはデータストリームが非アクティブであるということを計測分析システム１００が決定した場合には、計測分析システム１００は、ｆｉｎｄブロックを再評価する。生成されるデータストリームは、開発システム１２０などの外部システムから受信されるデータストリームであることが可能であり、またはデータストリームは、データストリーム言語プログラムの中間結果または最終結果によって生成されることが可能である。たとえば、本明細書において記述されているように、データストリーム言語プログラムの中間結果または最終結果は、開発システム１２０から受信されたデータストリームと同じに扱われる第一級市民として表される。したがって、これらのデータストリームのメタデータの追加、削除、または修正も、ｆｉｎｄブロックが再評価されることをもたらす。
【０１０１】
図７は、実施形態による、データストリーム言語プログラムへの入力を提供するためのｆｉｎｄブロックによるデータストリームのセットの選択を示している。図７において示されているように、ｆｉｎｄブロック７１０ａは、「ｄａｔａｃｅｎｔｅｒ：ｅａｓｔ*」という検索ストリングによって指定された検索条件を有している。データストリーム言語プロセッサ２００の探索モジュール３１０は、「ｄａｔａｃｅｎｔｅｒ」というメタデータタグ（または属性）が「ｅａｓｔ*」という正規表現を満たしているすべてのデータストリームを識別する。
【０１０２】
図７は、ｃｅｎｔｒａｌ＿ｄｅｖ、ｅａｓｔ＿ｄｅｖ、ｅａｓｔ＿ｑａ、ｗｅｓｔ＿ｄｅｖ、およびｎｏｒｔｈ＿ｄｅｖというデータセンタータグ値を有しているデータストリームを含む、計測分析システム１００によって受信されたデータストリームのセット７４０ａを示している。探索モジュール３１０は、ｅａｓｔ＿ｄｅｖおよびｅａｓｔ＿ｑａというデータセンタータグ値を伴うデータストリームがｆｉｎｄブロック７１０ａの検索条件を満たしているということを決定する。探索モジュール３１０は、識別されたデータストリームのセット７５０ａをデータストリーム言語プログラムの後続のブロック７３０ａに提供する。
【０１０３】
データストリーム言語プログラムの残りへの入力として提供されるデータストリームのセットは、ｆｉｎｄブロック７１０に関連付けられている検索条件に依存する。たとえば、ｆｉｎｄブロック７１０ｂは、ｆｉｎｄブロック７１０ａの検索条件とは異なる「ｄａｔａｃｅｎｔｅｒ：*ｄｅｖ」という検索条件を有する。データストリーム言語プロセッサ２００の探索モジュール３１０は、「ｄａｔａｃｅｎｔｅｒ」というメタデータタグ（または属性）が「*ｄｅｖ」という正規表現を満たしているすべてのデータストリームを識別することによってｆｉｎｄブロック７１０ｂの検索条件を処理する。
【０１０４】
図７は、ｃｅｎｔｒａｌ＿ｄｅｖ、ｅａｓｔ＿ｄｅｖ、ｅａｓｔ＿ｑａ、ｗｅｓｔ＿ｄｅｖ、およびｎｏｒｔｈ＿ｄｅｖというデータセンタータグ値を有しているデータストリームを含む、計測分析システム１００によって受信されたデータストリームのセット７４０ｂを示している。この例においては、セット７４０ｂは、セット７４０ａと同じ要素を有している。探索モジュール３１０は、ｃｅｎｔｒａｌ＿ｄｅｖ、ｅａｓｔ＿ｄｅｖ、ｗｅｓｔ＿ｄｅｖ、およびｎｏｒｔｈ＿ｄｅｖというデータセンタータグ値を伴うデータストリームがｆｉｎｄブロックの検索条件を満たしているということを決定する。探索モジュール３１０は、識別されたデータストリームのセット７５０ｂをデータストリーム言語プログラムの後続のブロック７３０ｂに提供する。
【０１０５】
図７は、データストリーム言語プログラムによって処理されるデータストリームのセットをデータストリーム言語プロセッサ２００によって動的に決定することを示している。データストリーム言語によって処理されるデータストリームのセットは、ｆｉｎｄブロック７１０の検索条件と、計測分析システム１００によって受信される現在利用可能なデータストリームとに基づいて決定される。
【０１０６】
実施形態においては、ｆｉｎｄブロックは、スケジュールに関連付けられており、それによって、データストリーム言語プロセッサ２００の探索モジュール３１０は、そのスケジュールに従ってｆｉｎｄブロックを実行する。たとえば、ｆｉｎｄブロックは、周期性に関連付けられることが可能であり、それによって探索モジュール３１０は、その周期性に基づいて決定された割合でｆｉｎｄブロックを実行する。したがって探索モジュール３１０は、その周期性に基づくタイムインターバルにわたって待ち、ｆｉｎｄブロックの検索条件を満たすデータストリームのセットを再評価する。このプロセスは、（時間が、ｆｉｎｄブロックに関連付けられている「終了時刻」の値に達するまで）繰り返される。
【０１０７】
図８は、実施形態による、ｆｉｎｄブロックの周期的な再評価の結果としてのデータストリーム言語プログラムへの入力を提供するデータストリームのセットに対する動的な変化を示している。図８において示されているように、ｆｉｎｄブロックの検索条件は、時刻Ｔ１において、そして再び時刻Ｔ２において評価され、その結果、データストリームの別々のセット８５０が、データストリーム言語プログラムによって処理するために識別される。図８は、２つの異なる時点でｆｉｎｄブロックを再実行することを示している。
【０１０８】
時刻Ｔ１において、計測分析システム１００は、ｃｅｎｔｒａｌ＿ｄｅｖ、ｅａｓｔ＿ｄｅｖ、ｅａｓｔ＿ｑａ、ｗｅｓｔ＿ｄｅｖ、およびｎｏｒｔｈ＿ｄｅｖというデータセンタータグ値を伴うデータストリームのセット８４０ａを受信する（同じデータセンタータグ値を伴う複数のデータストリームが存在することが可能であるということに留意されたい）。探索モジュール３１０は、「ｄａｔａｃｅｎｔｅｒ：ｅａｓｔ*」という検索条件を伴うｆｉｎｄブロック８１０ａを評価する。したがって、探索モジュール３１０は、ｅａｓｔ＿ｄｅｖおよびｅａｓｔ＿ｑａというデータセンタータグ値を伴うデータストリームのセット８５０ａを識別する。データストリーム言語プロセッサ２００は、識別されたデータストリームのセット８５０ａをデータストリーム言語プログラムの後続のブロック８３０ａに提供する。
【０１０９】
探索モジュール３１０は、時刻Ｔ２においてｆｉｎｄブロックを再評価する。時刻Ｔ２において、計測分析システム１００は、ｃｅｎｔｒａｌ＿ｄｅｖ、ｅａｓｔ＿ｄｅｖ、ｅａｓｔ＿ｐｒｏｄ、ｗｅｓｔ＿ｄｅｖ、およびｎｏｒｔｈ＿ｄｅｖというデータセンタータグ値を伴うデータストリームのセット８４０ａを受信する。したがって探索モジュール３１０は、ｅａｓｔ＿ｐｒｏｄおよびｅａｓｔ＿ｑａというデータセンタータグ値を伴うデータストリームのセット８５０ｂを識別する。
【０１１０】
時刻Ｔ１において識別されたセット８５０ａと比較して、セット８５０ｂは、ｅａｓｔ＿ｐｒｏｄというデータセンタータグを伴う新たなデータストリームを含み、ｅａｓｔ＿ｑａというデータセンタータグを伴うデータストリームが欠如している。データストリーム言語プロセッサ２００は、識別されたデータストリームのセット８５０ａをデータストリーム言語プログラムの後続のブロック８３０ａに提供する。したがって、探索モジュールの同じ検索条件に基づくデータストリームのセット８５０のそれぞれの後続の評価は、データストリームの別のセットが後続のブロック８３０に提供されるという結果をもたらす場合がある。
【０１１１】
データストリーム言語プログラムによって処理されるデータストリームのセットを動的に変更できることは、計測分析システムへの入力を提供する動的に変わる環境にデータストリーム言語プログラムが適合することを可能にする。たとえば、企業は、データセンターに対してサーバを追加／除去すること、新たなデータセンターを追加すること、サービスを追加／除去／修正すること、サービスを変更して、計測手段が組み込まれたソフトウェアをさまざまな方法で実行することなどが可能である。データストリーム言語プログラムによって処理されるデータストリームのセットを指定できることは、企業が動的に変わるにつれて、それについて記述するデータを計測分析システムが報告することを、データストリーム言語プログラムを修正する必要を伴わずに可能にする。
【０１１２】
図９は、実施形態による、ｆｉｎｄブロックを使用してデータストリーム言語プログラムへの入力を提供するためのデータストリームのセットを識別するためのプロセスを示している。図９において示されているように、データストリーム言語プロセッサ２００は、処理のためのデータストリーム言語プログラムを９００で受信する。図９において示されているプロセスは、そのデータストリーム言語プログラムがｆｉｎｄブロックを有していて、その後に、残りのデータストリーム言語プログラムに対応するブロックのセットが続くという想定に基づいている。
【０１１３】
ｆｉｎｄブロックは、検索ストリングに関連付けられている。探索モジュール３１０は、ｆｉｎｄブロックに関連付けられている検索ストリングを９１０で受信する。探索モジュール３１０は、検索ストリングを９２０で解析して、その検索ストリングに対応する検索条件の表示、たとえば、解析木表示を構築する。探索モジュール３１０は、検索条件に対応するデータストリームのセットを９３０で識別する。探索モジュール３１０は、識別されたデータストリームのセットをデータストリーム言語プログラムの後続のブロック、たとえば、ｆｅｔｃｈブロックに提供する。データストリーム言語プロセッサ２００は、検索条件に基づいて９３０で識別されたデータストリームからデータを取り出し、残りのデータストリーム言語プログラムを９４０で実行する。
【０１１４】
検索条件に基づいてデータストリームのセットを９３０で識別するステップ、およびデータストリーム言語プログラムの残りのブロックを９４０で実行するステップは、データストリーム言語プロセッサ２００によって繰り返し実行される。ステップ９３０および９４０が繰り返される割合は異なる場合がある。たとえば、データストリームのセットを９３０で識別するステップは、データストリーム言語プログラムの残りのブロックが実行される割合と比較して、より遅い割合で実行される場合がある。データストリーム言語プログラムの残りのブロックの９４０での実行の割合、およびｆｉｎｄブロックの実行の割合は、データストリーム言語プログラムに対応するジョブに関して（たとえば、ユーザによって）指定される。
【０１１５】
データストリーム言語プログラムに関してデータストリームからデータを取り出すこと
実施形態においては、データストリーム言語プログラムは、データストリームの所与のセットからデータを取り出すためのｆｅｔｃｈブロックを含む。典型的には、ｆｅｔｃｈブロックは、データストリーム言語プログラムのデータパイプラインにおいてｆｉｎｄブロックの後に配置される。言い換えれば、ｆｉｎｄブロックの出力は、入力としてｆｅｔｃｈブロックへ提供される。したがってｆｅｔｃｈブロックは、ｆｉｎｄブロックを処理した結果として探索モジュール３１０によって識別されたデータストリームのセットからデータを取り出す。フェッチモジュール３２０は、ｆｅｔｃｈブロックを実行する。
【０１１６】
図１０は、実施形態による、ｆｅｔｃｈブロックを実行することによってデータストリームからデータを取り出すプロセスを示している。図１０において示されている特定のステップは、図１０において示されている順序とは異なる順序で実行されることが可能である。さらにステップは、本明細書において示されているモジュールとは異なるモジュールによって実行されることが可能である。
【０１１７】
データストリーム言語プロセッサ２００は、データストリーム言語プログラムに基づくジョブの実行の開始時刻、終了時刻、および周期性を受信する。フェッチモジュール３２０は、データストリーム言語プログラムのｆｉｎｄブロックの検索条件に基づいて探索モジュール３１０からデータストリームのセットを受信する。フェッチモジュールは、データを取り出し、それを実行用としてデータストリーム言語プログラムの後続のブロックに提供する。フェッチモジュール３２０は、それぞれの後続のタイムインターバルに関してデータストリームからデータをフェッチするために下記のステップを実行する。
【０１１８】
フェッチモジュール３２０は、次のタイムインターバルを識別し、そのタイムインターバル中にデータが届くのを待つ。量子化モジュールは、それぞれの入力データストリームのデータに基づいて別々の周期性を有する複数の量子化されたデータストリームを生成する。たとえば、量子化されたデータストリームＱ１が、５秒の周期性で生成されることが可能であり、別の量子化されたデータストリームＱ２が、１０秒の周期性で生成されることが可能であり、別の量子化されたデータストリームＱ３が、１分の周期性で生成されることが可能である、といった具合である。フェッチモジュール３２０は、（データストリーム言語プログラムの周期性に基づいて決定された）データストリーム言語プログラムが実行される周期的なタイムインターバルよりも小さい最大の周期的なタイムインターバルを有する量子化されたデータストリームを１０２０で選択する。
【０１１９】
たとえば、データストリーム言語プログラムが実行される必要があるタイムインターバルのサイズが、データストリーム言語プログラムの周期性に基づいて３０秒である場合には、フェッチモジュール３２０は、１０秒の周期性を有する量子化されたデータストリームＱ２を選択する。量子化されたデータストリームＱ３は選択されない。なぜなら、それは、データストリーム言語プログラムの時間周期的なタイムインターバル（すなわち、３０秒）よりも大きい１分（すなわち、６０秒）の周期的なタイムインターバルを有するからである。量子化されたデータストリームＱ３は選択されない。なぜなら、それは、データストリーム言語プログラムの周期的なタイムインターバルよりも小さい最大の周期的なタイムインターバルではない５秒の周期的なタイムインターバルを有するからである（それは、１０秒であるＱ２の周期的なタイムインターバルよりも小さいからである）。フェッチモジュール３２０は、（たとえば、現在の３０秒のタイムインターバルにおいて発生する量子化されたデータストリームの３つのデータポイントのデータ値をアグリゲートすることによって、）選択された量子化されたデータストリームを再量子化して、周期性３０秒の再量子化されたデータストリームを生成する。
【０１２０】
フェッチモジュール３２０は、時系列データストア２６０からデータを、データストリームから受信されているリアルタイムデータと組み合わせる必要がある場合に、１０５０で取り出す。フェッチモジュールは、その組み合わされたデータを後続のブロック、たとえば、統計計算ブロックに１０６０で提供する。たとえば、データストリーム言語プログラムがスクリーンに出力を発行し、ジョブの開始時刻がマイナス（たとえば、−１時間）と示されていると想定していただきたい。データは、チャートとして提示されることが可能であり、そのチャートは、受信された時点でのデータ、ならびに選択されたタイムインターバルに関する過去のデータを提示する。たとえば、ユーザは、チャート上にデータを提示するための１時間の時間ウィンドウを選択することができる。この状況においては、チャートが、データストリームにおいて受信されたリアルタイムデータに基づいてのみレンダリングされた場合には、計測分析システム１００がデータストリーム言語プログラムを処理し始めた時点で、そのチャートは空であろう。表示されるチャートは、右からゆっくりと満ち始めて、表示されているウィンドウを１時間後に満たすであろう。これは、理想的ではないユーザ経験を提示する。理想的には、ユーザは、最初からチャートが表示されている１時間にわたって完全なチャートを（その１時間のデータとともに）見たいものである。
【０１２１】
フェッチモジュール３２０は、データストリームからのリアルタイムデータが利用可能になる時点の前に発生するチャートの部分をレンダリングするために時系列データストア２６０からデータを１０５０で取り出すことによって、上述の状況を改善する。たとえば、計測分析システム１００がデータストリーム言語プログラムを処理し始めたときに、フェッチモジュール３２０は、時系列データストア２６０から入手されたデータを使用してチャート全体をレンダリングするためにデータを提示する。ますます多くのデータがデータストリームから受信されるにつれて、フェッチモジュール３２０は、時系列データストア２６０からのデータを、受信されたリアルタイムデータと組み合わせる。
【０１２２】
例として、１０分後に、フェッチモジュール３２０は、データストリームから受信された１０分間のデータと組み合わされた、時系列データストア２６０から取り出された５０分間のデータを提示用として送信する。同様に、３０分後に、フェッチモジュール３２０は、データストリームから受信された３０分間のデータと組み合わされた、時系列データストア２６０から取り出された３０分間のデータを提示用として送信する、といった具合である。データストリームの６０分間よりも多くのデータが受信された後に、フェッチモジュール３２０は、データストリームから受信されたデータに基づいてチャートをレンダリングするためのすべてのデータをそれが送信することができるデータストリームに基づいて十分なデータを有しており、データストリームからのデータを、時系列データストア２６０の以前に格納されたデータと組み合わせる必要はない。
【０１２３】
フェッチモジュール３２０は、その他の状況において、たとえば、ｗｉｎｄｏｗブロックに関して、データストリームから受信されたデータと組み合わせるために時系列データストア２６０からデータを１０５０で取り出すことができる。ｗｉｎｄｏｗブロックは、指定された長さ（たとえばｔｗ）のスライディング時間ウィンドウを提供し、そのウィンドウのデータ（たとえば平均値）の計算を実行して、１時間の時間ウィンドウにわたる移動平均を決定する。この状況においては、時間ｔｗの初期化待ち時間がある。なぜなら、データストリームからのデータは、ウィンドウ全体を満たすのに時間ｔｗのピリオドにわたって利用可能でないからである。したがって、データストリーム言語プログラムが時刻ｔ１において開始した場合には、時刻ｔ１〜ｔｗから開始するデータが時系列データストア２６０からフェッチされてウィンドウを満たして、ウィンドウ計算のための有意なデータを提供する。任意の時刻ｔ０＞ｔ１において（その一方で、ｔ０〜ｔ１はｔｗ未満である）、フェッチモジュール３２０は、長さｔ０〜ｔ１のウィンドウの終わりの部分を、データストリームから受信されたリアルタイムデータで満たし、そのウィンドウの最初の部分（すなわち、残りの部分）を、時系列データストア２６０から取り出されたデータで満たす。
【０１２４】
データストリーム言語プログラムが、複数のウィンドウの計算を含む場合には、フェッチモジュール３２０は、時系列データストア２６０からのデータ（必要な場合）と、データストリームから受信されたリアルタイムデータとを組み合わせることによって、フェッチされる必要がある最大ウィンドウのサイズのデータを保持する。最大ウィンドウのために保持されるデータは、より小さなウィンドウのためのデータを含む。
【０１２５】
図１１Ａ〜図１１Ｃは、実施形態による、移動ウィンドウ計算のために時系列データストアからのデータと、データストリームからリアルタイムで受信されるデータとを組み合わせるプロセスを示している。移動ウィンドウの長さはＴｗであると想定される。例示的な計算は、データストリームのセットのデータにわたるアグリゲーション、たとえば、データストリームのそのセットにわたる移動ウィンドウ中に受信されたデータに基づく平均値またはパーセンタイル計算である。移動ウィンドウとは、シフトし続ける時間ウィンドウである。言い換えれば、移動ウィンドウのサイズは一定のままだが、ウィンドウは時間とともに進み続ける。
【０１２６】
ウィンドウ内で発生するデータポイントの数は、時間とともに変わる場合がある。処理されるデータストリームの数も、ウィンドウが進むにつれて、たとえば、新たなデータストリームの導入に起因して、またはデータストリームについて記述するメタデータに対する修正に起因して変わる場合がある。たとえば、移動ウィンドウが、「ｅａｓｔ」というデータセンターからのすべてのデータストリームにわたるデータの平均値を計算している場合には、時間とともに、「ｅａｓｔ」というデータセンターがサービスを開始／停止したならば、新たなサーバを導入したならば、またはデータストリームについて記述するメタデータが、特定のデータストリームとの間で「ｄａｔａｃｅｎｔｅｒ＝ｅａｓｔ」というタグを追加／除去するように修正されたならば、データストリームの数が変わる場合がある。データストリーム言語プロセッサ２００は、データストリームのセットを、そしてまた、ウィンドウ内で発生するデータポイントのセットを周期的に再評価し、選択されたデータストリームからのデータポイントに関して指定されたアグリゲート値を計算する。
【０１２７】
図１１Ａは、ウィンドウ計算が開始されたときにそのウィンドウの全データが時系列データストア２６０から取り出されることが可能であるシナリオを示している。図１１Ｂは、いくらかの時間（それは、そのウィンドウの長さである時間Ｔｗ未満である）の後に、フェッチモジュール３２０が、時系列データストア２６０からのデータを、データストリームから受信されたリアルタイムデータと組み合わせるということを示している。図１１Ｃは、ウィンドウの長さＴｗよりも長い時間の後には、フェッチモジュール３２０が、時系列データストア２６０からデータを取り出す必要がなく、データストリームから入手されたリアルタイムデータでウィンドウ全体を満たすことができるということを示している。
【０１２８】
図１１Ａにおいて示されているように、Ｔ２は、現在の時刻を示しており、サイズＴｗのウィンドウを与えられると、時刻Ｔ１は、時点Ｔ２−Ｔｗに相当する。ウィンドウ計算が時刻Ｔ２において開始すると想定していただきたい。したがって、このウィンドウは、Ｔ１〜Ｔ２という時間範囲内にある。この時点でデータストリームから受信されたデータはない。ウィンドウ全体のためのデータは、時系列データストア２６０から取り出される。
【０１２９】
図１１Ｂは、いくらかの時間の後に、現在の時刻がＴ４によって表されており、ウィンドウが時間範囲Ｔ３〜Ｔ４へ進んでいるということを示している。リアルタイムデータが収集され、時間範囲Ｔ２〜Ｔ４に関するウィンドウ計算において使用されている。なぜなら、時刻Ｔ２以降にリアルタイムデータが収集されたからである。時間範囲Ｔ３〜Ｔ２に関して、フェッチモジュール３２０は、時系列データストア２６０からのデータを依然として使用している。図１１Ｂにおいて示されているシナリオは、時間範囲Ｔ４〜Ｔ２がＴｗ未満であるすべての時間に関して（言い換えれば、ウィンドウのサイズ未満であるＴ２以降のすべての時間に関して）当てはまる。
【０１３０】
図１１Ｃは、ウィンドウの長さ以上の時間に関するシナリオを示している。言い換えれば、Ｔ５が現在の時刻である場合には、図１１Ｃは、Ｔ５−Ｔ２がウィンドウの長さＴｗ以上であるようなすべての時間Ｔ５に関して当てはまる。これらのシナリオにおいては、フェッチモジュール３２０は、データストリームから十分なリアルタイムデータを蓄積しているので、フェッチモジュール３２０は、時系列データストア２６０からデータを取り出さない。言い換えれば、ウィンドウ計算は、データストリームからリアルタイムで受信されたすべてのデータを使用して実行される。
【０１３１】
図１１Ａ〜図１１Ｃにおいて記述されているシナリオはまた、チャートを使用して（たとえば、ダッシュボードを介して）データを提示することに関して当てはまる。時系列データストア２６０からのデータは、時間が進むにつれてチャートがゆっくりと満ちるのを示すことを回避する目的でチャートの最初の部分を満たすために使用される。時系列データストア２６０からのデータでチャートを満たすことができることは、よりよいユーザ経験を提供する。なぜなら、ユーザは、ユーザによって選択された時間ウィンドウ全体に関するチャートを提示されるからである。
【０１３２】
データストリームをグループ化すること
図１２は、実施形態による、データストリームのデータをグループ化して結果データストリームのセットを生成するためのプロセスを示している。グループ化ステートメントが、たとえば図４において示されているようにｇｒｏｕｐｂｙブロックを使用して、データストリーム言語プログラムに含まれることが可能である。データストリーム言語プログラムのグループ化ステートメントは、データストリームについて記述する１つまたは複数のメタデータ属性を指定する。ｇｒｏｕｐｂｙブロックは、データストリームのそれぞれのグループに関して実行されるアグリゲート計算に関連付けられている。
【０１３３】
グループ化モジュール３６０は、データストリームについて記述する１つまたは複数の属性を１２１０で受信する。その属性は、データストリームのデータとともに受信される属性（たとえば、ソース名およびメトリック名）、またはメタデータモジュール２２０によってデータストリームに関連付けられていてメタデータストア２３０において格納されているメタデータタグであることが可能である。グループ化モジュール３６０はまた、データストリームのそれぞれのグループに関して実行されることになる特定の計算、たとえば、データストリームのデータに基づいてアグリゲート値を決定する計算を受信する。
【０１３４】
データストリーム言語プロセッサ２００（およびそのコンポーネントモジュール）は、データストリーム言語プログラムを実行するジョブに関して指定された周期性に基づいてそれぞれのタイムインターバルに関して下記の計算を実行する。グループ化モジュール３６０は、グループ化コマンドに関連付けられている１つまたは複数の属性の値のそれぞれの個別のセットに対応するデータストリームのグループを１２２０で識別する。たとえば、グループ化コマンドを用いて指定された属性が「ｄａｔａｃｅｎｔｅｒ」という属性である場合には、グループ化モジュール３６０は、データストリームのセットを識別し、それぞれのセットは、「ｄａｔａｃｅｎｔｅｒ」タグの個別の値を有している。
【０１３５】
グループ化モジュール３６０は、識別されたデータストリームのそれぞれのセット（またはグループ）に関して下記の計算を実行する。グループ化モジュール３６０は、その特定のタイムインターバルに関するセットのそれぞれのデータストリームに対応するデータを１２３０で受信する。グループ化モジュール３６０は、それぞれのグループのデータストリームからのデータに関するアグリゲート計算の値を１２４０で決定する。たとえば、グループ化が「ｄａｔａｃｅｎｔｅｒ」という属性に基づいており、指定された計算が平均である場合には、グループ化モジュール３６０は、所与のタイムインターバルに関して入手された特定のデータセンターに関するすべてのデータストリームのデータの平均を１２４０で決定する。グループ化モジュール３６０は、それぞれのグループに関する計算の結果をデータストリーム言語プログラムの後続のブロックへ１２５０で出力する。
【０１３６】
図１２において示されているプロセスにおいて記述されているように、グループ化ステートメント（すなわち、ｇｒｏｕｐｂｙブロック）は、入力としてデータストリームのセットを取り、結果データストリームのセットを生成する。グループ化ステートメントは、複数のメタデータ属性によってグループ化を行うことを指定することができる。生成される結果データストリームの数は、入力セット内に少なくとも１つのデータストリームが存在するグループ化属性の個別の属性値の数に等しい。言い換えれば、グループ化属性の値のそれぞれの個別の値の組合せを伴う属性を有するデータストリームが入力内に存在する場合には、個別の値のその組合せに関してデータストリームが生成される。
【０１３７】
図１３Ａ〜図１３Ｂは、実施形態による、データストリームを、それらのデータストリームについて記述するさまざまなメタデータ属性に基づいてグループ化することを示す例示的なシナリオを示している。図１３Ａは、「ｄｃ」という属性（データセンターを表している）に基づいてデータストリームのセットをグループ化することを示している。データストリームの入力セット１３４０ａは、ｄｃ＝ｅａｓｔおよびｍｅｔｒｉｃ＝ｃｐｕＬｏａｄという属性を伴うデータストリームと、ｄｃ＝ｗｅｓｔおよびｍｅｔｒｉｃ＝ｃｐｕＬｏａｄを伴うデータストリームと、ｄｃ＝ｎｏｒｔｈおよびｍｅｔｒｉｃ＝ｃｐｕＬｏａｄを伴うデータストリームと、ｄｃ＝ｗｅｓｔおよびｍｅｔｒｉｃ＝ｃａｃｈｅＭｉｓｓｅｓを伴うデータストリームと、ｄｃ＝ｎｏｒｔｈおよびｍｅｔｒｉｃ＝ｃａｃｈｅＭｉｓｓｅｓを伴うデータストリームとを含む。グループ化モジュール３６０は、ｄｃという属性に関する同じ属性値を有している入力セット１３４０ａからのデータストリームを収集するためにｇｒｏｕｐｂｙ（“ｄｃ”）を指定するグループ化ブロック１３１０ａを処理する。入力セット１３４０ａは、ｄｃ＝ｅａｓｔを伴う１つのデータストリームと、ｄｃ＝ｗｅｓｔを伴う２つのデータストリームと、ｄｃ＝ｎｏｒｔｈを伴う２つのデータストリームとを含む。
【０１３８】
実施形態においては、グループ化モジュール３６０は、値のその組合せを有している入力データストリームがない場合には、属性によるグループの個別の値を無視する。したがって、グループ化モジュール３６０は、これらの属性値に対応するいかなる結果データストリームも生成しない。たとえば、ｄｃという属性が、その他の可能な値、たとえば「ｎｏｒｔｈ−ｅａｓｔ」、「ｓｏｕｔｈ−ｗｅｓｔ」などを有することができ、かつ、これらの属性値を有している入力データストリームがない場合には、グループ化モジュール３６０は、メタデータ属性のこれらの個別の値に対応するいかなる結果データストリームも生成しない。
【０１３９】
したがって、図１３において示されているように、グループ化モジュール３６０は、ｄｃ＝ｅａｓｔに対応する第１の結果データストリーム、ｄｃ＝ｗｅｓｔに対応する第２の結果データストリーム、およびｄｃ＝ｎｏｒｔｈに対応する第３のデータストリームという３つの結果データストリームを生成する。それぞれの結果データストリームは、ｇｒｏｕｐ  ｂｙブロックが実行される周期性（これは、データストリーム言語プログラムが実行される周期性である）で入力データストリームの対応するグループからのデータをアグリゲートすることによって生成されたデータ値を含む。
【０１４０】
グループ化モジュール３６０は、ｇｒｏｕｐｂｙブロックがグループ化のための別の属性を指定した場合には、結果データストリームの別のセットを生成することができる。たとえば、図１３Ｂは、「ｍｅｔｒｉｃ」という属性に基づくデータストリームのグループ化を示している。入力セット１３４０ｂは、セット１３４０ａと同じデータストリームを有する。入力データストリームは、３つのデータストリームをグループ化して、ｍｅｔｒｉｃ＝ｃｐｕＬｏａｄに対応する結果データストリームと、ｍｅｔｒｉｃ＝ｃａｃｈｅＭｉｓｓｅｓに対応する別の結果データストリームとを生成する。
【０１４１】
図１４は、実施形態による、時間に伴う入力データストリームにおける変化の結果としてｇｒｏｕｐｂｙブロックによって生成される結果データストリームの動的な変化を示す例示的なシナリオを示している。たとえば、図１３ａにおいて示されているｇｒｏｕｐ  ｂｙブロックは、データストリームの入力セット１４４０がセット１３４０ａとは異なる場合には、後の時点で（たとえば、異なるタイムインターバルに関して）実行されることが可能である。図１４において示されているように、入力セット１４４０は、ｄｃ＝ｅａｓｔという属性を伴ういかなるデータストリームも含んでいない。さらに、入力セット１４４０は、ｄｃ＝ｓｏｕｔｈを伴うデータストリームを含んでいる。したがって、グループ化モジュール３６０は、ｄｃ＝ｗｅｓｔに対応する第１の結果データストリーム、ｄｃ＝ｎｏｒｔｈに対応する第２の結果データストリーム、およびｄｃ＝ｓｏｕｔｈに対応する第３のデータストリームという３つの結果データストリームを伴う結果セット１４５０を生成する。したがって、グループ化モジュール３６０によって生成されるグループは、データストリームの入力セットが変わるにつれて動的に変わることが可能である。開発システム１２０において実行する計測手段が組み込まれたソフトウェアから受信されるデータストリームの入力セットは、さまざまな理由で、たとえば、新たな開発システム１２０を始動したこと、サービスを追加／除去したこと、またはメタデータストア２３０におけるデータストリームに関連付けられているメタデータを修正したことの結果として変わることが可能である。
【０１４２】
データストリームを第一級市民として発行すること
実施形態によれば、データストリーム言語プログラムは、計測分析システム１００のその他のコンポーネントにデータストリームを提供することによってデータストリーム言語プログラムの実行の結果に基づいて１つまたは複数のデータストリームを発行する発行コマンド（すなわち、ｐｕｂｌｉｓｈブロック）を含む。たとえば、データストリーム言語プログラムによって生成されたデータストリームは、ユーザインターフェースに対して発行されてリアルタイムのチャートまたはレポートとして提示されることが可能である。生成されたデータストリームは、第一級市民として表される。言い換えれば、生成されたデータストリームは、計測分析システム１００によって開発システム１２０の計測手段が組み込まれたソフトウェアから受信されたデータストリームと同じように表される。
【０１４３】
生成されたデータストリームは、計測分析システム１００のその他のコンポーネントにより、計測分析システム１００によって受信されたデータストリームと同じように使用されることも可能である。生成されたデータストリームは、計測分析システム１００によって自動的に、または管理システム１６０を介してシステム管理者によってメタデータ属性に関連付けられることが可能である。データストリーム言語プログラムのｆｉｎｄブロックは、外部システムから受信されたその他のデータストリームと同様、生成されたデータストリームを見つけ出すことができる。その他のデータストリーム言語プログラムを実行するジョブは、生成されたデータストリームを入力として受信し、それを処理することができる。そのデータストリームのデータは、計測分析システム１００によって処理されるその他の任意のデータストリームと同様、ユーザインターフェースを介して提示されることが可能であり、ユーザから受信された入力に基づいて操作されることが可能である。
【０１４４】
データストリーム言語プロセッサ２００は、結果データストリームをソフトウェアバス２９０上に発行する。任意の結果データストリーム（またはその他の任意のデータストリーム）に関するデータストリーム識別子を識別することができる計測分析システム１００の任意のコンポーネントが、ソフトウェアバス２９０からデータストリームのデータを入手することができる。ソフトウェアバス２９０は、発行されたデータストリームのデータをメモリにおいて格納して、そのデータに対する迅速なアクセスを提供することができる。
【０１４５】
データストリーム言語プログラムは、発行するための複数の結果データストリームを生成することができる。たとえば、データストリーム言語プログラムは、データセンターによってグループ化されたメトリック（たとえば、ｃａｃｈｅＭｉｓｓｅｓ）をアグリゲートすることができる。したがって、アグリゲート属性（たとえば、ｔｏｔａｌ  ｃａｃｈｅＭｉｓｓｅｓ）値が、それぞれのデータセンターに関して生成される。発行モジュール３５０は、それぞれの生成された結果データストリームについて記述するメタデータを生成し、そのメタデータをメタデータストア２３０において格納する。発行モジュール３５０は、データストリームを、そのデータストリームを生成しているデータストリーム言語プログラムに関連付けられている情報に関連付ける。したがって、発行モジュール３５０は、データストリームを生成しているデータストリーム言語プログラムのブロックを分析し、データストリーム言語プログラムのブロックからデータストリームを識別する情報を識別する。
【０１４６】
発行モジュール３５０は、発行されたデータストリームを生成しているデータストリーム言語プログラムによって入力として受信されたデータストリームの属性に基づいて、データストリームについて記述するメタデータ属性を生成することができる。たとえば、データストリーム言語プログラムが入力データストリームの移動平均を計算する場合には、発行モジュール３５０は、その入力データストリームに基づくメタデータ属性値を、発行されたデータストリームにも関連付ける。この状況においては、発行モジュール３５０は、入力データストリームのソース名を、入力データストリームのソース名として使用することができる。発行されたデータストリームが、複数の入力データストリームをアグリゲートすることによって入手されている場合には、発行モジュール３５０は、入力データストリームに基づく属性値をアグリゲートすることにより（たとえば、入力データストリームからの対応する属性値を連結することにより、または、入力データストリームからの属性値を短縮することによって入手されたサブストリングを連結することにより）、発行されたデータストリームに関する属性を生成することができる。たとえば、結果データストリームのソース名は、アグリゲートされる入力データストリームのソース名を連結することによって、または入力データストリームのソース名のプレフィックスストリングを連結することによって入手されることが可能である。
【０１４７】
実施形態においては、ｐｕｂｌｉｓｈブロックは、発行されているデータのタイプを特徴付けるメトリック名に関連付けられている。発行モジュール３５０は、ｐｕｂｌｉｓｈブロックのメトリック名を、ｐｕｂｌｉｓｈブロックによって発行されたデータストリームに関連付ける。データストリーム言語プロセッサ２００はまた、それぞれの結果データストリームを表すための識別子（時系列識別子と呼ばれる）を生成する。それぞれの結果データストリームのデータは、時系列データストア２６０において格納され、計測分析システムの任意のコンポーネントによる使用のために利用可能である。
【０１４８】
ｐｕｂｌｉｓｈブロックがメトリック名に関連付けられていない場合には、発行モジュールは、発行されているデータストリームを生成したデータストリーム言語プログラムによって受信された入力データストリームに基づいてメトリック名を決定する。発行されているデータストリーム言語が、単一のデータストリームから生成されている場合には、発行モジュールは、その単一のデータストリームのメトリック名を、発行されているデータストリームのメトリック名として使用する。発行されているデータストリーム言語が、複数のデータストリームから生成されている場合には、発行モジュールは、それらの複数のデータストリームのメトリック名に基づいて、たとえば、メトリック名、またはメトリック名のサブストリング（たとえば、プレフィックスもしくはサフィックス）を連結することによって、発行されているデータストリームに関するメトリック名を生成する。
【０１４９】
図１５は、実施形態による、データストリーム言語プログラムのｐｕｂｌｉｓｈブロックを実行することによって入手される結果データストリームを発行するプロセスを示すフローチャートを示している。このデータストリーム言語プログラムは、ｐｕｂｌｉｓｈブロックおよび１つまたは複数のｇｒｏｕｐｂｙブロックを含むと想定される。そのｐｕｂｌｉｓｈブロックは、メトリック名に関連付けられていると想定される。たとえば、このデータストリーム言語プログラムは、下記のとおりであることが可能である。
ｆｉｎｄ（“ｓｏｕｒｃｅ：ａｎａｌｙｔｉｃｓ*”，  “ｍｅｔｒｉｃ：ｌｏａｄ”））→
ｆｅｔｃｈ（）→
ｇｒｏｕｐｂｙ（“ｄａｔａｃｅｎｔｅｒ”）→
ｓｔａｔｓ！ｍｅａｎ→
ｐｕｂｌｉｓｈ（“ｄｃ＿ｌｏａｄ”）
【０１５０】
上述のデータストリーム言語プログラムは、「ｄｃ＿ｌｏａｄ」というメトリック名を指定するｐｕｂｌｉｓｈブロックを含んでいる。このデータストリーム言語プログラムはまた、データセンターによって入力データストリームをグループ化するためのｇｒｏｕｐｂｙステートメントを含む。
【０１５１】
データストリーム言語プロセッサ２００は、処理されているデータストリーム言語プログラムにおいてｐｕｂｌｉｓｈブロックを１５００で識別する。たとえば、上述のデータストリーム言語プログラムが処理されている場合には、データストリーム言語プロセッサ２００は、このデータストリーム言語プログラムの最後のブロック、すなわち、ｐｕｂｌｉｓｈ（“ｄｃ＿ｌｏａｄ”）を１５００で識別する。発行モジュール３５０は、ｐｕｂｌｉｓｈブロックに関連付けられているメトリック名を１５１０で決定する。たとえば、上で示されているデータストリーム言語プログラムのｐｕｂｌｉｓｈブロックにおいては、発行モジュール３５０は、ｐｕｂｌｉｓｈブロックに関連付けられている「ｄｃ＿ｌｏａｄ」というメトリック名を１５１０で決定する。データストリーム言語プロセッサ２００は、そのメトリック名を、結果データストリームについて記述するメタデータ属性として使用する。
【０１５２】
ｐｕｂｌｉｓｈブロックの出力は、たとえばデータストリーム言語プログラムがｇｒｏｕｐｂｙブロックを含む場合には、複数の結果データストリームを含むことができる。上述の例示的なデータストリーム言語プログラムは、それぞれのデータセンターに関して１つの、複数の結果データストリームを、すなわち、個別のデータセンター属性値を有しているすべてのデータストリームから周期的に入手された統計的な平均データ値に基づく１つの結果データストリームを生成することができる。その他のデータストリーム言語プログラムは、複数のｇｒｏｕｐｂｙブロックを含むことができる。しかしながら、データストリーム言語プログラムによって生成される結果データストリームの数は、そのデータストリーム言語プログラムの最後のｇｒｏｕｐｂｙブロックによって決定される。
【０１５３】
発行モジュール３５０は、データストリーム言語プログラムの最後のｇｒｏｕｐｂｙブロックの属性のセットを１５２０で識別する。上述の例においては、ｇｒｏｕｐｂｙ（“ｄａｔａｃｅｎｔｅｒ”）というブロックが、「ｄａｔａｃｅｎｔｅｒ」という単一の属性を有しており、その属性によってデータストリームがグループ化される。しかしながら、ｇｒｏｕｐｂｙブロックは、データストリームをグループ化するための複数の属性を含むことができる。たとえば、ｇｒｏｕｐｂｙ（“ｄａｔａｃｅｎｔｅｒ”，  “ｒｅｇｉｏｎ”）というｇｒｏｕｐｂｙコマンドは、「ｄａｔａｃｅｎｔｅｒ」および「ｒｅｇｉｏｎ」という２つの属性を指定し、それらの属性によってデータストリームがグループ化される。発行モジュール３５０は、データストリーム言語プログラムによって生成された結果データストリームを区別するための属性の識別されたセットの個別の値を使用する。
【０１５４】
データストリーム言語プロセッサ２００（およびそのコンポーネントモジュール）は、それぞれの結果データストリームに関して下記のステップを実行する。発行モジュール３５０は、結果データストリームに関連付けられている最後のｇｒｏｕｐ  ｂｙブロックの識別された属性の値を識別する。結果データストリームに関連付けられている識別された属性の値は、データストリームとともに受信されること、またはｇｒｏｕｐｂｙブロックの入力データストリームの識別子を与えられてメタデータストア２３０からフェッチされることが可能である。データストリームの入力セットが、さまざまなデータセンター値、たとえば、「ｅａｓｔ」、「ｗｅｓｔ」、「ｎｏｒｔｈ」、「ｓｏｕｔｈ」などを有しているデータストリームを含む場合には、ｇｒｏｕｐｂｙブロックによって出力されるそれぞれの結果データストリーム（およびそのｇｒｏｕｐｂｙブロックがデータストリーム言語プログラムの最後のｇｒｏｕｐｂｙブロックである場合には、データストリーム言語プログラム）は、これらのデータセンター値のうちの１つに関連付けられる。ｇｒｏｕｐｂｙブロックがグループ化のために複数の属性を指定している場合には、それぞれの結果データストリームは、グループ化のためにｇｒｏｕｐｂｙブロックによって指定されているそれらの属性の値の個別のセットに関連付けられる。
【０１５５】
データストリームメタデータジェネレータ３７０は、結果データストリームに関連付けられている識別された属性の値、およびｐｕｂｌｉｓｈブロックに関連付けられているメトリック名に基づいて、結果データストリームについて記述するメタデータを１５４０で生成する。たとえば、ｇｒｏｕｐｂｙブロックが、（「ｅａｓｔ」、「ｗｅｓｔ」、「ｎｏｒｔｈ」、「ｓｏｕｔｈ」という値を用いて）データセンター属性を指定していて、ｐｕｂｌｉｓｈブロックを用いて指定されているメトリック名がｃｐｕ＿ｌｏａｄである場合には、データストリームメタデータジェネレータ３７０は、それぞれの発行されたデータストリームを、ｃｐｕ＿ｌｏａｄというメトリック名、および（データストリームのグループに関連付けられている）データセンター属性の対応する値に関連付ける。データストリームメタデータジェネレータ３７０はまた、結果データストリームに関する識別子を生成する。データストリームメタデータジェネレータ３７０は、結果ストリームに関連付けられている属性を含むメタデータをメタデータストア２３０において１５５０で格納する。
【０１５６】
データストリーム言語プロセッサ２００は、データストリーム言語プログラムの周期性によって指定されているようにデータストリーム言語プログラムを周期的に実行する。データストリーム言語プロセッサ２００は、データストリーム言語プログラムが実行されたときに、それぞれの結果データストリームに関するデータを生成する。データストリーム言語プロセッサ２００は、それぞれの結果データストリームに関する生成されたデータを、その結果データストリームに関する識別子に関連付けて１５６０で格納する。
【０１５７】
ｔｈｒｅｓｈｏｌｄブロックを使用した異常検知
データストリーム言語プログラムは、データストリームのセットのデータがしきい値と比較されることを可能にするｔｈｒｅｓｈｏｌｄブロックをサポートする。比較されるデータストリームは、開発システム１２０の計測手段が組み込まれたソフトウェアから計測分析システム１００によって受信されたデータストリーム、またはデータストリーム言語プログラムの１つまたは複数のブロックの実行の結果として入手されたデータストリームであることが可能である。ｔｈｒｅｓｈｏｌｄブロックは、データポートおよびしきい値ポートを含む。データポートは、データ値を表す１つまたは複数のデータストリームを受信する。しきい値ポートは、しきい値を表す１つまたは複数のデータストリームを受信する。ｔｈｒｅｓｈｏｌｄブロックは、データ値をしきい値と比較して、データ値が、しきい値によって指定されている範囲内にあるかどうかを決定する。実施形態においては、ｔｈｒｅｓｈｏｌｄブロックは、複数のしきい値ポートを含む。たとえば、ｔｈｒｅｓｈｏｌｄブロックは、低しきい値ポートおよび高しきい値ポートという２つのしきい値ポートを含むことができる。ｔｈｒｅｓｈｏｌｄブロックは、データ値が、高しきい値ポートにおいて受信されたしきい値を下回っているかどうか、および低しきい値ポートにおいて受信されたしきい値を上回っているかどうかを決定する。
【０１５８】
ｔｈｒｅｓｈｏｌｄブロックは、高しきい値および／または低しきい値の指定を可能にする。しきい値モジュール３４０は、着信ストリームにおいて受信されたデータ値を、ｔｈｒｅｓｈｏｌｄブロックによって指定されたしきい値と比較することによって、ｔｈｒｅｓｈｏｌｄブロックを処理する。ｔｈｒｅｓｈｏｌｄブロックは、低しきい値および高しきい値を指定する。しきい値モジュール３４０は、ｔｈｒｅｓｈｏｌｄブロックによって受信された入力データストリームからのデータ値が高しきい値および／または低しきい値の範囲セットから外れている場合には、イベントを生成する。言い換えれば、しきい値モジュール３４０は、データストリームのデータが高しきい値を超過した場合、または低しきい値よりも低下した場合には、イベントを生成する。それらのしきい値は、固定されていること、または動的であることが可能である。動的なしきい値は、データストリーム言語プログラムの実行の結果として入手される。ｔｈｒｅｓｈｏｌｄブロックは、低／高しきい値のうちの一方または両方を指定することができる。
【０１５９】
ｔｈｒｅｓｈｏｌｄブロックへの入力は、データストリーム言語プログラムのブロックを実行した結果として生成された複数のデータストリーム値、たとえば、入力データストリームのセットをグループ化した結果として入手された複数のデータストリームであることが可能である。この状況においては、低しきい値または高しきい値はまた、複数のデータストリームを生成するデータストリーム言語プログラムの出力として指定される。しきい値モジュール３４０は、ｔｈｒｅｓｈｏｌｄブロックの入力ポートによって受信されたデータストリームを、低／高しきい値ポートによって受信されたデータストリームとマッチさせる。しきい値モジュール３４０は、入力ポートによって受信されたデータストリームのデータを、（データストリーム言語プログラムの周期性に基づく）それぞれのタイムインターバルに関して低／高しきい値ポートによって受信されたデータストリームのデータと比較し、その比較に基づくアクション（たとえば、イベントを送信すること）を行う。
【０１６０】
実施形態においては、ｔｈｒｅｓｈｏｌｄブロックは、持続時間およびフラクション値を指定する。たとえば、ｔｈｒｅｓｈｏｌｄブロックは、持続時間Ｔ（たとえば５分）を指定することができる。しきい値モジュール３４０は、入力データストリームのデータが、指定の持続時間Ｔよりも長い間にわたって指定のしきい値から外れている場合には、イベントを生成する。たとえば、入力データストリームのデータが、Ｔという時間単位よりも長い間にわたって高しきい値よりも高い場合には、しきい値モジュール３４０は、イベントを生成する。別の例として、入力データストリームのデータが、Ｔという時間単位よりも長い間にわたって低しきい値を下回っている場合には、しきい値モジュール３４０は、イベントを生成する。持続時間を指定できることは、しきい値限度から外れているデータストリームのデータの異常な挙動が、多大な量の時間にわたって持続しており、一時的な挙動ではないということを確実にする。
【０１６１】
実施形態においては、ｔｈｒｅｓｈｏｌｄブロックは、持続時間Ｔとともにフラクション値Ｆ（たとえば０．８）を指定する。しきい値モジュール３４０は、入力データストリームのデータが、指定された長さＴのウィンドウ中に持続時間Ｔの指定されたフラクションよりも長い間にわたってしきい値限度から外れている場合には、イベントを生成する。したがって、しきい値モジュール３４０は、たとえ入力データストリームのデータが持続時間Ｔの全体にわたってしきい値限度から外れていなくても、そのデータがその持続時間の少なくとも指定されたフラクションにわたってしきい値限度から外れている限り、イベントを生成する。
【０１６２】
図１６は、実施形態による、特定の属性によってグループ化されているデータストリームに関する固定されたしきい値を伴うｔｈｒｅｓｈｏｌｄブロックの使用を示すデータストリーム言語プログラムの例を示している。データストリーム言語プロセッサ２００は、図１６において示されているデータストリーム言語プロセッサを受信し、それを処理する。
【０１６３】
探索モジュール３１０は、ｆｉｎｄブロック１６１０を実行して、データストリーム言語プログラム１６００へ入力されるデータストリームのセットを識別する。フェッチモジュール３２０は、ｆｅｔｃｈブロック１６１５を実行して、データストリーム言語プログラムに関して指定されている周期性でデータストリームのデータをフェッチする。グループ化モジュール３６０は、ｇｒｏｕｐｂｙブロック１６２０を実行して、ｆｉｎｄブロックによって識別されたデータストリームをデータセンター値に基づいてデータストリームのセットへとグループ化し、そのセットのそれぞれのデータストリームは、識別されたデータストリームにおいて発生している個別のデータセンター値に対応する。計算モジュール３３０は、ｓｔａｔｓブロック１６２５を実行して、それぞれのデータセンターからのデータに対応する平均値を決定する。計算モジュール３３０は、ｓｔａｔｓブロック１６２５の出力を、入力としてｔｈｒｅｓｈｏｌｄブロックの入力ポートへ提供する。
【０１６４】
しきい値モジュール３４０は、それぞれのデータストリーム入力のデータをｔｈｒｅｓｈｏｌｄブロック１６３０の高しきい値と比較する。図１６において示されているように、ｔｈｒｅｓｈｏｌｄブロック１６３０の高しきい値は、固定された値（すなわち、６という固定された値）である。したがって、（データセンターに対応する）いずれかのグループに関するデータストリームのいずれかのデータ値が、６という高しきい値を超過した場合には、しきい値モジュール３４０は、イベントを生成する。しきい値モジュール３４０は、そのイベントにおいてしきい値を超過しているデータストリームの詳細を名前／値ペアとして提供する。たとえば、しきい値モジュール３４０は、高しきい値を超過したデータストリームに対応するデータセンター属性値、高しきい値が超過された時刻のタイムスタンプなどの詳細を提供することができる。ｔｈｒｅｓｈｏｌｄブロック１６３０は低しきい値を指定していないので、しきい値モジュール３４０は、ｔｈｒｅｓｈｏｌｄブロック１６３０へ入力されたデータストリームのデータをいかなる低しきい値とも比較しない。
【０１６５】
図１７は、実施形態による、メタデータ属性によってグループ化されているデータストリームに関する動的に変わるしきい値を伴うｔｈｒｅｓｈｏｌｄブロックを示すデータストリーム言語プログラムの例を示している。図１７のｔｈｒｅｓｈｏｌｄブロック１７６０の入力ポートに入力を提供するデータブロックは、図１６のｔｈｒｅｓｈｏｌｄブロック１６３０に入力を提供するデータブロックと同様である。したがって、図１７のブロック１７１０、１７１５、１７２０、１７２５は、それぞれ図１６のブロック１６１０、１６１５、１６２０、および１６２５に対応している。しかしながら、ｔｈｒｅｓｈｏｌｄブロック１７６０の高ポートへの入力は、動的に変わる入力を受信する。さらに、ｔｈｒｅｓｈｏｌｄブロック１７６０の高ポートは、入力として複数のデータストリームを受信する。しきい値モジュール３４０は、ｔｈｒｅｓｈｏｌｄブロック１７６０の高ポートによって受信された複数のデータストリームを、入力ポートによって受信された複数のデータストリームとマッチさせる。
【０１６６】
フェッチモジュール３２０は、ｆｅｔｃｈブロック１７３０を実行して、データストリーム言語プログラムに関して指定されている周期性でデータストリームのデータをフェッチする。グループ化モジュール３６０は、ｇｒｏｕｐｂｙブロック１７３５を実行して、ｆｉｎｄブロック１７１０によって識別されたデータストリームをデータセンター値によってデータストリームのセットへとグループ化し、そのセットのそれぞれのデータストリームは、データセンター値に対応する。ウィンドウモジュール３８０は、ｗｉｎｄｏｗブロック１７４０を実行して、ｗｉｎｄｏｗブロック１７４０へ入力されたそれぞれのデータストリームに関して１時間の移動ウィンドウに対応するデータポイントを識別する。計算モジュール３３０は、ｓｔａｔｓブロック１７４５を実行して、ｗｉｎｄｏｗブロック１７４０によって出力されたそれぞれのデータストリームに対応する１時間の移動ウィンドウに関する１時間移動平均値を決定する。カスタマイズドブロックモジュール３９０は、データストリーム言語のビルトインブロックを組み合わせることによってユーザによって定義されたカスタマイズされたマクロを処理する。計算モジュール３３０は、ｓｃａｌｅブロック１７５０を実行することによって１５０％の係数によってｓｔａｔｓブロック１７４５の出力を拡大する。ｓｃａｌｅブロック１７５０の拡大された出力は、入力としてｔｈｒｅｓｈｏｌｄブロック１７６０の高ポートへ提供される。
【０１６７】
したがって、しきい値モジュール３４０は、それぞれのデータセンターからのデータストリームの平均を表す結果データストリームのセットを、１５０％で拡大されたそれぞれのデータセンターからのデータストリームのデータの１時間移動平均と比較する。入力ポートによって受信されたデータセンターに対応する結果データストリームのデータが、ｔｈｒｅｓｈｏｌｄブロック１７６０の高ポートにおいて受信された同じデータセンターに関するデータストリームの拡大された移動平均値を超過している場合には、しきい値モジュール３４０は、イベントを生成する。したがって図１７は、入力として受信されるデータストリームの動的に変わるセット、および比較のためにしきい値として提供されるデータストリームの動的に変わるセットの生成を示すデータストリーム言語プログラムの例を示している。
【０１６８】
図１８は、実施形態による、ｔｈｒｅｓｈｏｌｄブロックを含むデータストリーム言語プログラムを実行するプロセスを示すフローチャートを示している。しきい値モジュール３４０は、実行されているデータストリーム言語プログラムのｔｈｒｅｓｈｏｌｄブロックを１８１０で識別する。しきい値モジュール３４０は、入力ポート、低／高しきい値ポートを含むｔｈｒｅｓｈｏｌｄブロックについて記述するさまざまなコンポーネントおよびパラメータを１８２０で識別し、しきい値ウィンドウのサイズが指定され、しきい値ウィンドウに関連付けられているフラクション値が指定される。いくつかの実施形態においては、低および／または高しきい値は、一定の値であることが可能であり、そのケースにおいては、一定の値が、低／高しきい値ポートへの入力として指定されるか、または低／高しきい値が、（いずれの低／高しきい値ポートも指定することなく）ｔｈｒｅｓｈｏｌｄブロックのパラメータとして指定される。
【０１６９】
データストリーム言語プロセッサ２００は、入力ポートに入力を提供するデータストリーム言語プログラムの部分、および低／高しきい値ポートに入力を提供するデータストリーム言語プログラムの部分を実行する。この実行は、データストリーム言語プログラムに対応するジョブに関して指定されている周期性に基づいて繰り返される。しきい値モジュール３４０は、データストリーム言語プログラムの周期性に基づいてそれぞれのタイムインターバルに関して、入力ポートにおいて受信されたデータと、低／高しきい値ポートにおいて受信されたデータとの比較を実行する。入力ポート（または低もしくは高しきい値ポート）に入力を提供するデータストリーム言語プログラムの部分がｇｒｏｕｐｂｙブロックを含む場合には、ｔｈｒｅｓｈｏｌｄブロックの入力ポートは、データストリームのグループを受信する。それぞれのポートにおけるデータストリームの数は、対応するｇｒｏｕｐｂｙブロックにおいて指定されているメタデータ属性（またはメタデータ属性のセット）の個別の値に依存する（メタデータ属性のその個別の値を有しているｇｒｏｕｐｂｙブロックの入力において少なくとも１つのデータストリームがあるならば）。
【０１７０】
実施形態においては、データストリーム言語プロセッサ２００は、入力ポートおよび低／高しきい値ポートにおいてデータを提供しているブロックを分析して、データがｔｈｒｅｓｈｏｌｄブロックに入力される前に発生する最後のｇｒｏｕｐｂｙブロックを識別する。しきい値モジュール３４０は、それぞれのポートにおいて受信されたデータストリームを識別するために、たとえば、入力ポートからのデータストリームを低および／または高しきい値ポートからのデータストリームとマッチさせるために、およびデータストリームに基づいてイベントが生成された場合にイベントにおけるデータストリームを識別するために、最後のｇｒｏｕｐｂｙブロックを使用する。しきい値モジュール３４０は、ｔｈｒｅｓｈｏｌｄブロックの２つの異なるポートにおいて受信された２つのデータストリームが、ｇｒｏｕｐｂｙブロックによって使用されたメタデータ属性の同じ個別の値を有している場合には、それらがマッチしているということを決定する。たとえば、ｔｈｒｅｓｈｏｌｄブロックの２つのポートに入力として提供されるデータストリームを生成するためにデータストリーム言語プログラムによって使用されたｇｒｏｕｐｂｙブロックが、データセンター属性に基づいてデータストリームをグループ化している場合には、特定のデータセンター（たとえばｄａｔａｃｅｎｔｅｒ  ｅａｓｔ、またはｄａｔａｃｅｎｔｅｒ  ｗｅｓｔ）のデータをアグリゲートすることによって入手されたデータストリームどうしはマッチしていると決定される。
【０１７１】
しきい値モジュール３４０は、それぞれのポート（すなわち、入力ポート、低ポート、および高ポート）において受信されたそれぞれのデータストリームに関して下記の計算を実行する。しきい値モジュール３４０は、入力ポートにおいて受信されたデータ値を、低しきい値ポートおよび／または高しきい値ポートにおいて受信されたデータ値と１８５０で比較する。しきい値モジュール３４０は、入力ポートにおいて受信されたデータ値が、高しきい値ポートにおいて受信されたデータ値を超過しているか、または低しきい値ポートにおいて受信されたデータ値を下回っている場合には、イベントを生成する。生成されたイベントは、入力ポートにおいて受信されたデータストリームを、そのデータストリームに対応するメタデータ属性の値に基づいて識別する情報を含む。
【０１７２】
実施形態においては、ｔｈｒｅｓｈｏｌｄブロックのデータポートは、メタデータ属性の第１のセット（たとえば、ｒｅｇｉｏｎおよびｄａｔａ＿ｃｅｎｔｅｒ）に基づいてデータストリームの入力セットをグループ化するｇｒｏｕｐ  ｂｙコマンドに基づいてデータストリームの入力セットをグループ化した結果として生成された第１の複数のデータストリームを受信する。ｔｈｒｅｓｈｏｌｄブロックのしきい値ポートは、メタデータ属性の第２のセットに基づいてデータストリームの入力セットをグループ化するｇｒｏｕｐ  ｂｙコマンドに基づいてデータストリームの入力セットをグループ化した結果として生成された第２の複数のデータストリームを受信する。メタデータ属性の第２のセットは、メタデータ属性の第１のセットと同じであることが可能である。あるいは、メタデータ属性の第２のセットは、メタデータ属性の第１のセットとは異なることが可能である。とりわけ、メタデータ属性の第２のセットは、メタデータ属性の第１のセットのサブセットであることが可能である。たとえば、メタデータ属性の第１のセットがｒｅｇｉｏｎおよびｄａｔａ＿ｃｅｎｔｅｒを含む場合に、メタデータ属性の第２のセットは、ｒｅｇｉｏｎのみを含む。別の例として、メタデータ属性の第１のセットは、ｒｅｇｉｏｎ、ｄａｔａ＿ｃｅｎｔｅｒ、ｍａｃｈｉｎｅ＿ｉｄを含み、メタデータ属性の第２のセットは、ｒｅｇｉｏｎおよびｄａｔａ＿ｃｅｎｔｅｒのみを含む。したがって、しきい値入力は、ｔｈｒｅｓｈｏｌｄブロックのデータ入力よりも少ないデータストリームを受信する。結果として、データポートにおいて受信された複数のデータストリームは、しきい値ポートにおいて受信された同じデータストリームと比較されることが可能である。上述の例においては、データポートは、ｒｅｇｉｏｎ、ｄａｔａ＿ｃｅｎｔｅｒ、ｍａｃｈｉｎｅ＿ｉｄの値のそれぞれの個別の組合せに関するデータストリームを受信し、しきい値ポートは、ｒｅｇｉｏｎ、ｄａｔａ＿ｃｅｎｔｅｒの値のそれぞれの個別の組合せに関するデータストリームを受信する。したがって、データポートにおいて受信されたｒｅｇｉｏｎおよびｄａｔａ＿ｃｅｎｔｅｒに対応するすべてのデータストリームは、データポートにおいて受信されたデータストリームに関連付けられているｍａｃｈｉｎｅ＿ｉｄの値にかかわらずに、しきい値ポートにおいて受信された同じデータストリームと比較される。
【０１７３】
ｔｈｒｅｓｈｏｌｄブロックがしきい値ウィンドウを指定している場合には、しきい値モジュール３４０は、指定されているしきい値ウィンドウサイズの最後のウィンドウ中に受信された入力ポートにおけるすべてのデータポイントを、低および／または高しきい値ポートにおいて受信されたデータ値と比較する。識別されたウィンドウ中に発生するすべてのデータ値が、しきい値に基づいて指定の境界から外れている（すなわち、高しきい値よりも大きいか、または低しきい値を下回っている）場合には、ｔｈｒｅｓｈｏｌｄブロックは、イベントを生成する。
【０１７４】
ｔｈｒｅｓｈｏｌｄブロックが、しきい値ウィンドウサイズに加えてフラクションパラメータを指定している場合には、しきい値モジュール３４０は、指定されているしきい値ウィンドウサイズの最後のウィンドウ中に入力ポートにおいて受信されたデータポイントを、低および／または高しきい値ポートにおいて受信されたデータ値と比較する。しきい値モジュール３４０は、識別されたウィンドウからのデータポイントの指定されているフラクションよりも多くが、ｔｈｒｅｓｈｏｌｄブロックによって指定されている範囲から外れている場合には、イベントを生成する。たとえば、フラクション値が０．７５（すなわち、７５％）である場合には、しきい値モジュール３４０は、識別されたウィンドウからのデータポイントの７５％よりも多くが、ｔｈｒｅｓｈｏｌｄブロックによって指定されている範囲から外れている場合には、イベントを生成する。実施形態においては、しきい値モジュール３４０は、識別されたウィンドウの指定されているフラクションよりも多くの間に発生するデータポイントが、ｔｈｒｅｓｈｏｌｄブロックによって指定されている範囲から外れている場合には、イベントを生成する。たとえば、フラクション値が０．７５（すなわち、７５％）である場合には、しきい値モジュール３４０は、識別されたウィンドウの７５％よりも多くの間に発生するデータポイントが、ｔｈｒｅｓｈｏｌｄブロックによって指定されている範囲から外れている場合には、イベントを生成する。
【０１７５】
データストリーム言語プログラムに関するカスタマイズされたブロック
データストリーム言語の既存のビルトインブロックを組み合わせることによって、カスタマイズされたブロックがユーザによって指定されることが可能である。カスタマイズされたブロックは、マクロブロックまたはカスタマイズされたマクロブロックとも呼ばれる。カスタマイズされたマクロブロックを定義できることは、データストリーム言語を拡張可能にする。カスタマイズされたブロックは、ビルトインブロックと同様、データストリーム言語プログラムに含まれることが可能である。カスタマイズされたブロックは、その他のカスタマイズされたマクロブロックを使用して、カスタマイズされたマクロブロックの任意のネスティングを可能にすることができる。ユーザは、カスタマイズされたブロックを使用して任意のアブストラクションを指定することができる。カスタマイズされたブロックは、そのカスタマイズされたマクロブロックを含むデータストリーム言語プログラムを実行するジョブに関して指定されている周期性で実行される。カスタマイズドブロックモジュール３９０は、それぞれのタイムインターバルに関して、カスタマイズされたマクロブロックのそれぞれの入力ポートに関する入力値を決定する。
【０１７６】
カスタマイズドブロックモジュール３９０は、カスタマイズされたマクロブロックの命令を実行し、それぞれの出力ポートに関するデータ値を生成する。出力ポートからの出力値は、後続のブロックへ提供されることが可能である。カスタマイズされたブロックへの入力が、ｇｒｏｕｐｂｙブロックを含むブロックを含んでいる場合には、入力ポートは、入力として複数のデータストリームを受信することができる。カスタマイズドブロックモジュール３９０は、入力において受信されたそれぞれのデータストリームのそれぞれのデータポイントに関してカスタマイズドブロックモジュール３９０の命令を実行する。データストリームの数は、カスタマイズされたマクロブロックを含むデータストリーム言語プログラムによって受信されるデータストリームのセット全体における変化に基づいて動的に変わっている場合がある。カスタマイズされたマクロブロックは、そのカスタマイズされたブロックの命令において使用される１つまたは複数のパラメータに関連付けられることが可能である。カスタマイズされたマクロブロックの命令は、パラメータ値を使用する。しかしながら、カスタマイズされたマクロブロックがデータストリーム言語プログラムにおいて指定される場合には、それぞれのパラメータに関する特定の値が提供される。したがって、カスタマイズドブロックモジュール３９０は、カスタマイズされたマクロブロックの命令を実行している間は、パラメータ値の代わりにパラメータ名を使用する。
【０１７７】
図１９は、実施形態による、データストリームのグループを含む入力に適用されるユーザ定義関数に基づいて結果データストリームを生成するためのカスタマイズされたブロックの使用を示すデータストリーム言語プログラムの例を示している。例示的なカスタマイズされたマクロブロック１９６０は、２つの入力データストリームのデータを組み合わせて、入力データ値に基づいて関数を生成する。ｃｏｍｂｉｎｅブロック１９６０は、ｈｉｔｓおよびｍｉｓｓｅｓという２つの入力ポート、ならびにｏｕｔという１つの出力ポートを有している。それぞれの入力ポートへの入力は、データストリーム言語プログラムの部分によって生成される。
【０１７８】
たとえば、ｈｉｔｓという入力ポートへの入力は、ｓｔａｔｓブロック１９２５の出力として生成され、ｍｉｓｓｅｓという入力ポートの入力は、ｓｔａｒｔｓブロック１９４５の出力として生成される。探索モジュール３１０は、ｆｉｎｄブロック１９００を実行して、ｃａｃｈｅＨｉｔｓというメトリック値を有する計測分析システム１００によって受信されたすべてのデータストリームを見つけ出す。たとえば、探索モジュール３１０は、ｆｉｎｄブロック１９００を実行して、キャッシュヒットの値を提供する開発システム１２０から受信されたすべてのデータストリームを見つけ出すことができる。フェッチモジュール３２０は、ｆｅｔｃｈブロック１９１５を実行して、ｆｉｎｄブロック１９００によって識別されたデータストリームのデータをフェッチする。グループ化モジュールは、ｇｒｏｕｐｂｙブロック１９２０を実行して、データセンター属性によってデータストリームをグループ化する。計算モジュール３３０は、ｓｔａｔｓブロック１９２５を実行して、それぞれの個別のデータセンターに関するすべてのデータストリームからのデータの平均を生成し、そのデータを、入力としてｃｏｍｂｉｎｅブロック１９６０のｈｉｔｓポートへ提供する。
【０１７９】
同様に、探索モジュール３１０は、ｆｉｎｄブロック１９１０を実行して、ｃａｃｈｅＭｉｓｓｅｓというメトリック値を有する計測分析システム１００によって受信されたすべてのデータストリームを見つけ出す。たとえば、探索モジュール３１０は、ｆｉｎｄブロック１９１０を実行して、キャッシュミスの値を提供する開発システム１２０から受信されたすべてのデータストリームを見つけ出すことができる。フェッチモジュール３２０は、ｆｅｔｃｈブロック１９３０を実行して、ｆｉｎｄブロック１９００によって識別されたデータストリームのデータをフェッチする。グループ化モジュールは、ｇｒｏｕｐｂｙブロック１９３５を実行して、データセンター属性によってデータストリームをグループ化する。計算モジュール３３０は、ｓｔａｔｓブロック１９４５を実行して、それぞれの個別のデータセンターに関するすべてのデータストリームからのデータの平均を生成し、そのデータを、入力としてｃｏｍｂｉｎｅブロック１９６０のｈｉｔｓポートへ提供する。
【０１８０】
カスタマイズドブロックモジュール３９０は、ｃｏｍｂｉｎｅブロックに関して指定された命令のセット１９１０を実行する。したがって、それぞれのタイムインターバルに関して、カスタマイズドブロックモジュール３９０は、Ｈが、ｈｉｔｓ入力ポートにおいて受信されたデータ値を表しており、Ｍが、ｍｉｓｓｅｓポートにおいて受信されたミスの値を表している場合に、Ｈ／（Ｈ＋Ｍ）の値を決定する。カスタマイズドブロックモジュール３９０は、上述の式の値を出力ポートに提供する。データストリーム言語プロセッサ２００は、出力ポートからのデータ値を、後続のブロックがあればそのブロックの入力ポートへ提供する。
【０１８１】
図２０は、実施形態による、カスタマイズされたブロックを伴うデータストリーム言語プログラムを実行するプロセスを示すフローチャートを示している。データストリーム言語プロセッサは、データストリーム言語プログラムのカスタマイズされたブロックを２０１０で識別する。カスタマイズドブロックモジュール３９０は、カスタマイズされたブロックの入力ポートおよび出力ポートを２０２０で識別する。カスタマイズされたブロックがパラメータ値を指定している場合には、カスタマイズドブロックモジュール３９０は、パラメータの代わりに使用されることになる値を受信し、それらの値を、カスタマイズされたブロックによって指定された命令において代用する。
【０１８２】
カスタマイズドブロックモジュール３９０は、それぞれのタイムインターバルに関して下記のステップを繰り返す。カスタマイズドブロックモジュール３９０は、それぞれの入力ポートに関する入力データ値を決定する。入力ポートに関する入力を生成するデータストリーム言語プログラムの部分がｇｒｏｕｐｂｙブロックを含む場合には、そのポートへの入力は、そのｇｒｏｕｐｂｙブロックによって生成されたそれぞれのデータストリームに対応する複数のデータ値を含むことができる。
【０１８３】
カスタマイズドブロックモジュール３９０は、それぞれのデータ値に関して、カスタマイズされたブロックの命令を実行する。それぞれのポートにおいて入力された複数のデータストリームがある場合には、カスタマイズドブロックモジュール３９０は、それぞれの入力ポートに関するｇｒｏｕｐｂｙブロックのメタデータ属性の値どうしを比較することによって、マッチするデータストリームを識別する。カスタマイズドブロックモジュール３９０は、入力ポートへ入力されるそれぞれのデータストリームに関する命令を２０４０で実行する。入力ポートが、一定の入力値を有していて、別の入力ポートが、複数のデータストリームを有している場合には、カスタマイズドブロックモジュール３９０は、その一定の値をその別の入力ポートのそれぞれのデータストリームに適用する。
【０１８４】
カスタマイズドブロックモジュール３９０は、カスタマイズされたブロックの命令の実行の結果の値を、カスタマイズされたブロックの命令において指定されているように出力ポートに提供する。データストリーム言語プロセッサ２００は、出力ポートにおける値を、出力ポートに接続されているデータストリーム言語プログラムのブロックに提供する。カスタマイズされたブロックは、出力ポートにおいて複数のデータストリームを出力することができる。たとえば、カスタマイズされたブロックの入力ポートは、複数のデータストリームをそれぞれ受信することができ、カスタマイズされたブロックは、それぞれの入力ポートにおいて受信されたマッチしているデータストリームからの値を含むタプル上で特定の計算を実行することができる。
【０１８５】
カスタマイズされたデータブロックの命令は、その他のカスタマイズされたデータブロックを含むことができる。したがって、図２０において示されている上述のプロセスは、それぞれのカスタマイズされたブロックに関して実行される。
【０１８６】
データストリーム言語プログラムを使用してレポートを生成するためのユーザインターフェース
いくつかの実施形態においては、計測分析システム１００は、データストリームに基づくレポートを見ることに関心があるエンドユーザのためにデータストリーム言語プログラムを生成するユーザインターフェースを提供する。ユーザは、データストリーム言語の複雑さを隠すユーザフレンドリーなユーザインターフェースを提供される。計測分析システムによって提供されたユーザインターフェースは、レポートを生成すること、ロールアップを実行すること、データストリームをグループ化することなどを行うためのメトリックを選択するなどのアクションをユーザが取ることを可能にするさまざまなウィジェットを示している。
【０１８７】
図２１は、実施形態による、計測分析システムによって受信されたデータストリームを示すデータストリーム言語プログラムの実行の結果を表示しているユーザインターフェースのスクリーンショットを示している。このスクリーンショットは、ｓｅｒｖｉｃｅ．ｃａｃｈｅ．ｈｉｔｓというメトリック２１２０を表すデータストリームを表示しているいくつかのチャート２１２０を示している。このメトリックは、開発システム１２０上で実行している計測手段が組み込まれたソフトウェアから受信されたキャッシュヒット値を表している。これらの値は、１秒のタイムインターバルへロールアップされる。したがって、それぞれの１秒のタイムインターバルにおいて受信されたキャッシュヒット値が足し合わされる。ｓｅｒｖｉｃｅ．ｃａｃｈｅ．ｈｉｔｓというメトリックを報告する多数のサービスが存在することがあり、それに応じて多数のチャート２１２０が表示される。図２１は、ユーザがアクションを取ること、たとえば、ユーザインターフェースによって報告されるメトリックを選択することや、ロールアップを実行することを可能にするさまざまなウィジェットを示している。
【０１８８】
図２２は、実施形態による、計測分析システムによって受信されたデータストリームのデータの１分平均を示すデータストリーム言語プログラムの実行の結果を表示しているユーザインターフェースのスクリーンショットを示している。図２２は、データストリーム上で実行されることになる特定の計算をユーザが指定することを可能にするウィジェットを示している。具体的には、図２２は、それぞれのデータストリームに関する１分平均を計算するウィジェット２２２０を示している。結果として、チャート２２１０は、図２１において示されているチャートよりも平滑である。しかしながら、図２２において示されているチャート２２１０の数は、図２１において示されているチャート２２１０の数と同じである。
【０１８９】
大企業は、非常に多数の開発システム１２０を有する場合がある。それぞれの開発システムは、複数のサービスを実行する場合があり、それぞれのサービスがメトリックを報告する。結果として、図２１および図２２において表示されているチャートの数は、非常に多くなる可能性がある。ユーザは、図２３において示されているようにデータストリームをグループ化することにより、データストリームによって報告されたデータへのよりよい洞察を得ることができる。
【０１９０】
図２３は、実施形態による、データセンターによってグループ化されたデータストリームの合計を示すデータストリーム言語プログラムの実行の結果を表示しているユーザインターフェースのスクリーンショットを示している。図２３は、属性の指定を可能にするウィジェット２３２０を示しており、その属性によってデータストリームがグループ化され、それぞれのグループに関してアグリゲーションオペレーションが実行される。図２３において示されているように、ユーザは、データセンターによってグループ化を行うこと、およびそれぞれのグループに関して合計オペレーションを実行することを要求している。２つのデータセンターしかないと想定して、チャートの数は、２つに削減されている。それぞれのチャート２３１０は、特定のデータセンターから受信されたデータストリームのデータ値の合計を示している。
【０１９１】
図２４は、実施形態による、データセンターによってグループ化されたデータストリームに関する、キャッシュヒット率と、キャッシュヒット率およびミス率の合計との比率を決定するカスタマイズされたマクロブロックを含むデータストリーム言語プログラムの実行の結果を表示しているユーザインターフェースのスクリーンショットを示している。図２４において示されているように、ユーザは、ウィジェット２４３０を使用してｓｅｒｖｉｃｅ．ｃａｃｈｅ．ｈｉｔというメトリックを報告するデータストリームをＡと呼ぶ。ユーザはさらに、ウィジェット２４４０を使用してｓｅｒｖｉｃｅ．ｃａｃｈｅ．ｍｉｓｓというメトリックを報告するデータストリームをＢと呼ぶ。ユーザは、計算Ａ／（Ａ＋Ｂ）を、キャッシュヒットおよびキャッシュミスの合計に対するキャッシュヒットの比率と定義する。ユーザはさらに、ウィジェット２４５０を使用して、計算されたＡ／（Ａ＋Ｂ）の値が１００の倍数によって拡大されるべきであるということを指定している。この計算は、データセンターに基づいてデータストリームのそれぞれのグループに関して実行される。したがってチャート２４１０は、それぞれのデータセンターに関して生成されて、そのデータセンターから受信されたすべてのデータストリームに関してキャッシュヒット比率のリアルタイムの値を報告する。
【０１９２】
代替実施形態
本発明の図および記述は、本発明を明確に理解することに関連している要素を例示するように簡略化されており、その一方で明確さの目的から、典型的なシステムにおいて見受けられるその他の多くの要素を除外しているということを理解されたい。その他の要素および／またはステップも、本発明を実施する上で望ましく、および／または必要とされるということを当技術分野における標準的な技術者なら認識することができる。しかしながら、そのような要素およびステップは当技術分野においてよく知られているので、ならびにそれらは、本発明のさらによい理解を容易にするものではないので、そのような要素およびステップの論考は、本明細書においては提供されていない。本明細書における開示は、当業者に知られているそのような要素および方法に対するすべてのそのような変形形態および修正形態にも向けられている。
【０１９３】
上述の記述のいくつかの部分は、情報に関するオペレーションのアルゴリズムおよびシンボル表示という点から実施形態について記述している。これらのアルゴリズム的な記述および表示は一般に、データ処理技術分野における技術者たちによって、それらの技術者たちの作業の実体を他の当業者たちに対して効果的に伝達するために使用されている。これらのオペレーションは、機能的に、計算処理的に、または論理的に記述されているが、コンピュータプログラムまたは均等な電気回路、マイクロコードなどによって実施されるということが理解される。さらに、一般性を失うことなく、モジュールとしてオペレーションのこれらの構成に言及することが時として好都合であることもわかっている。記述されているオペレーションおよびそれらの関連付けられているモジュールは、ソフトウェア、ファームウェア、ハードウェア、またはそれらの任意の組合せで具体化されることが可能である。
【０１９４】
本明細書において使用される際には、「一実施形態」または「実施形態」へのいかなる言及も、その実施形態に関連して記述されている特定の要素、機能、構造、または特徴が、少なくとも１つの実施形態に含まれているということを意味する。「一実施形態においては」という語句が、本明細書におけるさまざまな個所に登場しても、それらは、必ずしもすべて同じ実施形態を指しているとは限らない。
【０１９５】
いくつかの実施形態は、「結合される」および「接続される」という表現をそれらの派生語とともに使用して記述されているかもしれない。これらの用語は、互いにとっての同義語として意図されているものではないということを理解されたい。たとえば、いくつかの実施形態は、複数の要素が互いに直接の物理的なまたは電気的な接触状態にあるということを示すために、「接続される」という用語を使用して記述されているかもしれない。別の例においては、いくつかの実施形態は、複数の要素が直接の物理的なまたは電気的な接触状態にあるということを示すために、「結合される」という用語を使用して記述されているかもしれない。しかしながら、「結合される」という用語は、複数の要素が互いに直接の接触状態にはないが、それでもなお互いに協力または対話しているということを意味する場合もある。実施形態は、このコンテキストにおいて限定されるものではない。
【０１９６】
本明細書において使用される際には、「ｃｏｍｐｒｉｓｅｓ」、「ｃｏｍｐｒｉｓｉｎｇ」、「ｉｎｃｌｕｄｅｓ」、「ｉｎｃｌｕｄｉｎｇ」、「ｈａｓ」、「ｈａｖｉｎｇ」という用語、またはそれらのその他の任意の変形は、非排他的な包含をカバーすることを意図されている。たとえば、要素のリストを含むプロセス、方法、製品、または装置は、それらの要素だけに必ずしも限定されず、明示的にリストアップされてはいない、またはそのようなプロセス、方法、製品、もしくは装置に固有のその他の要素を含むことができる。さらに、そうではないと明示されていない限り、「または（もしくは）」は、排他的な「または（もしくは）」ではなく、包括的な「または（もしくは）」を指す。たとえば、ＡまたはＢという条件は、「Ａが真であり（または存在して）、Ｂが偽である（または存在しない）」、「Ａが偽であり（または存在せず）、Ｂが真である（または存在する）」、ならびに「ＡおよびＢの両方が真である（または存在する）」のうちのいずれか１つによって満たされる。
【０１９７】
加えて、「ａ」または「ａｎ」の使用は、本明細書における実施形態の要素およびコンポーネントについて記述するために採用されている。これは、便宜上、および本発明の一般的な意味を与えるために行われているにすぎない。この記述は、１つまたは少なくとも１つを含むと読み取られるべきであり、単数は複数も含む（ただし、そうではないことが意味されているということが明らかである場合は除く）。当業者なら、本開示を読めば、本明細書における開示されている原理を通じて、計測手段が組み込まれたソフトウェアに基づいてレポートを生成するためのシステムおよびプロセスのためのまたさらなる代替の構造的なおよび機能的な設計を理解するであろう。したがって、特定の実施形態および応用例が示され記述されているが、開示されている実施形態は、本明細書において開示されている厳密な構造およびコンポーネントに限定されるものではないということを理解されたい。当業者にとって明らかであろうさまざまな修正、変更、および変形が、添付の特許請求の範囲において定義されている趣旨および範囲から逸脱することなく、本明細書において開示されている方法および装置の構成、オペレーション、および詳細において行われることが可能である。