(57)【特許請求の範囲】
【請求項１】
分散システムにおいてユーザリクエストの実行を監視する方法であって、
分散システムにおける複数のサーバの内の１以上のサーバによって受信されるユーザリクエストをサンプリングし、
前記複数のサーバの内の１以上のサーバによって受信された前記ユーザリクエストに対応する識別子を生成し、前記識別子は、前記ユーザリクエストによって呼び出された現スレッドへ変数として送信され、
前記分散システムにおける前記複数のサーバの内の１以上のサーバによって実行されるプロセスに、事前に追跡インターフェースをインジェクトし、
現プロセスが前記ユーザリクエストに対応する前記識別子を含むか否かを判定し、
前記現プロセスが追跡インターフェースを実行した際、前記現プロセスが前記ユーザリクエストに対応する前記識別子を含む場合に、前記追跡インターフェースによって示された関数に関係する前記識別子に対応する情報を記録し、ログを作成し、
前記作成されたログを、前記対応する識別子に従って個々に収集すること、
を備える方法。
【請求項２】
請求項１に記載の方法であって、
前記分散システムにおける複数のサーバの内の１以上のサーバによって受信されるユーザリクエストをサンプリングすることは、
前記分散システムにおける前記複数のサーバによって受信される前記ユーザリクエストのランダムサンプリングを、１〜５％の比率に基づいて行うことを含む、方法。
【請求項３】
請求項１に記載の方法であって、
前記複数のサーバの内の１以上のサーバによって受信された前記ユーザリクエストに対応する識別子を生成することは、
前記複数の受信サーバの内の１以上のサーバによって受信された前記ユーザリクエストについて、ユーザリクエスト送信時間及びリクエスト受信サーバのマーカに基づいて、一意に対応する識別子を生成することを含む、方法。
【請求項４】
請求項１に記載の方法であって、
前記ユーザリクエストがスレッドを呼び出す場合に、前記識別子が現スレッドへ変数として送信されることは、
同じプロセスにおける別のユーザリクエストが異なるスレッドを呼び出す場合は、前記識別子は前記スレッド変数内に保持され、
前記プロセスがサブプロセスを作成した場合は、前記識別子は前記サブプロセスへ送信され、
前記ユーザリクエストが複数のプロセスに跨っており、異なるスレッドを呼び出すときは、前記識別子は通信プロトコルを通じて全てのプロセスへ送信されること、
を備える、方法。
【請求項５】
請求項１に記載の方法であって、
前記追跡インターフェースによって示された関数に関係する前記識別子に対応する情報を記録し、ログを作成することは、
前記識別子、前記呼び出された関数の名前及び場所、前記関数が呼び出されたときの時刻、呼び出しの時点で生成されたエラー情報、又はこれらの任意の組み合わせを前記ログへ出力することを含む、方法。
【請求項６】
請求項１に記載の方法であって、
前記作成されたログを、前記対応する識別子に従って個々に収集することとは、
受信されたログを、識別子の違いに従って個々に分類し、
同じ識別子を有するログを、プロセスの違いに従って個々に分類し、
同じ識別子及び同じプロセスを有するログを、関数に従って、並びに開始時刻及び終了時刻の呼び出しに従って、個々に合体させ、
同じ識別子を有する、プロセスに跨がるログを、時系列に従って組み合わせること、
を含む、方法。
【請求項７】
請求項１に記載の方法であって、更に、
前記作成されたログを個々に収集した後に、前記収集されたログを解析し、解析結果を出力することを備える方法。
【請求項８】
請求項７に記載の方法であって、
前記収集されたログを解析することは、
同じ呼び出しフォームを有するユーザリクエストに対し、経路が異なる解析を実施し、
前記分散システムにおけるユーザリクエスト実行経路及びモジュールにおける実行時間を解析し、
前記分散システムにおいて前記モジュールにおける頻度解析を呼び出すこと、
又はこれらの任意の組み合わせ
を備える、方法。
【請求項９】
分散システムにおいてユーザリクエストの実行を監視するためのシステムであって、
少なくとも１つのプロセッサであって、
分散システムにおける複数のサーバの内の１以上のサーバによって受信されるユーザリクエストをサンプリングし、
前記複数のサーバの内の１以上のサーバによって受信された前記ユーザリクエストに対応する識別子を生成し、前記識別子は、前記ユーザリクエストによって呼び出された現スレッドへ変数として送信され、
前記分散システムにおける前記複数のサーバの内の１以上のサーバによって実行されるプロセスに、事前に追跡インターフェースをインジェクトし、
現プロセスが前記ユーザリクエストに対応する前記識別子を含むか否かを判定し、
前記現プロセスが追跡インターフェースを実行した際、前記現プロセスが前記ユーザリクエストに対応する前記識別子を含む場合に、前記追跡インターフェースによって示された関数に関係する前記識別子に対応する情報を記録し、ログを作成し、
前記作成されたログを、前記対応する識別子に従って個々に収集するように構成されている少なくとも１つのプロセッサと、  前記少なくとも１つのプロセッサに接続され、前記少なくとも１つのプロセッサに命令を提供するように構成されているメモリと、
を備える、システム。
【請求項１０】
請求項９に記載のシステムであって、
前記少なくとも１つのプロセッサは、更に、
前記作成されたログを収集した後に、
同じ呼び出しフォームを有するユーザリクエストに対し、経路が異なる解析を実施し、
前記分散システムにおけるユーザリクエスト実行経路及びモジュールにおける実行時間を解析し、
前記分散システムにおいて前記モジュールにおける頻度解析を呼び出すように、又は
これらの任意の組み合わせを行うように、
構成されている、システム。
【請求項１１】
分散システムにおいてユーザリクエストの実行を監視するためのコンピュータプログラムであって、
分散システムにおける複数のサーバの内の１以上のサーバによって受信されるユーザリクエストをサンプリングするための機能と、
前記複数のサーバの内の１以上のサーバによって受信された前記ユーザリクエストに対応する識別子を生成するための機能と、前記識別子は、前記ユーザリクエストによって呼び出された現スレッドへ変数として送信され、
前記分散システムにおける前記複数のサーバの内の１以上のサーバによって実行されるプロセスに、事前に追跡インターフェースをインジェクトするための機能と、
現プロセスが前記ユーザリクエストに対応する前記識別子を含むか否かを判定するための機能と、
前記現プロセスが追跡インターフェースを実行した際、前記現プロセスが前記ユーザリクエストに対応する前記識別子を含む場合に、前記追跡インターフェースによって示された関数に関係する前記識別子に対応する情報を記録し、ログを作成するための機能と、
前記作成されたログを、前記対応する識別子に従って個々に収集するための機能と、
をコンピュータによって実現させるコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
［関連出願の相互参照］
本出願は、あらゆる目的のために、参照によって本明細書に組み込まれる、２０１２年９月１４日に出願された、発明の名称を「ＭＥＴＨＯＤ  ＡＮＤ  ＤＥＶＩＣＥ  ＦＯＲ  ＭＯＮＩＴＯＲＩＮＧ  ＴＨＥ  ＲＵＮＮＩＮＧ  ＯＦ  ＵＳＥＲ  ＲＥＱＵＥＳＴ  ＩＮ  ＤＩＳＴＲＩＢＵＴＥＤ  ＳＹＳＴＥＭＳ（分散システムにおいてユーザリクエストの実行を監視するための方法及び装置）」とする中国特許出願第２０１２１０３４２９０９．６号に基づく優先権を主張する。
【０００２】
本出願は、分散システムにおいてユーザリクエストの実行を監視するための方法及びシステムに関する。
【背景技術】
【０００３】
大規模な分散システムにおいて、ユーザアプリケーションサービスリクエストは、多くの場合、実行される前に多くのサービスモジュールを経る。例えば、アリババのクラウドコンピューティングプラットフォームにおいて、ユーザによる１つの動作リクエストは、インデックスバッファの更新、メタ情報の維持、ファイルの書き込み、及びアクセスログの書き込みなどの多くの動作の完了前に、スケジューリングモジュール、通信モジュール、インデクシングモジュール、分散ストレージモジュール、及びその他のサービスモジュールを経る。これらのサービスモジュールは、通常は、幾百ものサーバにおいて様々なプロセス上に展開されており、様々なソフトウェアプログラムで構成される。
【０００４】
現在では、ユーザによって呼び出される分散システム挙動の監視及び解析は、多くの場合、例えばファイルシステムの監視、読み出し、及び書き込み、又は上位システムのスループットの監視などの、分散システムにおける１つのサービスコンポーネント上に集中している。このような監視手法は、１つのサービスモジュールのみを解析するものであり、ユーザによるアプリケーションサービスリクエストが分散システム全体に及ぼす影響を正確に得ることはできない。
【図面の簡単な説明】
【０００５】
以下の詳細な説明及び添付の図面において、本発明の様々な実施形態が開示される。
【０００６】
【図１】ユーザリクエストの実行を監視するためのプロセスの一実施形態を示すフローチャートである。
【０００７】
【図２】出力されたログの一例を示す図である。
【０００８】
【図３】ログを収集するためのプロセスの一実施形態を示すフローチャートである。
【０００９】
【図４】ログの解析の一例を示す図である。
【００１０】
【図５】ログの解析の詳細な一例を示す図である。
【００１１】
【図６】ログに基づいて統計をまとめる一例を示す図である。
【００１２】
【図７】ユーザリクエスト分布の一例を示す図である。
【００１３】
【図８】ユーザリクエストの実行を監視するためのシステムの一実施形態を示す構造図である。
【００１４】
【図９】ユーザリクエストの実行を監視するためのシステムの一実施形態を示す構造図である。
【発明を実施するための形態】
【００１５】
本発明は、プロセス、装置、システム、合成物、コンピュータ読み取り可能記憶媒体に実装されたコンピュータプログラム製品、並びに／又は結合先のメモリに記憶された命令及び／若しくは結合先のメモリによって提供される命令を実行するように構成されているプロセッサのようなプロセッサなどの、数々の形態で実現することができる。本明細書では、これらの実現形態、又は本発明がとりえるその他のあらゆる形態が、技術と称されてよい。総じて、開示されるプロセスの各段階の順番は、本発明の範囲内で変更されてよい。別途明記されない限り、タスクを実施するように構成されるとして説明されるプロセッサ又はメモリなどのコンポーネントは、所定時にタスクを実施するように一時的に構成されている汎用コンポーネントとして、又はタスクを実施するように製造された特殊コンポーネントとして実装されてよい。本明細書で使用される「プロセッサ」という用語は、コンピュータプログラム命令などのデータを処理するように構成されている１つ以上の機器、回路、並びに／又は処理コアを言う。
【００１６】
本発明の原理を例示する添付の図面とともに、以下で、本発明の１つ以上の実施形態の詳細な説明が提供される。本発明は、このような実施形態との関わりのもとで説明されるが、いずれの実施形態にも限定されない。本発明の範囲は、特許請求の範囲によってのみ限定され、本発明は、数々の代替形態、変更形態、及び均等物を包含している。以下の説明では、本発明の完全な理解を与えるために、数々の具体的詳細が明記されている。これらの詳細は、例示を目的として提供されるものであり、本発明は、これらの詳細の一部又は全部を伴わずとも、特許請求の範囲に従って実施されえる。明瞭を期するために、本発明に関係した技術分野で知られる技術要素は、本発明が不必要に不明瞭にされないように、詳細な説明を省略されている。
【００１７】
図１は、ユーザリクエストの実行を監視するためのプロセスの一実施形態を示すフローチャートである。一部の実施形態では、プロセス１００は、図９のサーバ９１０によって実行に移され、以下を含む。
【００１８】
ステップ１１０において、サーバは、分散システムにおける複数のサーバによって受信されるユーザリクエストをサンプリングする。
【００１９】
ステップ１２０において、サーバは、複数のサーバによってサンプリングされたユーザリクエストに対応する識別子を生成する。一部の実施形態では、識別子は、ユーザリクエストがスレッドを呼び出すときに、現スレッドへ変数として送信される。一部の実施形態では、各スレッドは、データの読み出し及び書き込みのためのストレージインターフェースを有するローカルストレージを有する。一部の実施形態では、変数は、ストレージインターフェースに記憶される。
【００２０】
ステップ１３０において、サーバは、分散システムにおける複数のサーバによって実行されるプロセスに、事前に追跡インターフェースをインジェクトする。
【００２１】
以下の、追跡インターフェースの一例は、２つの概念、すなわち追跡インターフェース、及び追跡インターフェースをどのようにしてオンオフ切り替えするかを示している。
【００２２】
FunctionB(){
【００２３】
TRACE_LOG (FunctionB，（”Message”, “exception throw”）(“User”,”100240”));
【００２４】
}
【００２５】
上記の例では、追跡インターフェースのためのコードが手動でインジェクトされる。追跡インターフェースの切り替えは、追跡インターフェースによって決定されるのではなく、現識別子が０に設定されているか否かに基づく。
【００２６】
ステップ１４０において、サーバは、現時点で実行されているプロセス（現プロセス）が、インジェクトされた追跡インターフェースを含むときに、この実行されているプロセスが、ユーザリクエストに対応する識別子を含むか否かを判定する。
【００２７】
ステップ１５０において、現プロセスが、ユーザリクエストに対応する識別子を含む場合に、サーバは、追跡インターフェースによって示された関数に関係する識別子に対応する情報を記録し、ログを作成する。
【００２８】
ステップ１６０において、サーバは、対応する識別子に基づいて、作成されたログを個々に収集する。
【００２９】
分散システムのパフォーマンスを監視することによる乱れの影響を軽減するために、及び監視システムによって消費される負荷が重すぎないことを保証するために、分散システムにおける複数のサーバによって受信されるユーザリクエストは、一般に、１〜５％の比率にしたがったランダムダンプリングを経る。サンプリングされたユーザリクエストは、呼び出された個々のスレッドにおいてまとめて追跡され、対応するログを作成される。
【００３０】
一例として、サンプリングされたユーザリクエストの追跡は、ユーザリクエストに対応する識別子に基づく。更に、複数のサーバによってサンプリングされたユーザリクエストに対応する識別子が生成されるときに、サーバは、生成される識別子が分散システムにおいて一意であることを保証する。例えば、ユーザリクエストに一意に対応する識別子が、設定アルゴリズムに従って生成される。一部の実施形態では、アルゴリズムは、複数の受信サーバによってサンプリングされたユーザリクエストについて、そのサンプリングされたユーザリクエストの送信時間及びリクエスト受信サーバのマーカに基づいて、識別子を生成する。識別子の生成について、アルゴリズムに課される制約はない。
【００３１】
サンプリングされたユーザリクエストが、複数のサーバによって実行されるプロセスにおいて効果的に検出されることを保証するために、ユーザリクエストに対応する識別子は、ユーザリクエストによって現時点で呼び出されているスレッドへ変数として送信される。一部の実施形態では、ユーザリクエストが同じプロセスにおいて異なるスレッドを呼び出すときは、識別子は、スレッドローカルストレージ（ＴＬＳ）内に保持される。プロセスがサブプロセスを作成するときは、サーバは、それらのサブプロセスへ識別子を送信する。ユーザリクエストが複数のプロセスに跨っており、異なるスレッドを呼び出すときは、識別子は、通信プロトコルを通じて全てのプロセスへ送信される。以下は、通信プロトコルの一例である。
【００３２】
【Ｈｅａｄｅｒ】
【００３３】
TracerID：1001234311111(Identifier)
【００３４】
【Ｂｏｄｙ】
【００３５】
[Original transmitted content]
【００３６】
一部の実施形態では、ネットワークモジュールがネットワークリクエストを送信するときに、スレッドから識別子が得られ、ネットワークリクエストのヘッダに置かれ、受信端末へ送信される。受信端末は、受信されたネットワークリクエストから識別子を抽出し、その識別子を、現時点でネットワークリクエストを処理しているスレッドへ送信する。
【００３７】
一部の実施形態では、分散システムにおける各サーバについて、サーバは、監視対象とされるプロセスに、事前に追跡インターフェースをインジェクトする。例えば、追跡インターフェースは、Windows（登録商標）オペレーティングシステムにおけるTRACE_LOGインターフェースに対応している。
【００３８】
例えば、関数が実行されるときに、サーバは、識別子が０であるか否かを判定する。識別子が０でない場合、サーバは、現TRACE_LOGの内容及び識別子の値をログへ出力する。
【００３９】
追跡インターフェースは、インジェクト点において、そのインジェクト点のタイプに関する記述的情報を明示的に追加する。一部の実施形態では、全ての追跡インターフェースが、「リソースの取得は初期化である（ＲＡＩＩ）」プログラミング仕様を採用している。つまり、追跡インターフェースは、システムリソースの解放及び要求を完成させる。一部の実施形態では、追跡インターフェースを通じて、コンストラクタ関数及びデストラクタ関数によってユーザリクエストインジェクト点の出入りのタイムスタンプが個々に記録され、ログに組み込まれる。
【００４０】
一部の実施形態では、以下のコードを通じてインジェクトプローブ追跡が実行に移される。
【００４１】
FunctionB(){
【００４２】
TRACE_LOG(FunctionB);
【００４３】
……
【００４４】
}
【００４５】
FunctionC(){
【００４６】
TRACE_LOG(FunctionC);
【００４７】
……
【００４８】
}
【００４９】
FunctionA(){
【００５０】
TRACE_LOG(FunctionA);
【００５１】
FunctionB();
【００５２】
FunctionC();
【００５３】
……
【００５４】
}
【００５５】
Main(…){
【００５６】
ENABLE_TRACE();
【００５７】
FunctionA();
【００５８】
}
【００５９】
したがって、分散システムにおける複数のサーバのプログラムがTRACE_LOGインターフェースに到達すると、プログラムは、常に、現時点で実行されているプロセスがユーザリクエストに対応する識別子を含むか否かを判定する。
【００６０】
一例では、識別子は、スレッド関数が呼び出されたときはそのスレッド関数によって使用される。識別子の値が０に対応する（リクエストがサンプリングされなかったことを意味する）場合、何も出力されない。識別子の値が０に等しくない（リクエストがサンプリングされている）場合、識別子の値及びログの内容が、処理のためにログへ出力される。
【００６１】
現時点で実行されているプロセスがユーザリクエストに対応する識別子を含むことが、プログラムによって判定された場合は、サーバは、スレッドから識別子を取得する。サーバは、追跡インターフェースによって示された関数に関係する情報を記録する。例えば、識別子及び呼び出された関数の名前及び場所を含む情報、関数が呼び出されたときの時刻、関数が呼び出された時点で生成されたエラー情報、又はこれらの任意の組み合わせが、ログへ出力される。
【００６２】
図２は、出力されたログの一例である。この出力されたログにおいて、「TRACE_ID_:001」は、識別子がリクエスト001についての識別子であることを示し、「_FUNC_:FunctionA_start」は、「Function A」の開始時刻を示し、「_FUNC_:FunctionA_end」は、「Function A」の終了時刻を示し、「/Example.cpp:117」は、ログが「Example.cpp」のライン117上に位置することを示す補助的な情報である。
【００６３】
現時点で実行されているプロセスがユーザリクエストに対応する識別子を含まないことが、プログラムによって判定された場合は、サーバは、いかなる動作も実行しない。つまり、識別子がセットアップされなかった又は識別子が０である場合は、識別子は、プロセスを呼び出したユーザリクエストが追跡又は監視されていないことを示す。
【００６４】
一部の実施形態では、ステップ１６０において、サーバは、分散システムにおける全てのサーバについてのログを作成した後、バックグラウンド収集手順を通じて、処理サーバにおいて一定間隔でログを収集し、それらの収集されたログを相互に関係付ける。つまり、識別子の違いに従って、収集動作が実行される。例えば、同じ識別子を持つログが、同じタイプとして収集される。
【００６５】
図３は、ログを収集するためのプロセスの一実施形態を示すフローチャートである。一部の実施形態では、プロセス３００は、図１の１６０を実行に移したものであり、以下を含む。
【００６６】
ステップ３１０において、サーバは、収集されたログを、識別子の違いに基づいて個々に分類する。
【００６７】
ステップ３２０において、サーバは、同じ識別子を有するログを、プロセスの違いに基づいて個々に分類する。
【００６８】
ステップ３３０において、サーバは、同じ識別子及び同じプロセスを有するログを、関数、並びに開始時刻及び終了時刻に基づいて個々に合体させる。
【００６９】
ステップ３４０において、サーバは、同じ識別子を有する、プロセスに跨るログを、時系列に基づいて組み合わせる。
【００７０】
ステップ３５０において、ログが収集された後に、サーバは、具体的なニーズに基づいて、収集されたログを解析し、解析結果を出力する。例えば、サーバは、異なる識別子を組み合わせて解析のための未加工データを形成するために、収集されたログを解析する。一部の実施形態では、プログラムにおいてユーザリクエストがどのように実行されるかについての便利な解析を可能にするために、プログラム実行モードを解釈するための視覚化／解析フレームワークが使用される。
【００７１】
一部の実施形態では、以下のログ解析のうちの１つ以上が実施される。
【００７２】
１．サーバは、同じ呼び出しフォームを有するユーザリクエストに対し、経路が異なる解析を実施する。一部の実施形態では、分散システムにおいて、同じ呼び出しフォームが、システム状態が異なるゆえに異なる挙動を引き起こす。例えば、分散システムは、キャッシュがヒットしたか否かに関し、同じ２種類の応答を有する。同じ処理モードについての異なる呼び出し挙動を数えることによって、分散システムの真の処理状態を解析することが可能である。図４は、ログの解析の一例である。例えば、同じ、MailBox::GetMail処理に関して、合計の９９．７７％及び０．２２％をそれぞれ占める２つの異なる挙動（Ａ及びＢ）が存在する。図５は、ログの解析の詳細な一例である。詳細な解析は、挙動Ａと挙動Ｂとの間の差を示している。一例として、図５の左側５０２は、挙動Ａを示しており、図５の右側５０４は、挙動Ｂを示している。
【００７３】
２．サーバは、分散システムにおけるユーザリクエスト実行経路の、及び実行時間の解析を実施する。図６は、ログに基づいて統計をまとめる一例である。収集されたユーザリクエストログに基づいて、複数のサーバのプロセスにおける、ユーザリクエスト呼び出しデータに関して及びユーザリクエストを実行させるために費やされる時間について統計をまとめることが可能である。
【００７４】
３．サーバは、分散システムにおける全てのモジュールの頻度解析を呼び出す。各モジュールにおける各ユーザリクエスト頻度の平均値及び最大値の検査を可能にすることに加えて、解析は、様々な次元に基づく、すなわち時間、識別子、及び器具の観点からの、プログラム呼び出し状況の分布の検査も可能にする。図７は、ユーザリクエストの分布の一例である。
【００７５】
更に、方法に対応する、分散システムにおいて実行されるユーザリクエストを監視するためのシステムが提供される。このシステムが稼働時にしたがう原則は、分散システムにおいて実行されるユーザリクエストを監視するための上記の方法と同様である。したがって、システムを実現するにあたっては、方法の実行を参照することができる。簡潔を期するために、繰り返し部分のこれ以上の説明は省略される。
【００７６】
図８は、ユーザリクエストの実行を監視するためのシステムの一実施形態を示す構造図である。一部の実施形態では、システム８００は、サンプリングモジュール８１０と、識別子生成モジュール８２０と、追跡インターフェースインジェクトモジュール８３０と、判定モジュール８４０と、生成モジュール８５０と、ログ収集モジュール８６０と、ログ解析モジュール８７０とを含む。
【００７７】
サンプリングモジュール８１０は、分散システムにおける複数のサーバよって受信されたユーザリクエストをサンプリングする。
【００７８】
識別子生成モジュール８２０は、様々なサーバによってサンプリングされたユーザリクエストに対応する識別子を生成する。一部の実施形態では、識別子は、ユーザリクエストがスレッドを呼び出す場合に、現スレッドへ変数として送信される。
【００７９】
追跡インターフェースインジェクトモジュール８３０は、分散システムにおける様々なサーバによって実行されるプロセスに、事前に追跡インターフェースをインジェクトする。
【００８０】
判定モジュール８４０は、現プロセスが、インジェクトされた追跡インターフェースを含むときに、この実行されているプロセスが、ユーザリクエストに対応する識別子を含むか否かを判定する。
【００８１】
現プロセスが追跡インターフェースを含むときに、この実行されているプロセスがユーザリクエストに対応する識別子を含むとして検出された場合は、生成モジュール８５０は、追跡インターフェースによって示された関数に関係する識別子に対応する情報を記録し、ログを作成する。
【００８２】
ログ収集モジュール８６０は、対応する識別子に基づいて、作成されたログを個々に収集する。
【００８３】
ログ解析モジュール８７０は、収集されたログを解析し、解析結果を出力する。一例として、解析は、１）同じ呼び出しフォームを有するユーザリクエストに対し、経路が異なる解析を実施する方法、２）分散システムにおけるユーザリクエスト実行経路の、及び様々なモジュールにおける実行時間の解析を実施する方法、並びに３）分散システムにおける様々なモジュールの頻度解析を呼び出す方法のうちの、１つ以上を含む。
【００８４】
図９は、ユーザリクエストの実行を監視するためのシステムの一実施形態を示す概略図である。システム９００は、複数のサーバ９１０と、クライアント９２０とを含む。サーバ９１０は、ネットワーク９３０を通じてクライアント９２０に接続されている。
【００８５】
例えば、クライアント９２０は、ネットワーク９３０を通じて、システム９００におけるサーバ９１０の１つへユーザリクエストを送信する。
【００８６】
分散システムにおいて実行されるユーザリクエストを監視するための方法及びシステムが提供される。ユーザが分散システムにアクセスするときに、分散システムによって受信されたユーザリクエストがサンプリングされ、サンプリングされたユーザリクエストに対応する識別子が生成される。識別子は、ユーザリクエストによって呼び出される各スレッドへ送信される。分散システムの複数のサーバによって実行されるプロセスに、追跡インターフェースが挿入される。このような各プロセスが追跡インターフェースに到達したときに、現プロセスがユーザリクエストに対応する識別子を含むとして検出された場合は、追跡インターフェースによって示される関数に関係する識別子に対応する情報が記録され、ログが作成される。続いて、作成されたログは、対応するそれらの識別子に基づいて、個々に収集される。ユーザリクエストは、ユーザリクエストの監視中に、サンプリング方法を使用してサンプリング監視されるので、システムパフォーマンスに対する影響は少ない。したがって、監視システムに過度な負担がかかることはない。更に、分散システムの監視において複数のサーバによって作成されたログは、ユーザリクエストの識別子に基づいてリアルタイムで収集され、ユーザリクエスト挙動のリアルタイム解析へのサポートを可能にする。
【００８７】
上述されたユニットは、１つ以上の汎用プロセッサ上で実行されるソフトウェアコンポーネントとして、又はプログラマブル論理装置及び／若しくは特定の機能を実施するように設計された特殊用途向け集積回路などのハードウェアとして、又はこれらの組み合わせとして実装することができる。一部の実施形態では、ユニットは、本発明の実施形態で説明される方法を（パソコン、サーバ、ネットワーク機器などの）計算装置に実行させるための幾つかの命令を含み尚且つ（光ディスク、フラッシュストレージデバイス、モバイルハードディスクなどの）不揮発性のストレージ媒体に記憶させることができるソフトウェア製品の形で具現化することができる。ユニットは、１つの装置に実装されてよい、又は複数の装置に分散されてよい。ユニットの機能は、互いに統合されてよい、又は複数の小ユニットに更に分けられてよい。ユニットの機能は、互に合体されてよい、又は複数のサブユニットに更に分けられてよい。
【００８８】
本明細書で開示される実施形態に照らして説明される方法又はアルゴリズムステップは、ハードウェア、プロセッサによって実行されるソフトウェアモジュール、又はこれら両方の組み合わせを使用して実現することができる。ソフトウェアモジュールは、ランダムアクセスメモリ（ＲＡＭ）、メモリ、読み出し専用メモリ（ＲＯＭ）、電気的にプログラム可能なＲＯＭ、電気的に消去可能でプログラム可能なＲＯＭ、レジスタ、ハードドライブ、着脱式ディスク、ＣＤ−ＲＯＭ、又は当該技術分野で知られるその他の任意の形態のストレージ媒体にインストールすることができる。
【００８９】
以上の実施形態は、理解を明瞭にする目的で幾らか詳細に説明されてきたが、本発明は、提供された詳細に限定されない。本発明を実現するには、多くの代替的手法がある。開示された実施形態は、例示的であり、限定的ではない。
適用例１：分散システムにおいてユーザリクエストの実行を監視する方法であって、
分散システムにおける複数のサーバによって受信されるユーザリクエストをサンプリングし、
前記複数のサーバによってサンプリングされた前記ユーザリクエストに対応する識別子を生成し、前記識別子は、前記ユーザリクエストによって呼び出された現スレッドへ変数として送信され、
前記分散システムにおける前記複数のサーバによって実行されるプロセスに、事前に追跡インターフェースをインジェクトし、
前記現プロセスが前記ユーザリクエストに対応する前記識別子を含むか否かを判定し、
前記現プロセスが前記追跡インターフェースを実行した際、前記現プロセスが前記ユーザリクエストに対応する前記識別子を含む場合に、前記追跡インターフェースによって示された関数に関係する前記識別子に対応する情報を記録し、ログを作成し、
前記作成されたログを、前記対応する識別子に従って個々に収集すること、
を備える方法。
適用例２：適用例１に記載の方法であって、
前記分散システムにおける複数のサーバによって受信されるユーザリクエストをサンプリングすることは、
前記分散システムにおける前記複数のサーバによって受信される前記ユーザリクエストのランダムサンプリングを、１〜５％の比率に基づいて行うことを含む、方法。
適用例３：適用例１に記載の方法であって、
前記複数のサーバによってサンプリングされた前記ユーザリクエストに対応する識別子を生成することは、
前記複数の受信サーバによってサンプリングされた前記ユーザリクエストについて、ユーザリクエスト送信時間及びリクエスト受信サーバのマーカに基づいて、一意に対応する識別子を生成することを含む、方法。
適用例４：適用例１に記載の方法であって、
前記ユーザリクエストがスレッドを呼び出す場合に、前記識別子が現スレッドへ変数として送信されることは、
同じプロセスにおける別のユーザリクエストが異なるスレッドを呼び出す場合は、前記識別子は前記スレッド変数内に保持され、
前記プロセスがサブプロセスを作成した場合は、前記識別子は前記サブプロセスへ送信され、
前記ユーザリクエストが複数のプロセスに跨っており、異なるスレッドを呼び出すときは、前記識別子は通信プロトコルを通じて全てのプロセスへ送信されること、
を備える、方法。
適用例５：適用例１に記載の方法であって、
前記追跡インターフェースによって示された関数に関係する前記識別子に対応する情報を記録し、ログを作成することは、
前記識別子、前記呼び出された関数の名前及び場所、前記関数が呼び出されたときの時刻、呼び出しの時点で生成されたエラー情報、又はこれらの任意の組み合わせを前記ログへ出力することを含む、方法。
適用例６：適用例１に記載の方法であって、
前記作成されたログを、前記対応する識別子に従って個々に収集することとは、
受信されたログを、識別子の違いに従って個々に分類し、
同じ識別子を有するログを、プロセスの違いに従って個々に分類し、
同じ識別子及び同じプロセスを有するログを、関数に従って、並びに開始時刻及び終了時刻の呼び出しに従って、個々に合体させ、
同じ識別子を有する、プロセスに跨がるログを、時系列に従って組み合わせること、
を含む、方法。
適用例７：適用例１に記載の方法であって、更に、
前記作成されたログを個々に収集した後に、前記収集されたログを解析し、解析結果を出力することを備える方法。
適用例８：適用例７に記載の方法であって、
前記収集されたログを解析することは、
同じ呼び出しフォームを有するユーザリクエストに対し、経路が異なる解析を実施し、
前記分散システムにおけるユーザリクエスト実行経路及びモジュールにおける実行時間を解析し、
前記分散システムにおいて前記モジュールにおける頻度解析を呼び出すこと、
又はこれらの任意の組み合わせ
を備える、方法。
適用例９：分散システムにおいてユーザリクエストの実行を監視するためのシステムであって、
少なくとも１つのプロセッサであって、
分散システムにおける複数のサーバによって受信されるユーザリクエストをサンプリングし、
前記複数のサーバによってサンプリングされた前記ユーザリクエストに対応する識別子を生成し、前記識別子は、前記ユーザリクエストによって呼び出された現スレッドへ変数として送信され、
前記分散システムにおける前記複数のサーバによって実行されるプロセスに、事前に追跡インターフェースをインジェクトし、
前記現プロセスが前記ユーザリクエストに対応する前記識別子を含むか否かを判定し、
前記現プロセスが前記追跡インターフェースを実行した際、前記現プロセスが前記ユーザリクエストに対応する前記識別子を含む場合に、前記追跡インターフェースによって示された関数に関係する前記識別子に対応する情報を記録し、ログを作成し、
前記作成されたログを、前記対応する識別子に従って個々に収集するように構成されている少なくとも１つのプロセッサと、  前記少なくとも１つのプロセッサに接続され、前記少なくとも１つのプロセッサに命令を提供するように構成されているメモリと、
を備える、システム。
適用例１０：適用例９に記載のシステムであって、
前記少なくとも１つのプロセッサは、更に、
前記作成されたログを収集した後に、
同じ呼び出しフォームを有するユーザリクエストに対し、経路が異なる解析を実施し、
前記分散システムにおけるユーザリクエスト実行経路及びモジュールにおける実行時間を解析し、
前記分散システムにおいて前記モジュールにおける頻度解析を呼び出すように、又は
これらの任意の組み合わせを行うように、
構成されている、システム。
適用例１１：非一時的なコンピュータ読み取り可能ストレージ媒体に埋め込まれた、分散システムにおいてユーザリクエストの実行を監視するためのコンピュータプログラム製品であって、
分散システムにおける複数のサーバによって受信されるユーザリクエストをサンプリングするためのコンピュータ命令と、
前記複数のサーバによってサンプリングされた前記ユーザリクエストに対応する識別子を生成するためのコンピュータ命令と、前記識別子は、前記ユーザリクエストによって呼び出された現スレッドへ変数として送信され、
前記分散システムにおける前記複数のサーバによって実行されるプロセスに、事前に追跡インターフェースをインジェクトするためのコンピュータ命令と、
前記現プロセスが前記ユーザリクエストに対応する前記識別子を含むか否かを判定するためのコンピュータ命令と、
前記現プロセスが前記追跡インターフェースを実行した際、前記現プロセスが前記ユーザリクエストに対応する前記識別子を含む場合に、前記追跡インターフェースによって示された関数に関係する前記識別子に対応する情報を記録し、ログを作成するためのコンピュータ命令と、
前記作成されたログを、前記対応する識別子に従って個々に収集するためのコンピュータ命令と、
を備えるコンピュータプログラム製品。
【図１】
0005978401.tif 000002
【図２】
0005978401.tif 000003
【図３】
0005978401.tif 000004
【図４】
0005978401.tif 000005
【図５】
0005978401.tif 000006
【図６】
0005978401.tif 000007
【図７】
0005978401.tif 000008
【図８】
0005978401.tif 000009
【図９】
0005978401.tif 000010