本発明は、エージェントからマネージャへ、静的及び動的なデータを含むトランザクショントレースデータを効率的に伝える監視ソフトに関する技術を提供する。効率を改善してオーバーヘッドコストを削減するため、エージェント及びマネージャによって保守管理されるツリーデータ構造は、ソフトウェアの呼び出されたコンポーネントのシーケンスを記述する。各コンポーネントの開始と終了は、ツリーデータ構造のブランチ内のノードによって表される。トランザクションを識別するため、エージェントは、例えばブランチの最終ノードの識別子など、ブランチ固有の識別子を伝える。これにより、呼び出されたコンポーネントのシーケンスがエージェントからマネージャへより効率的に報告される。さらに、静的データは、1以上のノード又はコンポーネントにインデックス付けされ、及び、エージェント及び/又はマネージャによってアクセスされる。静的データは、通常、ソフトウェアに付与されたバージョンのために固定され、及び固定された、又は実行依存しないデータとしても考えられる。静的データは、例えば、コンポーネントに関連付けられたクラス名又はメソッド名、メソッド呼び出しのシーケンス、トレースされたクラスファイルが展開されたアーカイブファイル(JAVA(登録商標)アーカイブファイル又はJARファイル又はウェブアーカイブファイル又は.WARファイルなど)の名称、テキスト文字列、コンポーネントの型(例えば、サーブレット、EJB)、サーブレット又はソケットのためのポート番号、URL、ホスト名、及びローカル又はリモートインタフェース名を含んでよい。これらは、ソフトウェアのトレースから入手可能である全種類の情報である。静的データのインデックス付けは、エージェントからマネージャへ繰り返し伝える必要性、及びエージェント及び/又はマネージャが静的データを繰り返し取得する必要性を回避する。
動的データはトレースから取得される。動的データは、コンポーネントの開始及び終了時刻、及びパラメータ値が監視されたメソッドに渡された、又は監視されたメソッドによって渡されたパラメータ値などの他の動的データを含む。動的データは、また1以上のノード又はコンポーネントにインデックス付けられる。動的データは、コンポーネントの開始及び/又は終了ノードにインデックス付けられる。このインデックス付けを介して、動的データは、エージェントからマネージャに効率的に報告される。
トランザクションがトレースされると、エージェントは、ツリーデータ構造内のブランチに一致するものを特定する。もし一致するものがなければ、エージェントは、ツリーデータ構造を更新し、マネージャに更新を報告する。その結果、エージェント及びマネージャは、ツリーデータ構造の同期したバージョンを保守し得る。さらに、マネージャは、ツリーデータ構造の異なる部分が異なるエージェントに関連付けられている場合、複数のエージェントからの報告に基づいてツリーデータ構造を保守管理する。エージェントが同じソフトウェアの異なるインスタンスを監視するとき、マネージャは、また1つのエージェントから別のエージェントへ受信される更新情報を渡す。このように、エージェントのツリーデータ構造が同期されるように新しいトランザクションがエージェント間で迅速に伝達する。
図1Aは、アプリケーションの複数のインスタンスが異なるサーバ上で実行し、サーバのエージェントがマネージャに報告するシステム100の例を示す。例示の管理対象のコンピューティングデバイス103、105及び109は、アプリケーションサーバ又は必要な機能を実現するためのコードを実行するプロセッサを有するコンピューティングデバイスの他の種類を含む。管理対象のコンピューティングデバイスは、互いに離れて位置することができ、又は同じ場所に位置することもできる。管理対象のコンピューティングデバイスは、この例ではネットワーク107を介してマネージャコンピュータ111と通信する。マネージャコンピュータ111は、管理対象のコンピューティングデバイスにローカル、又は管理対象のコンピューティングデバイスからリモートである。管理対象のコンピューティングデバイス103及び105は、またネットワーク102を介して、例示のウェブブラウザ101などのクライアントのコンピューティングデバイスと通信する。ウェブブラウザ101は、例えば、インターネットサービスプロバイダを介してネットワーク102にアクセスする。さらに、一例として、管理対象のコンピューティングデバイス103は、ウェブブラウザからのリクエストに応答するために必要な情報を取得するため、例えばウェブサービス呼び出し側のEJBクライアントを経由して管理対象のコンピューティングデバイス109を呼び出す。管理対象のコンピューティングデバイス103は、ウェブブラウザからのリクエストに応答するために必要な情報を取得するため、例えばメインフレーム、データベース又は他の未計測のコンピューティングデバイスなどのバックエンドシステム108もまた呼び出す。性能メトリックの全範囲は、計測の使用により管理対象のコンピューティングデバイスから取得される一方で、限定された情報は、管理対象のコンピューティングデバイスから呼び出して使用されるメソッドから、未計測のサブシステムに着目して得られる。管理対象のコンピューティングデバイスは、フロントエンドのサブシステムであると考えられる。ネットワーク102及び107は、同じ、重複した、又は、異なるものであると考えられ、例えば、インターネット、他の広域ネットワーク及び/又はローカルエリアネットワークを含む。点線は、通信経路を示す。
例えば、ウェブベースの電子商取引アプリケーションなどの企業のアプリケーションを実行している会社は、負荷分散のために1つの場所で複数のアプリケーションサーバを使用する。例えば、ウェブブラウザ101からのようなユーザからのリクエストは、ネットワーク102を介して受信され、任意の管理対象のコンピューティングデバイス103及び105に送られる。管理対象のコンピューティングデバイス103、105及び109上で実行するエージェントソフトウェアは、エージェントA1(104)、エージェントA2(106)及びエージェントA3(110)によってそれぞれ表され、それぞれの管理対象のコンピューティングデバイス上で実行されている、アプリケーション、ミドルウェア又はその他のソフトウェアから、情報を収集する。例えば、そのような情報は、計測を用いることによって得ることができ、その一例はバイトコードの計測である。しかしながら、集められたデータは他の方法でも得ることができる。エージェントは、監視するコンピューティングデバイスに元来存在してデータの取得ポイントを提供する。エージェントは、マネージャ124と通信してデータをまとめ最適化する。1つの実施形態では、管理対象のコンピューティングデバイス103、105において同じアプリケーションの異なる複数のインスタンスが実行され、管理対象のコンピューティングデバイス109において別のアプリケーションが実行される。
マネージャ111は、エージェントから受信したデータに基づく情報を表示するため、例えばモニタなどのユーザインタフェース113と通信するワークステーションのような分離したコンピューティングデバイス上に提供され得る。マネージャは、またエージェントから受信したデータを格納するためデータベース112にアクセスする。例えば、大きな組織は、セントラルネットワークオペレーションセンタを運用する。そこでは、1以上のマネージャが、地理的に異なる場所に分散している複数のエージェントからデータを取得する。説明すると、ウェブベースの電子商取引企業では、顧客の注文を受ける地理的に異なる場所にあるサーバからエージェントのデータを取得することがある。支払いを処理するサーバ、倉庫で在庫を調べたり、受注を受けたりするサーバなどである。マネージャ111及びユーザインタフェースディスプレィ113は、企業の本社の場所で提供され得る。必ずしも、ウェブベース又は小売、若しくはその他の販売に関する必要はなく、他のアプリケーションにおいて同様にシステムを管理するためにエージェントとマネージャを利用する。例えば、銀行では、小切手の処理やクレジットの口座用にアプリケーションを使用することがある。また、上述した複数コンピュータのデバイスアレンジに加えて、1以上のエージェントによって単一のコンピュータデバイスが同様に監視されることがある。
監視を実行するソフトウェアを計測するのに、様々なアプローチが知られている。例えば、最初に述べたように、トレーシングはソフトウェアの実行を追跡するために用いることができる。トレーシングの例が、”Transaction Tracer”と題する米国特許第7,870,431号(2011年1月11日発行)に記載されている。その内容は参照により本明細書に組み込まれる。その中で述べられているアプローチにおいては、監視すべきアプリケーションのオブジェクトコード又はバイトコードが計測され、例えばプローブにより変更される。アプリケーションのジョブ又は他のロジックを変更することなくアプリケーションについての特定の情報をプローブが測定する。一旦、プローブがアプリケーションのバイトコードにインストールされると、管理されたアプリケーションと称され、また、そのアプリケーションが実行されるコンピューティングデバイスは、管理されたコンピューティングデバイスと称される。エージェントソフトウェアは、プローブからの情報を受信し、その情報を、例えばマネージャ111において、別のプロセスに伝達することがある。また、情報が異常状況を示すか否かを判定するなど、情報をローカルで処理する。エージェントは、このようにプローブから受信した情報を収集し要約する。指示ファイルによって定義されるように、プローブは、情報を収集する。例えば、プローブからの情報は、トランザクション又は他の実行フローの開始や停止の回数、又はトランザクション/実行フロー内の個々のコンポーネントの開始や停止の回数を示す場合がある。この情報は、それが範囲内にあるかどうかを判定するために予め決められた基準と比較される。もし情報が範囲内にない場合には、エージェントは適切なトラブルシューティングが実行できるようにこの事実をマネージャに報告する。エージェントは、関連付けられているローカルの管理対象のコンピューティングデバイス上でソフトウェアが実行中であることを通常認識している。
プローブは、CORBAメソッドタイマ、リモートメソッドインボケーション(RMI)メソッドタイマ、スレッドカウンタ、ネットワークバンド幅、JDBC更新及びクエリタイマ、サーブレットタイマ、Java(登録商標)サーバページズ(JSP)タイマ、システムログ、ファイルシステム入出力バンド幅メータ、使用可能及び使用済メモリ、並びにEBJ(エンタープライズJava(登録商標)ビーンズ)タイマを含むメトリックの標準セットを報告する。メトリックは、特定のアプリケーションのアクティビティの計測値である。
エージェントは、アプリケーションによってアクセスされるリソースを識別するトランザクションに関する情報を報告する。1つのアプローチでは、トランザクションについて報告する場合における「呼び出された」という語はリソースを指す。このリソースは、消費者が親のコンポーネントであるところのリソース(又はサブリソース)である。例えば、トランザクションで呼び出される最初のコンポーネントがサーブレットAであると仮定する。消費者のサーブレットA(下記参照)の下には、EJBと称されるサブリソースがある。消費者とリソースは、ツリーのような形でエージェントよって報告される。トランザクションのデータは、またツリーに従って格納される。例えば、もしサーブレット(例えばサーブレットA)が、ネットワークのソケット(例えば、ソケットC)の消費者であり、かつEJB(例えば、EJB B)の消費者でもあるとすれば、次にはJDBC(例えば、JDBC D)の消費者であり、ツリーは以下のように見える。
Servlet A (サーブレットA)
Data for Servlet A (サーブレットAのデータ)
Called EJB B (呼び出されたEJB B)
Data for EJB B (EJB Bのデータ)
Called JDBC D (呼び出されたJDBC D)
Data for JDBC D (JDBC Dのデータ)
Called Socket C (呼び出されたソケットC)
Data for Socket C (ソケットCのデータ)
一実施形態では、上記ツリーは、ブレイムスタックと称されるスタックにエージェントによって格納される。トランザクションが開始すると、トランザクションはスタックへプッシュされる。トランザクションが完了すると、トランザクションはスタックからポップされる。一実施形態では、スタック上の各トランザクションは、次に続く情報、トランザクションの型、トランザクションのためにシステムで使用される名称、パラメータのハッシュマップ又は辞書、トランザクションがスタックへプッシュされたときのタイムスタンプ及びサブエレメント、が格納されている。サブエレメントは、注目すべきトランザクション内から開始されている他のコンポーネント(例えば、メソッド、プロセス、プロシージャ、関数、スレッド、命令セットなど)のためのブレイムスタックのエントリである。上記の例のようにツリーを使用すると、サーブレットAのためのブレイムスタックのエントリは2つのサブエレメントを有する。第1サブエレメントは、EJB Bへのエントリで、第2サブエレメントは、ソケットスペースCへのエントリである。サブエレメントは特定のトランザクションのためのエントリの一部であるにもかかわらず、サブエレメントはまた独自のブレイムスタックのエントリを有する。トランザクション/ブランチへのエントリポイントの例は、URLである。上記のツリーに示されるように、EJB BはサーブレットAのサブエレメントであり、また独自のエントリを有する。トランザクションに対する一番上(最初)のエントリ(例えばサーブレットA)は、ルートコンポーネントと称される。スタック上の各エントリはオブジェクトである。
図1Bは、アプリケーションの複数のインスタンスが異なるサーバ上で実行し、サーバのエージェントが中間マネージャを経由してマネージャに報告するシステムの例を示す。この例では、付加的な管理対象のコンピューティングデバイス116及び118がエージェントA4 117及びエージェントA5 119と共にそれぞれ提供されている。さらに、中間、又は低レベルのマネージャコンピューティングデバイス120(マネージャA)及び121(マネージャB)は、エージェントA4及びエージェントA5からデータを受け取るものが、それぞれ提供される。中間マネージャは、次に、この場合、高レベルのマネージャがネットワーク122を介してデータをマネージャ111に報告する。ネットワーク102、107及び122は、同じ、重複又は異なるものであると考えられる。
図2Aは、トランザクショントレースを開始するための処理の一実施形態を説明するフローチャートである。ステップは適切なエージェントにより実行される。ステップ130ではトランザクションを開始する。一実施形態では、プロセス[処理]がメソッド(例えば、“loadTracer”メソッドの呼び出し)の開始によってトリガされる。ステップ132において、エージェントは所望のパラメータ情報を取得する。一実施形態では、ユーザは、どのパラメータ情報が構成ファイル又はUIを介して取得されるかを設定することができる。取得されたパラメータは、ブレイムスタックへプッシュされるオブジェクトの一部であり、ハッシュマップ又は辞書に格納されている。他の実施形態では、パラメータの識別は、予め設定されている。格納されるパラメータには様々なものがある。一実施形態では、使用されるパラメータの実際の一覧表は、監視されるアプリケーションに依存している。以下の表は、取得され得るいくつかのパラメータの例を示す。
パラメータは、クエリ、クッキー、POST、URL及びセッションの型の名称/値の組を含む。
ステップ134では、システムは現在の時刻を示すタイムスタンプを取得する。ステップ136ではスタックエントリが作成される。ステップ138において、スタックエントリはブレイムスタックへプッシュされる。一実施形態では、タイムスタンプがステップ138の一部として付加される。トランザクションが開始されるときにプロセス[処理]が実行される。同様のプロセス[処理]が、トランザクションのサブコンポーネントが開始するときに実行される(例えば、EJB BはサーブレットAのサブコンポーネントである−上述したツリーを参照のこと)。
図2Bは、トランザクショントレースを終了するためのプロセス[処理]の一実施形態を説明するフローチャートである。トランザクションが終了するときにエージェントによりプロセス[処理]が実行される。ステップ140において、プロセス[処理]がトランザクション(例えばメソッド)の終了(例えば、“finishTrace”メソッドの呼び出し)によってトリガされる。ステップ142では、システムは現在の時刻を取得する。ステップ144では、スタックエントリが削除される。ステップ146において、トランザクションの実行時間は、ステップ142からのタイムスタンプをスタックエントリに格納されているタイムスタンプと比較することによって算出される。ステップ148では、トレースのためのフィルタが適用される。例えば、フィルタは1秒の閾値期間が入る。したがって、ステップ148は、ステップ146から算出された時間幅が1秒よりも大きいか否かを決定することを含む。閾値を超えない場合(ステップ150)、トランザクションのデータは破棄される。一実施形態では、スタックエントリの全体が破棄される。別の実施形態では、パラメータとタイムスタンプだけが破棄される。他の実施形態では、データの様々なサブセットが破棄される。いくつかの実施形態で、閾値の時間幅を超えていない場合には、エージェントにより、データは図1A又は1Bのシステム内の他のコンポーネントに送信されない。時間幅が閾値を超える場合(ステップ150)、ステップ160においてエージェントがコンポーネントデータを組み立てる。コンポーネントデータは、報告されるトランザクションに関するデータである。一実施形態では、コンポーネントデータは、トランザクションの名称、トランザクションの型、トランザクションの開始時刻、トランザクションの時間幅、パラメータのハッシュマップ、及びサブエレメント(エレメントの帰納的なリスト)のすべてを含む。その他の情報もまたコンポーネントデータの一部である。ステップ162において、エージェントは、マネージャ111にTCP/IPプロトコルによりコンポーネントデータを送信することによってコンポーネントデータを報告する。
図2Bは、トランザクションが終了すると何が起こるかを表している。しかしながら、サブコンポーネントが終了すると、実行されるステップは、タイムスタンプを取得すること、サブコンポーネントのためのスタックエントリを削除すること及び完了したサブエレメントを以前のスタックエントリに加えることを含む。一実施形態では、フィルタ及び判断ロジックは、特定のサブコンポーネントというよりも、トランザクションの開始及び終了に適用される。
一実施形態では、トランザクショントレーサがオフになっている場合、システムは依然としてブレイムスタックを使用するが、しかし、パラメータは格納されことなく、コンポーネントデータは作成されないことに注意されたい。いくつかの実施形態では、トレーシング技術をオフにすることによってシステムはトレーシングを開始しない。トレーシングは上述したように、ユーザがリクエストした後にだけ開始する。
図3は、図1A又は1Bのネットワークのコンピューティングデバイスを示す。コンピューティングデバイス300は、図1A又は1Bに関連して説明したように、ウェブブラウザ、アプリケーションサーバ、マネージャ及び/又はユーザインタフェースで使用されるシステムを簡略化して表したものである。コンピューティングデバイス300は、ハードディスク又はポータブルメディアのような記憶装置310、他のコンピューティングデバイスと通信するためのネットワークインタフェース320、ソフトウェアの命令を実行するためのプロセッサ330、例えば、記憶装置310からロードされた後にソフトウェアの命令を格納するためのRAMのような作業メモリ340、及び1以上のビデオモニタのようなユーザインタフェースディスプレィ350を含むものである。ユーザインタフェースは1以上のモニタを提供する。記憶装置310は、本明細書で説明した機能を提供するための方法を実行するのにプロセッサ330をプログラミングするために具現化されているプロセッサ読み取り可能なコードを有する、プロセッサ又はコンピュータで読み取り可能な有体であり一時的でない記憶装置と考えることができる。ユーザインタフェースディスプレィ350は、1以上のエージェントから受信したデータに基づいて、人間のオペレータに情報を提供する。ユーザインタフェースディスプレィ350は、グラフィカル又は表形式のような既知の任意の表示方式を使用する。画面上の表示に加えて、プリンタからのハードコピーなどの出力も提供する。
記憶装置310がアプリケーションサーバ、マネージャ及び/又はユーザインタフェースのようなコンピューティングデバイス300の一部である場合、データベースは記憶装置310に含まれる。記憶装置310は、1以上のエージェントから受信したデータを格納し、本明細書で説明したようにユーザインタフェースを提供するためにデータを取得するためにアクセスされる、1以上の記憶装置を表す。記憶装置310は、データストアを表す。
また、本明細書で説明する機能は、ハードウェア、ソフトウェア又はハードウェアとソフトウェアの両方の組み合わせを使用して実装されてもよい。ソフトウェアについては、1以上のプロセッサをプログラミングするために具現化されているプロセッサで読み取り可能なコードを有する、プロセッサで読み取り可能な1以上の一時的でない有体の記憶装置が使用される。プロセッサ読み取り可能な一時的でない有体の記憶装置は、揮発性及び不揮発性メディア、リムーバブル及び非リムーバブルメディアなどのコンピュータで読み取り可能な媒体を含む。例えば、コンピュータにより読み取り可能な一時的でない有体の媒体には、コンピュータにより読み取り可能な命令、データ構造やプログラムモジュール又は他のデータなどの情報を記憶するために、任意の方法や技術で実装された、揮発性、不揮発性、リムーバブルや非リムーバブルメディアが含まれ得る。コンピュータにより読み取り可能な一時的でない有体の媒体の例としては、RAM、ROM、EEPROM、フラッシュメモリ、又は他のメモリ技術、CD−ROM、ディジタルバーサタイルディスク(DVD)、又は他の光学ディスク記憶装置、磁気カセット、磁気テープ、磁気ディスク記憶装置、他の磁気記憶装置、又は所望の情報を格納したり、コンピュータによってアクセスしたりすることに用いられる他の媒体などがある。他の実施形態においては、一部又はすべてのソフトウェアは、カスタムIC、ゲートアレイ、FPGA、PLDや特殊用途向けプロセッサなど、専用のハードウェアに置き換えることができる。一実施形態では、1以上の実施形態を実装するソフトウェア(記憶装置に格納されている)は、1以上のプロセッサをプログラムするために用いられる。1以上のプロセッサは、コンピュータにより読み取り可能な1以上の有体の媒体/記憶装置、周辺機器及び/又は通信インタフェースと通信することができる。
図4は、1以上のアプリケーションの操作を示す際に用いられる階層を示す。異なるレベルの階層が必要な組織構造に基づいて定義される。例えば、階層は、人間が理解し易い用語を含み、その用語は、クライアントの、監視されるアプリケーションとの相互関係の理解を容易にするものである。階層は、相互関係が営利目的の業務の領域にあるか否か、例えば、電子商取引のトランザクションか、教育組織又は政府組織のためにあるかなど、アプリケーションとの相互関係の類型を包含する。さらに、1以上の階層は、各ノードが記述名を持つ1以上の階層の異なるレベルにおけるノードを含む。階層は、人間のオペレータにいっそう理解され易い仕方でアプリケーションを実行するやり方についての情報を、体系化する方法を提供する抽象的な構成であると考えられる。
階層の最上位は、「ドメイン」と名付けられたドメインレベル400である。階層の次のレベルは、業務サービスレベル402である。業務サービスの例として、ウェブサイトを用いた株式の取引に関するものがある。このように、「取引」は、階層の業務サービスレベルにおけるノードの名称とすることができる。階層のその次のレベルは、業務トランザクションレベルである。業務サービスは、いくつかの業務トランザクションで構成されている。例えば、取引のために、業務トランザクションは、報告404(例えば、株式又は口座に関する報告を表示する)及び見積406(例えば、株価の見積を取得する)を含む。さらに、業務トランザクションは、1以上の業務トランザクションコンポーネントに関連付けられる。1つのアプローチでは、業務トランザクションは、唯一の識別コンポーネントを有する。業務トランザクションコンポーネントは、サーブレット又はEJBなどのサーバによって認識可能かつ測定可能なアプリケーションのコンポーネントの型になり得る。1つのアプローチでは、アプリケーションのコンポーネントの1つは、業務トランザクションのための識別トランザクションコンポーネントである、業務トランザクションコンポーネントとして設定される。
業務トランザクションコンポーネントは、業務トランザクションに対する識別トランザクションであるトランザクションのための識別トランザクションコンポーネントである。トランザクションは、クライアントに応答するレスポンスを提供するために、クライアントからのリクエストに応答して呼び出されるソフトウェアコンポーネントのシーケンスを表す。例えば、業務トランザクションコンポーネントは、エージェントによって報告されたコンポーネントデータが一連のルールに一致することをもって識別される。この定義は、例えば、特定のURLのホスト名称、URLのパラメータ、HTTPポストパラメータ、クッキー及び/又はセッションマネージャのパラメータなどを含む。加えて、又はその代わりに、この定義は、特定のURLのホスト名称で開始するトランザクションを必要とする場合がある。エージェント又はマネージャは、例えば、業務トランザクションコンポーネントが業務トランザクション内に存在していることを判定するために、コンポーネントデータを一連のルールと比較する。業務トランザクションコンポーネントが検出される場合、関連付けられた業務トランザクションは特定の型のものである。例えば、業務トランザクションコンポーネント408が検出される場合、関連付けられた業務トランザクションは、報告404である。業務トランザクションコンポーネント410が検出される場合、関連付けられた業務トランザクションは見積406である。
図5Aは、図4の報告及び見積の業務トランザクション内で呼び出されるコンポーネントの一例のシーケンスおける依存関係を示す。コンポーネントは、フロー経路内のブロックとして示される。同じコンポーネントが2回以上現れる。また、コンポーネントは異なるサブシステム内、即ちサブシステム1(点線の上方のコンポーネント)又はサブシステム2(点線の下方のコンポーネント)内で実行する。
コンポーネント指向のプログラミングモデルは、コンポーネントに関係する構成要素からアプリケーションや他のプログラムをプログラマに組ませるのに役に立つ。各コンポーネントは、ソフトウェアの全体的機能に適合するよう特定の機能を実行する。さらに、コンポーネントは、コンポーネントのシーケンスがプログラム内で呼び出されるように他のコンポーネントを呼び出し、同様に、再帰呼び出しでは自分自身を呼び出す。コンポーネント指向のプログラミングモデルの一例は、J2EEであるが、Java(登録商標)サーバページズ、エンタープライズJava(登録商標)ビーンズ(EJB)、サーブレット及びJava(登録商標)データベースコネクティビティ(JDBC)のコンポーネントといったコンポーネントを用いることができる。JDBCは、クライントがどのようにデータベースにアクセスするかを定義するJava(登録商標)プログラミング言語のためのアプリケーションプログラミングインタフェース(API)である。それは、データベース内のデータを照会や更新する方法を提供する。しかしながら、.NETのような他のコンポーネント指向のプログラミングモデルを使用することもできる。また、プログラミングモデルは、オブジェクト指向である必要はない。
この例では、前述の報告及び見積の業務トランザクションの詳細を提供する。1つの可能な実装では、業務トランザクションの各コンポーネントは、1以上のクラスメソッドの組を含む。例えば、サーブレットはJava(登録商標)クラスである。リクエストを受信して対応する応答を生成するのは、オブジェクトである。クラスメソッドの組は、class.methodの表記により表される。例えば、報告は、所望の報告に関するユーザの入力を受信するために、ユーザインタフェース(UI)上の報告画面を表示するコンポーネントC1(502)を含む。C1に対するクラスメソッドの組のフォーマットの例は、ServletA1.DisplayReportScreenである。C1は、ルート500の下にある。したがって、エージェントがC1の呼び出されたことを検出する度に、現在のトランザクションが報告の一部であり、そのコンポーネントデータが報告に関連付けられることになる。
C1は、リクエストされた報告に関係するC2(504)を呼び出す。C2は、リクエストされた報告のユーザ入力を処理するServletA2.RequestedReportなどのクラスメソッドの組を含む。この処理は、リクエストのフォーマットを調べることを含み、例えば、フォーマットが有効である場合、報告リクエストを受信する、サブシステム2内のコンポーネントC5(508)を呼び出すことを含む。例えば、この呼び出しは、クロスプロセス、クロススレッドトランザクション又はクロスサブシステム呼び出しである。フォーマットが無効である場合、制御フローは、例えば、C1に戻り、エラーメッセージを表示するためにC3、を呼び出す。
C5に対するクラスメソッドの組のフォーマットの例は、ServletA3.ReceiveReportRequestである。C5は、例えば、報告リクエストの種類に基づいて、データベース1にアクセスするためにC6(510)、及び/又は、データベース2にアクセスするためにC7(512)、を呼び出す。例えば、C6及びC7は、1以上のSQL文を呼び出すJDBCドライバをそれぞれ含む。制御フローは、次にC5に戻り、その次にC2に、そしてその次にC1に戻る。その後、C1は、データベースから検索されたデータに基づいてリクエストされた報告の表示などの表示を提供することに関連しているC3(506)を呼び出す。制御フローは、次にC1に戻る。
C1は、例えば、報告データを異なる形式(異なる期間に亘る、等々)で表示するためのユーザコマンド(例えば、再表示)に基づくなどして、表示を調整するためにC3をさらに何回か呼び出すことがある。
また、ルート500の下において、コンポーネントC4(514)は、所望の見積に関するユーザの入力を受信するためにユーザインタフェース(UI)上に見積画面を表示するものを提供する。C1は、リクエストされた報告に関するC2(504)を呼び出す。C2は、例えば、リクエストのフォーマットを調べることによってユーザ入力を処理し、フォーマットが有効である場合、例えば、サブシステム1にローカルであるデータソースから、リクエストされた見積を取得することを処理する。フォーマットが無効である場合、制御フローはC4に戻り、C4は、例えば、エラーメッセージを表示するために、C3を呼び出す。
制御フローは、次にC4に戻る。C4は、データソースから検索されたデータに基づいてリクエストされた見積の画面などの画面を提供することに関連するC3(518)を呼び出す。C4は、例えば、見積データを異なる形式(例えば、別の移動平均を伴い、異なる期間に亘る、等々)で表示するためのユーザコマンド(例えば、再表示)に基づくなどして、表示を調整するためにC3をさらに何回か呼び出すことがある。
コンポーネントは、非同期、マルチスレッド又はマルチプロセスのモードで実行を開始する別のコンポーネントを呼び出した後、実行を継続できることに注意されたい。又は、この呼び出されたコンポーネントが同期、シングルスレッド又はシングルプロセスのモードで実行を終了するまで、コンポーネントを一時的に休止できる。休止しているコンポーネントは、待機期間にあると考えられ、一方、実行されているコンポーネントは、アクティブで、実行モードであると考えられる。また、コンポーネントは、トランザクションの期間中、2回以上呼び出すことが可能である。
図5Bは、図5Aの依存関係の代わりとなる表示で、よりコンパクトなものを示す。ノード505はノード504及び516を結合し、そしてノード507はノード506及び518を結合する。
図6(A)から(C)、及び、図6Dから図6Iは、図5Aのトランザクション内で呼び出されたコンポーネントの異なるシーケンスに対するトランザクショントレースを示す。水平方向は時間を表し、一方、垂直方向は呼び出しスタックの深さや位置を表す。また、呼び出しスタックと称されるトランザクショントレースは、1以上のプログラム、プロセス又はスレッドの実行中に、呼び出される又は起動される計測されたコンポーネントを識別する。計測されたコンポーネントのトレースデータは、アプリケーションを理解したりデバッグしたりするために依存データとともに使用される。トランザクショントレースは、トレース又はトランザクションの全部若しくは一部とすることができ、それぞれのエージェントを有する1以上のコンピューティングデバイスに及ぶ。特に、異なる別々のトランザクショントレースは、別々のスレッドが別々のトランザクショントレースに分離されるように、各エージェントに対して提供される。トランザクショントレースは、ユーザインタフェース上のグラフ表示によって提供される。
図6(A)のトランザクショントレースは、図5Aのブロック502及び504に対応している。グラフ部分600はC1を表し、グラフ部分602はC2を表す。C1は、t0で実行を開始して、t7で終了又は停止する。C1によって呼び出されるC2は、t1で実行を開始してt6で終了する。
図6(B)のトランザクショントレースは、図6Aのトランザクショントレースと時間軸を合わせており、図5Aのブロック508及び510に対応している。グラフ部分610はC5を表し、グラフ部分612はC2を表す。C5は、t2で実行を開始してt5で終了する。C5によって呼び出されるC6は、t2で実行を開始してt4で終了する。
図6(C)のトランザクショントレースは、図6(A)のトランザクショントレースと時間軸を合わせており、図5Aのブロック508及び512に対応している。グラフ部分620はC5を表し、グラフ部分622はC7を表す。C5は、t2で実行を開始してt5で終了する。C5によって呼び出されるC7は、t2で実行を開始してt4で終了する。図6(C)のトランザクショントレースは、例えば、データベース2がデータベース1の代わりに呼び出された場合、図6(B)のトランザクショントレースに代えることができる。タイムポイントt2−t5は、図6(B)と必ずしも同じである必要はない。また、タイムポイントt0、t1、t2等々は、一般的に等分の時間増加分を表す必要はない。
図6Dのトランザクショントレースは、図5Aのブロック502及び504に対応している。グラフ部分630はC1を表し、グラフ部分632はC2を表す。C1は、t0で実行を開始してt3で終了する。C1によって呼び出されるC2は、t1で実行を開始してt2で終了する。このトランザクショントレースは、C1がC2を呼び出し、C2がユーザリクエストのフォーマットが無効であると判定したため制御フローがC1に直接戻るというと場合を表す。
図6Eのトランザクショントレースは、図5Aのブロック502及び506に対応している。グラフ部分640はC1を表し、グラフ部分642はC3を表す。C1は、t0で実行を開始してt3で終了する。C1によって呼び出されるC3は、t1で実行を開始してt2で終了する。このトランザクショントレースは、C1がC3を呼び出し、C3が報告を表示又は再表示する場合を表す。
図6Fのトランザクショントレースは、図5Aのブロック502及び506に対応している。グラフ部分650はC1を表し、グラフ部分652及び654はC3の別々の呼び出しを表す。C1は、t0で実行を開始してt5で実行を終了する。C3は、C1によって最初に呼び出されたとき、t1で実行を開始してt2で終了する。C3は、C1によって2回目に呼び出されたとき、t3で実行を開始してt4で終了する。このトランザクショントレースは、C1がC3を、報告を表示するために最初に呼び出す場合、及び報告を再表示するために2回目に呼び出す場合を表す。
図6Gのトランザクショントレースは、図5Aのブロック502、504及び506に対応している。グラフ部分660はC1を表し、グラフ部分662はC3を表し、及びグラフ部分664はC2を表す。C1は、t0で実行を開始してt5で終了する。C3は、C1によって呼び出されたとき、t1で実行を開始してt2で終了する。C2は、C1によって呼び出されたとき、t3で実行を開始してt4で終了する。このトランザクショントレースは、C1が報告を表示するためにC3を呼び出し、ユーザが報告に対する別のリクエストをするが、そのリクエストは無効のフォーマットであり、それゆえ、制御フローがC2からC1に直接戻る場合を表す。
図6Hのトランザクショントレースは、図5Aのブロック514及び516に対応している。グラフ部分670はC4を表し、グラフ部分672はC2を表す。C4は、t0で実行を開始してt3で終了する。C1によって呼び出されるC2は、t1で実行を開始してt2で終了する。このトランザクショントレースは、C4が見積に対するユーザリクエストでC2を呼び出す場合を表す。
図6Iのトランザクショントレースは、図5Aのブロック514及び518に応答している。グラフ部分680はC4を表し、グラフ部分682はC3を表す。C4は、t0で実行を開始してt3で終了する。C1によって呼び出されるC3は、t1で実行を開始してt2で終了する。このトランザクショントレースは、C4がC3を呼び出し、C3が見積を表示する場合を表す。
図7A1は、図6から6Iのトランザクショントレースに基づき提供されるエージェント1及びエージェント2のツリーデータ構造の例を示す。ツリーデータ構造は、有効グラフ、又は、ノード及び矢印若しくはノードを接続する辺を含む分散ツリーによって表される。ツリーを通じたそれぞれの異なる経路が、ツリーのブランチを表す。各個別のブランチは、少なくとも1つのアプリケーションの呼び出された複数のコンポーネントのそれぞれのトランザクション又はシーケンスを表す。また、各ノードは、コンポーネントの実行の開始又は終了を表す。各ノードは、また固有の識別子を含む。そして、ブランチの最終ノードの識別子は、そのブランチ固有の識別子(例えば、サブシステム/エージェント内で固有である)としての役割を果たす。即ち、ブランチ内の最終ノードの識別子が与えられると、ブランチ内の各先行ノードを最初のノードまで、即ち、そのブランチのルートノードまで遡ることができる。ツリーのブランチは、複数のサブシステムに亘って延長する、コンポーネントのシーケンス又はトランザクションもまた表し得る。例えば、点線よりも上方のブランチ部分は、サブシステム1で実行するコンポーネントのノードを含み、点線より下方のブランチ部分は、サブシステム2で実行するコンポーネントのノードを含む。複数のブランチは、少なくとも部分的に重複し、共通のノードを有する。通常、少なくともルートノードは、複数のブランチに共通である。
アプリケーション又は他のソフトウェアを監視するエージェントは、関連付けられたツリーデータ構造を保守する。例えば、サブシステム1のエージェント1(agt1)は、ルートノード700から始まるツリーデータ構造を保守し、サブシステム2のエージェント2(agt2)は、ルートノード742から始まるツリーデータ構造を保守する。マネージャは、1以上のエージェントのツリーデータ構造に基づくツリーデータ構造を保守管理する。例えば、マネージャは、エージェント1及びエージェント2のツリーデータ構造を結合する、図7C1のツリーデータ構造を保守管理する。
ルートノード700は、サブシステム1におけるすべてのブランチの開始ノードである。第1ブランチ(エージェント1−ブランチ1、トランザクションのエージェント1−T1を表す)は、ノード702、704、706及び708を含む。第2ブランチ(エージェント1−ブランチ2、トランザクションのエージェント1−T2を表す)は、ノード702、710、712及び714を含む。第3ブランチ(エージェント1−ブランチ3、トランザクションのエージェント1−T3を表す)は、ノード702、710、712、716、718及び720を含む。第4ブランチ(エージェント1−ブランチ4、トランザクションのエージェント1−T4を表す)は、ノード702、710、712、722、724及び726を含む。第5ブランチ(エージェント1−ブランチ5、トランザクションのエージェント1−T5を表す)は、ノード728、730、732及び734を含む。第6ブランチ(エージェント1−ブランチ6、トランザクションのエージェント1−T6を表す)は、ノード728、736、738及び740を含む。
ルートノード742は、サブシステム2におけるすべてのブランチの開始ノードである。第1ブランチ(エージェント2−ブランチ1、トランザクションのエージェント2−T1を表す)は、ノード744、746、748及び750を含む。第2ブランチ(エージェント2−ブランチ2、トランザクションのエージェント2−T2を表す)は、ノード744、752、754及び756を含む。
各ノードの識別子は、例えば識別子内の値の数に基づいて、ブランチ内におけるノードのシーケンスの位置を示す。例えば、ノード702は、識別子「0:0」を有する。この識別子は、ルートノード(識別子「0」を有する)の後の、ブランチの第2ノードであることを示す、コロンで区切られた2つの値を有する。第2、第3及び第4ブランチでは、ノード702、710及び712(第2、第3及び第4ノード)は共通である。第2ブランチでは、最終ノード714は、識別子0:0:1:0:0を有する。第3ブランチでは、最終ノード716は、識別子0:0:1:0:1を有する。第4ブランチでは、最終ノード722は、識別子0:0:1:0:2を有する。様々な他のノードの識別方式/コード言語が同様に使用されてもよい。
ノードの識別子は独立して割り当てられているため、異なるサブシステム内で潜在的に繰り返され得る。しかしながら、サブシステムの識別子(例えば、エージェントの識別子)とノードの識別子の組み合わせは固有のものである。
ツリーデータ構造は、様々な方法で提供され得る。1つのアプローチでは、サブシステムのエージェントは、付加的なトランザクションがトレースされるに従って時間の経過とともにツリーデータ構造を構築する。各トランザクショントレースは、例えば、呼び出されたコンポーネントのシーケンスは、ツリーのブランチと比較され、一致するものが存在するか否かが判定される。一致するものが存在する場合、そのトランザクションは、既にツリーによって表されている。しかしながら、一致するものが存在しない場合、トランザクションは、ツリーによって表されておらず、ツリーデータ構造は、新しいトランザクションを表すために更新される。更新は、部分的に、重複する又は重複しない新しいブランチを既存のブランチに付加することを含む。新しいブランチは、新しいトランザクションの呼び出されたコンポーネントの開始と終了を表す付加的なノードを付加することによって提供される。付加的なノードは、既にツリーデータ構造内に存在している呼び出されたコンポーネントの開始及び終了の別のインスタンスを表す。例えば、エージェント1−ブランチ3、ノード710及び712は、C3の1つのインスタンスの開始と終了を表し、ノード716及び718は、C3の別のインスタンスの開始と終了を表す。
複数のサブシステムに亘って伸びるツリーのブランチの例は、サブシステム1のエージェント1−ブランチ1とサブシステム2のエージェント2−ブランチ1又はエージェント2−ブランチ2とを結合して、図7C1に示されている。例えば、サブシステム2のブランチ1内のノード742は、サブシステム1のブランチ1内のノード704に続き、そしてブランチ1内のノード706に戻る。又は、サブシステム2のブランチ2内のノード742は、サブシステム1のブランチ1内のノード704に続き、そしてブランチ1内のノード706に戻る。いずれの場合も、少なくとも1つのコンポーネント、例えば、第1サブシステム内のC2は、少なくとも1つのコンポーネント、例えば、第2サブシステム内のC5を呼び出す。
サーバ及びマネージャの各エージェントは、互いに対応する独立したツリーデータ構造を保守する。理想的には、ツリーデータ構造は、それらが少なくとも1つのアプリケーション又は他のソフトウェアのトランザクションの同じセットを表すように、少なくとも部分的には同期がとられる。述べたように、エージェントが新しいトランザクションを検出すると、ツリーデータ構造を更新し、マネージャに更新を報告する。マネージャが次にツリーデータ構造を更新する。さらに、少なくとも1つのアプリケーションの他のインスタンスを監視する他のエージェントが存在し、そして、エージェントがそれらのそれぞれのツリーデータ構造を更新するために更新を受信することも同様に望ましい。1つのアプローチでは、新しいトランザクションを検出するエージェントが他のエージェントに直接にその更新を提供する。別のアプローチでは、エージェントはマネージャに更新を報告し、マネージャは他のエージェントに更新を中継する。このアプローチは、他のエージェントがマネージャに報告して、それらに更新が伝わるのをマネージャが知るため、効率的である。更新はどのようなフォーマットでも提供可能である。エージェントからマネージャに送られてくる更新は、動的データと共に、あるいは個別に伝えられる。
対応するツリーデータ構造をエージェント及びマネージャに保守管理させることによって、高い効率が得られる。例えば、トランザクション、及び、トランザクションのコンポーネントに関連付けられた静的データは、ツリーのノードにインデックス付けされ、それによって、単にツリー内のブランチを特定することでマネージャによるその使用が可能になる。静的データは、エージェントによってマネージャに繰り返し伝えられる必要はない。静的データは、一般的に、アプリケーション又は他の監視されたソフトウェアのバージョンに対するものであるため変化しない。したがって、与えられたトランザクション又はコンポーネントの複数の呼び出しに対して同じ静的データが関連付けられる。対照的に、コンポーネントの開始及び終了時刻のような動的データ、及びメソッドに渡されるパラメータ値のような他の動的データは、固定されず、それゆえ、与えられたコンポーネントの各呼び出し、及び、トレースされた各トランザクションごとに変化する。エージェントによって収集される動的データは、エージェントからマネージャへ報告される。しかし、効率は、動的データが適用される呼び出されたコンポーネントを容易に識別するために動的データをノードへインデックス付けすることによってもまだなお得られる。これらの効率を得るために使用される様々なデータ構造が図8A1から8Cに関連して説明される。
図7A2は、図7A1のツリーデータ構造の代替的かつ等価的な表示を示す。ここで、ノード711及び717は、ノード710と同じであり、ノード713及び719は、同じそれぞれのノードの識別子を有するノード712と同じである。この表示では、エージェント1−ブランチ2は、ノード710、712及び714を含み、エージェント1−ブランチ3は、ノード711、713、715、718及び720を含み、エージェント1−ブランチ4は、ノード717、719、721、724及び726を含む。この表示では、ノード714が、エージェント1−ブランチ3及びエージェント1−ブランチ4の一部ではないことを明確にしている。
図7Bは、新しいブランチの形式を有する、図7A1のエージェント1のツリーデータ構造の更新を示す。明確にするため、サブシステム2は示されてない。トランザクションの「エージェント1−T新しい」を表す、「エージェント1−新しい−ブランチ」は、図9のプロセス[処理]に関連して後述するように、エージェント1のツリーデータ構造の更新により付加された新しいブランチである。「エージェント1−新しい−ブランチ」は、識別子「0:0」を有する既存のノード702(開始C1)、識別子「0:0:2」を有するノード760(開始C8)、識別子「0:0:2:0」を有するノード762(終了C8)、及び、識別子「0:0:2:0:0」を有するノード764(終了C1)を含む。これは、エージェント1によって新たに検出された経路である。
図7C1は、図7A1の、エージェント1及びエージェント2のツリーデータ構造を結合した、マネージャのツリーデータ構造を示す。述べたように、マネージャのツリーデータ構造は、複数のエージェント及びアプリケーション又は他のソフトウェアに及ぶデータ構造を提供するために、異なるエージェントのツリーデータ構造を結合する。この場合、マネージャのツリーデータ構造の第1の部分は、第1エージェントのツリーデータ構造に対応しており、マネージャのツリーデータ構造の第2の部分は、第2エージェントのツリーデータ構造に対応している。破線のノード(ノード744、746、748、750、752、754及び756)は、エージェント2のツリーデータ構造からのノードに対応し、点線のノード(ノード790及び792)は、破線のノードに基づいて付加される。マネージャのツリーデータ構造の実線のノードは、エージェント1のツリーデータ構造に対応する。C2はC5を呼び出すことがわかっているため、ノード704はノード744を指し示す。C5はC2に戻ることがわかっているため、ノード750は、ノード744、746、748及び750のシーケンスが続いている場合には、ノード706を指し示し、そして、ノード744、752、754及び756のシーケンスが続いている場合には、ノード756がノード790を指し示すところに、付加的なノード790及び792が付加される。ノード790及び792は、エージェント1の観点から、それぞれノード706及び708と同じである。
このように、マネージャ(mgr)のツリーデータ構造は、これらのブランチ:マネージャ−ブランチ1、マネージャ−ブランチ2、マネージャ−ブランチ3(エージェント1−ブランチ2と同じ)、マネージャ−ブランチ4(エージェント1−ブランチ3と同じ)、マネージャ−ブランチ5(エージェント1−ブランチ4と同じ)、マネージャ−ブランチ6(エージェント1−ブランチ5と同じ)、及びマネージャ−ブランチ7(エージェント1−ブランチ6と同じ)、を含む。トランザクションが複数のサブシステムに関与するので、マネージャ−ブランチ1は、クロスサブシステムのトランザクション内で呼び出されたコンポーネントのシーケンスを表す。マネージャ1−ブランチ1は、トランザクションエージェント2−T1(ノード744、746、748及び750)によって続けられ、トランザクションエージェント1−T1の残り(ノード706及び708)によって続けられる、例えばトランザクションエージェント1−T1の一部(ノード702及び704)のような、複数のトランザクションを結合するトランザクションマネージャ−T1を表す。トランザクションエージェント1−T1は、サブシステム1からのもので、エージェント2−T1は、サブシステム2からのものであることを想起されたい。マネージャ−ブランチ2は、トランザクションマネージャ−T2を表し、それは、トランザクションエージェント1−T1の一部(ノード702及び704)を結合したものであり、その後にトランザクションエージェント2−T1(ノード744、752、754及び756)が続き、その後にトランザクションエージェント1−T1の残り(ノード790及び792)が続く。マネージャ−ブランチ3は、トランザクションのエージェント1−T2(ノード702、710、712及び714)と同じであるトランザクションマネージャ−T3を表す。マネージャ−ブランチ4は、トランザクションのエージェント1−T3(ノード702、710、712、716、718及び720)と同じであるトランザクションマネージャ−T4を表す。マネージャ−ブランチ5は、トランザクションのエージェント1−T4(ノード702、710、712、722、724及び726)と同じであるトランザクションマネージャ−T5を表す。マネージャ−ブランチ6は、トランザクションのエージェント1−T5(ノード728、730、732及び734)と同じであるトランザクションマネージャ−T6を表す。マネージャ−ブランチ7は、トランザクションのエージェント1−T6(ノード728、736、738及び740)と同じであるトランザクションマネージャ−T7を表す。
図7C1のノードの識別子は、ノード744(0:0:0:0)、ノード746(0:0:0:0:0)、ノード748(0:0:0:0:0:0)、ノード750(0:0:0:0:0:0:0)、ノード706(0:0:0:0:0:0:0:0)、ノード708(0:0:0:0:0:0:0:0:0)、ノード752(0:0:0:0:1)、ノード754(0:0:0:0:1:0)、ノード756(0:0:0:0:1:0:0)、ノード790(0:0:0:0:1:0:0:0)及びノード792(0:0:0:0:1:0:0:0:0)、を除いて、図7A1と同じである。これらはマネージャの識別子である。マネージャ−ブランチ1、マネージャ−ブランチ2、マネージャ−ブランチ3、マネージャ−ブランチ4、マネージャ−ブランチ5、マネージャ−ブランチ6及びマネージャ−ブランチ7の識別子は、エージェント1から見て、それぞれノード708、792、714、720、726、734及び740の識別子である。
マネージャのツリーデータ構造が、異なる複数のエージェントによる複数のツリーデータ構造を結合するとき、マネージャのトランザクションは、複数のエージェントの複数のトランザクションを結合する。マネージャトランザクションのエージェントトランザクションに対する一対多の対応の例として、マネージャ−T1は、エージェント1−T1及びエージェント2−T1を結合する。図8A1から8A3を参照されたい。この場合、マネージャのトランザクションのユーザインタフェースディスプレィは、複数のエージェントトランザクションに基づくものである。
或いは、マネージャのツリーデータ構造は、異なる複数のエージェントによる複数のツリーデータ構造を結合する必要はないが、マネージャは、本質的に各エージェントのツリーデータ構造の複製である、各エージェントに対する個別のツリーデータ構造を保守管理する。この場合、マネージャのトランザクションは、エージェントのトランザクションと同じである。マネージャトランザクションのエージェントトランザクションに対する一対一の対応の例として、マネージャ−T3は、エージェント1−T2と同じである。この場合、マネージャのトランザクションのユーザインタフェースディスプレィは、単一のエージェントトランザクションに基づくものである。
又は、マネージャは、異なる複数のエージェントの複数の個別のツリーデータ構造、及び、異なる複数のエージェントによる複数のツリーデータ構造を結合した1つのツリーデータ構造の双方を保守管理し得る。個別のツリーデータ構造は、図9のステップ904にあるように、ブランチの一照合のために使用され、一方、異なる複数のエージェントによる複数のツリーデータ構造を結合した1つのツリーデータ構造は、例えば、図10Aのステップ1008及び1010にあるようにユーザインタフェースを提供するために使用され得る。
図7C2は、図7A1のエージェント1のツリーデータ構造における最終ノードと図7C1のマネージャのツリーデータ構造の最終ノードの間の対応を示す。述べたように、ツリーデータ構造内のブランチの最終ノードの識別子は、ブランチを一意的に識別するために使用される。場合によっては、同一の最終ノードの識別子がエージェント及びマネージャのツリーデータ構造で使用される。他の場合、例えばマネージャが異なる複数のエージェントによる複数のツリーデータ構造を結合する場合、複数の異なる最終ノードの識別子がエージェント及びマネージャの夫々のツリーデータ構造で使用される。マネージャは、複数の最終ノードの識別子間の対応レコードを保守管理し得る。例えば、0:0:0:0:0の、エージェント1の最終ノードの識別子は、識別子0:0:0:0:0:0:0:0:0及び0:0:0:0:1:0:0:0:0を有する、マネージャの2つの最終ノード(ノード708及び792)に対応する。エージェント1の残りの最終ノードの識別子(図7A1のノード714、720、726、734及び740の識別子を参照)はマネージャのものと同じである。また、0:0:0:0:0の、エージェント2の最終ノードの識別子は、識別子0:0:0:0:0:0:0:及び0:0:0:0:1:0:0を有する、マネージャの2つの最終ノードに対応する。この例では、考慮すべきエージェント2の残りの最終ノードの識別子は存在しない。ノード番号は、理解の助けのために提供されているのであり、必ずしも対応レコードの一部であるわけではない。
したがって、マネージャが第1ノードのシーケンスのエージェント1からの最終ノードの識別子、及び、第2ノードのシーケンスのエージェント2からの最終ノードの識別子を受信するとき、マネージャは、1以上のこれらの最終ノードの識別子に基づいて、そのツリーデータ構造にアクセスすることができる。また、アクセスは、エージェント1及び/又はエージェント2の最終ノードの識別子、及び/又は、マネージャの対応する最終ノードの識別子に基づく。
図7Dは、図7Bにおけるエージェント1のツリーデータ構造の更新と整合する、新しいブランチの形式をした図7C1のマネージャのツリーデータ構造の更新を示す。更新は、ノード760、762及び764を含む新しいブランチ、「マネージャ−新しい−ブランチ」であり、それは、エージェント1のツリーデータ構造についての「エージェント1−新しい−ブランチ」の更新と整合する。
図8A1は、図7A1のツリーデータ構造におけるサブシステム1のためのブランチ及びコンポーネント呼び出しのレコードを示す。各ブランチは、最終ノードの識別子によって識別される。例えば、「0:0:0:0:0」は、図7A1のノード708を識別し、それゆえ、両方ともサブシステム1に存在する、エージェント1−ブランチ1、及び、これに対応するトランザクションのエージェント1−T1もまた識別する。このブランチに対応するコンポーネント呼び出しは、開始C1(ノード702)、開始C2(ノード704)、終了C2(ノード706)、及び終了C1(ノード708)である。
「0:0:1:0:0」は、図7A1のノード714を識別し、それゆえ、両方ともサブシステム1に存在する、エージェント1−ブランチ2及びトランザクションのエージェント1−T2もまた識別する。このブランチに対応するコンポーネント呼び出しは、開始C1(ノード702)、開始C3(ノード710)、終了C3(ノード712)、及び終了C1(ノード714)である。
「0:0:1:0:1:0:0」は、図7A1のノード720を識別し、それゆえ、両方ともサブシステム1に存在する、エージェント1−ブランチ3及びトランザクションのエージェント1−T3もまた識別する。このブランチに対応するコンポーネント呼び出しは、開始C1(ノード702)、開始C3(ノード710)、終了C3(ノード712)、開始C3(ノード716)、終了C3(ノード716)、及び終了C1(ノード720)である。
「0:0:1:0:2:0:0」は、図7A1のノード726を識別し、れゆえ、両方ともサブシステム1に存在する、エージェント1−ブランチ4及びトランザクションのエージェント1−T4もまた識別する。このブランチに対応するコンポーネント呼び出しは、開始C1(ノード702)、開始C3(ノード710)、終了C3(ノード712)、開始C2(ノード722)、終了C2(ノード724)、及び終了C1(ノード726)である。
「0:1:0:0:0」は、図7A1のノード734を識別し、それゆえ、両方ともサブシステム1に存在する、エージェント1−ブランチ5及びトランザクションのエージェント1−T5もまた識別する。このブランチに対応するコンポーネント呼び出しは、開始C4(ノード728)、開始C2(ノード730)、終了C2(ノード732)、及び終了C4(ノード734)である。
「0:1:1:0:0」は、図7A1のノード740を識別し、それゆえ、両方ともサブシステム1に存在する、エージェント1−ブランチ6及びトランザクションのエージェント1−T6もまた識別する。このブランチに対応するコンポーネント呼び出しは、開始C5(ノード744)、開始C7(ノード752)、終了C7(ノード754)、及び終了C5(ノード756)である。
図8A2は、図7A1のツリーデータ構造におけるサブシステム2のためのブランチ及びコンポーネント呼び出しのレコードを示す。
「0:0:0:0:0」は、図7A1のノード750を識別し、それゆえ、両方ともサブシステム2に存在する、エージェント2−ブランチ1及びトランザクションのエージェント2−T1もまた識別する。このブランチに対応するコンポーネント呼び出しは、開始C5(ノード744)、開始C6(ノード746)、終了C6(ノード748)、及び終了C5(ノード750)である。
「0:0:1:0:0」は、図7A1のノード756を識別し、それゆえ、両方ともサブシステム2に存在する、エージェント2−ブランチ2及びトランザクションのエージェント2−T2もまた識別する。このブランチに対応するコンポーネント呼び出しは、開始C5(ノード744)、開始C6(ノード746)、終了C6(ノード748)、及び終了C5(ノード750)である。
図8B1は、図7A1のツリーデータ構造におけるサブシステム1の異なるノード/コンポーネントのための静的データへの参照のレコードを示す。述べたように、静的データの様々な種類は、コンポーネントとそれに関連付けられたノードから参照され得る。例えば、ノード「0:0」は、コンポーネントC1に関連付けられ、static#data#C1(例えば、methodC1、classC1 及び JARC1など)に参照付けられる。参照される静的データの異なるレコードは、後述するように、図8Dに示される。クラス名は、1以上の、親又はスーパークラスの名称も含み得る。1つのアプローチでは、1以上のノードから静的データを参照し得る。別のアプローチでは、コンポーネントの開始を表すノード(ただし、コンポーネントの終了を表すノードではない)は、静的データを参照し得る。他のアプローチも可能である。目的は、例えば、トランザクショントレースのようなユーザインタフェースに注記を加えるために、与えられたコンポーネント又はノードに関連付けられた静的データにマネージャがアクセスできるようにすることである。図8A1及び8B1のレコードは、エージェントによって及び/又はエージェントが報告するマネージャによってツリーデータ構造の一部として提供されている。
レコードは、ブランチ又はブランチの一部を形成するノードをグループ化することができる。例えば、最初の5つのエントリ(「0:0」から「0:0:0:0:0」)は、エージェント1−ブランチ1に対するもので、最後のエントリ(「0:0:0:0:0」)は、ブランチの識別子である。エントリ0:0:1、0:0:1:0及び0:0:1:0:0は、エージェント1−ブランチ1にはないエージェント1−ブランチ2にあるノードに対するものである。
ノードは、静的データの1以上の種類に直接的に、又は静的データの1以上の種類を参照するための識別子を参照し得る。このように、静的データの識別子は、静的データの1以上の種類を繰り返すことなく、レコードにおいて効率的に繰り返される。
静的データは、静的データが参照される1以上のコンポーネントの計測を含む、ソフトウェアの計測から取得される。
トランザクションの静的データは、殆どが計測から取得される。しかしながら、原則として、それは他のソースから取得され、及びマッシュアップされ、又は必要に応じて他の静的データと結合される。例えば、与えられたコード部分が静的に常に与えられたアプリケーションに関連すること、又は静的に常に優先度が低くなることは、他のソースから検出される。この情報は、トレースの動作を決定するために使用される。
静的データは、ソフトウェアをトレースすることから入手可能なすべての種類の情報を含む。また、静的データは、ソフトウェアが構築される方法のために、特定のコンポーネントが、限定された数の1以上の親のコンポーネントによってのみ呼び出され得ること、及び/又は、特定のコンポーネントが、限定された数の1以上の子のコンポーネントのみを呼び出し得ること、を示すことができる。例えば、静的データは、C2がC1又はC4によってのみ呼び出され、及びC2がC5のみを呼び出すことを示す場合があってよい。静的データは、特定のコンポーネンントを呼び出した1以上の親コンポーネントに基づいて、その特定のコンポーネントが限られた数の1以上の子コンポーネントを呼び出し得ることを示すことができる。ツリーデータ構造の観点から言えば、例えば、特定のノードは、例えば特定のコンテキストにおいて、その特定のノードに到達した方法に基づいた1つの子のノードを有するのみである。この情報は、トランザクションのコンテキストに応じて、トランザクションデータを区別するのと同様に照合ステップ904において有益である。
別の例として、サーブレットは、SQL文を使用してデータベースの様々なメソッドを呼び出す。しかしながら、サーブレットは、常に任意にメソッドを呼び出すわけではない。サーブレットは、何かが前もって発生した場合にあるSQLを呼び出し、又は別の何かが前もって発生した場合に別のSQLを呼び出す。これは、業務ロジック(ビジネスロジック]に従って関連性のあるSQLのパーティションを提供する。例えば、ウェブサイト上で本を購入するためのトランザクションの場合、データベースロジックの特定の部分が使用され、一方、ウェブサイト上で帽子を購入するトランザクションの場合、データベースロジックの別の部分が使用される。どちらの場合も、サーブレットは、データベース呼び出しを行うために、同じソケットを使用する。しかし、ツリーデータ構造を使用すると、データが特定のトランザクションのコンテキスト内に集められる。このデータは、トランザクショントレース、及び、応答時間などを生じさせるメトリックを含むことができ、同様に、トランザクションのために取得された他のメトリックも含むことができる。
静的データは、ソフトウェア及び/又は計測から繰り返し検索される必要がないようにエージェントによってキャッシュされる。
図8B2は、図7A1のツリーデータ構造におけるサブシステム2の異なるノード/コンポーネントのための静的データへの参照のレコードを示す。これらのレコードは、サブシステム2のエージェントによってツリーデータ構造の一部として提供され、関連付けられたマネージャに報告される。これは、例えば、サブシステム1のエージェントが報告するのと同じマネージャである。複数のエージェントが1つの共通のマネージャに報告する。レコードにおける一例としては、ノード「0:0」は、コンポーネントC5に関連付けられており、static#data#C5を参照する。
図8B3は、図7Bにおける「エージェント1−新しい−ブランチ」のための図8B1のレコードの更新を示す。ノード760、762及び764は、識別子0:0:2、0:0:2:0及び0:0:2:0:0をそれぞれ有し、static#data#C8、static#data#C8及びstatic#data#C1に、それぞれインデックス付けされている。
図8B4は、図7C1のツリーデータ構造におけるマネージャの異なるノード/コンポーネントのための静的データへの参照のレコードを示す。述べたように、各ノードは静的データに関連付けられている。
図8B5は、図7Dにおける「マネージャ−新しい−ブランチ7」のための図8B4のレコードの更新を示す。ノード760、762及び764は、識別子0:0:2、0:0:2:0及び0:0:2:0:0をそれぞれ有し、static#data#C8、static#data#C8及びstatic#data#C1に、それぞれインデックス付けされている。更新は、この例では、共通のノードの識別子のため、図8B3と同じである。他の場合では、例えば、異なるノードの識別子のために、更新は異なる。
図8Cは、図7A1のツリーデータ構造のサブシステム1の異なるノード/コンポーネントのためのトレース詳細からの動的データのレコードを示す。レコードは、サブシステム1のエージェントによってツリーデータ構造の一部として提供され、関連付けられたマネージャに報告される。動的データは、少なくとも1つのアプリケーション又は他の監視されたソフトウェアのインスタンスをトレースすることによって、エージェントにより取得される。動的データは、コンポーネントの開始及び終了時刻を示すことができる。他の動的データは、コンポーネント間の呼び出しで渡されたパラメータを含んでよい。例えば、図5Aにおいて、C1は、報告の種類又は報告日の範囲に関連するリクエストされた報告に関連付けられた1以上のパラメータを有する、C2を呼び出す。制御フローがC1に戻るとき、C2は、1以上の関連するパラメータをC1に渡す。各サブシステムは、関連付けられたエージェントを介して動的データを取得してマネージャに報告する。レコードは、サブシステム1のエージェントによって、及び、エージェントが報告するマネージャによって、ツリーデータ構造の一部として提供される。
動的データは、C1に関連付けられた、C1のための開始時刻(t1)及び呼び出し中にC1に渡されるパラメータ1のような他の関連付けられた動的データ(dynamic#data#1)、を含むノード「0:0」に対するエントリを含む。ノード「0:0:0」に対するエントリは、C2に関連付けられており、C2のための開始時刻(t2)及び呼び出し中にC2に渡されるパラメータ2のような他の関連付けられた動的データ(dynamic#data#2)を含む。ノード「0:0:0:0」に対するエントリは、C2に関連付けられており、例えばC2によって呼び出されたコンポーネントからC2へのプログラムフローの戻りなどの、戻り中にC2に渡されるパラメータ3のような、C2のための終了時刻(t3)、及び他の関連付けられた動的データ(dynamic#data#3)を含む。ノード「0:0:0:0:0」に対するエントリは、C1に関連付けられており、例えばC1によって呼び出されたコンポーネントからC1へのプログラムフローの戻りのなどの、戻り中にC1に渡されるパラメータ4のような、C1のための終了時刻(t4)及び他の関連付けられた動的データ(dynamic#data#4)を含む。
図8Dは、様々なコンポーネントに関連付けられた静的データのレコードを示す。本明細書で説明したように各レコードは、静的データの様々な種類を含む。静的データのレコードは、static#data#C1、static#data#C2、static#data#C3、static#data#C4、static#data#C5、static#data#C6、static#data#C7、及びstatic#data#C8を含む。静的データのレコードは、エージェント及びマネージャによって保守管理される。
図9は、少なくとも1つのアプリケーションのために図7A1にあるようなエージェントがツリーデータ構造を保守管理するプロセス[処理]の例を示す。ステップ900は、コンポーネントの開始及び停止ポイントなどによって、少なくとも1つのアプリケーションの呼び出されたコンポーネントのシーケンスを表すブランチを有する、ツリーデータ構造を保守することを含む。ステップ902は、トランザクション、例えばトランザクションのインスタンスが複数のインスタンスに経時的に呼び出される期間中、少なくとも1つのアプリケーションの呼び出されたコンポーネントのシーケンスを識別することを含む。例えば、これはトランザクションをトレースすることを含む。着目している特定のトランザクションは、対象トランザクションと称される。
ステップ908は、トランザクションの期間中、例えば呼び出されたコンポーネントの開始及び終了時刻などの、呼び出されたコンポーネントのシーケンスのためのメトリックのような動的データを取得すること、を含む。この動的データは、トランザクショントレースから取得される。判断ステップ904において、ツリーデータ構造内のブランチに一致するブランチが存在するか否かについての判定が行われる。例えば、トランザクショントレースが以下の呼び出されたコンポーネントのシーケンス、開始C1、開始C2、終了C2、終了C1になると仮定する。このシーケンスは、例えば、一致するブランチが発見されるまで、図7A1のツリーデータ構造内の各ブランチと順々に比較される。1つのアプローチでは、比較は、最初のブランチから始めて一つのブランチごとに行われる。別のアプローチでは、トランザクショントレースの開始及び終了ポイントの数に対応するノード数を有する複数のブランチが最初に比較される。それ以外のアプローチもまた可能である。この例では、「エージェント1−ブランチ1」が一致するブランチである。ステップ906は、動的データ及び一致するブランチ(例えばエージェント1−ブランチ1、又はノード0:0:0:0:0)の識別子をマネージャに報告することを含む。動的データは、例えば、各時刻がブランチのいずれかのノードに対応し、報告された時刻の順番がブランチ内のノードの順番に対応する場合、呼び出されたコンポーネントの開始及び終了時刻のリストとして報告される。時刻は、例えば、エージェントの時計に基づいたタイムスタンプになる。
一致するブランチは、トランザクションの呼び出されたコンポーネントのシーケンスの開始及び終了ポイントの数と同じ数のノードを有するブランチであり、そのブランチ内のノードのシーケンスは、トランザクションの呼び出されたコンポーネントのシーケンスの開始及び終了ポイントと一致する。ツリーのルートノードは、この照合では考慮する必要はない。場合によって、ブランチが、トランザクションの呼び出されたコンポーネントのシーケンスの開始及び終了ポイントが一致するノードのシーケンスを有するが、付加的なノードも同様に有し得る。この場合、トランザクションの呼び出されたコンポーネントのシーケンスに対する開始及び終了ポイントの部分的な一致があり、判断ステップ904は、偽[ノー]になる。この場合、対象トランザクションのトレースは、ツリーデータ構造のブランチとして正確には表されておらず、ツリーデータ構造のブランチと共通の広がりを持つ呼び出されたコンポーネントのシーケンスの開始及び終了ポイントの新しいシーケンスを提供する。この判定に応答して、この判断ステップ910は、呼び出されたコンポーネントのシーケンスを表すとともに呼び出されたコンポーネントのシーケンスと共通の広がりを持つブランチを有するツリーデータ構造を更新することを含む。例えば、これは、図7Bの「エージェント1−新しい−ブランチ」である。共通の広がりを持つブランチは、シーケンスと同じ開始及び終了ポイントを有する。
ステップ912で、更新は、新しいブランチで、トランザクショントレースにおける1以上の呼び出されたコンポーネントの開始及び終了ポイントを表すノードを提供することを含む。例えば、図7Bでは、エージェント1−新しい−ブランチは、新たに付加されたノード760、762及び764を含む。新しいブランチは、1以上の既存のブランチと部分的に重複する。例えば、図7Bにおいて、ノード702は、「エージェント1−ブランチ1」、「エージェント1−ブランチ2」及び「エージェント1−新しい−ブランチ」で存在(重複)しており、「エージェント1−新しい−ブランチ」が、「エージェント1−ブランチ1」及び「エージェント1−ブランチ2」と重複している。
このように新しいトランザクションの呼び出されたコンポーネントのシーケンスは、既存のブランチ(例えば、「エージェント1−ブランチ1」及び「エージェント1−ブランチ2」)の少なくとも1つと重複する部分(ノード702)、及び、どの既存のブランチとも重複しない部分(ノード760、762及び764を含むブランチ部分)を有するブランチ(例えばエージェント−新しい−ブランチ)によって、ツリーデータ構造内で表される。新しいノード(ノード760、762及び764)は重複しない部分において現れるが、重複する部分では現れない。
図9において、ステップ914は、ツリーデータ構造の更新が1以上の呼び出されたコンポーネントに関連付けられた静的データをノードにインデックス付けすることを含むことを示している。コンポーネントの静的データは、コンポーネントの計測からエージェントによってアクセスされ、図8B3に関連して説明したようにインデックス付けされる。
ステップ916は、ツリーデータ構造の更新がエージェントからマネージャへ報告されることを含む。更新は、対象トランザクションのインスタンスの1以上の呼び出されたコンポーネントの開始及び終了ポイントを識別し、関連付けられた静的データにインデックス付けされる。この報告は、図8A1又は8A2で説明したようなブランチ定義、及び図8B1又は8B2で説明したような静的データへの参照という形式で提供される。
新トランザクションに基づいてツリーデータ構造を更新した後、判断ステップ904において、トランザクショントレースの呼び出されたコンポーネントのシーケンスが更新されたツリーデータ構造と再度比較され、真[イエス]になる。ステップ906は、動的データ及び一致するブランチの識別子をエージェントからマネージャに報告することを含む。この報告は、例えば、図8Cのレコードの形式で提供される。この報告を受信すると、マネージャは、エージェントのツリーデータ構造に同期するようにそのツリーデータ構造を更新する。したがって、データを通信経路に送信するために必要なバンド幅の量及び/又はそのようなデータを通信及び格納するために必要なメモリの量のようなオーバーヘッドコストを削減しながら、エージェントは、効率的にトランザクションをマネージャに報告することができる。
図10Aは、エージェントから受信するように、例えば図7A1にあるように、動的データのレコード及びツリーデータ構造のブランチの識別子に基づいて、マネージャがユーザインタフェースを提供するプロセス[処理]の例を示す。ステップ1000は、コンポーネントの開始及び停止ポイントなどによって、少なくとも1つのアプリケーションの呼び出されたコンポーネントのシーケンスを表すブランチを有する、マネージャのツリーデータ構造を保守することを含む。ステップ1002は、動的データ及び一致するブランチの識別子の報告をエージェントから受信することを含む。ステップ1004は、識別子に基づいて、呼び出されたコンポーネントのシーケンスを識別することを含む。これは、「エージェント1−ブランチ1」が、最終ノードの識別子が「0:0:0:0:0」であるブランチによって識別されることを判定し、図8A1にあるようにレコードにアクセスして、このブランチが、開始C1、開始2、終了2及び終了C1のコンポーネントシーケンスを含むことを判定することを伴う。
或いは、ステップ1004は、エージェント1の最終ノード0:0:0:0:0がマネージャの最終ノード0:0:0:0:0:0:0:0:0に対応することを判定するために図7C2にあるようにレコードにアクセスすること、並びに「マネージャ−ブランチ1」が、マネージャの最終ノード0:0:0:0:0:0:0:0:0によって識別され、図8A3
にあるようにレコードにアクセスして、このブランチが開始C1、開始C2、開始C5、開始C6、終了C6、終了C5、終了C2、及び終了C1のコンポーネントのシーケンスを含むことを判定することを含む。
ステップ1006は、識別子に基づいて、トランザクションの呼び出されたコンポーネントに関連付けられた静的データを調べることを含む。これは、例えば、ノード/ブランチの識別子「0:0:0:0:0」及びブランチの各ノードにインデックス付けされているstatic#data#C1を識別するために、図8B1にあるようなレコードにアクセスすることを伴う。或いは、これは、図8B4にあるようにレコードにアクセスして、例えば、ノード/ブランチの識別子「0:0:0:0:0:0:0:0:0」及びブランチの各ノードにインデックス付けされているstatic#data#C1を識別することを伴う。
ステップ1008は、トランザクションの呼び出されたコンポーネントのシーケンスのトランザクショントレースを有するユーザインタフェース(UI)を提供することを含む。ブランチがブランチの各コンポーネントの開始及び終了を識別するので、トランザクショントレースは識別されたブランチから直接、提供される。ユーザインタフェース上に提供されたトランザクショントレースの例が図6から6I、11A、及び、11Bに示されている。ステップ1010は、例えば、図11(A)及び(B)に示されるように、静的及び/又は動的データに基づいてトランザクショントレースに注記を加えることを含む。これは、静的及び/又は動的データをユーザインタフェース上に表示することを含む。別の例として、図14Aから14Cに関連して説明する、UIが提供される。
図10Bは、1以上のエージェントから受信した更新に基づいて、図7A1から7C1にあるように、マネージャがツリーデータ構造を更新するプロセスの例を示す。ステップ1020は、例えばコンポーネントの開始及び停止ポイントなどによって、少なくとも1つのアプリケーションの呼び出されたコンポーネントのシーケンスを表すブランチを有する、ツリーデータ構造を保守することを含む。ステップ1022は、例えば第1サブシステムの第1エージェント及び第2サブシステムの第2エージェントなどの1以上のエージェントからツリーデータ構造の更新を受信することを含む。ステップ1024は、1つのエージェントから別のエージェントに更新を伝えることを含む。エージェントが同じソフトウェアの異なる複数のインスタンスを監視する場合、マネージャは、1つのエージェントから別のエージェントに受信された更新を渡す又は中継する。このように、エージェントのツリーデータ構造が同期をとられるように新しいトランザクションがエージェント間で迅速に伝達する。ステップ1026は、更新から呼び出されたコンポーネントのシーケンスを表すブランチによってマネージャのツリーデータ構造を更新することを含む。例えば、これは、図7Dの「マネージャ−新しい−ブランチ」を付加することを含む。更新は、例えば、図8B3のレコードに基づいて、マネージャのツリーデータ構造のレコードを更新することを伴う。
ステップ1028では、更新は、トランザクションの1以上の呼び出されたコンポーネントの開始及び終了ポイントを表すノードを提供することを含む。例えば、これは、図7Dにおけるマネージャ−新しい−ブランチのノード760、762及び764を付加することを含む。ステップ1030では、例えば図8B5のレコードに関連して説明したように、更新は、トランザクションの呼び出されたコンポーネントに関連付けされた静的データを、ノードにインデックス付けすることを含む。マネージャのツリーデータ構造への更新は、図7Dの「マネージャ−新しい−ブランチ」の例においては、エージェントのツリーデータ構造(例えば、ノード760、762及び764)のノードのいくつかを含むが、エージェントのツリーデータ構造のノード(例えば、ノード702)の他のものは含まないことに注意されたい。
図11(A)は、静的及び動的データを用いて注記を加えた、図6(A)のトランザクショントレースを示す。トランザクショントレースは、トランザクション/実行フローの全体像を提供する。ここで、注記がC1のためのグラフ領域600において、及びC2のためのグラフ領域602において提供されている。注記「methodC1|classC1|JARC1|dynamic#data#1」は、動的データによって続けられる3種類の静的データを含み、データの各部分が垂直バーによって区切られている。しかしながら、他のフォーマットも可能である。例えば、注記は、マウスオーバー又はホバーボックス、ツールチップ、あるいは、情報にアクセスするための右クリックによる、ポップアップウィンドウ、別のウィンドウ又は表示画面など、トランザクショントレースのグラフ領域の外側、例えば上や横、に備えられる。動的データは、その外観、色、フォント、位置等々によって静的データとは別に区別される。
図11(B)は、静的及び動的データを用いて注記を加えた、図6(A)のトランザクショントレースを示す。注記は、C5のためのグラフ領域610において、及び、C6のためのグラフ領域612において提供される。図11(A)及び(B)のトランザクショントレースは、サブシステムに亘って延長するトランザクションの動作をユーザにより一層の理解をもたらすために、同じユーザインタフェース上に同時に表示される。C1及びC2は、サブシステム1に存在し、C5及びC6は、サブシステム2に存在することを想起されたい。複数のサブシステムのクロックが、適切に同期がとられている場合は、複数のサブシステムの複数のトランザクショントレースは、共通のタイムライン参照を用いて表示される。同期が保証されない場合は、複数のサブシステムの複数のトランザクショントレースは、別々のタイムライン参照を用いて表示される。マネージャは、C2がC5を呼び出すときに提供する相関識別子に基づいて、ユーザインタフェースにおいて2つのトランザクショントレースを関連付けることを決定することができる。トレースが関連付けられる必要があることを示すためにツリーデータ構造を用いてトランザクショントレースを報告するとき、エージェントはマネージャに相関識別子を提供する。詳細情報については、2007年6月21日公開の”Correlating Cross Process And Cross Thread Execution Flows In An Application Manager”と題する、US2007/0143323を参照のこと。その内容は参照により本明細書に組み込まれる。
例えば、C2が「エージェント1−T1」のトランザクションで呼び出される場合、C2がC5を呼び出すときにそれは「エージェント1−T1」の識別子を含む。エージェント1は、「エージェント1−T1」のトランザクションに関してマネージャに報告する場合、「エージェント1−T1」の識別子を含む。同様に、エージェント2は、「エージェント2−T1」のトランザクションに関してマネージャに報告するとき、「エージェント1−T1」の識別子、及び、「エージェント2−T1」の識別子を含む。マネージャは、その後、「エージェント1−T1」の識別子及び「エージェント2−T1」の識別子によるトランザクション/トランザクショントレースが関連付けられていることを知る。
別の例では、ユーザインタフェースは、例えば、ノード及びノード間の辺を表示することなどによって、図7A1から7Dのツリーデータ構造を、直接、提供する。ステータス及び動的データはノード内又はノードの横に表示される。
図12Aは、それぞれのトランザクションのそれぞれのブランチにおける1つのコンポーネントに対する1つのノードにリンクされた収集部を有する図7A1のツリーデータ構造を示す。1以上の収集部は、ツリーデータ構造のノードに関連付けられている。1以上の収集部は、1つのノードに関連付けられ、1以上のノードは1つの収集部に関連付けられている。1つの収集部に関連付けられている1以上のノードは、1以上のコンポーネントを表す。
1つのアプローチでは、収集部は、ノードによって表されるコンポーネントの1以上のメトリックを収集する、エージェントコードのソフトウェアプロセスである。エージェントは、管理されるアプリケーションでメソッドのような計測されたコンポーネントに接続される組<エージェント メトリック、収集部>の基本データ構造を使用することができる。メトリックは、例えば、コンポーネントが呼び出されて、コンポーネントの計測コードがトリガされるときに収集される。例えば、メトリックは、ノードによって表されるコンポーネントのインスタンスが呼び出される回数である呼び出し回数、ノードによって表されるコンポーネントのインスタンスの応答時間である応答時間、複数の呼び出しに亘る応答時間の平均、エラーメッセージがノードによって表されるコンポーネントに関連付けられているか否かを示すエラーメトリック、又は本明細書で説明されるものを含む他の任意のメトリックを含み得る。収集部をツリー内のノードにリンクすることにより、ノードによって表されるコンポーネント呼び出しは、収集部のコンテキストにリンクされる。同様に、収集部は、ブランチによって一意的に表される各トランザクション、及び、そのブランチのコンテキストに対して収集部の一対一のリンク設定がある場合には、そのノードにのみリンクされる。
エージェントの有用な業務目的は、トランザクションの種類(トランザクションの分離可能性)によって分けられる固有のメトリックを提供することである。例を挙げると、例えば「書籍購入」トランザクション及び「CD購入」トランザクションのような与えられた顧客アプリケーション上の識別された各トランザクションのために、与えられたバックエンドに対する(又はバックエンド上で呼び出された特定のSQL文に対する)応答時間を報告したいと、する。この目的に向けたワンステップは、「トランザクション」メトリックセット、即ち、例えば、メトリックの値が、顧客のアプリケーションで呼び出された特定のトランザクションによって区別されるメトリック、を効率的に提供する能力である。
ツリーデータ構造は、この目的のために使用される。述べたように、ツリーは、トランザクションのポイント又はノードの、分岐するシーケンスを介してトランザクションを説明する。シーケンスの辺は、トランザクションセグメントと称される。トランザクション構造は、それが検出されるコードの寿命と同等のライフサイクルを有する。トランザクション構造は、修正されたトレーサでアプリケーションを計測するエージェントによって最初に検出される。トランザクション構造は、次に他のエージェント及びマネージャと共有される。トランザクション構造は、またマネージャのデータベースに恒久的に格納される。
エージェントは、トランザクション構造における各着目ポイントを1以上の収集部のセットで修飾する。各収集部は可能なメトリックの複数のセットに関連付けられている。エージェントは、そのメトリックに対する「数値」を収集し、エージェントの構造上の理由により、可能な各トランザクション経路の1つに関連付けられている特定の値を判定することが可能である。収集部のある種のものは、2以上のトランザクション構造のエレメント又はノードに関連付けられる。例えば、同時呼び出しの収集部は、収集されるメトリックに関連しているすべてのトランザクション構造のエレメントに関連付けられている。
また、エージェントは、他のエージェントによって検出されたトランザクション構造に関するマネージャからの更新を受信する。これにより、例えば、クロスJVMトランザクションの場合に、効率的に報告するエージェントを有することが可能となる。
この例では、収集部1200は、「エージェント1−T1」のトランザクションのノード706にのみリンクされており、収集部1202は、「エージェント−T4」のトランザクションのノード724にのみリンクされている。ノード706及び724は、両方ともC2の呼び出しの終了、例えばC2の停止時間を表すが、「エージェント1−T1」(「エージェント1−ブランチ1」によって表される)及び「エージェント1−T4」(「エージェント1−ブランチ4」によって表される)の各トランザクションの異なる複数のコンテキストにおけるものである。監視されたアプリケーションの性能をより一層理解できるようにするために、1以上のトランザクションのコンテキストに従って与えられたコンポーネントに対してメトリックを区別することは有益である。これは、例えば、コンポーネントに関する性能[パフォーマンス]の問題は、特定のトランザクションのコンテキストにおいては発生するが、別のコンテキストでは発生しないことを示している。問題のある特定のコンテキストは、さらに調査される。収集部は、例えばオペレータの経験に基づき、例えば、問題のある、コンポーネント及び/又はトランザクションを検出する自動化された分析に基づいて、設定される。
収集部により、メトリックが取得され、ツリーにおける1以上の選択されたノードに基づいて選択的に報告される。コンポーネントが計測されることで、コンポーネントのすべての発生に関して、メトリックを取得し及び報告することが可能である。しかしながら、これは不必要なオーバーヘッドコストにつながる。必要に応じた場合にのみメトリックを収集し及び報告することが効率的である。トランザクション別(transaction-segregated)のメトリックを収集し報告することもまた有益である。例えば、ノード706で収集部1200によって取得されたメトリックは、「エージェント1−T1」のコンテキストでは呼び出しC2のためのものである。或いは、収集部がノード706、724及び732にリンクされた場合、取得されたメトリックは、C2が呼び出されるすべてのトランザクションよりも少ないサブセットに特定されるわけではない。収集部1200及び本明細書の収集部の他の表記は、1以上の種類のメトリックを収集する実体を表すものである。
述べたように、別のアプローチでは、1つの収集部は複数のトランザクションにリンクされ、収集部によって取得された少なくとも1つのメトリックが複数のトランザクションのコンポーネントに関連付けられる。一般的に、様々な以下のようなバリエーションが可能である。(1)収集部の少なくとも1つのメトリックは、1つのトランザクションにおけるコンポーネントのインスタンスに関連付けられる(例えば、収集部1200は、図12Aの「エージェント1−T1」におけるノード706のC2のインスタンスにリンクされる)。(2)収集部の少なくとも1つのメトリックは、1つのトランザクションにおける1つのコンポーネントの複数のインスタンスに関連付けられる(例えば、収集部1206は、図12Cの「エージェント1−T3」におけるノード712及び718のC3のインスタンスにリンクされる)。(3)収集部の少なくとも1つのメトリックは、1つのトランザクションにおいて、1つのコンポーネントの、1つのコンポーネントのインスタンス、及び他のコンポーネントの、1つのコンポーネントのインスタンスに関連付けられる(例えば、収集部1200は、図12Aの「エージェント1−T1」におけるノード706のC2のインスタンスにリンクされており、収集部1200によって修正されたものもまた「エージェント1−T1」におけるノード708のC1のインスタンスにリンクされる)。並びに、(4)収集部の少なくとも1つのメトリックは、1つのトランザクションにおいて1つのコンポーネントの、1つのコンポーネントのインスタンスに、及び他のトランザクションにおいて他のコンポーネントの、1つのコンポーネントのインスタンスに関連付けられる(例えば、収集部1200は、図12Aの「エージェント1−T1」におけるノード706のC2のインスタンスにリンクされており、収集部1200によって修正されたものもまた「エージェント1−T2」におけるノード714のC1のインスタンスにリンクされる)。(4)の場合、少なくとも1つのメトリックは、例えば1つのトランザクション及び別のトランザクションなど、複数のトランザクション対するものである。
図12Bは、収集部を伴う図7A1のツリーデータ構造を示すものであり、収集部は、異なる複数のトランザクションの異なる複数のブランチにおける同じコンポーネントの複数の実体のノード群にリンクされている。収集部1204は、ツリー内で一対多の関係でノード、即ち、異なる複数のトランザクションに存在するノード706及び724にリンクされている。この場合、収集部1204によって取得されるメトリックは、C2の異なる複数のインスタンス及び複数のトランザクションに亘って集約される。メトリックは、収集部1204のコンテキスト内で収集され、一つの特定のトランザクションのコンテキスト内では収集されない。メトリックは、「エージェント1−T1」及び「エージェント1−T4」を含む複数のトランザクションによる一つのグループのコンテキスト内で収集される。例えば、コンポーネントの1以上のインスタンスが複数のトランザクションを含む一つのグループ内で呼び出されたことを知ることが望ましいときには、有益であるが、各呼び出しを行ったトランザクションを区別する必要はない。
図12Cは、収集部を伴う図7A1のツリーデータ構造を示すものであり、ここでの収集部は、複数のトランザクションの、同じ一つのブランチにおける同じコンポーネントの複数の実体のノード群にリンクされている。ここで、収集部1206は、ツリー内で一対多の関係でノード群にリンクされている、即ち、収集部1206は、「エージェント1−T3」のトランザクションにおける、同一のトランザクション内に存在し、及び同じコンポーネントC3の異なるインスタンスを表す、ノード712及び718にリンクされている。この場合、収集部1206によって取得されるメトリックは、「エージェント1−T3」のトランザクションにおけるC3の異なる複数のインスタンスに亘って集約される。メトリックは、一つの固有のトランザクションのコンテキストにおいて収集される。これは、コンポーネントの1以上のインスタンスがトランザクション内で呼び出されたことを知ることが望ましいときには、有益であるが、異なる複数のインスタンスのメトリック群を区別する必要はない。
図7A1に関連して説明したように、「エージェント1−T2」は、ノード702、710、712及び714のシーケンスを含み、「エージェント1−T3」は、ノード702、710、712、716、718及び720のシーケンスを含み、「エージェント1−T4」は、ノード702、710、712、722、724及び726のシーケンスを含むことを想起されたい。1以上のメトリックが、ノード712に対応するコンポーネント呼び出しに対して取得されるとき、3つの異なるノードのシーケンスのいずれもがノード712に続くため、トランザクションは、まだ一意的に定義されないことに注意されたい。この場合、複数のメトリックが収集され、次いで、そのトランザクションが特定のものではない場合、そのメトリックは破棄されマネージャには報告しないということが決定される。これは、1つのアプローチでは、収集部1206がノード712にリンクされ、ノード712が、特定の一つのトランザクション、即ち、「エージェント1−T2」、「エージェント1−T3」又は「エージェント1−T4」の一部である場合にだけである。
対照的に、1以上のメトリックがノード718に対応するコンポーネント呼び出しのために取得されるとき、トランザクション(エージェント1−T3)は、唯一のノードのシーケンスがノード718に続くことから、一意的に定義される。この場合、複数のメトリックは収集され、それらのメトリックがマネージャに報告されるという決定がなされる。一例として、エージェントは、例えばメトリックのような情報をマネージャに定期的に、例えばほんの短い間、報告する。通常、トランザクションは、終了するか、又はそうでなければ、次の報告時間以前に、一意的に識別し得るポイントに進む。エージェントは、未特定のトランザクションのメトリックを収集すると、そのトランザクションが特定されて、
メトリックを破棄するか、マネージャに対して報告するか、あるいは、その他の行動をとるか、が判定されるときまでそのメトリックを保持する。
他のアプローチでは、メトリックを報告するか否かについての判定は、トランザクションが完了して識別された後に行われる。トランザクション別のメトリックが提供される、エージェント及びマネージャによる処理にそれぞれ関連している、図16A及び16Bを参照されたい。
図12Aから12Cに示されるように、異なる種類の収集部は、組み合わせて使用してもよい。
図13Aは、図12Aのツリーデータ構造における、収集部1200及び1202についての参照のレコードを示す。エージェント及びマネージャは、例えば、レコードを保持することができる。レコードの第1エントリは、収集部1200が、コンポーネントC2及び「エージェント1−T1」のトランザクションを表し、0:0:0:0の識別子を有するノードにリンクされていることを示す。レコードの第2エントリは、収集部1202が、コンポーネントC2及び「エージェント1−T4」のトランザクションを表し、0:0:1:0:2:0の識別子を有するノードにリンクされていることを示す。
図13Bは、図12Bのツリーデータ構造における、収集部1204についての参照のレコードを示す。このレコードの第1エントリは、収集部1204が、コンポーネントC2及び「エージェント1−T1」のトランザクションを表し、0:0:0:0の識別子を有するノードにリンクされていることを示す。レコードの第2エントリは、収集部1204が、コンポーネントC2及び「エージェント1−T4」のトランザクションを表し、0:0:1:0:2:0の識別子を有するノードにもまたリンクされていることを示す。
図13Cは、図12Cのツリーデータ構造における、収集部1206についての参照のレコードを示す。レコードの第1エントリは、収集部1206が、コンポーネントC3及び「エージェント1−T3」のトランザクションを表し、0:0:1:0の識別子を有するノードにリンクされていることを示す。レコードの第2エントリは、収集部1206が、コンポーネントC3及び「エージェント1−T3」のトランザクションを表し、0:0:1:0:1:0の識別子を有するノードにもまたリンクされていることを示す。
図14Aは、図13Aのツリーデータ構造に基づくユーザインタフェースの例を示す。様々な種類のユーザインタフェース(UI)の表示は、1以上のエージェントからマネージャによって受信される、メトリック、ブランチの識別子及び収集部の識別子を含んでいる情報に基づいて提供される。1つの可能なアプローチにおいて、UIの表示1400は、ツリーデータ構造及びそのノードを含む。線の色、パターン、幅又は塗りつぶし色若しくはパターンなどの視覚的特徴は、着目する1以上のトランザクションのノード群を識別し、着目していない1以上のトランザクションのノード群からこれらを区別するために使用される。同様に、視覚的な特徴は、着目しているコンポーネントを識別し、着目していないコンポーネントからこれらを区別するために使用される。
例えば、太長破線は、「エージェント1−T1」を識別するために、ノード702、704、706及び708に使用され、太短破線は、「エージェント1−T4」を識別するために、ノード702、710、712、722、724及び726に使用される。領域1402は、収集部1200によって収集されたデータに基づいて、ノード706によって表されたコンポーネントのインスタンスについてのメトリックの例を提供する。領域1404は、収集部1202によって収集されたデータに基づいて、ノード724によって表されたコンポーネントのインスタンスについてのメトリックの例を提供する。メトリックは、例えば、「エージェント1−T1」のトランザクションのコンテキストにおける、あるいは、それとは別に「エージェント1−T4」のコンテストにおける、エラー、平均応答時間、及び、呼び出し回数を含むことができる。
図14Bは、図13Bのツリーデータ構造に基づくユーザインタフェースの例を示す。UIの表示1410において、UIの表示1400にあるように、太長破線は、「エージェント1−T1」を識別するために、ノード702、704、706及び708に使用され、太短破線は、「エージェント1−T4」を識別するために、ノード702、710、712、722、724及び726に使用される。領域1412は、収集部1200によって収集されたデータに基づいて、ノード706及び724によって表されたコンポーネントのインスタンスについてのメトリックの例を提供する。メトリックは、例えば、「エージェント1−T1」及び「エージェント1−T4」を含むトランザクションのグループのコンテキストにおける、エラー、平均応答時間及び呼び出し回数を含むことができる。
図14Cは、図13Cのツリーデータ構造に基づくユーザインタフェースの例を示す。UIの表示1420において、太長破線は、「エージェント1−T3」を識別するために、ノード702、710、712、716、718及び720に使用される。領域1422は、収集部1206によって収集されたデータに基づいて、ノード712及び718によって表されたコンポーネントのインスタンスについてのメトリックを提供する。メトリックは、例えば、「エージェント1−T3」のトランザクションのコンテキストにおける、エラー、平均応答時間、及び、C3の複数の実体の呼び出し回数を含むことができる。
同じようなUIが他のサブシステムに提供される。UIは、また、図7C1及び7Dに関連して説明したように、複数のサブシステムからの複数のノードを結合することができる。
図15Aは、図5B及び14Aに対応するユーザインタフェースの例を示す。UI1500は、ノード/頂点、及びノードを接続する矢印/辺を有するツリーデータ構造を含む有効グラフである。各ノードは呼び出されているコンポーネントを表し、それは、1つのノードがコンポーネントの実行又は呼び出しの、開始又は終了を表す図14Aから14CのUIとは対照的である。各ノードは、1回以上開始及び停止するコンポーネントを表す。
ノードは、ルートノード1501、並びに1つの経路において、C1のノード1502、C2のノード1504、又はC3のノード1506、C3のノード1506、C5のノード1508、C6のノード1510及びC7のノード1512を含む。別の経路は、同様に、C2又はC3を呼び出すC4のノードを含む。矢印/辺1524は、ノード1502及び1504を接続しており、複数の辺部分を含む。1つの辺部分1520は、C2が「エージェント1−T1」のコンテキスにおいてC1によって呼び出されることを示しており、別の辺部分1522は、C2が「エージェント1−T4」のコンテキスにおいてC1によって呼び出されることを示している。さらに、辺部分1520及び1522は、それぞれの関連付けられたメトリックに基づいて、色、パターン又は太さなど様々な視覚的に異なる特徴を有する。各辺部分は、1以上の収集部に関連付けられることができ、その1以上の収集部によってメトリックが収集される。
提供された例では、辺部分1520及び1522は、例えば、1つのトランザクション(エージェント1−T4)に起因する同じコンポーネント(C2)の呼び出しの回数に対する、別のトランザクション(エージェント1−T4)に起因する同じコンポーネントの呼び出しの回数に基づいて、太さによって互いに視覚的に区別される。この場合、辺部分1520は、辺部分1522よりも太く、例えば幅広である。例えば、辺部分1522の2倍の太さである辺部分1520は、C1が「エージェント1−T4」においてよりも「エージェント1−T1」で2倍呼び出されたことを示している。
別の例では、辺部分1520及び1522の相対的な太さは、「エージェント1−T4」に起因するC2のエラーの数に対する、「エージェント1−T4」に起因するC2のエラーの数に基づくものである。さらに別の例では、辺部分1520及び1522の相対的な太さは、「エージェント1−T4」に起因するC2平均応答時間に対する、「エージェント1−T4」に起因するC2の平均応答時間に基づくものである。
別の例では、赤などの暖色は、比較的高い呼び出し回数を示すために使用される一方で、青などの寒色は、比較的低い呼び出し回数を示す。別のアプローチで、赤はエラーの比較的高い数又は比較的高い平均応答時間を示す一方で、青はエラーの比較的低い数又は比較的低い平均応答時間を示す。他の多くの選択が可能である。
さらに、表示領域1524及び1526は、それぞれ、辺部分1520及び1522に関連付けられているメトリックを提供する。各辺部分1520及び1522は、このように少なくとも1つのメトリックで修飾されている。表示領域1524は、「エージェント1−T1」の平均応答時間に対して設定された警告の「注意」状態を示す。平均応答時間が、例えば、閾値を超えるときにこの状態に設定される。一般的に、警告は、管理対象のコンピューティングデバイスの全体的な性能に対して、及び、管理対象のコンピューティングデバイスによる、例えば、別の管理対象のコンピューティングデバイス又は未計測のバックエンドデバイスの呼び出しに対して設定される。これらの警告は、ユーザによって作成されて設定されてもよい。警告は、また業務トランザクションに対して定義されてもよい。警告が定義される場合、それはいくつかの状態、例えば、正常(緑)、注意(黄色)又は危険(赤)のうちの1つによって表される。警告は、収集部によって取得されるトランザクション別のメトリックに対しても設定することができ、これによって、その警告は、1以上の特定のトランザクションに固有のものとなる。これは、ユーザがシステムを理解したり診断したりするのを助ける有益な情報を提供する。
UIは、表示領域1524又は1526内の複数のメトリックの1つのテキスト表記をユーザがクリックする、又は選択することを可能にし、選択されたメトリックのエッジ部分の幅又は他の視覚的特徴を変化させることができる。あるいは、プルダウンメニューなどの別のUIデバイスは、ユーザがUIを必要に応じて構成することを許容する。UIは、また、着目する期間内にないデータを除去するなど、1以上の特定の基準を満たしていないデータを除去することができる。UIは、ユーザの選択に応じて、1以上の報告されたエージェント/サブシステムに基づくデータを表示することができる。
UIにおける他のノード間の経路も同様に、使用可能なトランザクション別のメトリックに基づいて強調される。UIは、また、ユーザに図11A及び11Bにあるようなトランザクショントレースを表示することを可能にする。例えば、UIは、図15A又は15BのUIを提供するのに使われた個別の複数のトランザクションのリストを提供することができ、その複数のトランザクションのうちの一つを選択させて対応するトランザクショントレースを表示することができる。
コンポーネントの性能メトリックをトランザクション又はトランザクションのグループによって区別する能力により、オペレータは、アプリケーションの性能をもっと容易に理解したり、コンポーネントに関連して、問題を診断したりすることができる。例えば、トランザクション別のメトリックを使用しないアプローチは、コンポーネントC1が異常に高い平均応答時間を有することを示すにすぎない。これと対照的に、トランザクション別のメトリックに基づいて、UIは、「エージェント1−T1」及び「エージェント1−T4」の複数のトランザクションの夫々に対して平均応答時間を示すことができ、これによって、その複数のトランザクションのうちの特定の一つが、応答時間が遅いことの原因となっていることを判定することがおそらく可能となる。
別の例として、電子商取引のウェブサイトの管理対象のコンピューティングデバイスが、顧客が商品アイテムの買い物をすることを可能にすること、及び、顧客の支払いの処理を可能にすること、を含むトランザクションを実行すると仮定する。あるいは、管理対象のコンピューティングデバイスが、顧客に様々な時間帯に買い物をすることを可能にすることを含むトランザクションを実行すると仮定する。トランザクション別のメトリックを提供する能力は、これら2つのトランザクションが別々に分析されることを可能にする。本明細書で提供されるアプローチは、収集されるデータの種類及びそれを収集するための処理を最適化する。
図15Bは、図15Aに代わるユーザインタフェースの例を示す。UI1530は、この例では、「エージェント1−T1」(アイコン1532によって示される)及び「エージェント1−T4」(アイコン1534によって示される)の、着目するトランザクションに焦点を合わせている。C1のノード1536は、トランザクション内の第1コンポーネントを表し、いずれもがC1によって呼び出される、C3のノード1537又はC2のノード1538は、トランザクション内の第2コンポーネントを表す。辺1545は、図15Aに関連して説明したように、それらの相対的な幅などによって互いに視覚的に区別される、辺部分1542及び1544を含む。メトリック表示領域1540及び1546は、それぞれ、辺部分1542及び1544にリンクされる。
図15Cは、ユーザインタフェースの別の例である。このUI1560では、提供される詳細レベルは、デバイス上で実行するアプリケーションのソフトウェアコンポーネントのレベルというよりも、むしろ管理対象のコンピューティングデバイスのレベルである。管理対象のコンピューティングデバイスは、ノード1574及び1576によって示される、例えば、図1Aのサーバ103及び109に対応する、アプリケーションサーバである。UI1560は、この例では、トランザクション1(T1)(アイコン1562によって示される)及びトランザクション2(T2)(アイコン1564によって示される)と一般的に称される、着目するトランザクションに焦点を合わせている。アプリケーションサーバ1576は、辺1575の、辺部分1568及び1570によってそれぞれ示されているように、T1及びT2に関連して、アプリケーションサーバ1574に呼び出される。辺部分1568及び1570は、前述したように、それらの相対的な幅などによって互いに視覚的に区別される。メトリック表示領域1566及び1572は、それぞれ辺部分1568及び1570にリンクされている。もちろん、UIは、ノードの間に2以上の矢印、及び3以上のノードを表示する。実際には、複雑なUIは、数日間かかって取得されるメトリックに基づいて、数百又は数千ものノードを伴って得られる。そのようなUIは、ユーザが傾向を視覚的に見つけることを可能にする。例えば、UIが、比較的に応答の遅いトランザクションを示すのに赤などの暖色を使用する場合、ユーザは、赤い辺を見つけ、赤い辺を有するエリアを拡大するようにUIを調節して、問題をさらに調査することができる。同様に、UIは、呼び出し回数が相対的に高いエリアをユーザが見つけることを可能にする。
自動化された報告は、例えばリストの形式で提供される。そのリストは、問題が存在することをメトリックが示す、コンポーネント及び/又は管理対象のコンピューティングデバイスを、それらに関連付けられているトランザクションとともに識別し得る。
図16Aは、少なくとも1つのアプリケーションについて、エージェントがトランザクション別のメトリックを取得するプロセス[処理]の一例を示す。ステップ1600は、例えば、コンポーネントの開始及び停止ポイントなど、少なくとも1つのアプリケーションの、呼び出されたコンポーネントのシーケンスを表す複数のブランチを含むツリーデータ構造を保守するエージェントを含む。エージェントは、また、複数のブランチの1以上のノードにリンクされた1以上の収集部を保守する。ステップ1602は、トランザクションの期間中、少なくとも1つのアプリケーションの、呼び出されたコンポーネントのシーケンスを識別すること、及び、呼び出されたコンポーネントのメトリックを取得することを含む。例えば、これはトランザクションをトレースすることを含む。ステップ1604は、ツリーデータ構造内のブランチと一致するブランチを識別することを含む。ステップ1606は、1以上の収集部にリンクされている1以上のノードのトランザクション別のメトリックを識別することを含む。ステップ1608は、エージェントからマネージャに、トランザクション別のメトリック、一致したブランチの識別子、及び、1以上の収集部の識別子を報告することを含む。述べたように、メトリックは、例えば数分ごとに定期的に報告され、その中で、多くのトランザクションのメトリックが典型的に取得され報告される。ステップ1610では、エージェントは、ステップ1606でトランザクション別に識別されないメトリックを破棄してマネージャに報告しない、とすることができる。必要に応じて、エージェントは、トランザクション別でないメトリックを報告してもよい。1つのアプローチでは、トランザクション別ではないとき、メトリックの縮減されたセットが報告される。
図16Bは、図16Aのプロセス[処理]に対応しており、エージェントからのトランザクション別のメトリックの報告に基づいてマネージャがユーザインタフェースを提供するプロセス[処理]の一例を示す。ステップ1620は、少なくとも1つのアプリケーションの呼び出されたコンポーネントのシーケンスを表すブランチを有するマネージャのツリーデータ構造を保守することを含む。ステップ1622は、トランザクション別のメトリック、一致するブランチの識別子、及び、1以上の収集部の識別子、の1以上の報告を受信することを含む。ステップ1624は、一致するブランチの識別子に基づいて、トランザクションの呼び出されたコンポーネントのシーケンスを識別することを含む。ステップ1626は、1以上の収集部の識別子に基づいて、トランザクション別のメトリックにアクセスすることを含む。ステップ1628は、図14Aから15Bに示されるように、トランザクション及び関連付けられたトランザクション別のメトリックを示すユーザインタフェース(UI)を提供することを含む。例えば、トランザクション別のメトリックは、領域1402、1404、1412、1422、1524、1526、1540及び1546において提供される。UIは、またトランザクション別のメトリックに基づいた、辺部分(例えば、図15A及び15Bの1520、1522、1542及び1544)の視覚的特徴を設定する。
別の実施形態は、アプリケーションを監視するためにコンピュータに実装される方法を含む。その方法は、複数のブランチを有するツリーデータ構造を保守すること、各ブランチは、それぞれのトランザクションの期間中、アプリケーションにおいて呼び出されたコンポーネントの各シーケンスを表す;対象トランザクションの期間中、エージェントを用いて、そのアプリケーションにおいて呼び出されたコンポーネントのシーケンス、及び、その対象トランザクションの呼び出された複数のコンポーネントの夫々の開始及び終了ポイントの時刻を識別すること;その複数のブランチのうちの一つを、対象トランザクションの呼び出されたコンポーネントのシーケンスに対して一致するブランチとして識別すること; 識別することに対応して、開始及び終了ポイントの時刻と、一致するブランチの識別子をエージェントからマネージャに報告すること、を含む。
一例では、一致するブランチは、対象トランザクションの呼び出されたコンポーネントの開始及び終了ポイントを表すノードを有し;対象トランザクションの呼び出されたコンポーネントの終了ポイントを表すノードの1つが、一致するブランチの最終ノードである;及び、一致するブランチの識別子は、一致するブランチの最終ノードの識別子を有し、一致するブランチの最終ノードの識別子は、その一致するブランチを一意的に識別する。
一例では、一致するブランチは、対象トランザクションの呼び出されたコンポーネントの開始及び終了ポイントを表すノードを有する;及び、対象トランザクションの呼び出されたコンポーネントに関連付けられた静的データは、対象トランザクションの呼び出されたコンポーネントの開始及び終了ポイントを表すノードにインデックス付けされている。
いくつかの例では、静的データは、少なくとも1つのクラス及びメソッドの名称を有する;静的データは、トレースされたクラスが展開されるアーカイブファイルの名称を有する;又は、静的データは、少なくとも1つのテキスト文字列、コンポーネントの種類及びポート番号を有する。
一例では、対象トランザクションの期間中、エージェントは、開始及び終了ポイントの時刻以外の動的データを取得し、開始及び終了ポイントの時刻以外の動的データは、対象トランザクション以前に知られることはない;及び、報告は、開始及び終了ポイントの時刻以外の動的データをマネージャに報告することを含み、動的データは、対象トランザクションの呼び出されたコンポーネントの開始及び終了ポイントを表す一致ブランチ内のノードにインデックス付けされ、動的データはメソッドに渡されたパラメータの値を含む。
一例では、ツリーデータ構造は、それぞれのトランザクションの期間中、アプリケーションにおいて呼び出されたコンポーネントのそれぞれのシーケンスをトレースすることによって取得される。
一例では、別の対象トランザクションの期間中、アプリケーションにおいて呼び出されたコンポーネントの他のシーケンスを識別するためにエージェントを使用すること;呼び出されたコンポーネントの上記別のシーケンスがツリーデータ構造内に表されているか否かを判定すること;呼び出されたコンポーネントの上記別のシーケンスがツリーデータ構造内に表されていない場合に対象トランザクションの呼び出されたコンポーネントの上記別のシーケンスを表すようにツリーデータ構造を更新すること;更新することは:(i)別の対象トランザクションの1以上の呼び出されたコンポーネントの開始及び終了ポイントを表すノードを提供すること、及び、(ii)別の対象トランザクションの1以上の呼び出されたコンポーネントに関連付けられた静的データをノードにインデックス付けすること。
一例では、エージェントは、ツリーデータ構造の更新をマネージャに報告し、その報告に応答して、マネージャが対応するツリーデータ構造を更新する。
別の実施形態は、コンピュータシステムを含み、コンピュータシステムが:ソフトウェア命令を格納する記憶装置;ソフトウェア命令が記憶装置から作業メモリにロードされる、作業メモリ;及び、ソフトウェア命令を実行するためのプロセッサを有し、そのソフトウエア命令は、実行時に:複数のブランチを有するツリーデータ構造を保守し、各ブランチは、それぞれのトランザクションの期間中、アプリケーションにおいて呼び出されたコンポーネントのそれぞれのシーケンスを表す;対象トランザクションの期間中、エージェントを使って、アプリケーションにおいて呼び出されたコンポーネントのシーケンス、及び、対象トランザクションの呼び出された複数のコンポーネントの各々の開始と終了ポイントの時刻を識別する;複数のブランチのうちの1つを、対象トランザクションの呼び出されたコンポーネントのシーケンスに一致するブランチとして識別し;その識別に応答して、エージェントからマネージャへ、一致するブランチの識別子と開始及び終了ポイントの時刻を報告する。
別の実施形態は、アプリケーションを管理する方法であってコンピュータに実装される方法を含む。その方法は:マネージャのツリーデータ構造を保守すること、マネージャのツリーデータ構造は、複数のブランチを有し、各ブランチは、それぞれのトランザクションの期間中、アプリケーションにおいて呼び出されたコンポーネントのそれぞれのシーケンスを表し、呼び出されたコンポーネントの各それぞれのシーケンスは、各それぞれのブランチにおいて、呼び出されたコンポーネントのそれぞれのシーケンスの呼び出されたコンポーネントの開始及び終了ポイントを表すノードのそれぞれのシーケンスによって表される;マネージャにおいて、アプリケーションの1つのインスタンスの呼び出されたコンポーネントのそれぞれのシーケンスのうちの1つを検出するエージェントから受信すること:(i)それぞれのブランチの1つの識別子は、呼び出されたコンポーネントのそれぞれのシーケンスのうちの1つを表し、及び(ii)呼び出されたコンポーネントのそれぞれのシーケンスの1つの、動的データである、動的データは、呼び出されたコンポーネントのそれぞれのシーケンスの1つの、呼び出されたコンポーネントの開始及び終了ポイントの時刻を有する;識別に応答して、呼び出されたコンポーネントのそれぞれのシーケンスの1つに関連付けられた静的データを調べるためにマネージャのツリーデータ構造を使用すること;及び、トランザクショントレースを示すユーザインタフェースを提供すること、トランザクショントレースは、呼び出されたコンポーネントのそれぞれのシーケンスの1つの、呼び出されたコンポーネントの開始及び終了ポイントの時刻を示し、及びトランザクショントレースは、静的データに基づいて註を加えられる、を有する。
一例では、エージェントは、少なくとも部分的には、マネージャのツリーデータ構造に対応するツリーデータ構造を保守し;実行されるその方法は:エージェントから、エージェントのツリーデータ構造への更新についての情報を受信すること、エージェントのツリーデータ構造は、少なくとも部分的には、マネージャのツリーデータ構造に対応する;及び、更新についての情報に応答して、マネージャのツリーデータ構造を更新することをさらに含む。
一例では、少なくとも1つの他のエージェントは、アプリケーションの他のインスタンスのために呼び出されたコンポーネントのそれぞれのシーケンスを検出し;他のエージェントは、ツリーデータ構造を保守し、他のエージェントのツリーデータ構造は、少なくとも部分的には、エージェントのツリーデータ構造に応答する;及び、実行されるその方法は:ツリーデータ構造のさらなるインスタンスを更新するときに使用するために他のエージェントへの更新についての情報を通信すること、をさらに有する。
一例では、更新についての情報は、更新に関連付けられた1以上の呼び出されたコンポーネントの開始及び終了ポイントを表すノードを識別する。
一例では、更新は、静的データを更新に関連付けられた1以上の呼び出されたコンポーネントの開始及び終了ポイントを表すノードにインデックス付けすることを有する。
以上、本発明の具体例を詳細に説明したが、これらは例示に過ぎず、本発明の範囲を限定するものではない。上記した技術には、以上に例示した具体例を様々に変形、変更したものが含まれる。上記した実施形態は、本発明の原理をベストに説明するために選定されたものであり、その実用に際しては、本発明が最適にその有用性を発揮するように、その特定用途に適するように当業者が様々に変形し得る。発明の範囲は、ここに添付した特許請求の範囲によって定められることを意図している。