説明

情報処理装置、メッセージ切分け方法およびメッセージ切分けプログラム

【課題】一連のトランザクションを関連付けることを課題とする。
【解決手段】紐付けサーバは、トランザクションを識別するトランザクション識別子を有するメッセージの出現パターンを記憶する第1記憶部を有する。また、紐付けサーバは、アプリケーションサーバによってトランザクションIDを有するトランザクションDBサーバに実行され、アプリケーションサーバとDBサーバとの間で発生したメッセージを記憶する第2記憶部を有する。そして、紐付けサーバは、第1記憶部に記憶されるメッセージの出現パターンに基づいて、第2記憶部に記憶されているメッセージをトランザクションごとに分類する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、情報処理装置、メッセージ切分け方法およびメッセージ切分けプログラムに関する。
【背景技術】
【0002】
従来、インターネットを介してユーザにサービスを提供するWebアプリケーションの運用管理などでは、ユーザの処理要求の遅延などを監視するために、Webアプリケーションの性能測定が行われる。
【0003】
性能を測定するには、ユーザからの処理要求を一連のメッセージ群から検出し、最初のリクエストからユーザへのレスポンスまでのHTTP(HyperText Transfer Protocol)リクエスト処理やDB(Data Base)アクセス処理を監視することが有効である。すなわち、Webアプリケーションが実行した各トランザクションを検出することが有効である。
【0004】
このようなWebアプリケーションの性能を測定する手法としては、プロファイリングやネットワークモニタリングなどが一般的に利用されている。例えば、プロファイリングは、プロファイル対象サーバで動作するアプリケーション内部で実行された各処理の実行状況を監視する。また、ネットワークモニタリングは、対象のサーバが送受信したパケットをキャプチャリングして、対象のサーバと外部サーバとの通信を監視する。
【0005】
また、トランザクションの開始を契機として、トランザクションを識別するトランザクションIDを生成する。そして、生成したトランザクションIDを用いてトランザクションを識別し、1つのトランザクションを連携して実行するサーバ間の処理順序を生成することも行われている。
【先行技術文献】
【特許文献】
【0006】
【特許文献1】特開2009−277119号公報
【特許文献2】特開2010−146146号公報
【特許文献3】特表2008−502044号公報
【特許文献4】特開2010−44742号公報
【発明の概要】
【発明が解決しようとする課題】
【0007】
しかしながら、従来の技術では、一連のトランザクションを関連付けることができないという問題があった。
【0008】
例えば、プロファイリングでは、アプリケーション内部の処理を監視することができても、外部機器との通信情報を監視できない。また、ネットワークモニタリングでは、外部との通信を監視できても、アプリケーション内部の処理を監視できない。つまり、これらの技術では、トランザクション全体を監視することができないので、アプリケーションサーバやデータベースサーバで実行されたトランザクションを関連付けることができない。なお、トランザクションIDを用いる技術の場合も、各トランザクションが実行されたサーバの順番を特定しているだけであり、データベースシステムに対して実行されたトランザクションを監視できない。
【0009】
一例を挙げると、WebアプリケーションがDBドライバにリクエストを送信する場合は、1つのDBドライバへのリクエストがDBサーバに対して複数のリクエストとして送信されて、複数のレスポンスとして受信することがある。この場合、従来技術では、DBドライバとサーバ間の通信をトランザクションに対応付ける情報がなく、対応付けができない。
【0010】
1つの側面では、一連のトランザクションを関連付けることができる情報処理装置、メッセージ切分け方法およびメッセージ切分けプログラムを提供することを目的とする。
【課題を解決するための手段】
【0011】
第1の案では、情報処理装置は、トランザクションを識別するトランザクション識別子を有するメッセージの出現パターンを記憶する第1記憶部を有する。情報処理装置は、第1のサーバによって前記トランザクション識別子を有するトランザクションが第2のサーバに実行され、前記第1のサーバと前記第2のサーバとの間で発生したメッセージを記憶する第2記憶部を有する。情報処理装置は、前記第1記憶部に記憶されるメッセージの出現パターンに基づいて、前記第2記憶部に記憶されているメッセージを前記トランザクションごとに分類する分類部を有する。
【発明の効果】
【0012】
一連のトランザクションを関連付けることができる。
【図面の簡単な説明】
【0013】
【図1】図1は、実施例1に係るシステムの全体構成を示す図である。
【図2】図2は、実施例2に係るアプリケーションサーバの構成を示すブロック図である。
【図3】図3は、ID情報テーブルに記憶される情報の例を示す図である。
【図4】図4は、ロギング対象テーブルに記憶される情報の例を示す図である。
【図5】図5は、DB命令置換対象テーブルに記憶される情報の例を示す図である。
【図6】図6は、実施例2に係る紐付けサーバの構成を示すブロック図である。
【図7】図7は、アプリログテーブルに記憶される情報の例を示す図である。
【図8】図8は、DBキャプチャテーブルに記憶される情報の例を示す図である。
【図9】図9は、アプリメソッド分類テーブルに記憶される情報の例を示す図である。
【図10】図10は、DB分類テーブルに記憶される情報の例を示す図である。
【図11】図11は、トランザクションIDテーブルに記憶される情報の例を示す図である。
【図12】図12は、学習テーブルに記憶される情報の例を示す図である。
【図13】図13は、メッセージ分類テーブルに記憶される情報の例を示す図である。
【図14】図14は、アプリメソッド分類テーブルで表されるログメッセージの関係例を示す図である。
【図15】図15は、DB分類テーブルで表されるキャプチャメッセージの関係例を示す図である。
【図16】図16は、アプリケーションサーバが実行する処理の流れを示すフローチャートである。
【図17】図17は、紐付けサーバが実行する紐付け処理の流れを示すフローチャートである。
【図18】図18は、紐付けサーバが実行する学習処理の流れを示すフローチャートである。
【図19】図19は、メッセージ切分けプログラムを実行するコンピュータのハードウェア構成例を示す図である。
【発明を実施するための形態】
【0014】
以下に、本願の開示する情報処理装置、メッセージ切分け方法およびメッセージ切分けプログラムの実施例を図面に基づいて詳細に説明する。なお、この実施例によりこの発明が限定されるものではない。
【実施例1】
【0015】
図1は、実施例1に係るシステムの全体構成を示す図である。図1に示すように、このシステムは、Webサーバ1と、アプリケーションサーバ2と、DB(DataBase)サーバ3と、スイッチ4と、紐付けサーバ5とを有する。なお、これらの装置は、LAN(Local Area Network)やインターネットなどのネットワークを介して接続される。
【0016】
Webサーバ1は、HTML(HyperText Markup Language)文書や画像などの情報を蓄積し、Webブラウザなどを介してクライアントから受信した要求に応じて、HTML文書や画像を応答するサーバ装置である。このWebサーバ1は、トランザクションの実行結果をログとして保持する。例えば、Webサーバ1は、アプリケーションサーバ2によって実行されたアプリケーションから応答を受信し、Webブラウザなどからの要求に応じた情報を応答する。
【0017】
アプリケーションサーバ2は、クライアントやWebサーバ1から要求を受け付けてアプリケーションを実行し、Webサーバ1やDBサーバ3へトランザクションを実行するサーバ装置であり、アプリケーションの実行結果をログとして保持する。このアプリケーションサーバ2は、ID生成部2aとID付加部2bとを有する。
【0018】
ID生成部2aは、アプリケーションの実行を要求したクライアントごとに一意な識別子であり、当該アプリケーションが実行するトランザクションを識別するトランザクションID(以下、TranIDと表記する)を生成する。ID付加部2bは、ID生成部2aにより生成されたTranIDをトランザクションに付加してトランザクションを実行する。例えばクライアントから要求を受信したWebサーバ1が、Webサーバ1内へのトランザクション、アプリケーションサーバ2へのトランザクション、DBサーバ3へのトランザクションを実行したとする。すると、ID生成部2aは、トランザクション各々に対してTranIDを生成する。その後、ID付加部2bは、TranIDを付加したトランザクションを該当サーバに実行する。
【0019】
DBサーバ3は、データを記憶するDBを有し、アプリケーションサーバ2から受信したトランザクションに応じて、データの書き込みやデータの読み出しを実行するサーバ装置である。このDBサーバ3は、トランザクションの実行結果をログとして保持する。このDBサーバ3が有するDBは、関係データベースであってもよく、オブジェクトデータベースであってもよく、KVS(キーバリューストア)などであってもよい。
【0020】
スイッチ4は、ネットワーク内の経路情報を保持し、各サーバ間の通信をスイッチングするL2スイッチ(レイヤ2スイッチ))やスイッチングハブなどの中継装置である。例えば、スイッチ4は、紐付けサーバ5とWebサーバ1との間、紐付けサーバ5とアプリケーションサーバ2との間、紐付けサーバ5とDBサーバ3との間の通信を中継する。なお、スイッチ4は、ルータやL3スイッチ(レイヤ3スイッチ)などであってもよい。
【0021】
紐付けサーバ5は、第1記憶部5a、第2記憶部5b、分類部5cを有し、各サーバで実行されたトランザクションを紐付けするサーバ装置である。第1記憶部5aは、トランザクションを識別するトランザクション識別子を有するメッセージの出現パターンを記憶する。第2記憶部5bは、アプリケーションサーバ2によってTranIDを有するトランザクションDBサーバ3に実行され、アプリケーションサーバ2とDBサーバ3との間で発生したメッセージを記憶する。分類部5cは、第1記憶部5aに記憶されるメッセージの出現パターンに基づいて、第2記憶部5bに記憶されているメッセージをトランザクションごとに分類する。
【0022】
一般的に、アプリケーションサーバ2は、アプリケーションサーバ2内のトランザクション、Webサーバ1へのトランザクション、DBサーバ3へのSQL分などのトランザクションにはTranIDを付加することができる。したがって、これらのトランザクションの実行により発生したログメッセージや通信メッセージには、TranIDが含まれる。ところが、アプリケーションサーバ2は、DBサーバ3が実行するトランザクションに関係ないコネクション確立などの処理についてはTranIDを付加できない。このような場合、アプリケーションサーバ2から実行されたトランザクションと、DBサーバ3から発生したメッセージとを対応付けることができない。
【0023】
そこで、実施例1に係る紐付けサーバ5は、DBサーバ3との間で発生したメッセージにおいて、TranIDを有するメッセージが何番目に出現されるのかを示す出現位置を学習して記憶しておく。この結果、紐付けサーバ5は、アプリケーションへの処理要求から始まる一連のトランザクションを、DBアクセスに至るまで関連付けることができる。
【実施例2】
【0024】
実施例2では、図1に示した各装置の一例として、機能ブロック、処理の流れ、効果等について説明する。なお、Webサーバ1は、一般的なWebサーバと同様の機能を有し、DBサーバ3は、一般的なDBサーバ等と同様の機能を有し、スイッチ4は、一般的なスイッチと同様の機能を有するので、ここでは詳細な説明は省略する。
【0025】
[アプリケーションサーバの構成]
図2は、実施例2に係るアプリケーションサーバの構成を示すブロック図である。図2に示すように、アプリケーションサーバ10は、通信部11、アプリテーブル12、ID情報テーブル13、ロギング対象テーブル14、DB命令置換対象テーブル15、ログテーブル16、制御部17を有する。また、各テーブルは、例えば半導体メモリ素子やハードディスクなどの記憶装置に設けられる。また、各テーブルに記憶される情報は例示するものではなく、任意に設定変更できる。
【0026】
通信部11は、他の装置との間の通信を制御するインタフェースである。例えば、通信部11は、アプリケーションサーバ10と他サーバとの間で通信メッセージを送受信したり、アプリケーションサーバ10から他のサーバにトランザクションを送信したりする。また、この通信部11は、DBドライバとしての機能を有する。例えば、通信部11は、後述するアプリ実行部17aによって実行されたトランザクションによるリクエストをDBサーバ3へ発行し、DBサーバ3からレスポンスを受信する。
【0027】
アプリテーブル12は、アプリケーションサーバ10が実行するアプリケーションのプログラムを記憶する。例えば、アプリテーブル12は、Java(登録商標)で記述されたプログラムを記憶する。アプリケーションサーバ10は、クライアントから受信した要求に対応するアプリケーションのプログラムをアプリテーブル12から特定して実行することで、各種サービスを提供する。
【0028】
ID情報テーブル13は、後述するID生成部17bによって生成されたTranIDと、当該TranIDが与えられたアプリケーション情報を記憶する。図3は、ID情報テーブルに記憶される情報の例を示す図である。図3に示すように、ID情報テーブル13は、「クラス名、メソッド名、TranID」として「org.hibernate.foo、createQuery、tid−123」などを記憶する。
【0029】
ここで記憶される「クラス名」は、Java(登録商標)で記述されたプログラム内のクラスを示す情報であり、「メソッド名」は、クラス名で特定されるクラス内のメソッドを示す情報であり、「TranID」は、生成されたトランザクションIDである。図3の例は、「org.hibernate.foo」クラス内の「createQuery」には、「tid−123」が付与されたことを示す。
【0030】
ロギング対象テーブル14は、ログメッセージ出力対象となるアプリケーションの情報を記憶する。図4は、ロギング対象テーブルに記憶される情報の例を示す図である。図4に示すように、ロギング対象テーブル14は、「クラス名、メソッド名」として「java.foo.ClassA、*(*:アスタリスク)」や「org.hibernate.*、*」、「myApp.*、*」などを記憶する。
【0031】
ここで記憶される「クラス名」や「メソッド名」は、図3と同様の情報を示すので、説明を省略する。図4の例は、「java.foo.ClassA」内の各メソッドがロギング対象であり、「org.hibernate」で始まるクラス内の各メソッドがロギング対象であり、「myApp」で始まるクラス内の各メソッドがロギング対象であることを示す。
【0032】
DB命令置換対象テーブル15は、アプリケーションによって読み出されたDB命令が置換対象であるか否かを示す情報を記憶する。図5は、DB命令置換対象テーブルに記憶される情報の例を示す図である。図5に示すように、DB命令置換対象テーブル15は、「クラス名、メソッド名」として「org.hibernate.foo、createQuery」などを記憶する。
【0033】
ここで記憶される「クラス名」や「メソッド名」は、図3と同様の情報を示すので、説明を省略する。図5の例は、「org.hibernate.foo」クラス内の「createQuery」メソッドは置換対象であることを示す。
【0034】
ログテーブル16は、アプリケーションすなわちクラスやメソッドが実行されることで発生したログを記憶する。また、ログテーブル16は、アプリケーションが各装置に実行されることで発生した通信メッセージ等を記憶する。つまり、ログテーブル16は、アプリケーションサーバ10が実行したトランザクションによって発生したログや通信メッセージなどのログメッセージを記憶する。ログテーブル16が記憶する情報としては、上述したTranID、クラス名、メソッド名に加えて、ログが発生した時刻、正常終了や異常終了などの情報を示す処理結果などがある。
【0035】
制御部17は、アプリ実行部17aとID生成部17bとID付加部17cとを有し、アプリケーションを実行する処理部である。この制御部17は、例えば、CPU(Central Processing Unit)などの電子回路やASIC(Application Specific Integrated Circuit)などの集積回路で実行される。
【0036】
アプリ実行部17aは、クライアントの要求に応じてアプリケーションを実行する。例えば、アプリ実行部17aは、クライアントの要求に対応したアプリケーションをアプリテーブル12から特定して、特定したアプリケーション内のメソッドを読み出して実行する。
【0037】
ID生成部17bは、アプリケーションの実行を要求したクライアントごとに一意な識別子であり、当該アプリケーションが実行するトランザクションを識別するTranIDを生成する。例えば、ID生成部17bは、アプリケーションのクラス内から読み出されたメソッドをフックし、ID情報テーブル13を参照して、当該メソッドにIDが付与されているか否かを判定する。
【0038】
そして、ID生成部17bは、フックしたメソッドにIDが付与されていると判定した場合、当該メソッドをそのままID付加部17cに出力する。一方、ID生成部17bは、フックしたメソッドにIDが付与されていないと判定した場合、当該メソッドに対して一意なTranIDを生成する。その後、ID生成部17bは、生成したTranIDと、メソッドを有するクラス名と、読み出されたメソッド名とを対応付けてID情報テーブル13に格納する。また、ID生成部17bは、フックしたメソッドをID付加部17cに出力する。
【0039】
別の手法としては、ID生成部17bは、処理スレッドごとにTranIDを生成することもできる。なお、処理スレッドには、一意なIDであるスレッドIDが割り振られており、WebサーバからセッションIDをもって入力される。また、アプリケーションサーバ10が、スレッドIDとセッションIDとの対応付けを管理する。
【0040】
ID生成部17bは、処理スレッドごとに最新IDの情報を保持する。そして、ID生成部17bは、新しいセッション(トランザクション)が開始されると、最新IDを更新する。例えば、セッション(ID=ses−123)が終了して処理スレッド(処理スレッドID=256)が解放される。次に、新しいセッション(ID=ses−330)が開始され、処理スレッドとして(ID=256)が再利用されたとする。すると、ID生成部17bは、処理スレッド(ID=256)の最新IDを更新する。この場合、ID生成部17bは、トランザクションIDとして、例えば「ses−330−256−7」などを生成する。このようにして生成されたトランザクションIDは、メソッド呼び出しを処理する処理スレッドから直接参照することができる。例えば、ID生成部17bは、処理スレッド(ID=256)がセッション(ses−330)の実行中に呼び出すクラス、メソッドには、TranID「ses−330−256−7」を付加することになる。
【0041】
図2に戻り、ID付加部17cは、ID生成部2aにより生成されたTranIDをトランザクションに付加してトランザクションを実行する。例えば、ID付加部17cは、ID生成部17bから受信したメソッドの名称をキーにしてID情報テーブル13を検索し、TranIDを特定する。そして、ID付加部17cは、ID生成部17bから受信したメソッドに、特定したTranIDを付加して、メソッドを実行する。
【0042】
また、ID付加部17cは、ロギング対象のメソッドのみにTranIDを付与してもよい。この場合、ID付与部17cは、受信したメソッドがロギング対象テーブル14に登録されているメソッドである場合に、TranIDを付与する。また、ID付加部17cは、受信したメソッドがDB命令置換対象テーブル15に記憶されている場合、当該メソッド内のコメント分などでTranIDを埋め込むこともできる。
【0043】
[紐付けサーバの構成]
図6は、実施例2に係る紐付けサーバの構成を示すブロック図である。図6に示すように、紐付けサーバ20は、通信部21、アプリログテーブル22、DBキャプチャテーブル23、アプリメソッド分類テーブル24、DB分類テーブル25を有する。さらに、紐付けサーバ20は、トランザクションIDテーブル26、学習テーブル27、メッセージ分類テーブル28、制御部30を有する。また、各テーブルは、例えば半導体メモリ素子やハードディスクなどの記憶装置に設けられる。また、各テーブルに記憶される情報は例示するものに限られず、任意に設定変更できる。
【0044】
通信部21は、他の装置の間の通信を制御するインタフェースである。例えば、通信部21は、スイッチ4を介して、Webサーバ1、アプリケーションサーバ2、DBサーバ3各々からログメッセージを受信する。
【0045】
アプリログテーブル22は、アプリケーションサーバ2が出力したログメッセージを記憶する。アプリログテーブル22には、後述する情報取得部30aがアプリケーションサーバ2から取得した情報が格納される。図7は、アプリログテーブルに記憶される情報の例を示す図である。図7に示すように、アプリログテーブル22は、「timestamp、App−key、開始/終了、TranID、クラス名、メソッド名、次のメッセージ、前のメッセージ」を対応付けて記憶する。
【0046】
ここで記憶される「timestamp」は、ログメッセージが出力された時刻であり、「App−key」は、アプリケーションサーバが割り与えるログメッセージを識別する識別子である。「開始/終了」は、ログメッセージがトランザクションの開始か終了であるかを示し、「TranID」は、ログメッセージに付加されているトランザクションIDを示す。また、「クラス名」は、ログメッセージを出力したクラスの名称を示し、「メソッド名」は、ログメッセージを出力したメソッドの名称を示す。「次のメッセージ」は、次に出力されたログメッセージのApp−keyであり、「前のメッセージ」は、前に出力されたログメッセージのApp−keyである。
【0047】
図7の場合、「12:33:02」に出力されたログメッセージには、「App-key=123」が割り与えられている。このログメッセージは、「tid−123」を有するとともにトランザクションの「開始」を示し、「org.hibernate.foo」クラスの「createQuery」メソッドによって出力されたことを示す。また、このログメッセージの次に出力されたログメッセージは、「124」であることを示す。
【0048】
同様に、「12:37:04」に出力されたログメッセージには、「App-key=124」が割り与えられている。このログメッセージは、「tid−123」を有するとともにトランザクションの「終了」を示し、「org.hibernate.foo」クラスの「createQuery」メソッドによって出力されたことを示す。また、このログメッセージの前に出力されたログメッセージが「123」であり、次に出力されたログメッセージが「125」であることを示す。
【0049】
DBキャプチャテーブル23は、アプリケーションサーバ2とDBサーバ3との間で送受信されたキャプチャメッセージを記憶する。DBキャプチャテーブル23には、後述する情報取得部30aがネットワーク内のパケット等をキャプチャすることで生成された情報が格納される。図8は、DBキャプチャテーブルに記憶される情報の例を示す図である。図8に示すように、DBキャプチャテーブル23は、「timestamp、DB−key、コネクションキー、fromIP、fromPort、toIP、toPort、sqlmsg、TranID、次のメッセージ、前のメッセージ」を対応付けて記憶する。
【0050】
ここで記憶される「timestamp」は、キャプチャメッセージが出力された時刻であり、「DB−key」は、キャプチャメッセージを識別する識別子であり、例えばDBサーバ3によって一意に割り与えられる。「コネクションキー」は、IP(Internet Protocol)アドレスとポートとの組から一意に生成された識別子であり、例えばDBサーバ3によって生成される。「fromIP」は、トランザクションが実行されたコネクションで接続されるサーバのうちキャプチャメッセージの発行元サーバのIPアドレスである。「fromPort」は、トランザクションが実行されたコネクションで接続されるサーバのうちキャプチャメッセージの発行元サーバのポート番号である。「toIP」は、トランザクションが実行されたコネクションで接続されるサーバのうちキャプチャメッセージの発行先サーバのIPアドレスである。「toPort」は、トランザクションが実行されたコネクションで接続されるサーバのうちキャプチャメッセージの発行先サーバのポート番号である。
【0051】
また、「sqlmsg」は、キャプチャメッセージがSQL命令を有する場合にそのSQL命令の内容を示し、「TranID」は、キャプチャメッセージがTranIDを有する場合にそのTranIDを示す。「次のメッセージ」は、次に送受信されたキャプチャメッセージのDB−keyであり、「前のメッセージ」は、前に送受信されたキャプチャメッセージのDB−keyである。
【0052】
図8の場合、「12:33:03」にキャプチャされたキャプチャメッセージは、IPアドレス「A」のポート「59000」からIPアドレス「B」のポート「3306」に発行された、SQL文「select・・・」を有するメッセージである。このキャプチャメッセージは、TranID「tid−123」、DB−key「132」、コネクションキー「38」が付加されている。また、このキャプチャメッセージの前に出力されたキャプチャメッセージが「131」であり、次に出力されたキャプチャメッセージが「133」である。
【0053】
アプリメソッド分類テーブル24は、アプリログテーブル22に記憶されるログメッセージをTranIDごとに関係付けた情報を記憶する。アプリメソッド分類テーブル24には、後述する情報生成部30bによって生成された情報が格納される。図9は、アプリメソッド分類テーブルに記憶される情報の例を示す図である。図9に示すように、アプリメソッド分類テーブル24は、「キー、TranID、最終更新時刻、先頭メッセージ、末尾メッセージ、次の時刻順レコード、前の時刻順レコード」を対応付けて記憶する。
【0054】
ここで記憶される「キー」は、TranIDごとに生成された識別子すなわちレコードを識別する識別子であり、例えば後述する情報生成部30bによって生成される。「TranID」は、トランザクションを識別するトランザクションIDを示す。「最終更新時刻」は、当該TranIDを有するログメッセージのうち最も遅いタイムスタンプ値である。「先頭メッセージ」は、当該TranIDを有するログメッセージのうち最もタイムスタンプ値が早い先頭のログメッセージのAPP−keyである。「末尾メッセージ」は、当該TranIDを有するログメッセージのうち最もタイムスタンプ値が遅い末尾のログメッセージのAPP−keyである。「次の時刻順レコード」は、当該TranIDの次に発生したTranIDのレコードのキーを示し、「前の時刻順レコード」は、当該TranIDの前に発生したTranIDのレコードのキーを示す。
【0055】
図9の1行目は、TranID「tid−123」を有するログメッセージ群であり、このログメッセージ群には、キー「15」が割り与えられている。このログメッセージ群の先頭のログメッセージはApp−key「123」のメッセージであり、末尾のログメッセージは「12:34:05」に発行されたApp−key「127」のメッセージである。すなわち、このログメッセージ群には、App−key「123」から「127」までのログメッセージが含まれている。また、このレコードの前のレコードは、キー「14」が割り与えられたレコードであり、次のレコードは、キー「18」が割り与えられたレコードであることを示している。
【0056】
DB分類テーブル25は、DBキャプチャテーブル23に記憶されるキャプチャメッセージをコネクションキーごとに関連付けた情報である。DB分類テーブル25には、後述する情報生成部30bによって生成された情報が格納される。図10は、DB分類テーブルに記憶される情報の例を示す図である。図10に示すように、DB分類テーブル25は、「コネクションキー、最終更新時刻、先頭メッセージ、末尾メッセージ、先頭TranID情報、末尾TranID情報」を対応付けて記憶する。
【0057】
ここで記憶される「コネクションキー」は、IPアドレスとポートとの組から一意に生成された識別子であり、レコードを識別する。「最終更新時刻」は、当該コネクションキーを有するキャプチャメッセージのうち最も遅いタイムスタンプの値である。「先頭メッセージ」は、当該コネクションキーを有するキャプチャメッセージのうち最もタイムスタンプ値が早い先頭のキャプチャメッセージのDB−keyである。「末尾メッセージ」は、当該コネクションキーを有するキャプチャメッセージのうち最もタイムスタンプ値が遅い末尾のキャプチャメッセージのDB−keyである。「先頭TranID情報」は、当該コネクションキーを有するキャプチャメッセージにおいて、はじめに登場するTranIDのレコードを特定する識別子であり、トランザクションIDテーブル26で用いられている識別子である。「末尾TranID情報」は、当該コネクションキーを有するキャプチャメッセージにおいて、最後に登場するTranIDのレコードを特定する識別子であり、トランザクションIDテーブル26で用いられている識別子である。
【0058】
図10の1行目は、コネクションキー「38」を有するキャプチャメッセージ群であり、このキャプチャメッセージ群には、DB−key「132」のメッセージから、時刻「12:34:06」に発行されたDB−key「144」までのキャプチャメッセージが含まれる。また、このキャプチャメッセージ群には、最初にTranID情報「512」が与えられたTranIDが登場し、最後にTranID情報「517」が与えられたTranIDが登場する。
【0059】
トランザクションIDテーブル26は、情報生成部30b等によって生成された情報であって、TranIDに関する情報を記憶する。図11は、トランザクションIDテーブルに記憶される情報の例を示す図である。図11に示すように、トランザクションIDテーブル26は、「TranID情報、TranID、メッセージ、次のTranID情報、DB分類表情報」を対応付けて記憶する。
【0060】
ここで記憶される「TranID情報」は、TranIDに割り与えられた識別子であって、レコードを識別する識別子であり、例えば情報生成部30bによって生成される。「TranID」は、上述したトランザクション識別子である。「メッセージ」は、TranIDを保持するキャプチャメッセージのDB−keyである。「次のTranID情報」は、同一コネクション中の次のTranID情報への参照情報である。「DB分類表情報」は、当該レコードを保持するコネクションへの参照情報であり、コネクションキーが格納される。
【0061】
図11の場合、1行目のレコードには、TranID情報「512」が与えられている。このレコードは、コネクションキー「38」内のキャプチャメッセージのうち、DB−key「133」のキャプチャメッセージにTranID「tid−123」が保持されていることを示す。また、コネクションキー「38」では、このレコードの次に、TranID情報「513」のレコードのTranIDが出現することが示されている。
【0062】
学習テーブル27は、後述する学習部31が学習した情報であり、トランザクションを識別するTranIDを有するメッセージの出現パターンを記憶する。図12は、学習テーブルに記憶される情報の例を示す図である。図12に示すように、学習テーブル27は、「種別、先メッセージ数、全メッセージ数、信頼度」を対応付けて記憶する。
【0063】
ここで記憶される「種別」は、学習されたトランザクションの種別を示す。「先メッセージ数」は、TranIDを有するキャプチャメッセージよりも前に出力されるキャプチャメッセージの数を示す。「全メッセージ数」は、学習されたトランザクションで出力されるキャプチャメッセージの総数を示す。「信頼度」は、学習された情報の信頼度を示し、例えば5を1番高くする5段階などで示される。
【0064】
図12の場合、データベースにテーブル等を作成する「Create」関連のトランザクションでは、全部で「4」つのキャプチャメッセージが出力され、そのうち「2」番目にTranIDを保持するキャプチャメッセージが出現することが示されている。また、この学習情報の信頼度が「5」であることが示されている。
【0065】
メッセージ分類テーブル28は、学習テーブル27の学習情報を用いて、DB分類テーブル25に記憶されるキャプチャメッセージをトランザクションごとに分類した結果を記憶する。メッセージ分類テーブル28には、後述する分類部32によって生成された情報が格納される。図13は、メッセージ分類テーブル28に記憶される情報の例を示す図である。図13に示すように、メッセージ分類テーブル28は、「TranID、種別、コネクションキー、メッセージ数、先頭メッセージ、末尾メッセージ、処理時間、結果」が対応付けて記憶される。
【0066】
ここで記憶される「TranID」は、トランザクション識別子であり、「種別」は、トランザクションの種別を示し、「コネクションキー」は、DB分類テーブル25のコネクションキーである。「メッセージ数」は、同じトランザクションが出力したメッセージであるとして分類されたメッセージ数である。「先頭メッセージ」は、分類されたキャプチャメッセージのうち先頭のキャプチャメッセージのDB−keyを示し、「末尾メッセージ」は、分類されたキャプチャメッセージのうち末尾のキャプチャメッセージのDB−keyを示す。「処理時間」は、トランザクションのDBアクセス時間を示し、先頭メッセージから末尾メッセージ終了までの時間である。「結果」は、正常にメッセージが分類できた場合には「正常」が格納され、正常にメッセージが分類できなかった場合には「異常」が格納される。
【0067】
図13の場合、コネクションキー「38」で実行された、「Create」を実行するトランザクション「tid−123」は、DB−key「132」のキャプチャメッセージからDB−key「134」のキャプチャメッセージまでの「4」つのキャプチャメッセージが出現する。そして、処理時間が「2s」であることが示されている。この「tid−123」のメッセージ分類は、「正常」に終了し、アプリケーションサーバ2から実行されたトランザクションとDBサーバ3のメッセージとが関連付けられたことを示す。
【0068】
制御部30は、メッセージの出現パターンを学習したり、キャプチャメッセージの分類を実行する処理部であり、例えばCPU(Central Processing Unit)などの電子回路やASIC(Application Specific Integrated Circuit)などの集積回路である。この制御部30は、情報取得部30a、情報生成部30b、学習部31、分類部32、結果処理部33を有する。
【0069】
情報取得部30aは、各サーバのログメッセージ情報を所定の間隔で取得する。例えば、情報取得部30aは、60秒に1回など予め指定された間隔で、アプリケーションサーバ2が保持するログメッセージを取得して、アプリログテーブル22に格納する。また、ソケット通信などを用いて、リアルタイムにデータを取得することもできる。
【0070】
また、情報取得部30aは、ネットワーク内のパケットをキャプチャリングする。例えば、情報取得部30aは、アプリケーションサーバ2とDBサーバ3との間でやり取りされたパケットをキャプチャリングして、DBキャプチャテーブル23に格納する。なお、キャプチャリングの手法は、公知の様々な手法を用いることができるので、詳細な説明は省略する。また、情報取得部30aは、DBキャプチャテーブル23にキャプチャデータを格納する際に、DBサーバ3からログメッセージを取得し、キャプチャデータに加えてDBキャプチャテーブル23に格納することもできる。
【0071】
情報生成部30bは、アプリログテーブル22やDBキャプチャテーブル23などに記憶される情報から各種情報を生成して、アプリメソッド分類テーブル24、DB分類テーブル25、トランザクションIDテーブル26に格納する。
【0072】
まず、情報生成部30bが実行するアプリメソッド分類テーブル24の作成例について説明する。例えば、情報生成部30bは、アプリログテーブル22に記憶される「TranID」のうち、最も時間が早い「TranID」を1つ選択し、選択した「TranID」を有するログメッセージを抽出する。続いて、情報生成部30bは、選択した「TranID」に「キー」を割り与え、「キー」と「TranID」の組を有する情報を格納するレコードをアプリメソッド分類テーブル24に生成する。その後、情報生成部30bは、抽出したログメッセージの「timestamp」にしたがって、ログメッセージを並び替える。
【0073】
続いて、情報生成部30bは、抽出したログメッセージの中から、最も「timestamp」が早いログメッセージの「App−key」を、生成したレコードの「先頭メッセージ」に格納する。同様に、情報生成部30bは、抽出したログメッセージの中から、最も「timestamp」が遅いログメッセージの「App−key」を特定し、生成したレコードの「末尾メッセージ」に書き込む。さらに、情報生成部30bは、最も遅い「timestamp」の値をアプリメソッド分類テーブル24の「最終更新時刻」に格納する。このようにして、情報生成部30bは、アプリログテーブル22に記憶されるログメッセージを「TranID」ごとに分類して、分類した結果をアプリメソッド分類テーブル24に格納する。また、情報生成部30bは、アプリメソッド分類テーブル24に生成した各レコードやアプリログテーブル22の「timestamp」から、レコード間の時間順を特定して、「次の時間順レコード」と「前の時間順レコード」に「キー」を格納する。
【0074】
一例を挙げると、情報生成部30bは、アプリログテーブル22からTranID「tid−123」を特定し、「tid−123」を保持するログメッセージとして、App−key「123」からApp−key「127」のログメッセージを抽出する。そして、情報生成部30bは、「tid−123」に対してキー「15」を生成し、「tid−123」と「15」とを有するレコードAをアプリメソッド分類テーブル24に生成する。その後、情報生成部30bは、App−key「123」からApp−key「127」のログメッセージ各々の「timestamp」を比較して、先頭ログメッセージのApp−keyが「123」、末尾ログメッセージのApp−keyが「127」であると特定する。そして、情報生成部30bは、特定した先頭のApp−key「123」をレコードAの「先頭メッセージ」に格納して、特定した末尾のApp−key「127」をレコードAの「末尾メッセージ」に格納する。情報生成部30bは、このような処理を実行することで、TranIDごとに、アプリログテーブル22に保持されるメッセージを分類する。分類後、情報生成部30bは、各TranID「tid−123」の「次の時間順レコード」としてキー「18」を格納し、「前の時間順レコード」としてキー「14」を格納する。
【0075】
次に、情報生成部30bが実行するDB分類テーブル25の作成例について説明する。例えば、情報生成部30bは、DBキャプチャテーブル23に記憶される「コネクションキー」のうち、最も時間が早い「コネクションキー」を1つ選択し、選択した「コネクションキー」を有するキャプチャメッセージを抽出する。そして、情報生成部30bは、選択した「コネクションキー」を有する情報を格納するレコードをDB分類テーブル25に生成する。その後、情報生成部30bは、抽出したキャプチャメッセージの「timestamp」にしたがって、キャプチャメッセージを並び替える。
【0076】
続いて、情報生成部30bは、抽出したキャプチャメッセージの中から、最も「timestamp」が早いキャプチャメッセージの「DB−key」を、生成したレコードの「先頭メッセージ」に格納する。同様に、情報生成部30bは、抽出したキャプチャメッセージの中から、最も「timestamp」が遅いキャプチャメッセージの「DB−key」を特定し、生成したレコードの「末尾メッセージ」に書き込む。さらに、情報生成部30bは、最も遅い「timestamp」の値をDB分類テーブル25のレコードの「最終更新時刻」に格納する。このようにして、情報生成部30bは、DBキャプチャテーブル23に記憶されるキャプチャメッセージを「コネクションキー」ごとに分類して、分類した結果をDB分類テーブル25に格納する。また、情報生成部30bは、トランザクションIDテーブル26を参照して、DB分類テーブル25の「先頭メッセージ」から「末尾メッセージ」の間に出現した先頭の「TranID情報」と最後の「TranID情報」を特定する。そして、情報生成部30bは、DB分類テーブル25の「先頭TranID情報」と「末尾TranID情報」のそれぞれに、特定した先頭の「TranID情報」と最後の「TranID情報」を格納する。
【0077】
一例を挙げると、情報生成部30bは、DBキャプチャテーブル23からコネクションキー「38」を特定し、コネクションキー「38」を保持するキャプチャメッセージとして、DB−key「132」からDB−key「144」までのキャプチャメッセージを抽出する。そして、情報生成部30bは、コネクションキー「38」に対するレコードDをDB分類テーブル25に生成する。その後、情報生成部30bは、DB−key「132」からDB−key「144」までのキャプチャメッセージ各々の「timestamp」を比較して、先頭キャプチャメッセージのDB−keyが「132」、末尾キャプチャメッセージのDB−keyが「144」であることを特定する。そして、情報生成部30bは、特定した先頭のDB−key「132」をレコードDの「先頭メッセージ」に格納して、特定した末尾のDB−key「144」をレコードDの「末尾メッセージ」に格納する。情報生成部30bは、このような処理を実行することで、コネクションキーごとに、DBキャプチャテーブル23に保持されるメッセージを分類する。分類後、情報生成部30bは、トランザクションIDテーブル26を参照して、コネクションキー「38」のログメッセージ群で最初に出現したTranIDの「TranID情報」に「512」を格納し、最後に出現したTranIDの「TranID情報」に「517」を格納する。
【0078】
次に、情報生成部30bが実行するトランザクションIDテーブル26の作成例について説明する。例えば、情報生成部30bは、DBキャプチャテーブル23から「TranID」を保持するキャプチャメッセージの「DB−key」を特定する。続いて、情報生成部30bは、特定した「DB−key」を有するキャプチャメッセージの「timestamp」を特定するとともに、「DB−key」を有する「コネクションキー」を特定する。そして、情報生成部30bは、特定した「TranID」、「DB−key」、「コネクションキー」に対して「TranID情報」を生成して、これらと「TranID情報」とを対応付けたレコードをトランザクションIDテーブル26に生成する。また、情報生成部30bは、特定した「DB−key」を有するログメッセージの「timestamp」に基づいて、時間順序を特定して「次のTranID情報」を格納する。
【0079】
一例を挙げると、情報生成部30bは、「tid−123」を保持するDB−key「133」のキャプチャメッセージをDBキャプチャテーブル23から特定する。そして、情報構成部30bは、このメッセージのDB−key「133」をキーにしてDB分類テーブル25から、コネクションキー「38」を特定する。その後、情報生成部30bは、「tid−123」、DB−key「133」、コネクションキー「38」にTranID情報「512」を付与して、これらを対応付けたレコードをトランザクションIDテーブル26に生成する。そして、情報生成部30bは、トランザクションIDテーブル26にレコードが作成されると、「DB分類表情報」が同じであるレコードを時間順序で並び替えて、「次のTranID情報」を特定して格納する。
【0080】
図6に戻り、学習部31は、特定部31aと抽出部31bと格納制御部31cとを有し、これらによってTranIDを有するメッセージの出現位置を学習する。特定部31aは、アプリログテーブル22に記憶されるログメッセージから、アプリケーションサーバ10がDBサーバにリクエストを発行した時刻である開始時刻と、当該リクエストに対するレスポンスを受信した時刻である終了時刻とを特定する。
【0081】
例えば、特定部31aは、アプリメソッド分類テーブル24から1つのレコードを選択し、当該レコードの先頭メッセージの「App−key」と末尾メッセージの「App−key」とを特定する。そして、特定部31aは、アプリログテーブル22を参照して、特定した先頭メッセージから末尾メッセージまでのログメッセージのうち、「Create〜」、「Update〜」、「delete〜」などテーブル操作を示すメソッドを特定する。そして、特定部31aは、特定したメソッドの「開始」を示すログメッセージの「timestamp」を開始時刻、特定したメソッドの「終了」を示すログメッセージの「timestamp」を終了時刻として、抽出部31bに出力する。また、特定部31aは、アプリメソッド分類テーブル24から選択したレコードが保持する「TranID」などについても抽出部31bに出力する。
【0082】
一例として図7〜図9を用いて説明すると、特定部31aは、図9に示した情報からTranID「tid−123」の先頭メッセージがApp−Key「123」であり、末尾メッセージがApp−Key「127」であると特定する。続いて、特定部31aは、アプリログテーブル22を参照して、App−Key「123」から「127」までのログメッセージのうち「createQuery」の「開始」メッセージのApp−Keyが「123」であり、「終了」メッセージのApp−Keyが「124」であることを特定する。その後、特定部31aは、App−Keyが「123」であるログメッセージの「timestamp」を開始時刻、App−Keyが「123」であるログメッセージの「timestamp」を終了時刻として抽出部31bに出力するとともに、「tid−123」を抽出部31bに出力する。
【0083】
抽出部31bは、DB分類テーブル25に記憶されるキャプチャメッセージから、特定部31aによって特定された開始時刻から終了時刻までに送受信されたキャプチャメッセージを抽出する。例えば、抽出部31bは、特定部31aが特定した「TranID」を検索キーにしてトランザクションIDテーブル26を検索し、「TranID」に対応付けられた「コネクションキー」を特定する。その後、抽出部31bは、特定した「コネクションキー」で出力されたキャプチャメッセージをDB分類テーブル25から特定し、特定したキャプチャメッセージのうち、上記開始時刻から終了時刻までの出現したキャプチャメッセージを抽出する。
【0084】
上述した例で説明すると、抽出部31bは、図11に示した情報から、「tid−123」に対応付けられたコネクションキー「38」を特定する。続いて、抽出部31bは、コネクションキー「38」に対応付けられた先頭メッセージ「132」から末尾メッセージ「144」と、特定した「132」から「144」までの各メッセージの「timestamp」を、図8に示したDBキャプチャテーブル25から特定する。このうち、抽出部31bは、抽出部31bから通知された開始時刻と終了時刻の間に収まる、「132」から「135」までのキャプチャメッセージを抽出する。
【0085】
格納制御部31cは、抽出部31bによって抽出されたキャプチャメッセージにおいて、TranIDを有するキャプチャメッセージの出現パターンを特定して学習テーブル27に格納する。例えば、格納制御部31cは、抽出部31bが抽出したキャプチャメッセージの総数を「全メッセージ数」として決定する。また、格納制御部31cは、特定部31aから通知される「TranID」を保持するキャプチャメッセージの「DB−key」をトランザクションIDテーブル26から特定する。そして、格納制御部31cは、抽出部31bが抽出したキャプチャメッセージのうち、「TranID」を有するキャプチャメッセージが何番目に出現するかを特定する。そして、格納制御部31cは、「TranID」、先メッセージ数、全メッセージ数に対応付けて、特定部31aが特定したメソッドの種別を学習テーブル27に格納する。このとき、例えば、格納制御部31cは、当該メソッドの種別の学習回数が所定回以上や、コネクション内にTranIDが1つしかない状態で実行したか否かによって信頼度を決定して格納する。
【0086】
上述した例で説明すると、格納制御部31cは、抽出部31bが抽出した「132」から「135」までの「4」つを「全メッセージ数」と決定する。また、格納制御部31cは、「tid−123」を保持するキャプチャメッセージのDB−key「133」を、図8に示したDBキャプチャテーブル23または図11に示したトランザクションIDテーブル26から特定する。そして、格納制御部31cは、抽出されたDB−key「132」から「135」のうち、「133」が2番目であると検出する。また、特定部31aが特定した「createQuery」の「Create」を「種別」に決定する。その後、格納制御部31cは、「全メッセージ数」=「4」、先メッセージ数=「1」、「種別」=「Create」を対応付けて学習テーブル27に格納する。なお、格納制御部31cは、コネクション内の多重度が1つであるため、「信頼度」=「5」としてもよい。
【0087】
図6に戻り、分類部32は、学習テーブル27に記憶されるメッセージの出現パターンに基づいて、DB分類テーブル25に記憶されているメッセージをトランザクションごとに分類する。上述した各図等を例にして説明すると、分類部32は、図10に示したDB分類テーブル25からコネクションキー「38」のレコードを選択し、当該コネクションで発生したメッセージのDB−keyが「132」から「144」までであることを特定する。
【0088】
続いて、分類部32は、コネクションキー「38」を検索キーにして、図11に示したトランザクションIDテーブル26を検索し、TranID「tid−123」がDB−key「133」に関連して出現していることを特定する。また、分類部32は、TranID「tid−123」に対応するメソッド名が「CreateQuery」であることを、図7に示したアプリログテーブル22から特定する。この結果、分類部32は、TranID「tid−123」の種別を「Create」と特定する。
【0089】
その後、分類部32は、「Create」を検索キーにして図12に示した学習テーブル27を検索し、全メッセージ数が「4」、先メッセージ数が「1」を特定する。つまり、分類部32は、TranIDを有するメッセージが2番目に出現することを特定する。このとき、分類部32は、「Create」に対応する情報が複数ある場合には、最も信頼度が高い情報を用いるようにしてもよい。
【0090】
そして、分類部32は、DB分類テーブル25のコネクションキー「38」で出現したメッセージのうち、「133」が2番目になることから、DB−key「133」を基準に「132」から「134」まで、TranID「tid−123」で実現したメッセージであると特定する。その後、分類部32は、上述したTranID「tid−123」、コネクションキー「38」、実際に検出できたメッセージ数=「4」、先頭メッセージのDB−key「132」、末尾メッセージのDB−key「134」を対応付けてメッセージ分類テーブル28に格納する。また、分類部32は、DB−key「132」から「134」まで処理時間を、図8に示したDBキャプチャテーブル23の「timestamp」から特定して、メッセージ分類テーブル28に格納する。
【0091】
このとき、分類部32は、DB分類テーブル25のコネクションキー「38」で出現したメッセージのうち、DB−key「133」を基準にした場合に、「132」から「133」までの2メッセージしか存在しなかったとする。その場合、分類部32は、学習済みデータの全メッセージ数が「4」であるにも関らず、「2」つしか検出できなかったので、「結果」に「異常」を格納する。このような異常状態でない場合には、分類部32は、「結果」に「正常」を格納する。なお、異常が格納された場合には、分類部32は、当該学習テーブルの信頼度を下げてもよい。
【0092】
図6に戻り、結果処理部33は、メッセージ分類結果に応じて警告等を報知する。例えば、結果処理部33は、メッセージ分類テーブル28を参照し、「結果」フィールドに「異常」が格納されている場合には、メッセージ分類結果が異常であると判定する。そして、結果処理部33は、「異常」に対応付けられたTranIDをディスプレイに表示したり、メールでカスタマーエンジニア(CE)に報知する。また、結果処理部33は、メッセージ分類テーブル28を参照し、処理時間が所定値以上であるTranIDについても、異常が発生したトランザクションであると判定して、報知処理を実行する。
【0093】
[具体例]
次に、図14と図15を用いて、メッセージ出現パターンの学習例およびメッセージ分類例について説明する。図14は、アプリメソッド分類テーブルで表されるログメッセージの関係例を示す図であり、図15は、DB分類テーブルで表されるキャプチャメッセージの関係例を示す図である。
【0094】
学習部31の特定部31aは、アプリメソッド分類テーブル24を参照することで、図14に示すようなアプリケーションサーバ10で発生したログメッセージの関係性を特定する。具体的には、図14に示すように、特定部31aは、キー「15」が与えられたTranID「tid−123」を保持するログメッセージ群が、App−key「123」のログメッセージからApp−key「127」のログメッセージで形成されることを特定する。同様に、特定部31aは、TranID「tid−123」に続くメッセージ群として、キー「18」が与えられたTranID「tid−127」を保持するログメッセージ群が、App−key「185」のログメッセージからApp−key「201」のログメッセージで形成されることを特定する。
【0095】
特定部31aは、App−key「123」のログメッセージからApp−key「127」のログメッセージ各々の「メソッド名」をアプリログテーブル22から特定する。そして、特定部31aは、図14に示すように、DBアクセスを実行した際のログメッセージの「timestamp」を開始時刻(t0)、DBアクセスが終了した際のログメッセージの「timestamp」を終了時刻(t1)として抽出部31bに通知する。なお、特定部31aは、アプリログテーブル22の「開始/終了」フィールドからDBアクセスを開始した際のメソッドと、終了した際のメソッドとを特定できる。
【0096】
抽出部31bは、DB分類テーブル25を参照することで、図15に示すようなアプリケーションサーバ2とDBサーバ3間で発生したキャプチャメッセージの関係性を特定する。具体的には、図15に示すように、抽出部31bは、コネクションキー「38」内で発生したキャプチャメッセージ群が、DB−key「132」のメッセージからDB−key「157」のメッセージで形成されることを特定する。同様に、抽出部31bは、コネクションキー「40」内で発生したキャプチャメッセージ群が、DB−key「200」のメッセージからDB−key「203」のメッセージで形成されることを特定する。
【0097】
抽出部31bは、コネクションキー「38」内の各キャプチャメッセージの「Timestamp」をDBキャプチャテーブル23から特定する。そして、抽出部31bは、図15に示すように、特定部31aから通知された開始時刻(t0)と終了時刻(t1)の間で発生したメッセージとして、DB−key「132」のメッセージからDB−key「138」のメッセージを抽出する。
【0098】
格納制御部31cは、トランザクションIDテーブル26の「TranID」と「メッセージ」とを参照し、TranID「tid−123」がDB−key「133」に付加されることを特定する。そして、格納制御部31cは、図15に示すように、抽出部31bによって抽出されたDB−key「132」のメッセージからDB−key「138」のメッセージのうち、TranID「tid−123」が付加されたメッセージの順番が2番目であることを特定する。また、格納制御部31cは、TranID「tid−123」に対応する「メソッド名」をアプリログテーブル22から特定し、TranID「tid−123」のメソッド名から「種別=create」を特定する。こうして、格納制御部31cは、「種別=create」、「先メッセージ数=1」、「全メッセージ数=4」を学習テーブル27に格納する。このようにして、格納制御部31cは、トランザクション「種別」ごとにトランザクション識別子の出現パターンを学習できる。
【0099】
次に、学習結果を用いてメッセージを分類する例について説明する。なお、ここでは、説明上、学習テーブルが記憶する「種別」と「信頼度」については除外して説明する。例えば、学習テーブル27が「先メッセージ数、全メッセージ数」として「0、2」を記憶しており、トランザクションIDテーブル26が「TranID、メッセージ」として「tid−100、202」を記憶しているものとする。また、DB分類テーブル25が記憶するキャプチャメッセージは、図15に示す通りとする。
【0100】
この場合、分類部32は、「tid−100」を保持するDB−key「202」のメッセージが2つのメッセージの先頭に付加されていることを認識する。したがって、分類部32は、図15に示すように、コネクションキー「40」内で発生したキャプチャメッセージ群のうち、DB−key「202」のメッセージを基準に、DB−key「202」とDB−key「203」のメッセージを切り出す。すなわち、分類部32は、トランザクション「tid−100」で発生したDBメッセージがDB−key「202」とDB−key「203」のメッセージであると特定する。
【0101】
[処理の流れ]
次に、図16から図18を用いて、各装置が実行する処理の流れについて説明する。ここでは、アプリケーションサーバ10が実行する処理の流れ、紐付けサーバ20が実行する処理の流れについて説明する。
【0102】
(アプリケーションサーバ10が実行する処理の流れ)
図16は、アプリケーションサーバが実行する処理の流れを示すフローチャートである。図16に示すように、アプリケーションサーバ10のID生成部17bは、アプリ実行部17aによるアプリのメソッドの呼び出しを検出すると(S101肯定)、呼び出しをフックする(S102)。そして、ID生成部17bは、当該メソッドが新規スレッドつまりID情報テーブル13に記憶されているか否かを判定する(S103)。
【0103】
続いて、ID生成部17bは、当該メソッドが新規スレッドである場合(S103肯定)、一意なTranIDを生成し(S104)、ロギング対象テーブル14を参照して、当該メソッドがロギング対象であるか否かを判定する(S105)。
【0104】
そして、ID付加部17cは、当該メソッドがロギング対象である場合(S105肯定)、DB命令置換対象テーブル15を参照して、当該メソッドがDB置換対象であるか否かを判定する(S106)。
【0105】
続いて、ID付加部17cは、当該メソッドがDB置換対象である場合(S106肯定)、当該メソッドのDB命令を置換して呼び出し情報にTranIDを埋め込む(S107)。一方、ID付加部17cは、当該メソッドがDB置換対象でない場合(S106否定)、当該メソッドにTranIDを付加する(S108)。
【0106】
その後、ID付加部17cは、開始ログをログテーブル16に格納して(S109)、メソッドを呼び出して実行し(S110)、メソッドが終了すると、終了ログをログテーブル16に格納する(S111)。
【0107】
また、S103において、当該メソッドが新規スレッドでない場合(S103否定)、ID付加部17cは、当該メソッドに対して既に生成されているTranIDをID情報テーブル13から取得して付与し(S112)、S109以降の処理を実行する。なお、S105において、ID付加部17cは、当該メソッドがロギング対象でないと判定した場合(S105否定)、処理を終了する。
【0108】
(紐付けサーバ20が実行する紐付け処理の流れ)
図17は、紐付けサーバが実行する紐付け処理の流れを示すフローチャートである。図17に示すように、紐付けサーバ20の情報取得部30aは、各サーバまたはネットワーク内からログメッセージやキャプチャメッセージを取得すると(S201肯定)、取得したメッセージのヘッダー等から種別を特定して各テーブルに振り分ける(S202)。
【0109】
その後、情報生成部30bは、アプリログテーブル22内に新たなトランザクションの完了を示すメッセージが存在することを検出する(S203肯定)。すると、情報生成部30bは、アプリログテーブル22やDBキャプチャテーブル23などに記憶される情報から各種情報を生成して、アプリメソッド分類テーブル24、DB分類テーブル25、トランザクションIDテーブル26に格納する(S204)。
【0110】
そして、分類部32は、DB分類テーブル25に未処理のコネクションが存在することを検出すると(S205肯定)、コネクションを1つ選択する(S206)。続いて、分類部32は、トランザクションIDテーブル26等からTranIDを有するメッセージを特定するとともに(S207)、特定したメッセージのTranIDに対応する学習情報を学習テーブル27から取得する(S208)。
【0111】
そして、分類部32は、特定したメッセージのTranIDのメッセージ出現パターンが学習テーブル27に格納されており、学習済みである場合には(S209肯定)、学習結果を用いて、S206で選択されたコネクション内のメッセージを分類する(S210)。その後、分類部32は、S205に戻って以降の処理を実行する。
【0112】
一方、分類部32は、特定したメッセージのTranIDのメッセージ出現パターンが学習テーブル27に格納されておらず、未学習である場合には(S209否定)、学習処理を実行する(S211)。そして、分類部32は、学習処理後の学習結果を用いて、S206で選択されたコネクション内のメッセージを分類する(S209とS210)。その後、分類部32は、S205に戻って以降の処理を実行する。
【0113】
また、S205において、分類部32は、DB分類テーブル25に未処理のコネクションが存在しないことを検出すると(S205否定)、処理を終了する。
【0114】
(紐付けサーバ20が実行する学習処理の流れ)
図18は、紐付けサーバが実行する学習処理の流れを示すフローチャートである。図18に示すように、学習部31の特定部31aは、処理開始契機に到達すると(S301肯定)、アプリログテーブル22を参照して、DBアクセスの開始時刻と終了時刻とを特定する(S302)。
【0115】
続いて、抽出部31bは、特定された開始時刻から終了時刻までに発生したメッセージをDB分類テーブル25から特定する(S303)。そして、格納制御部31cは、特定したメッセージのうち、TranIDを保持するメッセージが存在する場合には(S304肯定)、TranIDの出現パターンすなわち全体のうち何番目に出現しているかを特定する(S305)。
【0116】
その後、格納制御部31cは、TranIDを保持するメッセージの出現パターンを学習テーブル27に格納する(S306)。このとき、格納制御部31cは、トランザクションおよび種別、S305で特定された全メッセージ数、信頼度なども格納する。
【0117】
そして、格納制御部31cは、他のTranIDを保持するメッセージが存在する場合には(S307肯定)、S305〜S306を繰り返す。また、格納制御部31cは、アプリログテーブル22も未処理のメッセージが存在する場合には(S308肯定)、S302以降の処理を繰り返す。そして、格納制御部31cは、他のTranIDを保持するメッセージが存在せず(S307否定)、アプリログテーブル22も未処理のメッセージが存在しない場合には(S308否定)、処理を終了する。また、格納制御部31cは、ステップS304においてTranIDを保持するメッセージが存在しないと判定された場合には(S304否定)、処理を終了する。
【0118】
[実施例2による効果]
実施例2に係る紐付けサーバ20は、Webアプリケーションへの処理要求から始まる一連のトランザクションを、DBアクセスに至るまで全て関連付ける事ができる。これにより、処理経路上の所要時間がアプリ本体から外部の通信に至るまでトランザクション毎に計測できるので、システム性能の監視やボトルネックの検出などを効率よく実施することができる。特に、これまで関連付けることが難しかった、DBアクセスの通信メッセージを関連付けて処理する事ができる。
【実施例3】
【0119】
さて、これまで本発明の実施例について説明したが、本発明は上述した実施例以外にも、種々の異なる形態にて実施されてよいものである。そこで、以下に異なる実施例を説明する。
【0120】
(サーバへの適用例)
上述した実施例では、アプリケーションサーバが実行したトランザクションと、アプリケーションサーバとDBサーバとの間で発生したメッセージとを関連付ける例を説明したが、これに限定されるものではない。例えば、DBサーバのように、アプリケーションサーバからトランザクションから実行された場合に、トランザクションの一部であるものの、リクエスト等とは関係のないメッセージを発生させるサーバについても同様に適用できる。
【0121】
(信頼度)
例えば、紐付けサーバは、学習結果の信頼度を高める手法として、アプリケーションサーバとDBサーバとのコネクション内で1つのトランザクションが実行された場合のキャプチャメッセージ及びログメッセージから学習するようにしてもよい。この場合、複数のトランザクションが実行されている場合に比べて、トランザクションとキャプチャメッセージとの関連度が強い。このため、紐付けサーバは、関連度の強い情報から学習することができるので、学習結果の信頼度を高めることができる。また、学習するタイミングは、任意のタイミングで実行でき、また、アプリログメッセージが所定値以上たまった場合に実行してもよい。
【0122】
(システム)
また、本実施例において説明した各処理のうち、自動的におこなわれるものとして説明した処理の全部または一部を手動的におこなうこともできる。あるいは、手動的におこなわれるものとして説明した処理の全部または一部を公知の方法で自動的におこなうこともできる。この他、上記文書中や図面中で示した処理手順、制御手順、具体的名称、例えば図3〜図5、図7〜図13等に示した各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。
【0123】
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られない。つまり、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。さらに、各装置にて行なわれる各処理機能は、その全部または任意の一部が、CPUおよび当該CPUにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。
【0124】
例えば、紐付けサーバ20が、アプリケーションサーバ10のID生成部17bやID付加部17cを有していてもよい。また、アプリケーションサーバ10が、紐付けサーバ20の各制御部や各テーブルを有していてもよい。
【0125】
(プログラム)
ところで、上記の実施例で説明した各種の処理は、あらかじめ用意されたプログラムをパーソナルコンピュータやワークステーションなどのコンピュータシステムで実行することによって実現することができる。そこで、以下では、上記の実施例と同様の機能を有するプログラムを実行するコンピュータシステムの一例を説明する。
【0126】
図19は、メッセージ切分けプログラムを実行するコンピュータのハードウェア構成例を示す図である。図19に示すように、コンピュータシステム100は、バス101に、CPU102、入力装置103、出力装置104、通信インタフェース105、HDD(Hard Disk Drive)106、RAM(Random Access Memory)107が接続される。
【0127】
入力装置103は、マウスやキーボードであり、出力装置104は、ディスプレイなどであり、通信インタフェース105は、NIC(Network Interface Card)などのインタフェースである。HDD106は、メッセージ切分けプログラム106aととともに、図6等に示した各テーブル等に記憶される情報を記憶する。記録媒体の例としてHDD106を例に挙げたが、ROM(Read Only Memory)、RAM(Random Access Memory)、CD−ROM等の他のコンピュータ読み取り可能な記録媒体に各種プログラムを格納しておき、コンピュータに読み取らせることとしてもよい。なお、記憶媒体を遠隔地に配置し、コンピュータが、その記憶媒体にアクセスすることでプログラムを取得して利用してもよい。また、その際、取得したプログラムをそのコンピュータ自身の記録媒体に格納して用いてもよい。
【0128】
CPU102は、メッセージ切分けプログラム106aを読み出してRAM107に展開することで、図6等で説明した各機能を実行するメッセージ切分けプロセス107aを動作させる。すなわち、メッセージ切分けプロセス107aは、図6に記載した情報取得部30a、情報生成部30b、学習部31、分類部32、結果処理部33と同様の機能を実行する。このようにコンピュータシステム100は、プログラムを読み出して実行することでメッセージ切分け方法を実行する情報処理装置として動作する。
【符号の説明】
【0129】
10 アプリケーションサーバ
11 通信部
12 アプリテーブル
13 ID情報テーブル
14 ロギング対象テーブル
15 DB命令置換対象テーブル
16 ログテーブル
17 制御部
17a アプリ実行部
17b ID生成部
17c ID付加部
20 紐付けサーバ
21 通信部
22 アプリログテーブル
23 DBキャプチャテーブル
24 アプリメソッド分類テーブル
25 DB分類テーブル
26 トランザクションIDテーブル
27 学習テーブル
28 メッセージ分類テーブル
30 制御部
30a 情報取得部
30b 情報生成部
31 学習部
31a 特定部
31b 抽出部
31c 格納制御部
32 分類部
33 結果処理部

【特許請求の範囲】
【請求項1】
トランザクションを識別するトランザクション識別子を有するメッセージの出現パターンを記憶する第1記憶部と、
第1のサーバによって前記トランザクション識別子を有するトランザクションが第2のサーバに実行され、前記第1のサーバと前記第2のサーバとの間で発生したメッセージを記憶する第2記憶部と、
前記第1記憶部に記憶されるメッセージの出現パターンに基づいて、前記第2記憶部に記憶されているメッセージを前記トランザクションごとに分類する分類部と
を有することを特徴とする情報処理装置。
【請求項2】
前記トランザクション識別子ごとに、前記第1のサーバが前記トランザクションを実行した際に発生させたメッセージを記憶する第3記憶部と、
前記第3記憶部に記憶されるメッセージから、前記第1のサーバが前記第2のサーバにリクエストを発行した時刻である開始時刻と、当該リクエストに対するレスポンスを受信した時刻である終了時刻とを特定する特定部と、
前記第2記憶部に記憶されるメッセージから、前記特定部によって特定された開始時刻から終了時刻までに送受信されたメッセージを抽出する抽出部と、
前記抽出部によって抽出されたメッセージから、前記トランザクション識別子を有するメッセージの出現パターンを特定して前記第1記憶部に格納する格納制御部と
をさらに有することを特徴とする請求項1に記載の情報処理装置。
【請求項3】
前記抽出部は、前記第2記憶部が記憶するメッセージのうち、前記第1のサーバと前記第2のサーバとのコネクション内で1つのリクエストが処理された場合のメッセージから、前記開始時刻と前記終了時刻とを抽出することを特徴とする請求項2に記載の情報処理装置。
【請求項4】
コンピュータ実行する制御方法であって、
トランザクションを識別するトランザクション識別子を有するメッセージの出現パターンを第1記憶部に格納しと、
第1のサーバによって前記トランザクション識別子を有するトランザクションが第2のサーバに実行され、前記第1のサーバと前記第2のサーバとの間で発生したメッセージを第2記憶部に格納し、
前記第1記憶部に記憶されるメッセージの出現パターンに基づいて、前記第2記憶部に記憶されているメッセージを前記トランザクションごとに分類する
こと含んだことを特徴とするメッセージ切分け方法。
【請求項5】
コンピュータに、
トランザクションを識別するトランザクション識別子を有するメッセージの出現パターンを第1記憶部に格納し、
第1のサーバによって前記トランザクション識別子を有するトランザクションが第2のサーバに実行され、前記第1のサーバと前記第2のサーバとの間で発生したメッセージを第2記憶部に格納し、
前記第1記憶部に記憶されるメッセージの出現パターンに基づいて、前記第2記憶部に記憶されているメッセージを前記トランザクションごとに分類する
処理を実行させることを特徴とするメッセージ切分けプログラム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図15】
image rotate

【図16】
image rotate

【図17】
image rotate

【図18】
image rotate

【図19】
image rotate


【公開番号】特開2012−194604(P2012−194604A)
【公開日】平成24年10月11日(2012.10.11)
【国際特許分類】
【出願番号】特願2011−55967(P2011−55967)
【出願日】平成23年3月14日(2011.3.14)
【出願人】(000005223)富士通株式会社 (25,993)
【Fターム(参考)】