図面 (/)

技術 計測手段が組み込まれたソフトウェアを分析するためのデータストリーム処理言語

出願人 スプランクインコーポレイテッド
発明者 ラジェシュラマンアリジットムクヘルジクリスグランディフィリップリウ
出願日 2020年1月15日 (1年1ヶ月経過) 出願番号 2020-004714
公開日 2020年5月14日 (9ヶ月経過) 公開番号 2020-074157
状態 未査定
技術分野 デバッグ/監視
主要キーワード 平均データ値 結果データ値 値限度 結果ストリーム 時間周期的 最大ウィンドウ グループ化モジュール コンポーネントモジュール
関連する未来課題
重要な関連分野

この項目の情報は公開日時点(2020年5月14日)のものです。
また、この項目は機械的に抽出しているため、正しく解析できていない場合があります

図面 (20)

課題

計測されたソフトウェアから受信されたデータストリームを処理する。

解決手段

計測分析ステムが、データストリーム言語プログラムを使用して指定された命令を実行してデータストリームを処理する。データストリーム言語は、ユーザがデータストリーム言語プログラムにより処理されるデータストリームのセットを識別するためにfindブロックを使用して検索条件を指定することを可能にする。識別されるデータストリームのセットは動的に変わり得る。データストリーム言語は、ユーザが、入力データストリームに関連付けられている1以上のメタデータ属性の個別の値に基づきデータストリームをデータストリームのセットにグループ化することを可能にする。データストリーム言語は、入力データストリームのデータ値が低/高しきい値を使用して指定されている境界外にあるかを決定するためにユーザがthresholdブロックを指定することを可能にする。

概要

背景

ソフトウェア開発者たちは、彼らがソフトウェア計測することによって開発するソフトウェアのさまざまな側面をモニタする。これらは、ソフトウェアの実行、ソフトウェアの実行中に直面されるエラー、ソフトウェアの実行中に直面される重大なイベント、コードのどの部分が実行されているか、およびどの部分が実行されていないかについて記述する情報などを含む。コードを計測するための従来の技術は、さまざまなタイプの情報をログファイルへ記録するか、または情報をスクリーン上に印刷する、そのコード内のステートメントを含む。この技術は、シンプルアプリケーション、たとえば、シングルプロセッサ上で実行する実行のシンプルなフローを有するアプリケーションに適している。しかしながら、ソフトウェアを計測するためのこれらの技術は、複数のシステムにわたって分散されてそれぞれのシステムが実行の複数のプロセスまたはスレッドを実行する場合がある複雑なアプリケーションには適していない。

そのような複雑なシステムを計測するための別の従来の技術は、コードを計測する際にエキスパートを使用することである。特定のベンダーは、コードの計測を支援するエキスパートサービスを提供している。しかしながら、これらのベンダーは典型的には、しばしばあまりフレキシブルではない標準的なサービスを提供している。さらに、これらのベンダーに基づくソリューションは、ベンダーによってコードを計測するために必要とされる時間という点で多大なオーバーヘッドを有している。したがって、これらのソリューションは、ゆっくりとした開発サイクル、たとえば、1年がかりの開発サイクルに適している。しかしながら、ソフトウェア製品に関するソフトウェア開発およびリリースサイクルは、短くなってきている。たとえば、ソフトウェア開発者たちが毎月、毎週、または毎日でさえ変更を作成してそれらを展開するいくつかのオンラインシステムがある。ベンダーに基づく計測ソリューションの多大なオーバーヘッドに起因して、開発者たちは、これらのサービスを速いペース開発環境において使用することは困難であると感じている。

さらに、コードを計測するための従来の技術は、情報を取り入れ、情報を格納し、情報を分析して、レポートを生成する際に多大な遅延をもたらす。結果として、ソフトウェアにおいて問題が生じる時点と、コードの計測を介してその問題が検知される時点との間において多大な遅延がある可能性がある。したがって、ソフトウェアの計測に基づいてレポートを生成するための従来のシステムはしばしば、複雑なアプリケーションの速いペースの開発サイクルにおいては不適切である。

概要

計測されたソフトウェアから受信されたデータストリームを処理する。計測分析システムが、データストリーム言語プログラムを使用して指定された命令を実行してデータストリームを処理する。データストリーム言語は、ユーザがデータストリーム言語プログラムにより処理されるデータストリームのセットを識別するためにfindブロックを使用して検索条件を指定することを可能にする。識別されるデータストリームのセットは動的に変わり得る。データストリーム言語は、ユーザが、入力データストリームに関連付けられている1以上のメタデータ属性の個別の値に基づきデータストリームをデータストリームのセットにグループ化することを可能にする。データストリーム言語は、入力データストリームのデータ値が低/高しきい値を使用して指定されている境界外にあるかを決定するためにユーザがthresholdブロックを指定することを可能にする。

目的

そのような複雑なシステムを計測するための別の従来の技術は、コードを計測する際にエキスパートを使用することである

効果

実績

技術文献被引用数
0件
牽制数
0件

この技術が所属する分野

ライセンス契約や譲渡などの可能性がある特許掲載中! 開放特許随時追加・更新中 詳しくはこちら

請求項1

データストリーム言語プログラムを使用してデータストリームの動的に変わるセットを処理するための方法であって、複数のデータストリームについて記述するメタデータ計測分析ステムによって格納するステップと、データストリーム言語を使用して指定された命令のセットを含むデータストリーム言語プログラムを受信するステップであって、前記命令は、検索式に関連付けられているfindブロックを含み、前記検索式は、データストリームに関連付けられているメタデータ属性に基づく、受信するステップと、前記検索式を評価して、前記検索式に適合する前記複数のデータストリームからのデータストリームのセットを識別するステップと、前記データストリーム言語プログラムを繰り返し実行するステップであって、前記実行は、データストリームの前記識別されたセットのそれぞれのデータストリームからデータ値を受信するステップ、前記データストリーム言語プログラムのそれぞれのブロックを実行するステップ、前記実行に基づいて1つまたは複数の結果データ値を生成するステップであって、前記結果データ値は、前記データストリーム言語プログラムによって生成される結果データストリームに対応する、生成するステップ、および前記1つまたは複数の結果データ値を格納するステップを含む、繰り返し実行するステップとを含むことを特徴とする方法。

請求項2

前記検索式は、前記データストリーム言語プログラムの前記実行中に繰り返し評価されることを特徴とする請求項1に記載の方法。

請求項3

第1のタイムインターバル中に評価された識別されたデータストリームの前記セットは、第2のタイムインターバル中に評価された識別されたデータストリームの前記セットとは異なることを特徴とする請求項2に記載の方法。

請求項4

前記findブロックは、周期性に関連付けられており、前記検索式は、前記findブロックに関連付けられている周期性に基づいて決定されたそれぞれのタイムインターバルに関して周期的に評価されることを特徴とする請求項2に記載の方法。

請求項5

前記検索式は、前記データストリームに関連付けられているメタデータにおける変化に応答して評価されることを特徴とする請求項2に記載の方法。

請求項6

前記検索式は、前記複数のデータストリームにおける変化に応答して評価され、前記変化は、データストリームの追加またはデータストリームの削除を含むことを特徴とする請求項2に記載の方法。

請求項7

前記検索式は、前記検索式の仕様における変化に応答して評価されることを特徴とする請求項2に記載の方法。

請求項8

前記findブロックが実行される割合は、前記データストリーム言語プログラムの1つまたは複数のその他のブロックが実行される割合とは異なることを特徴とする請求項7に記載の方法。

請求項9

前記複数のデータストリームは、外部システムから受信されるデータストリームを含むことを特徴とする請求項1に記載の方法。

請求項10

前記複数のデータストリームは、別のデータストリーム言語プログラムの実行の結果として生成されるデータストリームを含むことを特徴とする請求項1に記載の方法。

請求項11

前記検索式は、データストリームに関連付けられているメタデータに基づく正規表現であることを特徴とする請求項1に記載の方法。

請求項12

その上に命令を格納しているコンピュータ可読非一時的ストレージメディアであって、前記命令は、プロセッサによって実行されたときに、複数のデータストリームを計測分析システムによって格納するステップであって、それぞれのデータストリームはメタデータ属性に関連付けられている、格納するステップと、データストリーム言語を使用して指定された命令のセットを含むデータストリーム言語プログラムを受信するステップであって、前記命令は、検索式に関連付けられているfindブロックを含み、前記検索式は、データストリームに関連付けられているメタデータ属性に基づく、受信するステップと、前記検索式を評価して、前記検索式に適合する前記複数のデータストリームからのデータストリームのセットを識別するステップと、前記データストリーム言語プログラムを繰り返し実行するステップであって、前記実行は、データストリームの前記識別されたセットのそれぞれのデータストリームからデータ値を受信するステップ、前記データストリーム言語プログラムのそれぞれのブロックを実行するステップ、前記実行に基づいて1つまたは複数の結果データ値を生成するステップであって、前記結果データ値は、前記データストリーム言語プログラムによって生成される結果データストリームに対応する、生成するステップ、および前記1つまたは複数の結果データ値を格納するステップを含む、繰り返し実行するステップとを前記プロセッサに実行させることを特徴とするコンピュータ可読非一時的ストレージメディア。

請求項13

前記検索式は、前記データストリーム言語プログラムの前記実行中に繰り返し評価されることを特徴とする請求項12に記載のコンピュータ可読非一時的ストレージメディア。

請求項14

第1のタイムインターバル中に評価された識別されたデータストリームの前記セットは、第2のタイムインターバル中に評価された識別されたデータストリームの前記セットとは異なることを特徴とする請求項13に記載のコンピュータ可読非一時的ストレージメディア。

請求項15

前記findブロックは、周期性に関連付けられており、前記検索式は、前記findブロックに関連付けられている周期性に基づいて決定されたそれぞれのタイムインターバルに関して周期的に評価されることを特徴とする請求項13に記載のコンピュータ可読非一時的ストレージメディア。

請求項16

前記検索式は、前記データストリームに関連付けられているメタデータにおける変化に応答して評価されることを特徴とする請求項12に記載のコンピュータ可読非一時的ストレージメディア。

請求項17

前記検索式は、前記複数のデータストリームにおける変化に応答して評価され、前記変化は、データストリームの追加またはデータストリームの削除を含むことを特徴とする請求項12に記載のコンピュータ可読非一時的ストレージメディア。

請求項18

前記findブロックは、周期性に関連付けられており、前記検索式は、前記findブロックに関連付けられている周期性に基づいて決定されたそれぞれのタイムインターバルに関して周期的に評価されることを特徴とする請求項12に記載のコンピュータ可読非一時的ストレージメディア。

請求項19

前記findブロックが実行される割合は、前記データストリーム言語プログラムの1つまたは複数のその他のブロックが実行される割合とは異なることを特徴とする請求項18に記載のコンピュータ可読非一時的ストレージメディア。

請求項20

計測されたソフトウェアによって生成されたデータを処理するためのコンピュータ実施システムであって、コンピュータプロセッサと、その上に命令を格納しているコンピュータ可読非一時的ストレージメディアであって、前記命令は、プロセッサによって実行されたときに、複数のデータストリームを計測分析システムによって格納するステップであって、それぞれのデータストリームはメタデータ属性に関連付けられている、格納するステップ、データストリーム言語を使用して指定された命令のセットを含むデータストリーム言語プログラムを受信するステップであって、前記命令は、検索式に関連付けられているfindブロックを含み、前記検索式は、データストリームに関連付けられているメタデータ属性に基づく、受信するステップ、前記検索式を評価して、前記検索式に適合する前記複数のデータストリームからのデータストリームのセットを識別するステップ、ならびに前記データストリーム言語プログラムを繰り返し実行するステップであって、前記実行は、データストリームの前記識別されたセットのそれぞれのデータストリームからデータ値を受信するステップ、前記データストリーム言語プログラムのそれぞれのブロックを実行するステップ、前記実行に基づいて1つまたは複数の結果データ値を生成するステップであって、前記結果データ値は、前記データストリーム言語プログラムによって生成される結果データストリームに対応する、生成するステップ、および前記1つまたは複数の結果データ値を格納するステップを含む、繰り返し実行するステップを前記プロセッサに実行させるコンピュータ可読非一時的ストレージメディアとを含むことを特徴とするシステム。

請求項21

データストリーム言語プログラムによって生成されるデータストリームを生成して格納するための方法であって、複数のデータストリームからデータを受信するステップと、前記複数のデータストリームについて記述するメタデータを格納するステップであって、それぞれのデータストリームに関する前記メタデータは、前記データストリームに関連付けられている1つまたは複数の属性を含む、格納するステップと、前記複数のデータストリームを処理するためにデータストリーム言語プログラムを使用して指定された命令のセットを受信するステップと、命令の前記セットを実行することによって1つまたは複数の結果データストリームを生成するステップと、前記1つまたは複数の結果データストリームのそれぞれに関して、前記結果データストリームについて記述する属性の値のセットを決定するステップであって、前記決定は命令の前記セットに基づく、決定するステップと、前記結果データストリームについて記述するメタデータとして値の前記セットを格納するステップと、前記結果データストリームに関する識別子を生成して、前記識別子を、前記結果データストリームについて記述する前記メタデータに関連付けるステップと、前記結果データストリームのデータを前記識別子に関連付けて格納するステップとを含むことを特徴とする方法。

請求項22

属性の値の前記セットは、前記データストリーム言語プログラムにおいて指定されているグループ化コマンドに基づくことを特徴とする請求項21に記載の方法。

請求項23

前記データストリーム言語プログラムは、複数のグループ化コマンドを指定し、属性の値の前記セットは、前記データストリーム言語プログラムにおいて指定されている前記複数のグループ化コマンドからの最後のグループ化コマンドに基づくことを特徴とする請求項22に記載の方法。

請求項24

前記グループ化コマンドは、メタデータ属性のセットによって前記データストリームの前記データをグループ化し、それぞれの結果データストリームは、メタデータ属性の前記セットの値の個別のセットに対応することを特徴とする請求項22に記載の方法。

請求項25

前記結果データストリームの前記データを、別のデータストリーム言語プログラムの別のブロックへの入力として使用するステップをさらに含むことを特徴とする請求項21に記載の方法。

請求項26

前記結果データストリームの前記データを、スクリーン上に表示するために送信するステップをさらに含むことを特徴とする請求項21に記載の方法。

請求項27

結果データストリームの前記セットは、publishブロックに関連付けられており、前記publishブロックは、メトリック名に関連付けられており、前記方法は、前記publishブロックの前記メトリック名を、前記結果データストリームのそれぞれについて記述する属性として使用するステップと、前記メトリック名に基づく前記属性を、前記データストリームについて記述する前記メタデータとともに格納するステップとをさらに含むことを特徴とする請求項21に記載の方法。

請求項28

前記複数のデータストリームからの1つまたは複数のデータストリームは、外部システム上で実行している計測されたソフトウェアのインスタンスによって生成されることを特徴とする請求項21に記載の方法。

請求項29

前記複数のデータストリームからの1つまたは複数のデータストリームは、別のデータストリーム言語プログラムの命令の実行の結果として入手される結果データストリームとして生成されることを特徴とする請求項21に記載の方法。

請求項30

データストリーム言語プログラムに基づいてデータストリームを生成して格納するための方法であって、複数のデータストリームからデータを受信するステップであって、それぞれのデータストリームは、システム上で実行している計測されたソフトウェアのインスタンスによって生成される、受信するステップと、前記複数のデータストリームについて記述するメタデータを格納するステップであって、それぞれのデータストリームに関する前記メタデータは、前記データストリームに関連付けられている1つまたは複数の属性を含む、格納するステップと、前記複数のデータストリームを処理するためにデータストリーム言語プログラムを使用して指定された命令のセットを受信するステップであって、前記命令は、データストリームをグループ化するための1つまたは複数のグループ化コマンドを含み、それぞれのグループ化コマンドは、データストリームの1つまたは複数の属性およびアグリゲーションオペレーションに関連付けられている、受信するステップと、命令の前記セットを実行することによって1つまたは複数の結果データストリームを生成するステップと、命令の前記セットにおいて実行された最後のグループ化コマンドを識別するステップと、前記最後のグループ化コマンドに関連付けられている属性の前記セットを決定するステップと、前記1つまたは複数の結果データストリームのそれぞれに関して、前記結果データストリームに関連付けられている前記最後のグループ化コマンドの属性のセットの値を決定するステップと、前記結果データストリームについて記述するメタデータとして前記最後のグループ化コマンドの属性の前記セットの前記値を格納するステップと、前記結果データストリームに関する識別子を生成して、前記識別子を、前記データストリームについて記述する前記メタデータに関連付けるステップと、前記結果データストリームのデータを前記識別子に関連付けて格納するステップとを含むことを特徴とする方法。

請求項31

複数のデータストリームからデータを受信するための命令と、前記複数のデータストリームについて記述するメタデータを格納するための命令であって、それぞれのデータストリームに関する前記メタデータは、前記データストリームに関連付けられている1つまたは複数の属性を含む、命令と、前記複数のデータストリームを処理するためにデータストリーム言語プログラムを使用して指定された命令のセットを受信するための命令と、命令の前記セットを実行することによって1つまたは複数の結果データストリームを生成するための命令と、前記1つまたは複数の結果データストリームのそれぞれに関して、前記結果データストリームについて記述する属性の値のセットを決定するための命令であって、前記決定は命令の前記セットに基づく、命令と、前記結果データストリームについて記述するメタデータとして値の前記セットを格納するための命令と、前記結果データストリームに関する識別子を生成して、前記識別子を、前記結果データストリームについて記述する前記メタデータに関連付けるための命令と、前記結果データストリームのデータを前記識別子に関連付けて格納するための命令とを格納していることを特徴とするコンピュータ可読非一時的ストレージメディア。

請求項32

前記メタデータについて記述する値の前記セットは、前記データストリーム言語プログラムにおいて指定されているグループ化コマンドに基づくことを特徴とする請求項31に記載のコンピュータ可読非一時的ストレージメディア。

請求項33

前記データストリーム言語プログラムは、複数のグループ化コマンドを指定し、属性の値の前記セットは、前記データストリーム言語プログラムにおいて指定されている前記複数のグループ化コマンドからの最後のグループ化コマンドに基づくことを特徴とする請求項32に記載のコンピュータ可読非一時的ストレージメディア。

請求項34

前記グループ化コマンドは、メタデータ属性のセットによって前記データストリームの前記データをグループ化し、それぞれの結果データストリームは、メタデータ属性の前記セットの値の個別のセットに対応することを特徴とする請求項32に記載のコンピュータ可読非一時的ストレージメディア。

請求項35

結果データストリームの前記セットは、publishブロックに関連付けられており、前記publishブロックは、メトリック名に関連付けられており、前記コンピュータ可読非一時的ストレージメディアは、前記publishブロックの前記メトリック名を、前記結果データストリームのそれぞれについて記述する属性として使用するための命令と、前記メトリック名に基づく前記属性を、前記データストリームについて記述する前記メタデータとともに格納するための命令とをさらに格納していることを特徴とする請求項31に記載のコンピュータ可読非一時的ストレージメディア。

請求項36

結果ストリームの前記データを、別のデータストリーム言語プログラムの別のブロックへの入力として使用するための命令をさらに格納していることを特徴とする請求項31に記載のコンピュータ可読非一時的ストレージメディア。

請求項37

結果ストリームの前記データを、スクリーン上に表示するために送信するための命令をさらに格納していることを特徴とする請求項31に記載のコンピュータ可読非一時的ストレージメディア。

請求項38

前記複数のデータストリームからの1つまたは複数のデータストリームは、外部システム上で実行している計測されたソフトウェアのインスタンスによって生成されることを特徴とする請求項31に記載のコンピュータ可読非一時的ストレージメディア。

請求項39

前記複数のデータストリームからの1つまたは複数のデータストリームは、別のデータストリーム言語プログラムの命令の実行の結果として入手される結果データストリームとして生成されることを特徴とする請求項31に記載のコンピュータ可読非一時的ストレージメディア。

請求項40

コンピュータプロセッサと、複数のデータストリームからデータを受信するための命令、前記複数のデータストリームについて記述するメタデータを格納するための命令であって、それぞれのデータストリームに関する前記メタデータは、前記データストリームに関連付けられている1つまたは複数の属性を含む、格納するための命令、前記複数のデータストリームを処理するためにデータストリーム言語プログラムを使用して指定された命令のセットを受信するための命令、命令の前記セットを実行することによって1つまたは複数の結果データストリームを生成するための命令、前記1つまたは複数の結果データストリームのそれぞれに関して、命令の前記セットに基づいて、前記結果データストリームについて記述する属性の値のセットを決定するための命令、前記結果データストリームについて記述するメタデータとして値の前記セットを格納するための命令、時系列に関する時系列識別子を生成して、前記時系列識別子を、前記データストリームについて記述する前記メタデータに関連付けるための命令、および前記結果データストリームのデータを前記時系列識別子に関連付けて格納するための命令を格納しているコンピュータ可読非一時的ストレージメディアとを含むことを特徴とするコンピュータシステム

技術分野

0001

本開示は、一般にはデータストリーム処理に関し、より具体的には、計測されたソフトウェアから受信されたデータストリームを処理するためのデータストリーム処理言語に関する。

背景技術

0002

ソフトウェア開発者たちは、彼らがソフトウェアを計測することによって開発するソフトウェアのさまざまな側面をモニタする。これらは、ソフトウェアの実行、ソフトウェアの実行中に直面されるエラー、ソフトウェアの実行中に直面される重大なイベント、コードのどの部分が実行されているか、およびどの部分が実行されていないかについて記述する情報などを含む。コードを計測するための従来の技術は、さまざまなタイプの情報をログファイルへ記録するか、または情報をスクリーン上に印刷する、そのコード内のステートメントを含む。この技術は、シンプルアプリケーション、たとえば、シングルプロセッサ上で実行する実行のシンプルなフローを有するアプリケーションに適している。しかしながら、ソフトウェアを計測するためのこれらの技術は、複数のシステムにわたって分散されてそれぞれのシステムが実行の複数のプロセスまたはスレッドを実行する場合がある複雑なアプリケーションには適していない。

0003

そのような複雑なシステムを計測するための別の従来の技術は、コードを計測する際にエキスパートを使用することである。特定のベンダーは、コードの計測を支援するエキスパートサービスを提供している。しかしながら、これらのベンダーは典型的には、しばしばあまりフレキシブルではない標準的なサービスを提供している。さらに、これらのベンダーに基づくソリューションは、ベンダーによってコードを計測するために必要とされる時間という点で多大なオーバーヘッドを有している。したがって、これらのソリューションは、ゆっくりとした開発サイクル、たとえば、1年がかりの開発サイクルに適している。しかしながら、ソフトウェア製品に関するソフトウェア開発およびリリースサイクルは、短くなってきている。たとえば、ソフトウェア開発者たちが毎月、毎週、または毎日でさえ変更を作成してそれらを展開するいくつかのオンラインシステムがある。ベンダーに基づく計測ソリューションの多大なオーバーヘッドに起因して、開発者たちは、これらのサービスを速いペース開発環境において使用することは困難であると感じている。

0004

さらに、コードを計測するための従来の技術は、情報を取り入れ、情報を格納し、情報を分析して、レポートを生成する際に多大な遅延をもたらす。結果として、ソフトウェアにおいて問題が生じる時点と、コードの計測を介してその問題が検知される時点との間において多大な遅延がある可能性がある。したがって、ソフトウェアの計測に基づいてレポートを生成するための従来のシステムはしばしば、複雑なアプリケーションの速いペースの開発サイクルにおいては不適切である。

先行技術

0005

米国特許出願第14/800,677号明細書
米国特許出願第14/800,679号明細書

0006

計測分析システムの実施形態は、データストリーム言語において指定された命令に基づいてデータストリームを処理する。それらのデータストリームは、外部システム上で実行している計測されたコードから受信される。データストリーム言語のコマンドは、ブロックとして指定される。ブロックは、特定のタイプのオペレーション(または計算、たとえば、データを取り出すこと、データを処理することなど)を実行する。ブロックは、入力ポート出力ポート、およびパラメータ任意選択で含む。入力ポートは、外部システムから受信されること、またはその他のブロックによって生成されることが可能であるデータストリームのデータを受信する。ブロックの計算の結果は、出力としてブロックの出力ポートへ提供される。ブロックに関連付けられているパラメータが、ブロックの計算の指定において使用される。たとえば、パラメータは、データストリームを見つけ出すブロックに関する検索ストリングを指定する。データストリーム言語プログラムは、ブロックのネットワークを含み、ブロックの出力は、入力としてその他のブロックなどへ提供されることが可能である。ジョブは、データストリーム言語プログラムの実行を表す。複数のジョブが、同じデータストリーム言語プログラムに関して実行されることが可能である。ジョブは、開始時刻停止時刻、および周期性に関連付けられている。ジョブは、開始時刻において開始され、停止時刻まで実行される。ジョブは、指定されている周期性に基づくタイムインターバル周期的に実行される命令を含む。それぞれのタイムインターバルに関して、ジョブは、データストリームのセットからデータ値を受信し、データストリーム言語のブロックを実行して、出力データ値を生成する。その他の実施形態は、本明細書において示されている機能を、異なるシンタックスおよび異なるプログラミングパラダイムを伴って実施する。

0007

計測分析システムの実施形態は、データストリーム言語において指定された命令に基づいてデータストリームを処理する。それらのデータストリームは、外部システム上で実行している計測されたコードから受信されるか、計測された分析システムによってデータストリーム言語プログラムの結果として生成されることが可能である。計測分析システムは、データストリームとしきい値との比較を実行するデータストリーム言語プログラムを受信する。たとえば、データストリームのデータは、低しきい値および/または高しきい値と比較されることが可能である。低/高しきい値は、一定の値または動的に変わる値であることが可能である。低/高しきい値は、データストリームを生成するデータストリーム言語プログラムによって指定されることが可能である。

0008

thresholdブロックは、第1の入力および第2の入力を受信するように構成されている。たとえば、第1の入力は、thresholdブロックのデータポートによって受信され、第2の入力は、thresholdブロックのしきい値ポートによって受信される。データストリーム言語プログラムの命令の第1のセットは、第1の入力を生成し、データストリーム言語プログラムの命令の第2のセットは、第2の入力を生成する。システムは、データストリームの入力セットを受信する。システムは、命令の第1のセットを実行して、データストリームの入力セットのデータをアグリゲートして、thresholdブロックの第1の入力として提供されるデータ値を含む第1の複数のデータストリームを生成する。システムは、命令の第2のセットを実行して、データストリームの入力セットのデータをアグリゲートして、thresholdブロックの第2の入力として提供されるしきい値を含む第2の複数のデータストリームを生成する。システムは、データ値としての第1の入力として受信されたデータストリームを、しきい値としての第2の入力において受信されたデータストリームとマッチさせる。第1の入力において受信されたそれぞれのデータストリームに関して、システムは、データストリームのデータ値を、第2の複数のデータストリームからの対応するデータストリームからのしきい値と比較し、データ値およびしきい値の比較の結果に基づいて、イベントを生成するかどうかを決定する。

0009

実施形態においては、生成されたイベントは、システムによって分析されているデータストリームにおいて検知された異常として報告される。たとえば、異常は、特定のデータストリーム、またはデータストリームのセットに基づくアグリゲート値が、thresholdブロックの低しきい値および高しきい値によって設定されている範囲を超過したということを示す場合がある。低しきい値および高しきい値は、それら自体が動的に変わることが可能であり、たとえば、低しきい値および高しきい値は、特定の入力データストリームに基づく移動平均として定義されることが可能である。

0010

実施形態は、データストリーム言語において指定された命令に基づいてデータストリームを処理する計測分析システムについて記述している。このシステムは、複数のデータストリームについて記述するメタデータを格納する。このシステムは、実行のためのデータストリーム言語プログラムを受信する。このデータストリーム言語プログラムは、データストリーム言語を使用して指定された命令のセットを含む。これらの命令は、受信されたデータストリームに関連付けられているメタデータ属性に基づく検索式に関連付けられているfindブロックを含む。このシステムは、検索式を評価して、検索式に適合するデータストリームのセットを識別する。このシステムは、次のステップを実行することによってデータストリーム言語プログラムを繰り返し実行する。このシステムは、データストリームの識別されたセットのそれぞれのデータストリームからデータ値を受信する。このシステムは、データストリーム言語プログラムのそれぞれのブロックを実行し、その実行に基づいて結果データ値を生成する。それらの結果値は、データストリーム言語プログラムによって生成される結果データストリームに対応する。このシステムは、1つまたは複数の結果データ値を格納する。

0011

実施形態においては、findブロックは、データストリーム言語プログラムの第1のブロックである。このシステムは、findブロックを繰り返し評価する。findブロックによって識別されるデータストリームのセットは、findブロックの評価ごとに変わる可能性がある。findブロックは、データストリーム言語プログラムのブロックのうちの残りの実行の割合とは異なる割合で評価されることが可能である。

0012

システムの実施形態は、データストリーム言語において指定された命令に基づいてデータストリームを処理する。システムは、システムによって処理されるデータストリームについて記述するメタデータを格納する。それぞれのデータストリームに関するメタデータは、そのデータストリームに関連付けられている属性を含む。たとえば、データストリームは、「databank 1」という値を有している「source」という属性、および「numCacheMisses」という値を有している「metric_name」という属性に関連付けられている場合がある。システムは、入力データストリームを処理するためにデータストリーム言語プログラムを使用して指定された命令のセットを受信する。システムは、命令のセットを実行することによって結果データストリームを生成する。たとえば、データストリーム言語プログラムは、受信されたデータストリームを特定の属性によってグループ化するための命令を含むことができ、データストリーム言語プログラムの結果は、識別されたグループの数に基づいて複数の結果データストリームを含むことができる。システムは、結果データストリームのうちのそれぞれの次のステップを実行する。システムは、結果データストリームについて記述する属性の値のセットを決定する。システムは、結果データストリームについて記述するメタデータとして値のそのセットを格納する。システムは、データストリームに関する識別子を生成して、その識別子を、データストリームについて記述するメタデータに関連付ける。システムは、結果データストリームのデータを識別子に関連付けて格納する。

0013

実施形態においては、データストリーム言語プログラムは、複数のgroupbyコマンドを指定する。計測分析システムは、データストリーム言語プログラムの最後のgroupbyコマンドに関連付けて指定されているメタデータ属性の値をそれぞれの結果データストリームに関連付ける。

0014

本明細書において記述されている特徴および利点は、すべてを網羅したものではなく、とりわけ、図面、明細書、および特許請求の範囲を考慮すれば、当技術分野における標準的な技術者にとっては、多くのさらなる特徴および利点が明らかになるであろう。その上、本明細書において使用されている言葉は、主として読みやすさおよび教示上の目的で選択されており、開示されている主題線引きまたは画定を行うために選択されてはいない場合があるということに留意されたい。

図面の簡単な説明

0015

開示されている実施形態は、その他の利点および特徴を有しており、それらは、発明を実施するための形態、添付の特許請求の範囲、および添付の図(または図面)から、さらに容易に明らかになるであろう。図の簡単な紹介は、下記のとおりである。
実施形態による、計測されたソフトウェアに基づいて報告を行うための全体的なシステム環境を示す図である。
実施形態による、計測されたソフトウェアから受信されたデータストリームを処理するためのデータストリーム言語プログラムを実行するためのシステムのアーキテクチャーを示す図である。
実施形態による、データストリーム言語プログラムのブロックを処理するためのデータストリーム言語プロセッサのアーキテクチャーを示す図である。
実施形態による、データストリーム言語の特徴を示すためのデータストリーム言語プログラムの例を示す図である。
実施形態による、データストリームから受信されたデータをデータストリーム言語プログラムに基づいて処理するための計測分析システムの全体的なプロセスを示す図である。
実施形態による、計測されたソフトウェアから受信されたデータストリームの量子化のプロセスを示す図である。
実施形態による、データストリーム言語プログラムへの入力を提供するためのfindブロックによるデータストリームのセットの選択を示す図である。
実施形態による、findブロックの周期的な再評価の結果としてのデータストリーム言語プログラムへの入力を提供するデータストリームのセットに対する動的な変化を示す図である。
実施形態による、findブロックを使用してデータストリーム言語プログラムへの入力を提供するためのデータストリームのセットを識別するためのプロセスを示す図である。
実施形態による、fetchブロックを実行することによってデータストリームからデータを取り出すプロセスを示す図である。
図11A〜Cは、実施形態による、移動ウィンドウ計算のために時系列データストアからのデータと、データストリームからリアルタイムで受信されるデータとを組み合わせるプロセスを示す図である。
実施形態による、データストリームのデータをグループ化して結果データストリームのセットを生成するためのプロセスを示す図である。
実施形態による、データストリームを、それらのデータストリームについて記述するさまざまなメタデータ属性に基づいてグループ化することを示す例示的なシナリオを示す図である。
実施形態による、データストリームを、それらのデータストリームについて記述するさまざまなメタデータ属性に基づいてグループ化することを示す例示的なシナリオを示す図である。
実施形態による、時間に伴う入力データストリームにおける変化の結果としてgroupbyブロックによって生成される結果データストリームの動的な変化を示す例示的なシナリオを示す図である。
実施形態による、データストリーム言語プログラムのpublishブロックを実行することによって入手される結果データストリームを発行するプロセスを示すフローチャートである。
実施形態による、特定の属性によってグループ化されているデータストリームに関する固定されたしきい値を伴うthresholdブロックの使用を示すデータストリーム言語プログラムの例を示す図である。
実施形態による、メタデータ属性によってグループ化されているデータストリームに関する動的に変わるしきい値を伴うthresholdブロックの使用を示すデータストリーム言語プログラムの例を示す図である。
実施形態による、thresholdブロックを含むデータストリーム言語プログラムを実行するプロセスを示すフローチャートである。
実施形態による、データストリームのグループを含む入力に適用されるユーザ定義関数に基づいて結果データストリームを生成するためのカスタマイズされたブロックの使用を示すデータストリーム言語プログラムの例を示す図である。
実施形態による、カスタマイズされたブロックを伴うデータストリーム言語プログラムを実行するプロセスを示すフローチャートである。
実施形態による、計測分析システムによって受信されたデータストリームを示すデータストリーム言語プログラムの実行の結果を表示しているユーザインターフェーススクリーンショットを示す図である。
実施形態による、計測分析システムによって受信されたデータストリームのデータの1分平均を示すデータストリーム言語プログラムの実行の結果を表示しているユーザインターフェースのスクリーンショットを示す図である。
実施形態による、データセンターによってグループ化されたデータストリームの合計を示すデータストリーム言語プログラムの実行の結果を表示しているユーザインターフェースのスクリーンショットを示す図である。
実施形態による、データセンターによってグループ化されたデータストリームに関する、キャッシュヒット率と、キャッシュヒット率およびミス率の合計との比率を決定するカスタマイズされたマクロブロックを含むデータストリーム言語プログラムの実行の結果を表示しているユーザインターフェースのスクリーンショットを示す図である。

0016

次いで、いくつかの実施形態に対して詳細に参照が行われ、それらの実施形態の例が、添付の図において示されている。実用的である場合は常に、類似のまたは同様の参照番号が、図において使用されることが可能であり、類似のまたは同様の機能を示すことができるということが留意される。それらの図は、開示されているシステム(または方法)の実施形態を、例示のみの目的で示している。本明細書において示されている構造および方法の代替実施形態が、本明細書において記述されている原理から逸脱することなく採用されることが可能であるということを、当業者なら、以降の説明から容易に認識するであろう。

実施例

0017

全体的なシステム環境
図1は、実施形態による、計測されたソフトウェアに基づいて報告を行うための全体的なシステム環境を示している。この全体的なシステム環境は、計測分析システム100、1つまたは複数の開発システム120、管理システム160、および報告システム150を含む。その他の実施形態においては、図1において示されているよりも多くのコンポーネントまたは少ないコンポーネントが使用されることが可能である。たとえば、開発システム120、管理システム160、および報告システム150は、ネットワーク(図1においては示されていない)を介して計測分析システム100と対話することができる。さらに、図1において示されているそれぞれのシステムのさらに多くのインスタンスまたはさらに少ないインスタンスが存在することが可能であり、たとえば、複数の報告システム150が存在することが可能である。

0018

図1およびその他の図は、同様の参照番号を使用して、同様の要素を識別している。参照番号の後の文字、たとえば「130a」は、そのテキストが、その特定の参照番号を有している要素を特に指しているということを示している。テキストにおいて後続の文字を伴わない参照番号、たとえば「130」は、図においてその参照番号を有している要素のうちのいずれかまたはすべてを指す(たとえば、テキストにおける「130」は、図における参照番号「130a」および/または「130b」を指す)。

0019

計測分析システム100は、別々の開発システム120によって送信されたメトリックの値を含むデータを受信する(計測分析システム100は、本明細書においては分析システムまたはデータ分析システムと呼ばれる場合もある)。開発システム120は、計測されたソフトウェア、たとえば、アプリケーション130を実行する。アプリケーション130は、計測されたソフトウェアの例として図1において示されているが、本明細書において開示されている技術は、アプリケーションソフトウェアに限定されず、その他の種類のソフトウェア、たとえば、サーバソフトウェアや、クライアントデバイスウェブサイトなどの上で実行するソフトウェアに適用可能である。さらに、開発システム120は、計測されたソフトウェアを、それが新たなソフトウェアの開発のために使用されるか否かを問わずに実行するように構成されている任意のコンピューティングシステムを含む。たとえば、開発システム120は、テストの目的、ステージングの目的、または、企業において実行する任意のプロダクションシステムのために使用されるコンピューティングシステムであることが可能である。

0020

開発システム120上で実行するソフトウェアは、ソフトウェアを計測した結果として生成された情報を計測分析システム100へ送信するように構成されている。たとえば、アプリケーション130は、さまざまなメトリックに対応する値を、それらが生成された際に計測分析システム100へ送信することができる。アプリケーション130は、メトリックのグループ値を送信すること、およびそれらを周期的に計測分析システム100へ送信することが可能である。別々のアプリケーション130は、同じメトリックを、または別々の割合で別々のメトリックを送信することができる。同じアプリケーションは、別々の割合で別々のメトリックを送信することができる。アプリケーション130は、計測分析システム100によってサポートされているアプリケーションプログラミングインターフェースAPI)を呼び出すことによって、計測分析システム100へデータを送信する。

0021

ソフトウェアプログラムは、アプリケーションにカウンタまたはゲージを加えるように計測されることが可能である。カウンタは、ソフトウェアにおける特定のイベントの発生時にインクリメントされる値を格納する命令を含む。カウンタは、コードの特定の部分、たとえば、関数またはメソッド条件付きコードの特定の分岐例外ループなどが実行される回数を決定するために使用されることが可能である。

0022

典型的には、カウンタ値単調に変わり、たとえば、カウンタ値は単調に増大(または減少)することが可能である。たとえば、システムが実行を開始して以降にイベントが発生した回数をカウンタが追跡把握する場合には、カウンタ値は、イベントの発生がシステムによって検知されるたびに増大する。カウンタの値どうしが比較されて、2つの異なる時点における特定のカウンタ値の変化を決定することが可能である。たとえば、時刻t1とt2との間におけるタイムインターバル内に特定のイベントが発生する回数は、対応するカウンタ値におけるt1からt2への変化を計算することによって決定されることが可能である。カウンタの現在の値を計測分析システム100へ送信するために、アプリケーション130によって計測分析システムのAPIが呼び出されることが可能である。

0023

下記は、アプリケーション130の計測されたコードの例である。計測されているコード内に含まれている下記の命令は、アクションまたはエンティティーカウントを追跡把握するためのカウンタオブジェクトを作成する。
counter 1=createCounter(source=“web 1”, metric=“metric 1”);

0024

上記の命令は、カウンタオブジェクトを作成し、それを変数counter 1に割り振る。そのカウンタオブジェクトは、ソース「web 1」およびメトリック「metric 1」に関連付けられている。実施形態においては、ソースおよびメトリック値は、カウンタ(またはゲージ)に関連付けられているデータストリームを一意に識別する。その他の実施形態においては、データストリームを一意に識別するために、より多くのまたはより少ないキー値ペアが使用されることが可能である。

0025

カウンタの作成中に指定された値のうちの1つまたは複数は、そのカウンタに対応するデータが、計測されたコードによって計測分析システム100へ送信されたときに受信される。実施形態は、それぞれのデータストリームとともに送信される情報の量を削減するためにアプリケーション130が計測されることを可能にする。これは、コードを計測した結果としてアプリケーション130においてもたらされるオーバーヘッドの量を削減する。

0026

アプリケーション130の計測されたコードは、そのコード内のさまざまな場所でカウンタ値を更新するための命令を含むことができる。たとえば、counter 1というカウンタは、「counter 1 .increment()」という命令を実行することによってインクリメントされることが可能である。カウンタは、コードに関連付けられているさまざまなアクションまたはエンティティーを追跡把握するためにインクリメントされることが可能である。たとえば、カウンタは、特定の関数またはメソッドがコールされたときは常にインクリメントされることが可能であり、カウンタは、条件式の特定の分岐が実行されたときは常にインクリメントされることが可能であり、カウンタは、特定のタイプのオブジェクトが、たとえば、オブジェクトのコンストラクタにおいて作成されたときは常にインクリメントされることが可能である。カウンタのインクリメント命令は、条件付きで、たとえば、関数がパラメータの特定の組合せとともに呼び出された場合にコールされることが可能である。アプリケーション130は、計測分析システム100のAPIを呼び出すことによってカウンタ値を計測分析システム100へ通信する。

0027

ゲージは、アプリケーション130の特定のランタイム特徴、たとえば、ヒープサイズキャッシュミスまたはヒットの数、使用されているアクティブメモリ、CPU(中央処理装置利用状況、要求に応答するためにかかる合計時間、サービスに接続するためにかかる時間などを測定するための命令を含む。ゲージは、特定のアプリケーション固有パラメータまたはビジネス関連の値、たとえば、トランザクションの数、ユーザの数などを追跡把握するために使用されることも可能である。ゲージは、構成可能であるインターバルに基づいて周期的に呼び出されることが可能である。ゲージの値は、計測分析システム100へ周期的に送信される。

0028

管理システム160は、特権を有するユーザ、たとえば、システム管理者がデータストリームをメタデータに関連付けることを可能にする。管理システム160は、システム管理者がメタデータを指定するためのユーザインターフェースを提供する管理アプリケーション170を含む。メタデータは、プロパティー、たとえば名前値ペアを含む。計測分析システム100は、データストリームについて記述するメタデータを受信し、そのメタデータを格納する。データストリームについて記述するメタデータを、それぞれのデータストリームから受信されるデータから独立して指定できることは、データストリームに基づいてレポートを生成する際にいくつかの利点を提供する。

0029

例として、計測分析システム100は、それぞれのデータストリームについて記述するメタデータに対する修正を、アプリケーション130の計測されたソフトウェアに対するいかなる修正も必要とせずに受信することができる。結果として、計測分析システム100は、新たなレポートの仕様および既存のレポートに対する修正を受信し、開発者がアプリケーション130を修正することを必要とすることなく、新たなレポート/修正されたレポートに基づく結果を生成する。

0030

これは、ソフトウェアを計測するための新たなパラダイムを提供する。なぜなら、開発者は、ソフトウェアを計測するための命令を加えている間に生成される必要があるレポートのタイプを考慮する必要がないからである。開発者は、自分のソフトウェアを単に計測して、生データを生成し、それらの生データは、生成されるレポートにおいてさまざまな方法で組み合わされることが可能である。ソフトウェアの計測に基づいてリアルタイムの報告を行うためのシステムおよび方法は、2015年7月15日に出願された特許文献1において記述されており、この特許文献1は、その全体が参照によって本明細書に組み込まれている。

0031

さらに、計測されたソフトウェアを生成することにおけるエキスパートである人は、ソフトウェア開発者とは異なることがある。たとえば、開発者ではないデータ分析におけるエキスパートは、開発プロセスに巻き込まれることなく、データストリームに関するメタデータを定義し、レポートを生成することができる。これは重要である。なぜなら、データを分析するために必要とされるスキルは、典型的には、ソフトウェアを開発するために必要とされるスキルとは異なるからである。

0032

さらに、計測分析システム100は、既存のレポートを合成して新たなアナリティクス機能を加えることによって既存のレポートの上に構築されたレポートを受信して処理することもできる。計測分析システム100は、新たなレポートの結果を生成し、それらの結果を、計測されたソフトウェアからのデータストリームを計測分析システム100が受信した際にリアルタイムで提示するために送信する。計測分析システム100は、アプリケーション130の計測されたコードに対するいかなる修正も必要とすることなく、これらのさらなるレポートを生成し、既存のレポートを修正する。

0033

さらに、計測分析システム100は、データストリームについて記述するメタデータと、データストリームのデータとの分離を提供する。したがって、開発システム120から計測分析システム100へ伝送される必要があるデータの量が削減される。それぞれのアプリケーション130は、メトリックのデータ値、およびメトリックを識別する情報のみを伝送する。メタデータ情報は、データストリームのデータソースから独立したソースから別個に受信される。したがって、それぞれのデータストリームのデータの量を増大させることなく、いかなる量のメタデータも導入されることが可能である。

0034

報告システム150は、クライアントデバイスであることが可能である。報告システム150は、ユーザが計測分析システム100と対話することを可能にするクライアントアプリケーション140を含む。実施形態においては、クライアントアプリケーション140は、インターネットブラウザであり、このインターネットブラウザは、計測分析システム100にアクセスするためのクライアント側コード(たとえば、Javaスクリプト)を含むことができる。その他の実施形態においては、クライアントアプリケーション140は、計測分析システム100と対話するために開発されたプロプライエタリアプリケーションである。

0035

報告システム150は、従来のコンピュータシステム(たとえば、デスクトップコンピュータもしくはラップトップコンピュータ)、タブレット、またはコンピュータ機能を有するデバイス、たとえば、携帯情報端末(PDA)、モバイル電話スマートフォン、または別の適切なデバイスであることが可能である。報告システム150は、ネットワークを介して計測分析システム100と対話する。そのネットワークは、有線通信システムおよび/またはワイヤレス通信システムの両方を使用する、ローカルエリアネットワークおよび/またはワイドエリアネットワークの任意の組合せを含むことができる。一実施形態においては、そのネットワークは、標準的な通信テクノロジーおよび/またはプロトコルを使用する。

0036

計測分析システム100は、1つまたは複数のプロセッサと、メモリと、セカンダリーストレージと、入力/出力コントローラとを含むコンピューティングシステム上でホストされることが可能である。計測分析システム100をホストするために使用されるコンピューティングシステムは典型的に、たとえば、報告システム150として使用される典型的なコンピューティングシステムと比較して、強力なプロセッサ、大きなメモリ、および高速の入力/出力システムを使用するサーバクラスシステムである。

0037

実施形態においては、いくつかの開発システム120からのデータが、たとえば、サーバによって統合されることが可能であり、組み合わされたデータは、計測分析システム100へ送信されることが可能である。たとえば、企業は、内部で別々の開発システム120からデータストリームを受信して組み合わされたデータをバッチ形態で計測分析システム100へ周期的に送信するサーバをインストールすることができる。これは、企業からの外部通信効率性を可能にする。しかしながら、この構成は、計測分析システム100へ情報を通信する際の遅延と、報告システム150によってデータを報告する際の対応する遅延とをもたらす場合がある。

0038

次元をデータストリームに関連付けること
データストリームは、データストリームに関連付けられている次元の値を表す座標のセットを使用することによって識別されることが可能である。次元とは、値のセットの1つの値を取ることができるデータストリームのプロパティーを指す。それぞれのデータストリームは、次元に関する値に関連付けられることが可能である。たとえば、次元は、データストリームのソース、またはデータストリームに関連付けられているメトリック名であることが可能である。データストリームのソースは、サーバ名、サービス名などによって識別されることが可能である。メトリック名の例は、cpu(中央処理装置)負荷、キャッシュミス、キャッシュヒットなどである。次元の値は、データストリームの座標値とも呼ばれる。座標値は、メタデータストア230において格納されているメタデータ属性として表されることが可能である。ソースおよびメトリックという2つの次元を与えられると、ソースおよびメトリックを表す2つの座標、たとえば、(server 1, cpu_load)または(server2, memory_usage)を提供することによって、データストリームが識別されることが可能である。

0039

データストリームは、複数の次元(すなわち、上述の2つの次元、すなわち、ソースおよびメトリック名よりも多く)によって特徴付けられることが可能である。たとえば、それぞれのサーバが複数のCPUを有している場合には、cpu_idという次元が含まれることが可能である。したがって、システムから入手されるそれぞれのデータストリームは、(source_id, cpu_id, metric_name)、すなわち、ソース識別子、cpu識別子、およびメトリックを表す名前によって特徴付けられることが可能である。3つの座標を使用して識別されるデータストリームの例は、(server 1, cpu 1, load)、(server 1, cpu2, load)、(server2, cpu 1, load)、(server2, cpu2, load)などを含む。

0040

次元の別の例として、システムは、顧客名を次元として定義することができる。顧客の名前は、計測されたソフトウェアによって、たとえば、開発システム120上で実行する計測されたソフトウェアの構成パラメータに基づいて報告されることが可能である。顧客名は、システムプロパティーを使用して、計測されたソフトウェアに関して指定されることが可能である。計測されたソフトウェアは、顧客名が、その特定の顧客に関連付けられているデータストリームを識別する場合には、それを含める。データストリームを顧客に関連付けることができることは、計測分析システムが、顧客に固有の分析を実行すること、たとえば、それぞれの顧客に関するシステムの使用について報告すること、しきい値数よりも多くのエラーを報告する顧客を識別することなどを可能にする。

0041

データストリームは、計測されたソフトウェアから入手されることが可能であり、または計測分析システム内のデータストリーム言語プログラムのブロックの実行の結果として生成されることが可能である。データストリームは、計測分析システムにおいて、たとえば、データストア(本明細書において記述されている時系列データストア260など)において格納されているデータを含むこともできる。

0042

計測分析システムのシステムアーキテクチャ
図2は、実施形態による、計測されたソフトウェアから受信されたデータストリームを処理するためのデータストリーム言語プログラムを実行するためのシステムのアーキテクチャーを示している。計測分析システム100は、インターフェースモジュール210、量子化モジュール240、メタデータモジュール220、メタデータストア230、データポイントルーティングモジュール250、アナリティクスエンジン270、ユーザインターフェースマネージャー280、データストリーム言語プロセッサ200、時系列データストア260、およびソフトウェアバス290を含む。その他の実施形態においては、計測分析システム100は、本明細書において記述されていないその他のモジュールを含むことができる。特定のモジュールによって提供されるものとして示されている機能は、代わりにその他のモジュールによって実施されることが可能である。

0043

インターフェースモジュール210は、計測分析システム100と通信する外部システム、たとえば、開発システム120からの要求を受信する。インターフェースモジュール210は、外部システムが呼び出すことができるさまざまなアプリケーションプログラミングインターフェース(API)をサポートする。インターフェースモジュール210は、さまざまなベンダーによって提供される機能を使用して計測されるアプリケーション130によって提供されるデータを、計測されたコードが、インターフェースモジュール210によって処理されることが可能であるフォーマットで情報を送信する限り、受信して処理することができる。

0044

インターフェースモジュール210は、1つまたは複数の開発システム120からデータストリームの形態でデータを受信する。実施形態においては、インターフェースモジュール210は、データを受信し、着信データタプルとして表す。したがって、それぞれのデータストリームは、複数のタプルとして表され、それぞれのタプルは、データポイントを表す。インターフェースモジュール210によって受信されるデータのタプルは、さまざまな要素を含む。データのタプルは、メトリック識別子、たとえば、そのタプルに対応するメトリックの名前、およびメトリックの値を含む。受信されるデータのタプルは、その他の要素、たとえば、そのデータを送信しているアプリケーション130によってそのデータが取り込まれた時刻に対応するタイムスタンプ、そのデータに関連付けられている1つまたは複数のプロパティーをさらに含むことができる。

0045

実施形態においては、タプルに関連付けられているタイムスタンプは、データ値が計測分析システム100によって受信された時刻を表す。データに関連付けられているプロパティーは、名前/値ペアの形態で提供されることが可能である。これらのプロパティーは、受信されたデータについて記述するさらなる情報、たとえば、ソースに関連付けられているホスト名、サーバ名、デバイス名、またはサービス名、データに関連付けられているメソッド名または関数名、アプリケーションインスタンス識別子等など、データのソースについて記述する情報を提供することができる。

0046

実施形態においては、インターフェースモジュール210は、インターフェースモジュール210によって受信されたレコードに対して識別子を生成して割り振る。その識別子は、本明細書においては時系列識別子と呼ばれる(本明細書においてはTSIDまたはtsidとも呼ばれる)。メトリック名にマッチするすべてのタプル、およびタプルとともに受信されたプロパティーのセットに対して、一意の時系列識別子が割り振られる。したがって、タプル(メトリック名、プロパティー、メトリック値、タイムスタンプ)が、タプル(tsid、メトリック値、タイムスタンプ)にマップされる。たとえば、mlというメトリック名、およびhiというホスト名をタプルが提供する場合には、mlというメトリック名およびhiというホスト名を伴うすべてのタプルが、同じ時系列識別子を割り振られる。したがって、tsidは、計測分析システム100によって受信されるデータストリームのすべてのタプルを一意に識別する。

0047

量子化モジュール240は、受信されたデータ値を処理して、任意のタイムインターバルでデータが利用可能であるデータの入力時系列を、規則的なタイムインターバルでデータが利用可能である時系列に変換する。たとえば、入力時系列で受信されるデータ値は、不規則なインターバルで発生する場合があるが、量子化モジュール240は、その時系列のデータを処理して、周期的に、たとえば、1秒ごとに、または5秒ごとに、または15秒ごとに、といった具合にデータが発生する時系列を生成する。このプロセスは、本明細書においては時系列の量子化と呼ばれる。実施形態においては、インターフェースモジュール210は、複数のスレッドまたはプロセスを作成し、それぞれのスレッドまたはプロセスは、データストリームに対応するデータを受信するように構成されている。それぞれのスレッドまたはプロセスは、それぞれのタイムインターバルに関してそれぞれのデータストリームについて受信されたデータの量子化を実行するために量子化モジュール240を呼び出す。計測されたソフトウェアのデータストリームの量子化のためのシステムおよび方法は、2015年7月15日に出願された特許文献2において記述されており、この特許文献2は、その全体が参照によって本明細書に組み込まれている。

0048

メタデータモジュール220は、開発システム120から受信されたさまざまなデータストリームについて記述するメタデータ情報を受信して格納する。実施形態においては、メタデータモジュール220において格納されるメタデータは、ユーザ、たとえば、管理システム160を使用して計測分析システム100と対話するシステム管理者から受信される。

0049

メタデータは、名前/値ペアとして表されることが可能である。実施形態においては、メタデータは、メタデータオブジェクトとして表され、それぞれのオブジェクトは、名前/値ペアとして表されることが可能であるプロパティーのセットを定義する。データストリームのセットが、メタデータオブジェクトに関連付けられることが可能である。したがって、メタデータオブジェクトによって表されるすべてのプロパティーは、そのメタデータオブジェクトに関連付けられているそれぞれのデータストリームに関連付けられている。

0050

メタデータデータストア230は、メタデータオブジェクト、およびそれらのメタデータオブジェクトとデータストリームとの関連付けを格納する。メタデータデータストア230は、それぞれのメタデータオブジェクトに関する識別子(ID)と、そのメタデータオブジェクトによって表されるプロパティーとを格納する。実施形態においては、それぞれのデータストリームは、そのデータストリームを一意に識別する時系列識別子に関連付けられている。メタデータデータストア230は、それぞれのメタデータオブジェクトを時系列識別子の値のセットにマップするインデックスを格納する。メタデータストア230は、メタデータオブジェクトを修正するための命令を受信することができる。たとえば、メタデータストア230は、メタデータオブジェクトによって表されるいくつかのプロパティーを修正、追加、または削除するための命令を受信することができる。あるいは、メタデータストア230は、メタデータオブジェクトからデータストリームへのマッピングを修正するための命令を受信することができる。たとえば、メタデータストア230は、データストリームをメタデータオブジェクトに関連付けるための命令、またはメタデータオブジェクトとデータストリームとの間における関連付けを削除するための命令を受信することができる。

0051

実施形態においては、メタデータストア230は、リレーショナルデータベースとして表されているが、その他の任意のタイプのデータベースまたはデータストアとして表されることが可能である。たとえば、メタデータストア230は、メタデータオブジェクトIDを、データストリームを識別する時系列IDにマップするテーブルを格納するリレーショナルデータベースであることが可能である。その他のデータベーステーブルは、それぞれのメタデータオブジェクトに関連付けられているプロパティーを、メタデータオブジェクトIDから、名前/値ペアとして表されるそれぞれのプロパティーへのマッピングとして格納することができる。

0052

ユーザインターフェースマネージャー280は、ユーザがデータストリーム言語プログラムのパラメータを指定すること、およびデータストリーム言語プログラムの実行の結果を提示することを可能にするためのユーザインターフェースをレンダリングする。ユーザインターフェースマネージャー280は、データストリーム言語プログラムのリアルタイムの結果を、データストリームのデータが受信されるにつれて周期的に更新される1つまたは複数のチャートとして表示することができる。ユーザインターフェースマネージャー280はまた、ユーザがデータストリーム言語プログラムをテキストによってではなく視覚的に指定することを可能にするユーザインターフェースを提示する。ユーザインターフェースマネージャー280によって提示されるユーザインターフェースのスクリーンショットの例が、本明細書において記述されている。

0053

時系列データストア260は、さまざまなソース、たとえば、開発システム120から受信されたデータを格納する。時系列データストア260は、本明細書においては時系列データベース(またはTSDB)とも呼ばれる。実施形態においては、時系列データストア260はまた、データが量子化された後の時系列データを格納する。時系列データストア260は、それぞれの時系列に関するロールアップデータを格納することもできる。時系列データストア260はまた、さまざまなアナリティクス要求の結果、たとえば、ユーザによって要求されたさまざまなレポートの結果を格納する。アナリティクスエンジン270は、特定のレポートに関する結果、たとえば、時系列データストア260において格納されているデータを、さまざまなソースからのデータストリームとして入手された新たなデータと組み合わせることによる時間のインターバルにわたる移動平均を計算する。

0054

ソフトウェアバス290は、計測分析システム100のモジュールが、データストリームのデータを計測分析システム100のその他のモジュールに提供するためのメカニズムを提供する。データストリーム言語プログラムは、データストリームをソフトウェアバス290へ送信することができる。その他のモジュール、たとえば、フェッチモジュール320、探索モジュール310、ウィンドウモジュール380などは、ソフトウェアバス290からのデータを読み取って、そのデータ上でさらなる処理を実行することができる。たとえば、ソフトウェアバス290上で発行されたデータストリーム言語プログラムのデータストリーム出力は、ジョブとして実行する別のデータストリーム言語プログラムのfindブロックによって識別されることが可能である。

0055

データストリーム言語プロセッサ200は、データストリーム言語を使用して指定されたプログラムを実行する。データストリーム言語プロセッサ200は、データストリーム言語プログラムを受信し、そのデータストリーム言語プログラムを解析して、そのプログラムを検証する。データストリーム言語プロセッサ200は、データストリーム言語プログラムの表示を生成し、その表示を使用してデータストリーム言語プログラムを実行する。

0056

データストリーム言語を使用して指定される要求は、さまざまな開発システム120から受信されるデータに関連付けられているメタデータに基づくクエリーである。データストリーム言語は、さまざまなタイプのアナリティック機能、たとえば、アグリゲーションおよび変換をサポートする。データストリーム言語は、アグリゲーションおよび変換を含むさまざまな機能をさまざまな方法で合成する能力を提供する。実施形態においては、データストリーム言語プロセッサ200は、データストリーム言語を使用して指定されたプログラムを解析し、そのプログラムの実行可能な表示を生成し、その生成された表示を実行する。

0057

データストリーム言語
データストリーム言語を使用して指定されるプログラムは、ブロックと呼ばれる計算の単位を含む。それぞれのブロックは、データブロックによって実行される特定の処理または計算に関連付けられている。それぞれのブロックは、1つまたは複数の入力ポートおよび1つまたは複数の出力ポートを有することもできる。ブロックは、入力ポートを介して入力を受信し、そのデータを使用して特定の計算を実行し、その計算の結果を出力ポートへ送信する。このプロセスは、事前に指定された周期性で繰り返される。したがって、入力ポートは、データをブロックに提供するためのメカニズムの役割を果たし、出力ポートは、ブロックのデータを出力するためのメカニズムの役割を果たす。

0058

実施形態においては、それぞれのブロックは、そのブロックのタイプに関連付けられている。ブロックのタイプは、そのブロックによって実行される計算を決定する。データストリーム言語によってサポートされるブロックのタイプは、findブロック、fetchブロック、統計計算ブロック、thresholdブロックなどを含む。ブロックは、特定の構成パラメータに関連付けられることが可能である。たとえば、findブロックは、入力としての表現を取ることができる。データストリーム言語プログラムは、ブロックのタイプのインスタンスを含む。たとえば、特定の検索式を伴うfindブロックは、データストリーム言語プログラム内に含まれているfindブロックのインスタンスである。

0059

実施形態においては、ブロックの入力ポートは、「?」という文字で識別され、出力ポートは、「!」という文字で識別される。その他の実施形態は、その他のシンタックスを使用して入力/出力ポートを識別することができる。たとえば、ブロックBlが入力ポートin1およびin2を有している場合には、特定の入力ポート(たとえばin2)は、「B1?in2」として識別されることが可能である。同様に、ブロックB1が出力ポートout1およびout2を有している場合には、特定の出力ポート(たとえばout2)は、「B2!out2」として指定されることが可能である。ブロックが単一の入力/出力ポートを有している場合には、データストリーム言語プログラムは、そのポートを識別することができない。たとえば、ブロックB2が単一の入力ポートを有している場合には、その入力ポートは、「B2」と呼ばれることが可能である。同様に、ブロックB2が単一の出力ポートを有している場合には、その出力ポートは、「B2」と呼ばれることが可能である。

0060

2つのブロックは、一方のブロックの出力が他方のブロックの入力として提供されるということを指定することによって接続されることが可能である。したがって、データストリーム言語プログラムは、ブロックのネットワークとみなされることが可能である。実施形態においては、2つのブロックの間における接続は、それらの2つのブロックの間における矢印を使用して指定される。たとえば、B1およびB2の両方が、単一の入力ポートおよび単一の入力ポートを有している場合には、「B1→B2」は、B1の出力がブロックB2の入力として提供されるということを指定する。同様に、B1が、2つの出力ポートout1およびout2を有していて、B2が、2つの入力ポートi1およびin2を有している場合には、「B1!out1→B2?in2」という表現によって、B1のout1ポートがB2のin2ポートに接続されることが可能である。

0061

データストリーム言語プロセッサ200は、データストリーム言語プログラムに基づいて複数のジョブを実行することができる。それぞれのジョブは、開始時刻、終了時刻、および周期性に関連付けられることが可能である。したがって、ジョブは、周期性によって指定されたインターバルで開始時刻から終了時刻まで実行される。周期性は、データがデータストリーム言語プログラムによって処理される割合を指定する。ユーザは、同じデータストリーム言語プログラムに基づいて実行のための別々のジョブを指定することができ、それぞれのジョブは、別々の開始時刻、終了時刻、および周期性に関連付けられている。

0062

図3は、実施形態による、データストリーム言語プログラムのブロックを処理するためのデータストリーム言語プロセッサのアーキテクチャーを示している。図3において示されているように、データストリーム言語プロセッサ200は、データストリーム言語のさまざまなタイプのブロックを処理するためのモジュールを含む。したがって、データストリーム言語プロセッサ200は、探索モジュール310、フェッチモジュール320、計算モジュール330、しきい値モジュール340、発行モジュール350、グループ化モジュール360、ウィンドウモジュール380、データストリームメタデータジェネレータ370、およびカスタマイズドブロックモジュール390を含む。その他の実施形態は、図3において示されているモジュールよりも多くのモジュールまたは少ないモジュールを含むことができる。特定のモジュール、たとえばパーサは、図3においては示されていない。それぞれのモジュールの詳細は、それぞれのモジュールによって処理されるブロックのタイプの詳細とともに本明細書においてさらに記述されている。

0063

探索モジュール310は、データストリーム言語プログラムの残りによって処理するためのデータストリームのセットを識別するためにfindブロックを実行する。フェッチモジュール320は、識別されたデータストリームからデータをフェッチし、そのデータを、データストリーム言語プログラムの後続のブロックによって処理するために提供する。計算モジュール330は、データストリーム言語プログラムにおいて指定されている統計計算、たとえば、平均、メジアン、合計などを実行する。しきい値モジュール340は、着信データストリームのデータをしきい値と比較して、その着信データが特定の範囲を超過しているかどうかを決定する。比較のために指定されるしきい値は、動的に変わることが可能であり、たとえば、しきい値は、特定の係数によって拡大された入力データストリームの1時間移動平均として指定されることが可能である。発行モジュール350は、publishブロックを実行し、このpublishブロックは、このpublishブロックに先立つブロックの出力を、結果を提示するために、データベースにおいて格納するために、またはさらなる処理のためにその他のブロックに提供するために、ユーザインターフェース(たとえば、ダッシュボード)を含むさまざまな受信機に提供する。グループ化モジュール360は、入力データストリームのデータのグループ化を実行して、それぞれのグループに対応する結果データストリームのセットを生成する。それらのグループは、グループ化コマンドを用いて指定された1つまたは複数の属性、たとえば、それぞれのデータセンターからのデータストリームのグループに基づくことが可能である。データストリームメタデータジェネレータ370は、データストリーム言語プログラムを実行した結果として生成された結果データストリームを表すメタデータを生成し、計測分析システム100のその他のコンポーネントがその結果データストリームを使用することを可能にするためにそのメタデータをメタデータストア230において格納する。カスタマイズドブロックモジュール390は、ユーザによって定義されたブロック(カスタマイズされたブロック)をデータストリーム言語プログラムにおいて処理する。

0064

例示的なデータストリーム言語プログラム
図4は、実施形態による、データストリーム言語の特徴を示すためのデータストリーム言語プログラムの例を示している。図4は、データストリーム言語プログラムをブロックという点から表している。図4において示されているデータストリーム言語プログラムは、下記のように指定されることが可能である。
find(“source:analytics*”)→fetch
→groupby(“datacenter”)
→stats!mean
→publish

0065

上述のデータストリーム言語プログラムの第1のブロックは、検索式を指定するストリングパラメータを取るfindブロック410である。findブロックは、検索式を満たす、計測分析システム100によって受信されたデータストリームのセットを見つけ出す。たとえば、findブロック410は、「dev」というメタデータ属性値の「source」となるすべてのデータストリームを識別する検索式“source:dev”を取る。たとえば、企業が、すべての開発システムを「dev」というソース値に関連付ける場合がある。findブロックの出力は、入力としてfetchブロック420へ提供される。

0066

fetchブロック420は、findブロックによって識別されたデータストリームからデータを取り出す。fetchブロックは、事前に指定された周期性でデータを受信する。fetchブロックは、インターフェースモジュール210によって受信されて量子化モジュール240によって量子化されたデータストリームのリアルタイムデータを受信することができる。fetchブロック420は、時系列データストア260において格納されているデータストリームのデータを受信することもできる。fetchブロック420の出力は、入力としてgroupbyブロック430へ提供される。

0067

groupbyブロック430は、入力としてデータストリームの1つまたは複数の属性の名前を取る。groupbyブロック430は、指定された属性によってデータストリームをグループ化する。上述の例において示されているように、groupbyブロック430は、入力として「datacenter」という属性を取り、データストリームをそれらのデータセンター値によってグループ化する。したがって、同じデータセンターを有しているすべてのデータストリームのデータは、ともにグループ化される。groupbyブロック430は、データセンターのそれぞれの値に対応するデータストリームを出力する。groupbyブロック430の出力は、入力としてstatsブロック440(これは、統計計算ブロックのタイプである)へ提供される。

0068

statsブロック440は、複数の出力、たとえば、平均、メジアン、合計などを有する。それぞれの出力ポートは、出力の名前によって指定された計算のタイプに基づく値を提供する。statsブロック440は、groupbyブロック430からの入力として受信されたデータストリームのそれぞれのグループに関する平均値を計算する。したがって、statsブロック440は、それぞれのデータセンターのデータストリームから受信されたデータの平均を決定する。図4において示されているように、statsブロックの平均出力ポートは、publishブロック450への入力を提供する。

0069

publishブロック450は、受信された入力をダッシュボード上に発行するように構成されることが可能である。publishブロックは、データをソフトウェアバス290上に発行するように構成されることが可能である。ソフトウェアバス290は、そのデータを計測分析システム100のその他のすべての他のモジュールに提供する。データストリーム言語プロセッサ200は、上で指定されたさまざまなブロックを、データストリーム言語プログラムに関して指定された周期性で実行する。

0070

データストリーム言語プログラムの実行の全体的なプロセス
図5は、実施形態による、データストリームから受信されたデータをデータストリーム言語プログラムに基づいて処理するための計測分析システムの全体的なプロセスを示している。メタデータモジュール220は、データストリームについて記述するメタデータを510で受信する。メタデータ定義は、データストリームそのもののデータから独立して受信される。たとえば、データストリームは、いかなるプロパティー(たとえば、名前/値ペア)も提供することなく、データ値と、そのデータ値に関連付けられているタイムスタンプとを含むタプルを単に提供することができる。メタデータモジュール220は、データストリームについて記述するプロパティーを、そのデータストリームを提供しているソースとは異なるソースから受信する。たとえば、データストリームは、開発システム120上で実行している計測されたソフトウェアのインスタンスによって提供され、メタデータ定義は、管理システム160を介してシステム管理者によって提供されることが可能である。

0071

アナリティクスエンジン270は、データストリームについて記述するメタデータ属性を使用してデータストリーム言語プログラムを520で受信する。データストリーム言語プログラムは、計測されたソフトウェアについて記述するレポートを生成するために、およびリアルタイムで、すなわち、データストリームのデータが受信されるにつれて結果を提供するために計測分析システム100に提供される命令のセットに相当することが可能である。

0072

計測分析システム100は、さまざまな開発システム120から計測分析システム100によってさまざまなデータストリームのデータが受信されるにつれて下記のステップを繰り返す。インターフェースモジュール210は、さまざまなデータストリームのデータを530で受信する。実施形態においては、インターフェースモジュール210は、固定された時間のインターバル、たとえば、1秒または数秒にわたって待ち、さまざまなデータストリームから受信されたデータを収集する。実施形態においては、量子化モジュール240は、それぞれのタイムインターバルに関してそれぞれの着信データストリームについてデータの量子化を実行する。したがって、それぞれのデータストリームからのデータは、そのタイムインターバルに関するデータストリームに関連付けられている単一の値へとアグリゲートされる。

0073

アナリティクスエンジン270は、タイムインターバルに関するデータストリームのデータに基づいてデータストリーム言語プログラムを540で実行する。それぞれのデータストリームに関してデータが量子化された場合には、アナリティクスエンジン270は、それぞれのデータストリームからの量子化された値を使用してデータストリーム言語プログラムを540で実行する。データストリーム言語プログラムは、たとえば、ユーザインターフェースに提示するためにデータストリーム言語プログラムの評価の結果を送信することをアナリティクスエンジン270に行わせるpublishブロックを含むことができる。

0074

データストリーム言語プログラムは、1つまたは複数のデータストリームを生成することができる。アナリティクスエンジン270はまた、データストリーム言語プログラムの評価の結果として生成されたデータストリームを、たとえば、時系列データストア260において格納する。アナリティクスエンジン270は、データストリーム言語プログラムの結果を表す1つまたは複数の新たなデータストリーム(または時系列)を作成する。それらの新たなデータストリームは、時系列データストア260において格納される。これは、そのデータストリーム言語プログラムの結果がその他のデータストリーム言語プログラムへの入力として使用されることを可能にする。たとえば、データストリーム言語プログラムが、複数のデータストリームから受信された値の95番目パーセンタイルを表すデータを生成する場合がある。このデータストリーム言語プログラムの結果は、新たなデータストリームとして時系列データストア260において格納されることが可能である。アナリティクスエンジン270は、生成されたデータストリームに基づいて移動平均値を計算する別のデータストリーム言語プログラムをさらに実行することができる。

0075

量子化
入力データストリームの量子化は、量子化されたデータストリームを使用してデータの処理を簡略化する。たとえば、それぞれのタイムインターバルに関して、受信された複数のデータストリームに基づくアグリゲート値が決定されることが可能である。これは、特定のタイムインターバルに関して複数のデータストリームにわたってデータをさらにアグリゲートすることによって実行される。実施形態においては、入力データストリームの量子化は、それぞれのタイムインターバルの終わりに実行され、それによって、そのタイムインターバルに関する量子化されたデータが、処理に利用できるようになる。

0076

さらに、計測分析システム100は、個々のデータストリームに関する量子化されたデータを格納し、それによって、複数のデータストリームにわたるデータが、さまざまな方法で、たとえば、要求において指定されているように組み合わされることが可能になる。言い換えれば、ユーザは、複数のデータストリームにわたるデータを第1の様式で組み合わせる第1の要求を送信することができる。その後、そのユーザは、別のデータストリームにわたるデータを別の様式で組み合わせることを求める新たな要求を送信することができる。たとえば、ユーザは、データストリームにわたるデータを組み合わせて、さまざまなデータセンターにわたって計算されたアグリゲートを見ることができる。しかしながら、その後、ユーザは、別々のタイプのアプリケーション、別々のタイプのサーバ、別々の地理的領域などにわたって計算されたアグリゲートを見るために要求を変更することができる。

0077

計測分析システム100は、前のデータストリームがアグリゲートされたデータストリームのセットをユーザが修正する要求を受信することもできる。たとえば、ユーザは、アグリゲートされているデータストリームのセットから1つまたは複数のデータストリームを除去するよう計測分析システム100に要求し、訂正されたセットに基づいてアグリゲートを要求することができる。ユーザは、サーバ、アプリケーションを除去すること、もしくは新たに追加すること、またはシステム構成に対してその他の任意の修正を行うことの影響を分析するために、そのような要求を送信することができる。計測分析システム100は、量子化されたデータストリームのデータを保持し、これらの要求に基づいて、別々のタイムインターバルに関する量子化されたデータストリームデータを組み合わせる。計測分析システム100は、量子化されたデータストリームデータを格納しているので、計測分析システム100は、必要に応じてデータストリームにわたってデータを効率よく組み合わせる能力を有している。

0078

計測分析システム100は、データストリームにわたってデータを組み合わせて、複数のデータストリームにわたって移動アグリゲート計算を実行することができる。計測分析システム100は、所与の長さのタイムインターバルにわたる任意の移動アグリゲート値、たとえば、1時間移動平均、15分移動平均などを継続的に計算することができる。

0079

量子化モジュール240は、それぞれのタイムインターバルに関して入力データストリームの値をアグリゲートし、タイムインターバルに関するアグリゲート値を生成する。したがって、量子化モジュール240は、任意のタイムインターバルの後にデータ値が発生する可能性があるデータストリームを受信する。量子化モジュール240は、入力データストリームを処理して、規則的なタイムインターバルでデータが利用可能であるデータストリームを生成する。量子化モジュール240の詳細は、本明細書においてさらに記述されている。

0080

量子化モジュール240は、データストリームにおいて受信された値のタイプ、たとえば、その値が特定のアクションまたはエンティティーのカウントであるかどうか、その値が特定の値のアグリゲーションによって入手されたかどうか、その値が値の所与のセットの最大/最小値に相当するかどうかなどについて記述する情報を受信する。データストリームの値のタイプは、その値を入手するために実行されたオペレーションのタイプについて記述する。量子化モジュール240は、データストリームの値のさまざまなタイプから、インターバルに関するデータストリームの入力値上で、そのタイムインターバルを代表する結果値を入手するために実行されたオペレーションのタイプへのマッピングを格納する。

0081

実施形態においては、量子化モジュール240は、特定のタイムインターバルに関する入力として受信されるデータ値を格納するためのバッファを含む。量子化モジュール240のバッファは、任意の数の値を格納することができるデータ構造を使用する。なぜなら、タイムインターバルにおいて受信される値の数は、事前にはわからず、タイムインターバルごとに変わる可能性があるからである。たとえば、量子化モジュール240は、入力データストリームの値を格納するためにリストデータ構造またはスタックデータ構造を使用することができる。

0082

量子化モジュール240は、それぞれのタイムインターバルに関して受信されたデータストリームのデータ値を収集する。量子化モジュール240は、時間を追跡把握する。現在のタイムインターバルの終わりが到達されているということを量子化モジュール240が決定した場合には、量子化モジュール240は、そのタイムインターバルにおいて受信されたすべてのデータ値を処理して、そのタイムインターバルを代表するアグリゲート値を決定する。量子化モジュール240は、その後、入力値を表すために使用されたバッファをクリアし、それを、次のタイムインターバルに関する値を格納するために使用する。実施形態においては、量子化モジュール240は、複数のバッファを使用し、それによって、バッファにおいて格納されている前のタイムインターバルのデータが処理されている間に、次のタイムインターバルに関する新たなデータが別のバッファにおいて格納されることが可能である。

0083

図6は、実施形態による、計測されたソフトウェアから受信されたデータストリームの量子化のプロセスを示している。図6は、時間軸620aおよび620bを示しており、それぞれは、一連のデータ値を伴うタイムラインを表している。時間軸620aは、入力データストリーム600のデータ値を示しており、時間軸620bは、量子化モジュール240によって生成された量子化されたデータストリーム610の値を示している。

0084

図6において示されているように、4つのデータ値D11、D12、D13、およびD14が、タイムインターバルI1(時刻T0からT1を表している)において受信されており、2つのデータ値D21およびD22が、タイムインターバルI2(時刻T1からT2を表している)において受信されており、3つのデータ値D31、D32、およびD33が、タイムインターバルI3(時刻T2からT3を表している)において受信されている。TmとTnとの間におけるそれぞれのタイムインターバルは、開始時点Tmを含むと想定されることが可能である(それによって、終了時点Tnは、次のタイムインターバルに含まれる)。TmとTnとの間におけるタイムインターバルのその他の任意の解釈が使用されることが可能であり、たとえば、終了時点Tnがそのタイムインターバルに含まれることが可能であり、開始時点Tmが前のタイムインターバルに含まれることが可能である。

0085

量子化モジュール240は、それぞれのタイムインターバルのデータ値を処理して、時間軸620bにおいて示されている対応する結果値を生成する。たとえば、量子化モジュール240は、タイムインターバルI1において受信された値D11、D12、D13、およびD14をアグリゲートして、時間軸620bにおいて示されている値D1を生成し、量子化モジュール240は、タイムインターバルI2において受信された値D21およびD22をアグリゲートして、時間軸620bにおいて示されている値D2を生成し、量子化モジュール240は、タイムインターバルI3において受信された値D31、D32、およびD33をアグリゲートして、時間軸620bにおいて示されている値D3を生成する。

0086

データストリームの入力値をアグリゲートするために実行されるオペレーションのタイプは、入力データストリームによって表されるデータのタイプに依存する。入力データストリームのそれぞれのタプルが、特定の値のカウント、たとえば、ソフトウェアによって実行されたアクションのカウントである場合には、量子化モジュール240は、入力値をアグリゲートして、カウントを足し合わせることによって、それぞれのタイムインターバルに関する出力データストリーム値を決定する。受信された入力データストリームのそれぞれのタプルが、値のセットの最小(または最大)である場合には、量子化モジュール240は、タイムインターバルに関する入力値をアグリゲートして、そのタイムインターバルに関する入力値の最小(または最大)を決定することによって、そのタイムインターバルに関する出力値を決定する。受信された入力データストリームのそれぞれのタプルが、値のセットの平均である場合には、量子化モジュール240は、そのタイムインターバルに関連付けられている入力値をアグリゲートして、そのタイムインターバルの入力値の平均を決定することによって、それぞれのタイムインターバルに関する出力データストリーム値を決定する。受信された入力データストリームのそれぞれのタプルが、その時点でのメトリックの最後の利用可能な値である場合には、量子化モジュール240は、タイムインターバルに関する入力値をアグリゲートして、そのデータストリームの最後の値を単に使用することによって、そのタイムインターバルに関する出力値を決定する。

0087

メトリックデータストリームおよびイベントデータストリーム
実施形態においては、計測分析システム100は、メトリックデータストリームおよびイベントデータストリームという2つのタイプのデータストリームをサポートする。イベントは、典型的には、システムにおいて発生している例外的な状況、たとえば、特定のしきい値を超過している負荷、または特定のしきい値を超過しているメモリ使用状況を指す。イベントは、システムにおいて、たとえば、開発システム120のシステム管理者によって実行される特定のアクションを指す場合もある。メトリックデータストリームは、計測されたソフトウェアから入手されること、または計測されたソフトウェアから入手されたメトリックデータストリームから得られることが可能であるメトリックの値を表すデータを含む。本明細書において言及されるデータストリームは、別段の記載がない限り、メトリックデータストリームである。メトリックデータストリームは、メトリック時系列とも呼ばれ、イベントデータストリームは、イベント時系列とも呼ばれる。

0088

メトリックデータストリームは、データストリーム識別子と、タイムスタンプ値と、データ値とを使用して表されるデータポイントを含む。データストリーム識別子は、データポイントが属するデータストリームを識別する。タイムスタンプ値は、データポイントを時刻、たとえば、そのデータポイントが報告された時刻、またはそのデータポイントが計測分析システム100によって受信された時刻に関連付ける。データ値は、報告されているメトリックの値、たとえば、特定の時刻のサーバにおけるCPU負荷を表す値、または特定の時刻のサーバにおけるメモリ使用状況の測定値である。メトリック時系列は、典型的には、大量のデータを計測分析システムに提供し、たとえば、それぞれのデータストリームは、毎秒いくつかのデータポイントを報告することができ、それぞれの企業に関して多数のデータストリームが存在する場合がある。

0089

イベントデータストリームは、データストリーム識別子と、タイムスタンプ値と、イベントについて記述する1つまたは複数のキー値ペアとを使用して表されるデータポイントを含む。イベントデータストリームのデータストリーム識別子およびタイムスタンプ値は、メトリックデータストリームと同様である。しかしながら、イベントは典型的に、メトリックデータストリームのデータポイントと比較して、より少ない頻度で発生する。たとえば、イベントは、メンテナンスウィンドウ始動することなど、システム管理者によって実行されるアクションに相当することが可能である。イベントのキー値ペアは、イベントについて記述する。たとえば、メンテナンスウィンドウを開始したシステム管理者の名前、メンテナンスウィンドウの目的、メンテナンスウィンドウの範囲などである。イベントは典型的に、不規則な割合で発生し、たとえば、イベントは、いくつかのシステムによっては報告されるがその他のシステムによっては報告されない場合があり、イベントは、一度発生する場合があり、多大な時間にわたって発生しない場合がある、といった具合である。結果として、イベントとともに格納される情報の量は多くなる可能性がある。

0090

イベントは、システムにおいて発生する特定の具体的な状況、たとえば、特定の特徴を表示する特定のメトリックについて記述する場合もある。例として、イベントは、サーバのcpu負荷またはメモリ使用状況が特定のしきい値を超過している場合に報告されることが可能である。これらのイベントは、データストリーム言語プログラムの実行の結果として計測分析システム100によって生成される。

0091

計測分析システム100は、データを処理するという点でイベント時系列をメトリック時系列と同じように扱う。たとえば、計測分析システム100は、データストリームのいずれかのタイプに基づいて情報のリアルタイムの報告を可能にする。計測分析システム100は、イベントデータストリームがメトリックデータストリームと比較されることを可能にして、ユーザがそれら2つを相関付けることを可能にする。たとえば、メトリックデータストリームを、イベントが生成された際のメトリック値を示すイベントデータストリームとオーバーレイするレポートが生成されることが可能である。

0092

データストリーム言語プログラムに関するデータストリームの動的な選択
findブロックは、データストリーム言語プログラムに関して入力されるデータストリームの動的な選択を可能にする。findブロックは、データストリームを識別するための検索条件を指定する。実施形態においては、検索条件は、データストリームについて記述する属性(またはメタデータタグ)に基づく表現である。これらの属性は、データストリームの一部として受信されて、または、たとえば計測分析システム100に加えられるメタデータとして、データストリームに関連付けられて、メタデータストア230において格納されることが可能である。検索条件を実行することによって識別されたデータストリームは、入力としてデータストリーム言語プログラムの後続のブロックへ提供される。

0093

データストリーム言語プロセッサ200は、周期的にfindブロックの検索条件を評価し、それによって、データストリーム言語プログラムへの入力として提供されるデータストリームのセットを再評価することができる。結果として、データストリーム言語プログラムへの入力として提供されるデータストリームのセットは、動的に変更される。たとえば、開発システム120は、新たなサーバを加えること、サービスを開始もしくは停止すること、または既存のサービスを再構成することが可能である。さらに、新たな開発システム120は、データストリームを計測分析システム100へ送信することができる。結果として、計測分析システム100によって受信されるデータストリームのセットは、動的に変わる。

0094

findブロックの検索条件は、データストリームの特徴に基づいてデータストリームのセットを識別するために使用されることが可能である。たとえば、検索条件は、特定のデータセンターに属しているサービス、特定のアプリケーションに対応するサービス、複数のデータセンターにわたって分散している場合がある組織に関連付けられているサービス、ソフトウェアの特定のバージョン(たとえばオペレーティングシステム、または特定のパッチを有しているアプリケーション)を稼働させるサービスを識別するために使用されることが可能である。findブロックに関して指定される検索条件のタイプは、データストリームに関して定義されてメタデータストア230において格納されるメタデータタグのタイプに依存する。

0095

findブロックの検索条件は、開発システムなどの外部システムから受信されたすべてのデータストリーム、ならびに計測分析システム100内で生成されたデータストリームにわたって、たとえばデータストリーム言語プログラムの中間結果または最終結果として、評価される。たとえば、本明細書において記述されているように、データストリーム言語プログラムの中間結果または最終結果は、開発システム120から受信されたデータストリームと同じに扱われる第一級市民として表される。したがって、findブロックの検索条件が評価される場合には、結果は、開発システム120から受信されたデータストリーム、ならびに計測分析システム100内の内部で生成されたデータストリームを含むことができる。

0096

下記は、findブロックに関して指定される検索条件の若干の例である。ユーザが、アナリティクスサーバ上の負荷を知りたいと望んでおり、それらのアナリティクスサーバは、analytic1、analytic2、analytic3、...、およびanalyticNと名付けられていると想定していただきたい。アナリティクスサーバのこのセットは、「analytic*」という正規表現を満たすメタデータタグ値を伴うすべてのデータストリームとして検索条件を指定するfind(“source:analytic*”)というfindブロックを使用することによって識別されることが可能である。

0097

検索条件は、論理式であることが可能である。たとえば、find(“source:databank* AND metric:numCacheHits”)というfindブロックは、「databank*」という形式ソース属性と、numCacheHitsというメトリック名とを有しているすべてのデータストリームを見つけ出す。したがって、このfindブロックを伴うデータストリーム言語プログラムは、「databank*」として識別されたソースからnumCacheHitsというメトリックを提供しているすべてのデータストリームに関して評価される。同様に、find(“source:databank* AND metric:numCacheMisses”)というfindブロックは、「databank*」として識別されたソースからnumCacheMissesというメトリックを提供しているすべてのデータストリームを見つけ出す。別の例として、find(“source:zk* AND smetric:cpu AND region:ore1”)というfindブロックは、「cpu」というメトリックを有している「ore1」という領域から、「zk*」という形式のソース名を有しているすべてのデータストリームを見つけ出す。

0098

findブロックは、開始時刻、停止時刻、および周期性のうちの1つまたは複数を指定する構成パラメータに関連付けられることが可能である。findブロックの周期性は、そのfindブロックが属するデータストリーム言語プログラムのジョブの周期性とは異なる場合がある。これがそうであるのは、データストリームのセットが変わる割合が、データがデータストリーム言語プログラムを通じて移動してほしいとユーザが望む割合とは異なる場合があるからである。たとえば、データストリームのセットが頻繁には変わらないということをユーザが決定する場合があり、検索ストリングが1時間に1回ほど評価される場合があり、その一方でジョブの周期性は1分である。したがってユーザは、findブロックおよびデータストリーム言語プログラムに関する周期性の別々の値を指定する場合がある。

0099

実施形態においては、findブロックの評価は、固定された周期性には基づかず、計測分析システム100において発生する特定のイベントによってトリガーされる。たとえば、findブロックの評価は、メタデータにおけるいかなる更新によってもトリガーされる。メタデータにおける更新は、findブロックの結果を変化させて、そのfindブロックに基づいて入力データストリームの別のセットがデータストリーム言語プログラムによって処理されるという結果をもたらすことが可能である。実施形態においては、計測分析システム100は、findブロックをメタデータの特定の部分に関連付ける。実施形態においては、findブロックが特定のメタデータ属性に基づく場合には、それらのメタデータ属性に関連付けられているいかなる変化も、findブロックの実行をトリガーする。たとえば、findブロックが、「xyz」という領域からのすべてのデータストリームに関して真であると評価した場合には、データストリームの評価は、「xyz」という領域に対するデータストリームのいかなる追加または削除によってもトリガーされる。その他の領域に対するデータストリームの追加または削除は、findブロックの実行をトリガーすることはできない。計測分析システム100は、それぞれのfindブロックに関連付けられているメタデータ属性のセットを分析および識別する。計測分析システム100は、findブロックに関連付けられているメタデータ属性のセットに関連付けられているメタデータにおける変化が発生しているかどうかを検知する。findブロックに関連付けられているメタデータ属性のセットに関連付けられているメタデータにおける変化が発生しているということを計測分析システム100が検知した場合には、計測分析システム100は、そのfindブロックを再評価する。実施形態においては、計測分析システム100は、データストリームに関連付けられているプロパティーが変わったということを検知した場合には、findブロックを再評価する。実施形態においては、findブロックは、findブロックの定義が修正された場合に再評価される。

0100

実施形態においては、findブロックは、データストリームにおける変化があった場合に再評価される。たとえば、新たなデータストリームが計測分析システム100によって検知された場合、またはデータストリームが非アクティブであるということを計測分析システム100が決定した場合には、計測分析システム100は、findブロックを再評価する。生成されるデータストリームは、開発システム120などの外部システムから受信されるデータストリームであることが可能であり、またはデータストリームは、データストリーム言語プログラムの中間結果または最終結果によって生成されることが可能である。たとえば、本明細書において記述されているように、データストリーム言語プログラムの中間結果または最終結果は、開発システム120から受信されたデータストリームと同じに扱われる第一級市民として表される。したがって、これらのデータストリームのメタデータの追加、削除、または修正も、findブロックが再評価されることをもたらす。

0101

図7は、実施形態による、データストリーム言語プログラムへの入力を提供するためのfindブロックによるデータストリームのセットの選択を示している。図7において示されているように、findブロック710aは、「datacenter:east*」という検索ストリングによって指定された検索条件を有している。データストリーム言語プロセッサ200の探索モジュール310は、「datacenter」というメタデータタグ(または属性)が「east*」という正規表現を満たしているすべてのデータストリームを識別する。

0102

図7は、central_dev、east_dev、east_qa、west_dev、およびnorth_devというデータセンタータグ値を有しているデータストリームを含む、計測分析システム100によって受信されたデータストリームのセット740aを示している。探索モジュール310は、east_devおよびeast_qaというデータセンタータグ値を伴うデータストリームがfindブロック710aの検索条件を満たしているということを決定する。探索モジュール310は、識別されたデータストリームのセット750aをデータストリーム言語プログラムの後続のブロック730aに提供する。

0103

データストリーム言語プログラムの残りへの入力として提供されるデータストリームのセットは、findブロック710に関連付けられている検索条件に依存する。たとえば、findブロック710bは、findブロック710aの検索条件とは異なる「datacenter:*dev」という検索条件を有する。データストリーム言語プロセッサ200の探索モジュール310は、「datacenter」というメタデータタグ(または属性)が「*dev」という正規表現を満たしているすべてのデータストリームを識別することによってfindブロック710bの検索条件を処理する。

0104

図7は、central_dev、east_dev、east_qa、west_dev、およびnorth_devというデータセンタータグ値を有しているデータストリームを含む、計測分析システム100によって受信されたデータストリームのセット740bを示している。この例においては、セット740bは、セット740aと同じ要素を有している。探索モジュール310は、central_dev、east_dev、west_dev、およびnorth_devというデータセンタータグ値を伴うデータストリームがfindブロックの検索条件を満たしているということを決定する。探索モジュール310は、識別されたデータストリームのセット750bをデータストリーム言語プログラムの後続のブロック730bに提供する。

0105

図7は、データストリーム言語プログラムによって処理されるデータストリームのセットをデータストリーム言語プロセッサ200によって動的に決定することを示している。データストリーム言語によって処理されるデータストリームのセットは、findブロック710の検索条件と、計測分析システム100によって受信される現在利用可能なデータストリームとに基づいて決定される。

0106

実施形態においては、findブロックは、スケジュールに関連付けられており、それによって、データストリーム言語プロセッサ200の探索モジュール310は、そのスケジュールに従ってfindブロックを実行する。たとえば、findブロックは、周期性に関連付けられることが可能であり、それによって探索モジュール310は、その周期性に基づいて決定された割合でfindブロックを実行する。したがって探索モジュール310は、その周期性に基づくタイムインターバルにわたって待ち、findブロックの検索条件を満たすデータストリームのセットを再評価する。このプロセスは、(時間が、findブロックに関連付けられている「終了時刻」の値に達するまで)繰り返される。

0107

図8は、実施形態による、findブロックの周期的な再評価の結果としてのデータストリーム言語プログラムへの入力を提供するデータストリームのセットに対する動的な変化を示している。図8において示されているように、findブロックの検索条件は、時刻T1において、そして再び時刻T2において評価され、その結果、データストリームの別々のセット850が、データストリーム言語プログラムによって処理するために識別される。図8は、2つの異なる時点でfindブロックを再実行することを示している。

0108

時刻T1において、計測分析システム100は、central_dev、east_dev、east_qa、west_dev、およびnorth_devというデータセンタータグ値を伴うデータストリームのセット840aを受信する(同じデータセンタータグ値を伴う複数のデータストリームが存在することが可能であるということに留意されたい)。探索モジュール310は、「datacenter:east*」という検索条件を伴うfindブロック810aを評価する。したがって、探索モジュール310は、east_devおよびeast_qaというデータセンタータグ値を伴うデータストリームのセット850aを識別する。データストリーム言語プロセッサ200は、識別されたデータストリームのセット850aをデータストリーム言語プログラムの後続のブロック830aに提供する。

0109

探索モジュール310は、時刻T2においてfindブロックを再評価する。時刻T2において、計測分析システム100は、central_dev、east_dev、east_prod、west_dev、およびnorth_devというデータセンタータグ値を伴うデータストリームのセット840aを受信する。したがって探索モジュール310は、east_prodおよびeast_qaというデータセンタータグ値を伴うデータストリームのセット850bを識別する。

0110

時刻T1において識別されたセット850aと比較して、セット850bは、east_prodというデータセンタータグを伴う新たなデータストリームを含み、east_qaというデータセンタータグを伴うデータストリームが欠如している。データストリーム言語プロセッサ200は、識別されたデータストリームのセット850aをデータストリーム言語プログラムの後続のブロック830aに提供する。したがって、探索モジュールの同じ検索条件に基づくデータストリームのセット850のそれぞれの後続の評価は、データストリームの別のセットが後続のブロック830に提供されるという結果をもたらす場合がある。

0111

データストリーム言語プログラムによって処理されるデータストリームのセットを動的に変更できることは、計測分析システムへの入力を提供する動的に変わる環境にデータストリーム言語プログラムが適合することを可能にする。たとえば、企業は、データセンターに対してサーバを追加/除去すること、新たなデータセンターを追加すること、サービスを追加/除去/修正すること、サービスを変更して、計測されたソフトウェアをさまざまな方法で実行することなどが可能である。データストリーム言語プログラムによって処理されるデータストリームのセットを指定できることは、企業が動的に変わるにつれて、それについて記述するデータを計測分析システムが報告することを、データストリーム言語プログラムを修正する必要を伴わずに可能にする。

0112

図9は、実施形態による、findブロックを使用してデータストリーム言語プログラムへの入力を提供するためのデータストリームのセットを識別するためのプロセスを示している。図9において示されているように、データストリーム言語プロセッサ200は、処理のためのデータストリーム言語プログラムを900で受信する。図9において示されているプロセスは、そのデータストリーム言語プログラムがfindブロックを有していて、その後に、残りのデータストリーム言語プログラムに対応するブロックのセットが続くという想定に基づいている。

0113

findブロックは、検索ストリングに関連付けられている。探索モジュール310は、findブロックに関連付けられている検索ストリングを910で受信する。探索モジュール310は、検索ストリングを920で解析して、その検索ストリングに対応する検索条件の表示、たとえば、解析木表示を構築する。探索モジュール310は、検索条件に対応するデータストリームのセットを930で識別する。探索モジュール310は、識別されたデータストリームのセットをデータストリーム言語プログラムの後続のブロック、たとえば、fetchブロックに提供する。データストリーム言語プロセッサ200は、検索条件に基づいて930で識別されたデータストリームからデータを取り出し、残りのデータストリーム言語プログラムを940で実行する。

0114

検索条件に基づいてデータストリームのセットを930で識別するステップ、およびデータストリーム言語プログラムの残りのブロックを940で実行するステップは、データストリーム言語プロセッサ200によって繰り返し実行される。ステップ930および940が繰り返される割合は異なる場合がある。たとえば、データストリームのセットを930で識別するステップは、データストリーム言語プログラムの残りのブロックが実行される割合と比較して、より遅い割合で実行される場合がある。データストリーム言語プログラムの残りのブロックの940での実行の割合、およびfindブロックの実行の割合は、データストリーム言語プログラムに対応するジョブに関して(たとえば、ユーザによって)指定される。

0115

データストリーム言語プログラムに関してデータストリームからデータを取り出すこと
実施形態においては、データストリーム言語プログラムは、データストリームの所与のセットからデータを取り出すためのfetchブロックを含む。典型的には、fetchブロックは、データストリーム言語プログラムのデータパイプラインにおいてfindブロックの後に配置される。言い換えれば、findブロックの出力は、入力としてfetchブロックへ提供される。したがってfetchブロックは、findブロックを処理した結果として探索モジュール310によって識別されたデータストリームのセットからデータを取り出す。フェッチモジュール320は、fetchブロックを実行する。

0116

図10は、実施形態による、fetchブロックを実行することによってデータストリームからデータを取り出すプロセスを示している。図10において示されている特定のステップは、図10において示されている順序とは異なる順序で実行されることが可能である。さらにステップは、本明細書において示されているモジュールとは異なるモジュールによって実行されることが可能である。

0117

データストリーム言語プロセッサ200は、データストリーム言語プログラムに基づくジョブの実行の開始時刻、終了時刻、および周期性を受信する。フェッチモジュール320は、データストリーム言語プログラムのfindブロックの検索条件に基づいて探索モジュール310からデータストリームのセットを受信する。フェッチモジュールは、データを取り出し、それを実行用としてデータストリーム言語プログラムの後続のブロックに提供する。フェッチモジュール320は、それぞれの後続のタイムインターバルに関してデータストリームからデータをフェッチするために下記のステップを実行する。

0118

フェッチモジュール320は、次のタイムインターバルを識別し、そのタイムインターバル中にデータが届くのを待つ。量子化モジュールは、それぞれの入力データストリームのデータに基づいて別々の周期性を有する複数の量子化されたデータストリームを生成する。たとえば、量子化されたデータストリームQ1が、5秒の周期性で生成されることが可能であり、別の量子化されたデータストリームQ2が、10秒の周期性で生成されることが可能であり、別の量子化されたデータストリームQ3が、1分の周期性で生成されることが可能である、といった具合である。フェッチモジュール320は、(データストリーム言語プログラムの周期性に基づいて決定された)データストリーム言語プログラムが実行される周期的なタイムインターバルよりも小さい最大の周期的なタイムインターバルを有する量子化されたデータストリームを1020で選択する。

0119

たとえば、データストリーム言語プログラムが実行される必要があるタイムインターバルのサイズが、データストリーム言語プログラムの周期性に基づいて30秒である場合には、フェッチモジュール320は、10秒の周期性を有する量子化されたデータストリームQ2を選択する。量子化されたデータストリームQ3は選択されない。なぜなら、それは、データストリーム言語プログラムの時間周期的なタイムインターバル(すなわち、30秒)よりも大きい1分(すなわち、60秒)の周期的なタイムインターバルを有するからである。量子化されたデータストリームQ3は選択されない。なぜなら、それは、データストリーム言語プログラムの周期的なタイムインターバルよりも小さい最大の周期的なタイムインターバルではない5秒の周期的なタイムインターバルを有するからである(それは、10秒であるQ2の周期的なタイムインターバルよりも小さいからである)。フェッチモジュール320は、(たとえば、現在の30秒のタイムインターバルにおいて発生する量子化されたデータストリームの3つのデータポイントのデータ値をアグリゲートすることによって、)選択された量子化されたデータストリームを再量子化して、周期性30秒の再量子化されたデータストリームを生成する。

0120

フェッチモジュール320は、時系列データストア260からデータを、データストリームから受信されているリアルタイムデータと組み合わせる必要がある場合に、1050で取り出す。フェッチモジュールは、その組み合わされたデータを後続のブロック、たとえば、統計計算ブロックに1060で提供する。たとえば、データストリーム言語プログラムがスクリーンに出力を発行し、ジョブの開始時刻がマイナス(たとえば、−1時間)と示されていると想定していただきたい。データは、チャートとして提示されることが可能であり、そのチャートは、受信された時点でのデータ、ならびに選択されたタイムインターバルに関する過去のデータを提示する。たとえば、ユーザは、チャート上にデータを提示するための1時間の時間ウィンドウを選択することができる。この状況においては、チャートが、データストリームにおいて受信されたリアルタイムデータに基づいてのみレンダリングされた場合には、計測分析システム100がデータストリーム言語プログラムを処理し始めた時点で、そのチャートは空であろう。表示されるチャートは、右からゆっくりと満ち始めて、表示されているウィンドウを1時間後に満たすであろう。これは、理想的ではないユーザ経験を提示する。理想的には、ユーザは、最初からチャートが表示されている1時間にわたって完全なチャートを(その1時間のデータとともに)見たいものである。

0121

フェッチモジュール320は、データストリームからのリアルタイムデータが利用可能になる時点の前に発生するチャートの部分をレンダリングするために時系列データストア260からデータを1050で取り出すことによって、上述の状況を改善する。たとえば、計測分析システム100がデータストリーム言語プログラムを処理し始めたときに、フェッチモジュール320は、時系列データストア260から入手されたデータを使用してチャート全体をレンダリングするためにデータを提示する。ますます多くのデータがデータストリームから受信されるにつれて、フェッチモジュール320は、時系列データストア260からのデータを、受信されたリアルタイムデータと組み合わせる。

0122

例として、10分後に、フェッチモジュール320は、データストリームから受信された10分間のデータと組み合わされた、時系列データストア260から取り出された50分間のデータを提示用として送信する。同様に、30分後に、フェッチモジュール320は、データストリームから受信された30分間のデータと組み合わされた、時系列データストア260から取り出された30分間のデータを提示用として送信する、といった具合である。データストリームの60分間よりも多くのデータが受信された後に、フェッチモジュール320は、データストリームから受信されたデータに基づいてチャートをレンダリングするためのすべてのデータをそれが送信することができるデータストリームに基づいて十分なデータを有しており、データストリームからのデータを、時系列データストア260の以前に格納されたデータと組み合わせる必要はない。

0123

フェッチモジュール320は、その他の状況において、たとえば、windowブロックに関して、データストリームから受信されたデータと組み合わせるために時系列データストア260からデータを1050で取り出すことができる。windowブロックは、指定された長さ(たとえばtw)のスライディング時間ウィンドウを提供し、そのウィンドウのデータ(たとえば平均値)の計算を実行して、1時間の時間ウィンドウにわたる移動平均を決定する。この状況においては、時間twの初期待ち時間がある。なぜなら、データストリームからのデータは、ウィンドウ全体を満たすのに時間twのピリオドにわたって利用可能でないからである。したがって、データストリーム言語プログラムが時刻t1において開始した場合には、時刻t1〜twから開始するデータが時系列データストア260からフェッチされてウィンドウを満たして、ウィンドウ計算のための有意なデータを提供する。任意の時刻t0>t1において(その一方で、t0〜t1はtw未満である)、フェッチモジュール320は、長さt0〜t1のウィンドウの終わりの部分を、データストリームから受信されたリアルタイムデータで満たし、そのウィンドウの最初の部分(すなわち、残りの部分)を、時系列データストア260から取り出されたデータで満たす。

0124

データストリーム言語プログラムが、複数のウィンドウの計算を含む場合には、フェッチモジュール320は、時系列データストア260からのデータ(必要な場合)と、データストリームから受信されたリアルタイムデータとを組み合わせることによって、フェッチされる必要がある最大ウィンドウのサイズのデータを保持する。最大ウィンドウのために保持されるデータは、より小さなウィンドウのためのデータを含む。

0125

図11A〜図11Cは、実施形態による、移動ウィンドウ計算のために時系列データストアからのデータと、データストリームからリアルタイムで受信されるデータとを組み合わせるプロセスを示している。移動ウィンドウの長さはTwであると想定される。例示的な計算は、データストリームのセットのデータにわたるアグリゲーション、たとえば、データストリームのそのセットにわたる移動ウィンドウ中に受信されたデータに基づく平均値またはパーセンタイル計算である。移動ウィンドウとは、シフトし続ける時間ウィンドウである。言い換えれば、移動ウィンドウのサイズは一定のままだが、ウィンドウは時間とともに進み続ける。

0126

ウィンドウ内で発生するデータポイントの数は、時間とともに変わる場合がある。処理されるデータストリームの数も、ウィンドウが進むにつれて、たとえば、新たなデータストリームの導入に起因して、またはデータストリームについて記述するメタデータに対する修正に起因して変わる場合がある。たとえば、移動ウィンドウが、「east」というデータセンターからのすべてのデータストリームにわたるデータの平均値を計算している場合には、時間とともに、「east」というデータセンターがサービスを開始/停止したならば、新たなサーバを導入したならば、またはデータストリームについて記述するメタデータが、特定のデータストリームとの間で「datacenter=east」というタグを追加/除去するように修正されたならば、データストリームの数が変わる場合がある。データストリーム言語プロセッサ200は、データストリームのセットを、そしてまた、ウィンドウ内で発生するデータポイントのセットを周期的に再評価し、選択されたデータストリームからのデータポイントに関して指定されたアグリゲート値を計算する。

0127

図11Aは、ウィンドウ計算が開始されたときにそのウィンドウの全データが時系列データストア260から取り出されることが可能であるシナリオを示している。図11Bは、いくらかの時間(それは、そのウィンドウの長さである時間Tw未満である)の後に、フェッチモジュール320が、時系列データストア260からのデータを、データストリームから受信されたリアルタイムデータと組み合わせるということを示している。図11Cは、ウィンドウの長さTwよりも長い時間の後には、フェッチモジュール320が、時系列データストア260からデータを取り出す必要がなく、データストリームから入手されたリアルタイムデータでウィンドウ全体を満たすことができるということを示している。

0128

図11Aにおいて示されているように、T2は、現在の時刻を示しており、サイズTwのウィンドウを与えられると、時刻T1は、時点T2−Twに相当する。ウィンドウ計算が時刻T2において開始すると想定していただきたい。したがって、このウィンドウは、T1〜T2という時間範囲内にある。この時点でデータストリームから受信されたデータはない。ウィンドウ全体のためのデータは、時系列データストア260から取り出される。

0129

図11Bは、いくらかの時間の後に、現在の時刻がT4によって表されており、ウィンドウが時間範囲T3〜T4へ進んでいるということを示している。リアルタイムデータが収集され、時間範囲T2〜T4に関するウィンドウ計算において使用されている。なぜなら、時刻T2以降にリアルタイムデータが収集されたからである。時間範囲T3〜T2に関して、フェッチモジュール320は、時系列データストア260からのデータを依然として使用している。図11Bにおいて示されているシナリオは、時間範囲T4〜T2がTw未満であるすべての時間に関して(言い換えれば、ウィンドウのサイズ未満であるT2以降のすべての時間に関して)当てはまる

0130

図11Cは、ウィンドウの長さ以上の時間に関するシナリオを示している。言い換えれば、T5が現在の時刻である場合には、図11Cは、T5−T2がウィンドウの長さTw以上であるようなすべての時間T5に関して当てはまる。これらのシナリオにおいては、フェッチモジュール320は、データストリームから十分なリアルタイムデータを蓄積しているので、フェッチモジュール320は、時系列データストア260からデータを取り出さない。言い換えれば、ウィンドウ計算は、データストリームからリアルタイムで受信されたすべてのデータを使用して実行される。

0131

図11A〜図11Cにおいて記述されているシナリオはまた、チャートを使用して(たとえば、ダッシュボードを介して)データを提示することに関して当てはまる。時系列データストア260からのデータは、時間が進むにつれてチャートがゆっくりと満ちるのを示すことを回避する目的でチャートの最初の部分を満たすために使用される。時系列データストア260からのデータでチャートを満たすことができることは、よりよいユーザ経験を提供する。なぜなら、ユーザは、ユーザによって選択された時間ウィンドウ全体に関するチャートを提示されるからである。

0132

データストリームをグループ化すること
図12は、実施形態による、データストリームのデータをグループ化して結果データストリームのセットを生成するためのプロセスを示している。グループ化ステートメントが、たとえば図4において示されているようにgroupbyブロックを使用して、データストリーム言語プログラムに含まれることが可能である。データストリーム言語プログラムのグループ化ステートメントは、データストリームについて記述する1つまたは複数のメタデータ属性を指定する。groupbyブロックは、データストリームのそれぞれのグループに関して実行されるアグリゲート計算に関連付けられている。

0133

グループ化モジュール360は、データストリームについて記述する1つまたは複数の属性を1210で受信する。その属性は、データストリームのデータとともに受信される属性(たとえば、ソース名およびメトリック名)、またはメタデータモジュール220によってデータストリームに関連付けられていてメタデータストア230において格納されているメタデータタグであることが可能である。グループ化モジュール360はまた、データストリームのそれぞれのグループに関して実行されることになる特定の計算、たとえば、データストリームのデータに基づいてアグリゲート値を決定する計算を受信する。

0134

データストリーム言語プロセッサ200(およびそのコンポーネントモジュール)は、データストリーム言語プログラムを実行するジョブに関して指定された周期性に基づいてそれぞれのタイムインターバルに関して下記の計算を実行する。グループ化モジュール360は、グループ化コマンドに関連付けられている1つまたは複数の属性の値のそれぞれの個別のセットに対応するデータストリームのグループを1220で識別する。たとえば、グループ化コマンドを用いて指定された属性が「datacenter」という属性である場合には、グループ化モジュール360は、データストリームのセットを識別し、それぞれのセットは、「datacenter」タグの個別の値を有している。

0135

グループ化モジュール360は、識別されたデータストリームのそれぞれのセット(またはグループ)に関して下記の計算を実行する。グループ化モジュール360は、その特定のタイムインターバルに関するセットのそれぞれのデータストリームに対応するデータを1230で受信する。グループ化モジュール360は、それぞれのグループのデータストリームからのデータに関するアグリゲート計算の値を1240で決定する。たとえば、グループ化が「datacenter」という属性に基づいており、指定された計算が平均である場合には、グループ化モジュール360は、所与のタイムインターバルに関して入手された特定のデータセンターに関するすべてのデータストリームのデータの平均を1240で決定する。グループ化モジュール360は、それぞれのグループに関する計算の結果をデータストリーム言語プログラムの後続のブロックへ1250で出力する。

0136

図12において示されているプロセスにおいて記述されているように、グループ化ステートメント(すなわち、groupbyブロック)は、入力としてデータストリームのセットを取り、結果データストリームのセットを生成する。グループ化ステートメントは、複数のメタデータ属性によってグループ化を行うことを指定することができる。生成される結果データストリームの数は、入力セット内に少なくとも1つのデータストリームが存在するグループ化属性の個別の属性値の数に等しい。言い換えれば、グループ化属性の値のそれぞれの個別の値の組合せを伴う属性を有するデータストリームが入力内に存在する場合には、個別の値のその組合せに関してデータストリームが生成される。

0137

図13A図13Bは、実施形態による、データストリームを、それらのデータストリームについて記述するさまざまなメタデータ属性に基づいてグループ化することを示す例示的なシナリオを示している。図13Aは、「dc」という属性(データセンターを表している)に基づいてデータストリームのセットをグループ化することを示している。データストリームの入力セット1340aは、dc=eastおよびmetric=cpuLoadという属性を伴うデータストリームと、dc=westおよびmetric=cpuLoadを伴うデータストリームと、dc=northおよびmetric=cpuLoadを伴うデータストリームと、dc=westおよびmetric=cacheMissesを伴うデータストリームと、dc=northおよびmetric=cacheMissesを伴うデータストリームとを含む。グループ化モジュール360は、dcという属性に関する同じ属性値を有している入力セット1340aからのデータストリームを収集するためにgroupby(“dc”)を指定するグループ化ブロック1310aを処理する。入力セット1340aは、dc=eastを伴う1つのデータストリームと、dc=westを伴う2つのデータストリームと、dc=northを伴う2つのデータストリームとを含む。

0138

実施形態においては、グループ化モジュール360は、値のその組合せを有している入力データストリームがない場合には、属性によるグループの個別の値を無視する。したがって、グループ化モジュール360は、これらの属性値に対応するいかなる結果データストリームも生成しない。たとえば、dcという属性が、その他の可能な値、たとえば「north−east」、「south−west」などを有することができ、かつ、これらの属性値を有している入力データストリームがない場合には、グループ化モジュール360は、メタデータ属性のこれらの個別の値に対応するいかなる結果データストリームも生成しない。

0139

したがって、図13において示されているように、グループ化モジュール360は、dc=eastに対応する第1の結果データストリーム、dc=westに対応する第2の結果データストリーム、およびdc=northに対応する第3のデータストリームという3つの結果データストリームを生成する。それぞれの結果データストリームは、group byブロックが実行される周期性(これは、データストリーム言語プログラムが実行される周期性である)で入力データストリームの対応するグループからのデータをアグリゲートすることによって生成されたデータ値を含む。

0140

グループ化モジュール360は、groupbyブロックがグループ化のための別の属性を指定した場合には、結果データストリームの別のセットを生成することができる。たとえば、図13Bは、「metric」という属性に基づくデータストリームのグループ化を示している。入力セット1340bは、セット1340aと同じデータストリームを有する。入力データストリームは、3つのデータストリームをグループ化して、metric=cpuLoadに対応する結果データストリームと、metric=cacheMissesに対応する別の結果データストリームとを生成する。

0141

図14は、実施形態による、時間に伴う入力データストリームにおける変化の結果としてgroupbyブロックによって生成される結果データストリームの動的な変化を示す例示的なシナリオを示している。たとえば、図13aにおいて示されているgroup byブロックは、データストリームの入力セット1440がセット1340aとは異なる場合には、後の時点で(たとえば、異なるタイムインターバルに関して)実行されることが可能である。図14において示されているように、入力セット1440は、dc=eastという属性を伴ういかなるデータストリームも含んでいない。さらに、入力セット1440は、dc=southを伴うデータストリームを含んでいる。したがって、グループ化モジュール360は、dc=westに対応する第1の結果データストリーム、dc=northに対応する第2の結果データストリーム、およびdc=southに対応する第3のデータストリームという3つの結果データストリームを伴う結果セット1450を生成する。したがって、グループ化モジュール360によって生成されるグループは、データストリームの入力セットが変わるにつれて動的に変わることが可能である。開発システム120において実行する計測されたソフトウェアから受信されるデータストリームの入力セットは、さまざまな理由で、たとえば、新たな開発システム120を始動したこと、サービスを追加/除去したこと、またはメタデータストア230におけるデータストリームに関連付けられているメタデータを修正したことの結果として変わることが可能である。

0142

データストリームを第一級市民として発行すること
実施形態によれば、データストリーム言語プログラムは、計測分析システム100のその他のコンポーネントにデータストリームを提供することによってデータストリーム言語プログラムの実行の結果に基づいて1つまたは複数のデータストリームを発行する発行コマンド(すなわち、publishブロック)を含む。たとえば、データストリーム言語プログラムによって生成されたデータストリームは、ユーザインターフェースに対して発行されてリアルタイムのチャートまたはレポートとして提示されることが可能である。生成されたデータストリームは、第一級市民として表される。言い換えれば、生成されたデータストリームは、計測分析システム100によって開発システム120の計測されたソフトウェアから受信されたデータストリームと同じように表される。

0143

生成されたデータストリームは、計測分析システム100のその他のコンポーネントにより、計測分析システム100によって受信されたデータストリームと同じように使用されることも可能である。生成されたデータストリームは、計測分析システム100によって自動的に、または管理システム160を介してシステム管理者によってメタデータ属性に関連付けられることが可能である。データストリーム言語プログラムのfindブロックは、外部システムから受信されたその他のデータストリームと同様、生成されたデータストリームを見つけ出すことができる。その他のデータストリーム言語プログラムを実行するジョブは、生成されたデータストリームを入力として受信し、それを処理することができる。そのデータストリームのデータは、計測分析システム100によって処理されるその他の任意のデータストリームと同様、ユーザインターフェースを介して提示されることが可能であり、ユーザから受信された入力に基づいて操作されることが可能である。

0144

データストリーム言語プロセッサ200は、結果データストリームをソフトウェアバス290上に発行する。任意の結果データストリーム(またはその他の任意のデータストリーム)に関するデータストリーム識別子を識別することができる計測分析システム100の任意のコンポーネントが、ソフトウェアバス290からデータストリームのデータを入手することができる。ソフトウェアバス290は、発行されたデータストリームのデータをメモリにおいて格納して、そのデータに対する迅速なアクセスを提供することができる。

0145

データストリーム言語プログラムは、発行するための複数の結果データストリームを生成することができる。たとえば、データストリーム言語プログラムは、データセンターによってグループ化されたメトリック(たとえば、cacheMisses)をアグリゲートすることができる。したがって、アグリゲート属性(たとえば、total cacheMisses)値が、それぞれのデータセンターに関して生成される。発行モジュール350は、それぞれの生成された結果データストリームについて記述するメタデータを生成し、そのメタデータをメタデータストア230において格納する。発行モジュール350は、データストリームを、そのデータストリームを生成しているデータストリーム言語プログラムに関連付けられている情報に関連付ける。したがって、発行モジュール350は、データストリームを生成しているデータストリーム言語プログラムのブロックを分析し、データストリーム言語プログラムのブロックからデータストリームを識別する情報を識別する。

0146

発行モジュール350は、発行されたデータストリームを生成しているデータストリーム言語プログラムによって入力として受信されたデータストリームの属性に基づいて、データストリームについて記述するメタデータ属性を生成することができる。たとえば、データストリーム言語プログラムが入力データストリームの移動平均を計算する場合には、発行モジュール350は、その入力データストリームに基づくメタデータ属性値を、発行されたデータストリームにも関連付ける。この状況においては、発行モジュール350は、入力データストリームのソース名を、入力データストリームのソース名として使用することができる。発行されたデータストリームが、複数の入力データストリームをアグリゲートすることによって入手されている場合には、発行モジュール350は、入力データストリームに基づく属性値をアグリゲートすることにより(たとえば、入力データストリームからの対応する属性値を連結することにより、または、入力データストリームからの属性値を短縮することによって入手されたサブストリングを連結することにより)、発行されたデータストリームに関する属性を生成することができる。たとえば、結果データストリームのソース名は、アグリゲートされる入力データストリームのソース名を連結することによって、または入力データストリームのソース名のプレフィックスストリングを連結することによって入手されることが可能である。

0147

実施形態においては、publishブロックは、発行されているデータのタイプを特徴付けるメトリック名に関連付けられている。発行モジュール350は、publishブロックのメトリック名を、publishブロックによって発行されたデータストリームに関連付ける。データストリーム言語プロセッサ200はまた、それぞれの結果データストリームを表すための識別子(時系列識別子と呼ばれる)を生成する。それぞれの結果データストリームのデータは、時系列データストア260において格納され、計測分析システムの任意のコンポーネントによる使用のために利用可能である。

0148

publishブロックがメトリック名に関連付けられていない場合には、発行モジュールは、発行されているデータストリームを生成したデータストリーム言語プログラムによって受信された入力データストリームに基づいてメトリック名を決定する。発行されているデータストリーム言語が、単一のデータストリームから生成されている場合には、発行モジュールは、その単一のデータストリームのメトリック名を、発行されているデータストリームのメトリック名として使用する。発行されているデータストリーム言語が、複数のデータストリームから生成されている場合には、発行モジュールは、それらの複数のデータストリームのメトリック名に基づいて、たとえば、メトリック名、またはメトリック名のサブストリング(たとえば、プレフィックスもしくはサフィックス)を連結することによって、発行されているデータストリームに関するメトリック名を生成する。

0149

図15は、実施形態による、データストリーム言語プログラムのpublishブロックを実行することによって入手される結果データストリームを発行するプロセスを示すフローチャートを示している。このデータストリーム言語プログラムは、publishブロックおよび1つまたは複数のgroupbyブロックを含むと想定される。そのpublishブロックは、メトリック名に関連付けられていると想定される。たとえば、このデータストリーム言語プログラムは、下記のとおりであることが可能である。
find(“source:analytics*”, “metric:load”))→
fetch()→
groupby(“datacenter”)→
stats!mean→
publish(“dc_load”)

0150

上述のデータストリーム言語プログラムは、「dc_load」というメトリック名を指定するpublishブロックを含んでいる。このデータストリーム言語プログラムはまた、データセンターによって入力データストリームをグループ化するためのgroupbyステートメントを含む。

0151

データストリーム言語プロセッサ200は、処理されているデータストリーム言語プログラムにおいてpublishブロックを1500で識別する。たとえば、上述のデータストリーム言語プログラムが処理されている場合には、データストリーム言語プロセッサ200は、このデータストリーム言語プログラムの最後のブロック、すなわち、publish(“dc_load”)を1500で識別する。発行モジュール350は、publishブロックに関連付けられているメトリック名を1510で決定する。たとえば、上で示されているデータストリーム言語プログラムのpublishブロックにおいては、発行モジュール350は、publishブロックに関連付けられている「dc_load」というメトリック名を1510で決定する。データストリーム言語プロセッサ200は、そのメトリック名を、結果データストリームについて記述するメタデータ属性として使用する。

0152

publishブロックの出力は、たとえばデータストリーム言語プログラムがgroupbyブロックを含む場合には、複数の結果データストリームを含むことができる。上述の例示的なデータストリーム言語プログラムは、それぞれのデータセンターに関して1つの、複数の結果データストリームを、すなわち、個別のデータセンター属性値を有しているすべてのデータストリームから周期的に入手された統計的な平均データ値に基づく1つの結果データストリームを生成することができる。その他のデータストリーム言語プログラムは、複数のgroupbyブロックを含むことができる。しかしながら、データストリーム言語プログラムによって生成される結果データストリームの数は、そのデータストリーム言語プログラムの最後のgroupbyブロックによって決定される。

0153

発行モジュール350は、データストリーム言語プログラムの最後のgroupbyブロックの属性のセットを1520で識別する。上述の例においては、groupby(“datacenter”)というブロックが、「datacenter」という単一の属性を有しており、その属性によってデータストリームがグループ化される。しかしながら、groupbyブロックは、データストリームをグループ化するための複数の属性を含むことができる。たとえば、groupby(“datacenter”, “region”)というgroupbyコマンドは、「datacenter」および「region」という2つの属性を指定し、それらの属性によってデータストリームがグループ化される。発行モジュール350は、データストリーム言語プログラムによって生成された結果データストリームを区別するための属性の識別されたセットの個別の値を使用する。

0154

データストリーム言語プロセッサ200(およびそのコンポーネントモジュール)は、それぞれの結果データストリームに関して下記のステップを実行する。発行モジュール350は、結果データストリームに関連付けられている最後のgroup byブロックの識別された属性の値を識別する。結果データストリームに関連付けられている識別された属性の値は、データストリームとともに受信されること、またはgroupbyブロックの入力データストリームの識別子を与えられてメタデータストア230からフェッチされることが可能である。データストリームの入力セットが、さまざまなデータセンター値、たとえば、「east」、「west」、「north」、「south」などを有しているデータストリームを含む場合には、groupbyブロックによって出力されるそれぞれの結果データストリーム(およびそのgroupbyブロックがデータストリーム言語プログラムの最後のgroupbyブロックである場合には、データストリーム言語プログラム)は、これらのデータセンター値のうちの1つに関連付けられる。groupbyブロックがグループ化のために複数の属性を指定している場合には、それぞれの結果データストリームは、グループ化のためにgroupbyブロックによって指定されているそれらの属性の値の個別のセットに関連付けられる。

0155

データストリームメタデータジェネレータ370は、結果データストリームに関連付けられている識別された属性の値、およびpublishブロックに関連付けられているメトリック名に基づいて、結果データストリームについて記述するメタデータを1540で生成する。たとえば、groupbyブロックが、(「east」、「west」、「north」、「south」という値を用いて)データセンター属性を指定していて、publishブロックを用いて指定されているメトリック名がcpu_loadである場合には、データストリームメタデータジェネレータ370は、それぞれの発行されたデータストリームを、cpu_loadというメトリック名、および(データストリームのグループに関連付けられている)データセンター属性の対応する値に関連付ける。データストリームメタデータジェネレータ370はまた、結果データストリームに関する識別子を生成する。データストリームメタデータジェネレータ370は、結果ストリームに関連付けられている属性を含むメタデータをメタデータストア230において1550で格納する。

0156

データストリーム言語プロセッサ200は、データストリーム言語プログラムの周期性によって指定されているようにデータストリーム言語プログラムを周期的に実行する。データストリーム言語プロセッサ200は、データストリーム言語プログラムが実行されたときに、それぞれの結果データストリームに関するデータを生成する。データストリーム言語プロセッサ200は、それぞれの結果データストリームに関する生成されたデータを、その結果データストリームに関する識別子に関連付けて1560で格納する。

0157

thresholdブロックを使用した異常検知
データストリーム言語プログラムは、データストリームのセットのデータがしきい値と比較されることを可能にするthresholdブロックをサポートする。比較されるデータストリームは、開発システム120の計測されたソフトウェアから計測分析システム100によって受信されたデータストリーム、またはデータストリーム言語プログラムの1つまたは複数のブロックの実行の結果として入手されたデータストリームであることが可能である。thresholdブロックは、データポートおよびしきい値ポートを含む。データポートは、データ値を表す1つまたは複数のデータストリームを受信する。しきい値ポートは、しきい値を表す1つまたは複数のデータストリームを受信する。thresholdブロックは、データ値をしきい値と比較して、データ値が、しきい値によって指定されている範囲内にあるかどうかを決定する。実施形態においては、thresholdブロックは、複数のしきい値ポートを含む。たとえば、thresholdブロックは、低しきい値ポートおよび高しきい値ポートという2つのしきい値ポートを含むことができる。thresholdブロックは、データ値が、高しきい値ポートにおいて受信されたしきい値を下回っているかどうか、および低しきい値ポートにおいて受信されたしきい値を上回っているかどうかを決定する。

0158

thresholdブロックは、高しきい値および/または低しきい値の指定を可能にする。しきい値モジュール340は、着信ストリームにおいて受信されたデータ値を、thresholdブロックによって指定されたしきい値と比較することによって、thresholdブロックを処理する。thresholdブロックは、低しきい値および高しきい値を指定する。しきい値モジュール340は、thresholdブロックによって受信された入力データストリームからのデータ値が高しきい値および/または低しきい値の範囲セットから外れている場合には、イベントを生成する。言い換えれば、しきい値モジュール340は、データストリームのデータが高しきい値を超過した場合、または低しきい値よりも低下した場合には、イベントを生成する。それらのしきい値は、固定されていること、または動的であることが可能である。動的なしきい値は、データストリーム言語プログラムの実行の結果として入手される。thresholdブロックは、低/高しきい値のうちの一方または両方を指定することができる。

0159

thresholdブロックへの入力は、データストリーム言語プログラムのブロックを実行した結果として生成された複数のデータストリーム値、たとえば、入力データストリームのセットをグループ化した結果として入手された複数のデータストリームであることが可能である。この状況においては、低しきい値または高しきい値はまた、複数のデータストリームを生成するデータストリーム言語プログラムの出力として指定される。しきい値モジュール340は、thresholdブロックの入力ポートによって受信されたデータストリームを、低/高しきい値ポートによって受信されたデータストリームとマッチさせる。しきい値モジュール340は、入力ポートによって受信されたデータストリームのデータを、(データストリーム言語プログラムの周期性に基づく)それぞれのタイムインターバルに関して低/高しきい値ポートによって受信されたデータストリームのデータと比較し、その比較に基づくアクション(たとえば、イベントを送信すること)を行う。

0160

実施形態においては、thresholdブロックは、持続時間およびフラクション値を指定する。たとえば、thresholdブロックは、持続時間T(たとえば5分)を指定することができる。しきい値モジュール340は、入力データストリームのデータが、指定の持続時間Tよりも長い間にわたって指定のしきい値から外れている場合には、イベントを生成する。たとえば、入力データストリームのデータが、Tという時間単位よりも長い間にわたって高しきい値よりも高い場合には、しきい値モジュール340は、イベントを生成する。別の例として、入力データストリームのデータが、Tという時間単位よりも長い間にわたって低しきい値を下回っている場合には、しきい値モジュール340は、イベントを生成する。持続時間を指定できることは、しきい値限度から外れているデータストリームのデータの異常な挙動が、多大な量の時間にわたって持続しており、一時的な挙動ではないということを確実にする。

0161

実施形態においては、thresholdブロックは、持続時間Tとともにフラクション値F(たとえば0.8)を指定する。しきい値モジュール340は、入力データストリームのデータが、指定された長さTのウィンドウ中に持続時間Tの指定されたフラクションよりも長い間にわたってしきい値限度から外れている場合には、イベントを生成する。したがって、しきい値モジュール340は、たとえ入力データストリームのデータが持続時間Tの全体にわたってしきい値限度から外れていなくても、そのデータがその持続時間の少なくとも指定されたフラクションにわたってしきい値限度から外れている限り、イベントを生成する。

0162

図16は、実施形態による、特定の属性によってグループ化されているデータストリームに関する固定されたしきい値を伴うthresholdブロックの使用を示すデータストリーム言語プログラムの例を示している。データストリーム言語プロセッサ200は、図16において示されているデータストリーム言語プロセッサを受信し、それを処理する。

0163

探索モジュール310は、findブロック1610を実行して、データストリーム言語プログラム1600へ入力されるデータストリームのセットを識別する。フェッチモジュール320は、fetchブロック1615を実行して、データストリーム言語プログラムに関して指定されている周期性でデータストリームのデータをフェッチする。グループ化モジュール360は、groupbyブロック1620を実行して、findブロックによって識別されたデータストリームをデータセンター値に基づいてデータストリームのセットへとグループ化し、そのセットのそれぞれのデータストリームは、識別されたデータストリームにおいて発生している個別のデータセンター値に対応する。計算モジュール330は、statsブロック1625を実行して、それぞれのデータセンターからのデータに対応する平均値を決定する。計算モジュール330は、statsブロック1625の出力を、入力としてthresholdブロックの入力ポートへ提供する。

0164

しきい値モジュール340は、それぞれのデータストリーム入力のデータをthresholdブロック1630の高しきい値と比較する。図16において示されているように、thresholdブロック1630の高しきい値は、固定された値(すなわち、6という固定された値)である。したがって、(データセンターに対応する)いずれかのグループに関するデータストリームのいずれかのデータ値が、6という高しきい値を超過した場合には、しきい値モジュール340は、イベントを生成する。しきい値モジュール340は、そのイベントにおいてしきい値を超過しているデータストリームの詳細を名前/値ペアとして提供する。たとえば、しきい値モジュール340は、高しきい値を超過したデータストリームに対応するデータセンター属性値、高しきい値が超過された時刻のタイムスタンプなどの詳細を提供することができる。thresholdブロック1630は低しきい値を指定していないので、しきい値モジュール340は、thresholdブロック1630へ入力されたデータストリームのデータをいかなる低しきい値とも比較しない。

0165

図17は、実施形態による、メタデータ属性によってグループ化されているデータストリームに関する動的に変わるしきい値を伴うthresholdブロックを示すデータストリーム言語プログラムの例を示している。図17のthresholdブロック1760の入力ポートに入力を提供するデータブロックは、図16のthresholdブロック1630に入力を提供するデータブロックと同様である。したがって、図17のブロック1710、1715、1720、1725は、それぞれ図16のブロック1610、1615、1620、および1625に対応している。しかしながら、thresholdブロック1760の高ポートへの入力は、動的に変わる入力を受信する。さらに、thresholdブロック1760の高ポートは、入力として複数のデータストリームを受信する。しきい値モジュール340は、thresholdブロック1760の高ポートによって受信された複数のデータストリームを、入力ポートによって受信された複数のデータストリームとマッチさせる。

0166

フェッチモジュール320は、fetchブロック1730を実行して、データストリーム言語プログラムに関して指定されている周期性でデータストリームのデータをフェッチする。グループ化モジュール360は、groupbyブロック1735を実行して、findブロック1710によって識別されたデータストリームをデータセンター値によってデータストリームのセットへとグループ化し、そのセットのそれぞれのデータストリームは、データセンター値に対応する。ウィンドウモジュール380は、windowブロック1740を実行して、windowブロック1740へ入力されたそれぞれのデータストリームに関して1時間の移動ウィンドウに対応するデータポイントを識別する。計算モジュール330は、statsブロック1745を実行して、windowブロック1740によって出力されたそれぞれのデータストリームに対応する1時間の移動ウィンドウに関する1時間移動平均値を決定する。カスタマイズドブロックモジュール390は、データストリーム言語のビルトインブロックを組み合わせることによってユーザによって定義されたカスタマイズされたマクロを処理する。計算モジュール330は、scaleブロック1750を実行することによって150%の係数によってstatsブロック1745の出力を拡大する。scaleブロック1750の拡大された出力は、入力としてthresholdブロック1760の高ポートへ提供される。

0167

したがって、しきい値モジュール340は、それぞれのデータセンターからのデータストリームの平均を表す結果データストリームのセットを、150%で拡大されたそれぞれのデータセンターからのデータストリームのデータの1時間移動平均と比較する。入力ポートによって受信されたデータセンターに対応する結果データストリームのデータが、thresholdブロック1760の高ポートにおいて受信された同じデータセンターに関するデータストリームの拡大された移動平均値を超過している場合には、しきい値モジュール340は、イベントを生成する。したがって図17は、入力として受信されるデータストリームの動的に変わるセット、および比較のためにしきい値として提供されるデータストリームの動的に変わるセットの生成を示すデータストリーム言語プログラムの例を示している。

0168

図18は、実施形態による、thresholdブロックを含むデータストリーム言語プログラムを実行するプロセスを示すフローチャートを示している。しきい値モジュール340は、実行されているデータストリーム言語プログラムのthresholdブロックを1810で識別する。しきい値モジュール340は、入力ポート、低/高しきい値ポートを含むthresholdブロックについて記述するさまざまなコンポーネントおよびパラメータを1820で識別し、しきい値ウィンドウのサイズが指定され、しきい値ウィンドウに関連付けられているフラクション値が指定される。いくつかの実施形態においては、低および/または高しきい値は、一定の値であることが可能であり、そのケースにおいては、一定の値が、低/高しきい値ポートへの入力として指定されるか、または低/高しきい値が、(いずれの低/高しきい値ポートも指定することなく)thresholdブロックのパラメータとして指定される。

0169

データストリーム言語プロセッサ200は、入力ポートに入力を提供するデータストリーム言語プログラムの部分、および低/高しきい値ポートに入力を提供するデータストリーム言語プログラムの部分を実行する。この実行は、データストリーム言語プログラムに対応するジョブに関して指定されている周期性に基づいて繰り返される。しきい値モジュール340は、データストリーム言語プログラムの周期性に基づいてそれぞれのタイムインターバルに関して、入力ポートにおいて受信されたデータと、低/高しきい値ポートにおいて受信されたデータとの比較を実行する。入力ポート(または低もしくは高しきい値ポート)に入力を提供するデータストリーム言語プログラムの部分がgroupbyブロックを含む場合には、thresholdブロックの入力ポートは、データストリームのグループを受信する。それぞれのポートにおけるデータストリームの数は、対応するgroupbyブロックにおいて指定されているメタデータ属性(またはメタデータ属性のセット)の個別の値に依存する(メタデータ属性のその個別の値を有しているgroupbyブロックの入力において少なくとも1つのデータストリームがあるならば)。

0170

実施形態においては、データストリーム言語プロセッサ200は、入力ポートおよび低/高しきい値ポートにおいてデータを提供しているブロックを分析して、データがthresholdブロックに入力される前に発生する最後のgroupbyブロックを識別する。しきい値モジュール340は、それぞれのポートにおいて受信されたデータストリームを識別するために、たとえば、入力ポートからのデータストリームを低および/または高しきい値ポートからのデータストリームとマッチさせるために、およびデータストリームに基づいてイベントが生成された場合にイベントにおけるデータストリームを識別するために、最後のgroupbyブロックを使用する。しきい値モジュール340は、thresholdブロックの2つの異なるポートにおいて受信された2つのデータストリームが、groupbyブロックによって使用されたメタデータ属性の同じ個別の値を有している場合には、それらがマッチしているということを決定する。たとえば、thresholdブロックの2つのポートに入力として提供されるデータストリームを生成するためにデータストリーム言語プログラムによって使用されたgroupbyブロックが、データセンター属性に基づいてデータストリームをグループ化している場合には、特定のデータセンター(たとえばdatacenter east、またはdatacenter west)のデータをアグリゲートすることによって入手されたデータストリームどうしはマッチしていると決定される。

0171

しきい値モジュール340は、それぞれのポート(すなわち、入力ポート、低ポート、および高ポート)において受信されたそれぞれのデータストリームに関して下記の計算を実行する。しきい値モジュール340は、入力ポートにおいて受信されたデータ値を、低しきい値ポートおよび/または高しきい値ポートにおいて受信されたデータ値と1850で比較する。しきい値モジュール340は、入力ポートにおいて受信されたデータ値が、高しきい値ポートにおいて受信されたデータ値を超過しているか、または低しきい値ポートにおいて受信されたデータ値を下回っている場合には、イベントを生成する。生成されたイベントは、入力ポートにおいて受信されたデータストリームを、そのデータストリームに対応するメタデータ属性の値に基づいて識別する情報を含む。

ページトップへ

この技術を出願した法人

この技術を発明した人物

ページトップへ

関連する挑戦したい社会課題

関連する公募課題

ページトップへ

おススメ サービス

おススメ astavisionコンテンツ

新着 最近 公開された関連が強い技術

この 技術と関連性が強い人物

関連性が強い人物一覧

この 技術と関連する社会課題

関連する挑戦したい社会課題一覧

この 技術と関連する公募課題

関連する公募課題一覧

astavision 新着記事

サイト情報について

本サービスは、国が公開している情報(公開特許公報、特許整理標準化データ等)を元に構成されています。出典元のデータには一部間違いやノイズがあり、情報の正確さについては保証致しかねます。また一時的に、各データの収録範囲や更新周期によって、一部の情報が正しく表示されないことがございます。当サイトの情報を元にした諸問題、不利益等について当方は何ら責任を負いかねることを予めご承知おきのほど宜しくお願い申し上げます。

主たる情報の出典

特許情報…特許整理標準化データ(XML編)、公開特許公報、特許公報、審決公報、Patent Map Guidance System データ