以下、本実施の形態について図面を参照して説明する。
〔第1の実施の形態〕
図1は、第1の実施の形態のシステム構成を示すブロック図である。第1の実施の形態では、複数のサーバ2〜4による多階層システムで発生した処理を、系列生成装置1で分析する。多階層システムは、例えば、ウェブ3階層システムである。図1の例では、サーバ2からのリクエストメッセージに応じてサーバ3が処理を実行する。またサーバ3からのリクエストメッセージに応じてサーバ4が処理を実行する。サーバ2とサーバ3との間は、複数のセッションで接続されいずれかのセッションを介してサーバ2とサーバ3との間でメッセージが受け渡される。同様に、サーバ3とサーバ4との間は、複数のセッションで接続されいずれかのセッションを介してサーバ3とサーバ4との間でメッセージが受け渡される。
系列生成装置1は、サーバ2〜4間で受け渡されるメッセージを監視し、サーバ3,4で実行された処理を解析する。系列生成装置1は、解析した処理と予め登録されたトランザクションのモデルとを照合し、サーバ2〜4によって実行された処理の呼び出し関係を判断する。すなわち、サーバ3で実行されたどの処理が、サーバ4で実行されたどの処理を呼び出したのかを判断する。系列生成装置1は、処理とモデルとの照合の前処理として、サーバ4で実行された処理の系列化を行う。ここで、系列生成装置1の機能を説明する前に、処理の系列化について説明する。
サーバ3で実行される処理が、サーバ4に対して連続して複数回のリクエストメッセージを送信する場合がある。その場合、探索の効率化のために連続した複数個の処理をひとまとまりの処理と考え、時系列の処理を複数のまとまりに分割することができる。このように時系列の複数の処理を複数のまとまりに分割することを系列化と呼び、得られた処理のまとまり(処理列)を系列と呼ぶ。
系列化により生成された系列を1つの処理をみなして、その系列の呼び出し元となるサーバ3の処理を探索することで、判断対象となるサーバ3での処理の数が少なくなる。すなわち、生成された系列は、複数の処理の集合であり、系列全体の処理に要する時間が個々の処理より長くなる。すると、系列の処理時間を包含する処理時間を有する呼び出し元の処理は少なくなる。
図2は、系列化による呼び出し関係の探索範囲の変化を示す図である。図2の例では、サーバ3がアプリケーションサーバであり、サーバ4がデータベースサーバである場合を想定している。アプリケーションサーバでは、2つの処理21,22が実行されている。またデータベースサーバでは、4つの処理31〜34が実行されている。
図2では、呼び出し関係が存在し得る処理を矢印で示している。なお呼び出し関係が存在し得る場合とは、少なくとも「ある処理から呼び出された処理の開始時刻は、呼び出し元の処理開始時刻以降で、且つ終了時刻は呼び出し元の処理終了時刻以前である。」という制約条件を満たす場合である。
系列化前の状態では、アプリケーションサーバの処理21から呼び出された可能性があるのはデータベースサーバの処理31〜33である。また、アプリケーションサーバの処理22から呼び出された可能性があるのはデータベースサーバの処理32〜34である。すると、処理32と処理33については、アプリケーションサーバにおけるいずれの処理から呼び出されたのかを一意に特定することができない。この場合、各処理の呼び出し関係を定義したモデルと照合し、適切な呼び出し関係を判断することとなる。
ここで系列化が行われた場合、同一の処理から呼び出された可能性が高い処理列が1つの系列にまとめられる。図2の例では、処理31〜33が1つの系列41にまとめられている。また処理34は、1つの処理で1つの系列42を構成する。
このような系列化が行われた場合、系列41を呼び出し得るのは処理21のみとなる。すなわち、系列化前には処理21,22のいずれからでも呼び出し関係が存在し得た処理32,33について、系列化によって処理22との間の呼び出し関係が存在し得ないことが判明する。このように、呼び出し関係が存在し得ないことが判明した処理間については、モデルとの適合性の判別処理が不要となり、呼び出し元の処理の探索負荷が軽減されることとなる。
ここで、系列化処理としては、例えば以下のような処理が考えられる。
〔第1の手法〕処理間の時間間隔を使う方法
〔第2の手法〕系列の開始終了パターンを使う方法
第1の手法は、ある処理に関わる一連の処理では、処理間の時間が短く、一連の処理が終わって次の処理を開始するときには処理間の時間が長いことを利用したものである。この場合、適切な閾値を求め、その閾値より時間間隔が開いた処理間を系列の境界とする。そして、その境界で分離することで得られる個々の処理列を系列とする。
第2の手法は、処理の途中は分からないまでも、一連の処理の最初や最後に必ず現れる処理種別がある場合に利用される。一連の処理の最初と最後に現れるべき処理種別が出現した場合には、最初の処理種別から最後の処理種別までの処理列を1つの系列とする。
このような2つの系列化の手法のうち第1の手法は、適切な閾値の設定が困難である。例えば、閾値が大きすぎると、実際には一連の処理ではない処理までも包含した系列が生成される可能性がある。その場合、モデルとの適合性の判別において、正しい判断を行うことができなくなってしまう。逆に閾値が小さすぎると、ほとんどの処理が個別の系列となってしまい、呼び出し先のイベントを系列化することによるモデルとの照合処理の効率化の効果が薄れてしまう。
閾値については、例えば、モデル生成時の処理の時間間隔を参考に閾値を決定することができる。ただし、負荷の状況などの影響により、モデルを得たときと実際にモデルと各処理とを照合するときとで、一連の処理の前後の時間間隔が違う場合がある。このような場合には、モデル生成時の処理の時間間隔を参考に閾値を決定しても、適切な系列を生成できない。
また第2の手法は、最初や最後に必ず現れる処理種別がない場合には全く対応できない。
このように、第1・第2の手法では、適切な系列化を行うことができない場合がある。そこで、第1の実施の形態では、予め作成されている呼び出し関係のモデルと、ネットワークの監視によって得られた処理とを照合することで、適切な系列化を行う。
以下、図1の説明に戻り、モデルを用いた系列化機能について詳細に説明する。系列生成装置1は、モデル記憶手段1a、処理判別手段1b、系列化手段1c、系列記憶手段1d、呼び出し候補判定手段1e、および呼び出し候補記憶手段1fを有している。
モデル記憶手段1aは、処理間の呼び出し関係を定義したモデル5a,5bを記憶する。例えば、モデル5aは、処理種別「A」の処理の処理から、処理種別「a」の処理、処理種別「b」の処理、処理種別「c」の処理が順に呼び出されることを示している。同様にモデル5bは、処理種別「B」の処理から、処理種別「b」の処理、処理種別「c」の処理、処理種別「d」の処理が順に呼び出されることを示している。
処理判別手段1bは、第1の装置と第2の装置が通信したメッセージに基づいて、第1の装置と第2の装置とのそれぞれで実行された処理を判別する。図1の例では、サーバ3を第1の装置、サーバ4を第2の装置として、サーバ3,4それぞれで実行された処理が判別される。例えば、処理判別手段1bは、サーバ2〜4間でネットワークを介して受け渡されるメッセージを監視する。図1の例では、サーバ2とサーバ3との間に張られた複数のセッションから、4つのメッセージ8a,8b,8c,8dが検出されている。メッセージ8aは、処理種別「A」の処理の実行を要求するリクエストメッセージである。メッセージ8bは、処理種別「B」の処理の実行を要求するリクエストメッセージである。メッセージ8cは、処理種別「A」の処理の実行終了を示すレスポンスメッセージである。メッセージ8dは、処理種別「B」の処理の実行終了を示すレスポンスメッセージである。これらのメッセージにより、サーバ3において、処理種別「A」と処理種別「B」との2つの処理3a,3bが実行されたことが判別できる。
各処理の実行に際し、サーバ4への処理要求が発生する場合がある。その場合、サーバ3とサーバ4との間に張られた複数のセッションのいずれかを介してリクエストメッセージが送信される。処理判別手段1bは、すべてのセッションを監視することができる。図1には、サーバ3とサーバ4との複数のセッションのうちの1つのセッション9の監視により取得された8個のメッセージ9a,9b,9c,9d,9e,9f,9g,9hが例示されている。
メッセージ9aは、処理種別「a」の処理の実行を要求するリクエストメッセージである。メッセージ9bは、処理種別「a」の処理の実行終了を示すレスポンスメッセージである。メッセージ9cは、処理種別「b」の処理の実行を要求するリクエストメッセージである。メッセージ9dは、処理種別「b」の処理の実行終了を示すレスポンスメッセージである。メッセージ9eは、処理種別「c」の処理の実行を要求するリクエストメッセージである。メッセージ9fは、処理種別「c」の処理の実行終了を示すレスポンスメッセージである。メッセージ9gは、処理種別「d」の処理の実行を要求するリクエストメッセージである。メッセージ9hは、処理種別「d」の処理の実行終了を示すレスポンスメッセージである。これらのメッセージにより、サーバ4において、処理種別「a」、処理種別「b」、処理種別「c」、および処理種別「d」の4つの処理4a,4b,4c,4dが実行されたことが判別できる。
なお、図1に示す各メッセージは、取得時刻が早い順に下から並べられている。
系列化手段1cは、モデル記憶手段1aに記憶されたモデル5a,5bを参照しながら、処理判別手段1bから渡されたメッセージで認識される処理列の系列化を行う。具体的には、系列化手段1cは、第1の装置で実行された処理の実行時間内に第2の装置で実行された処理の配列を、呼び出し可能処理列とする。そして系列化手段1cは、呼び出し可能処理列から、第1の装置で実行された処理を呼び出し元とするモデルにおいて呼び出し先として定義された処理列に少なくとも部分一致する処理列を含み、呼び出し先となり得ない処理を除外した系列を生成する。図1の例では、サーバ3を第1の装置、サーバ4を第2の装置として、系列を生成している。
また、系列化手段1cは、複数の呼び出し元の処理から呼び出し可能な処理の配列については、複数の呼び出し元それぞれに適用される各モデルにおける呼び出し先の処理列の重複部分と一致する処理列を、系列とすることができる。例えば、系列化手段1cは、第1の装置で実行された第1の処理を呼び出し元とする第1のモデルにおいて呼び出し先として定義された処理列に少なくとも部分一致する処理列を、第1の適合処理列とする。また、系列化手段1cは、第1の装置で実行された第2の処理を呼び出し元とする第2のモデルにおいて呼び出し先として定義された処理列に少なくとも部分一致する処理列を、第2の適合処理列とする。系列化手段1cは、第1の適合処理列と第2の適合処理列とが一部重複する場合、少なくとも重複する処理列を含み、第1のモデルと第2のモデルのいずれかにおいて呼び出し先となり得ない処理を除外した系列を生成する。これにより、生成された系列は、第1のモデルと第2のモデルとのいずれに対しても適合させることができる。
以上のような構成の系列生成装置1により、処理の系列化が行われる。以下、系列化処理について、より詳細に説明する。なお以下の説明では、呼び出し元となる処理を「親」、呼び出し先となる処理を「子」と呼ぶこととする。また、呼び出し先となる処理のうち、モデルとの照合対象とする処理を「非除外要素」、照合対象としない処理を「除外要素」とする。非除外要素は、例えば、モデルにおいて呼び出し先として設定されている場合にのみ、そのモデルに適合するトランザクションにおいて呼び出される処理である。他方、除外要素は、例えば、モデルにおいて呼び出し先として設定されていなくても、そのモデルに適合するトランザクションにおいて呼び出される場合がある処理である。図1の例に示すサーバ4で実行されている処理4a,4b,4c,4dは、モデル5a,5bのいずれかに含まれた処理種別であり、非除外要素である。
系列化手段1cは、サーバ3へのリクエストメッセージを取得すると、そのリクエストメッセージに応じて実行される処理を親とし、親が適用されるモデルを参照する。例えば、メッセージ8aを取得した場合、モデル5aが参照される。また、メッセージ8bを取得した場合、モデル5bが参照される。
系列化手段1cは、親のリクエストメッセージを取得後、親から子へのメッセージの通信に使用されるセッションごとに、系列に属する処理列を登録するリストを作成する。系列化手段1cは、セッションごとに設けられたリストに対して、該当するセッションの監視により認識され、かつ参照しているモデルに適合する処理を系列に加えていく。その後、系列化手段1cは、例えば、取得した親のリクエストメッセージに対するレスポンスメッセージを検出すると、モデルに最後に適合した非除外要素より後の時点を境界として処理列を分割する。また系列化手段1cは、モデルに適合しない非除外要素が検出されると、モデルに最後に適合した非除外要素より後で、モデルに適合しない非除外要素より前の時点を境界として、処理列を分割することもできる。分割の境界を決定した場合、系列化手段1cは、境界より前の処理列を1つの系列とする。
図1の例では、メッセージ8a,8bの取得により、系列に属する処理列のリストがセッションごとに作成される。リストは、初期状態では空集合となっている。また、2つのリクエストメッセージ8a,8bの取得により、2つのモデル5a,5bが参照される。その後、セッション9を介して受け渡されたメッセージに基づいて、サーバ4で処理種別「a」、「b」、「c」、「d」の各処理4a,4b,4c,4dが順に実行されたことが、系列化手段1cで認識される。この場合、処理種別「b」の処理4bと処理種別「c」の処理4cとについては、1つの系列にまとめてしまっても、処理種別「A」の処理3aと処理種別「B」の処理3bとのいずれに対しても、子となり得る。そこで系列化手段1cは、処理種別「b」の処理4bと処理種別「c」の処理4cとを1つの系列(系列β)とすることを示す系列情報6bを生成する。系列情報6bには、処理4bを示す処理情報と処理4cを示す処理情報とが含まれる。
一方、処理種別「a」の処理4aについては、系列情報6bに示される系列と同一系列にした場合、モデル5bに適合しなくなる。すると、処理4a,4b,4cを同一系列にすると、その系列は、処理種別「A」の処理3aの子とはなり得るが、処理種別「B」の処理3bの子とはなり得なくなる。すなわち、処理4b,4cまでも、処理3bの子となり得なくなってしまう。そこで、系列化手段1cは、処理種別「a」の処理4aと処理種別「b」の処理4bとの間を境界として処理列を分割し、処理種別「a」の処理4aを1つの系列(系列α)とする系列情報6aを生成する。系列情報6aには、処理4aを示す処理情報が含まれる。
処理種別「d」の処理4dについては、系列情報6bに示される系列と同一系列にした場合、モデル5aに適合しなくなる。すると、処理4b,4c,4dを同一系列にすると、その系列は、処理種別「B」の処理3bの子とはなり得るが、処理種別「A」の処理3aの子とはなり得なくなる。すなわち、処理4b,4cまでも、処理3aの子となり得なくなってしまう。そこで、系列化手段1cは、処理種別「c」の処理4cと処理種別「d」の処理4dとの間を境界として処理列を分割し、処理種別「d」の処理4dを1つの系列(系列γ)とする系列情報6cを生成する。系列情報6cには、処理4dを示す処理情報が含まれる。
なお、図1にはセッション9を介して通信されるメッセージに基づいて実行される処理の系列化の例を示しているが、サーバ3とサーバ4との間の他のセッションを介して通信されるメッセージに基づいて実行される処理についても、系列化が行われる。
呼び出し候補判定手段1eは、系列化手段1cで生成された系列情報6a,6b,6cに基づいて、呼び出し関係が存在する可能性がある呼び出し元処理と系列との関係を示す呼び出し候補情報を生成する。呼び出し関係が存在する可能性は、モデル記憶手段1aに格納されたモデル5a,5bに基づいて判断される。すなわち、呼び出し元の処理に適用されるモデルにおいて、系列情報で示される系列の呼び出しが存在すれば、当該呼び出し元の処理と当該系列との呼び出し関係が存在する可能性がある。
例えば、処理種別「A」の処理3aからは、系列情報6a,6bで示される系列(「系列α」、「系列β」)を呼び出している可能性がある。そこで、呼び出し候補判定手段1eは、処理種別「A」の処理3aと系列情報6a,6bそれぞれとの関係を呼び出し候補とする呼び出し候補情報7aを生成する。同様に、呼び出し候補判定手段1eは、処理種別「B」の処理3bと系列情報6b,6cそれぞれとの関係を呼び出し候補(親子候補)とする呼び出し候補情報7bを生成する。生成された呼び出し候補情報7a,7bは、呼び出し候補記憶手段1fに格納される。
このように、第1の実施の形態では、呼び出し可能処理列が系列化される。生成された系列に含まれる処理は、同じ処理から呼び出されるものとすることで、各系列を呼び出し可能な呼び出し元の処理が絞り込まれる。すなわち、系列化したことにより、系列の最初の処理の開始時刻よりも先に開始され、系列の最後の処理の終了時刻よりも後に終了する処理のみが、系列を呼び出し可能となる。その結果、呼び出し元の選択肢が減り、正しい呼び出し関係(現実にサーバ2とサーバ3間で行われた処理の呼び出し)の解析負荷が軽減される。
しかも、第1の実施の形態では、モデル5a,5bを参照しながら系列化が行われ、参照対象のモデルに含まれる処理列となるか否かで系列の境界を決定される。その結果、余分な処理が系列に含まれずにすむ。すなわち、モデルの呼び出し先として定義されている系列から逸脱しない範囲での系列が生成される。モデルの系列から逸脱しないことで、モデル全体と一致する処理の組み合わせを検出する際に、各系列をモデルに適合する呼び出し先候補として取り扱うことができる。これにより、系列化を行ったことによる処理の呼び出し関係の分析精度の低下が抑止される。
また、系列化と同時に呼び出し関係の候補の列挙が可能である。呼び出し関係の候補を列挙しておけば、各サーバ2〜4で実行された処理とモデル全体とを照合する際に、サーバ3とサーバ4との間の呼び出し関係については、呼び出し関係の候補の中から、モデル全体に合致する呼び出し関係の組み合わせを見つけ出せばよい。すなわち、モデル全体との照合の処理負荷が軽減される。
例えばモデルで呼び出し先とされる非除外要素のリストが[a,b,c]となっている場合を考える。括弧内の英文字は呼び出し先となる非除外要素の処理種別であり、左の非除外要素から順に呼び出されることを示している。この場合、ネットワークから取得したメッセージに基づいて、非除外要素のリストが[a,b,c,a]となる系列を作ってしまうと、モデル全体に合致しなくなってしまう。ただし、[a,b]のようにモデルの呼び出し先のリストより短い場合には、[c]という系列と組み合わせれば、モデルと照合するときに[a,b]と[c]とを並べてモデル全体に合致させることが可能である。従って、[a,b,c,a]のようにモデルに出現する系列に余分な要素がついてしまうのは不適切である。モデル全体と照合するときに、この系列化された非除外要素のリストを分割することも可能ではあるが、計算量の削減という系列化の目的を阻害してしまう。また、系列化でなるべく短めの系列を作るとすると、モデルとの照合時の問題は解消するものの、計算量の削減に貢献できない。従って、モデルに適合させることが可能な形で、できるだけ長い系列を作成するのが適切である。
第1の実施の形態では、モデルを参照し、各モデルに部分的に合致する範囲で、1つの系列に、連続する処理列が含められる。これにより、モデル全体に合致する呼び出し関係を探索する際の処理量を軽減できる。また、モデルに合致しない処理列を包含する系列を作成しないようにすることにより、モデルとの照合時に、正確な呼び出し関係の探索が可能となる。
ところで、図1に示した例では、系列化処理を分かりやすくするため、サーバ4で実行された処理のうち非除外要素のみを示している。しかし、非除外要素の間に、1以上の除外要素が挟まることがある。系列化のために複数の系列に分割する場合、系列の境界は、非除外要素を基準に判断される。その際、非除外要素の前後に1以上の除外要素があれば、処理列を分割する際の境界として選択可能な位置が、複数存在することとなる。そこで系列化手段1cは、所定の基準に基づいて、境界となる位置を決定する。以下、非除外要素と除外要素とが混在する場合を想定し、処理列の系列化の例について説明する。
まず、系列化の第1の例について、図3、図4を参照して説明する。
図3は、第1の実施の形態における系列化の第1の例の前半を示す図である。図3の例では、サーバ3の処理からサーバ4の処理を呼び出す場合の呼び出し関係のモデルとして、処理種別「I1」の処理に適用するモデル51と、処理種別「I2」の処理に適用するモデル52とが予め定義されているものとする。処理種別「I1」の処理に適用するモデル51には、処理種別「R1」の処理を呼び出すことが定義されている。また処理種別「I2」の処理に適用するモデル52には、処理種別「R1」と「R2」との処理を順に呼び出すことが定義されている。
なお各モデル51,52では、モデルに定義されていない除外要素の呼び出しが行われることを許容している。他方、各モデル51,52では、モデルに定義されていない非除外要素の呼び出しが行われることを許容しない。
図3には、各処理の実行時間を線で示している。線の左端が処理の開始時刻を示し、右端が終了時刻を示す。処理を示す線の上側左端には、その処理の処理種別が示されている。処理種別「φ」は、除外要素であることを示している。レスポンスメッセージが検出された処理については、その処理を示す線の上側右端に「res」と表記されている。また、横方向に並べられた処理は、同一セッションでメッセージの通信が行われた処理である。
〔第1の状態〕まずサーバ3において、処理種別「I1」の処理61と処理種別「I2」の処理62との実行が開始されている。すると、系列化手段1cにより、モデル51,52とその後のサーバ4で実行される処理との比較が開始される。
〔第2の状態〕サーバ4において、除外要素「φ」の処理71が実行されている。処理71は除外要素であるため、サーバ3で実行されている処理61,62のいずれからの呼び出しであっても、モデル51,52に適合する。そこで、系列化手段1cは、処理71に対して、処理61,62を親候補として仮設定する。
〔第3の状態〕サーバ4において、処理71に続けて、順に処理種別「R1」の処理72、除外要素の処理73、処理種別「R2」の処理74が実行されている。処理種別「R1」は、モデル51,52の双方において最初の呼び出し先の処理の処理種別として定義されている。また、処理73は除外要素である。そのため、処理71、処理72、処理73の処理列はモデル51,52に適合する。他方、処理74は処理種別「R2」であり、処理71、処理72、処理73、処理74の処理列はモデル51に適合しない。すなわち、処理74は、処理61の子になり得ない。そこで、系列化手段1cは、処理列を分割する。
図4は、第1の実施の形態における系列化の第1の例の後半を示す図である。
〔第4の状態〕系列化手段1cは処理列を分割し、モデル51に適合しない処理74を含まない処理列を1つの系列81とする。系列化手段1cは、モデル51,52に適合すると判定された非除外要素(処理72)については、系列81に含める。そのため系列化手段1cは、処理72と処理74との間のいずれかの箇所を境界として処理列を分割する。なお、境界は、処理71〜74が実行されていない箇所に設定される。
図4の例では、処理72と処理73との間、または処理73と処理74との間のいずれかを境界とすることができる。境界の決定については、例えば処理間の時間間隔が最大の箇所を境界とする。図4の例では、処理73と処理74との間が境界に決定され、処理列が分割されている。そして、分割された処理列のうち境界より前に位置する処理列がまとめられ、1つの系列81が生成されている。
生成された系列81は、モデル51に適合している。そこで呼び出し候補判定手段1eは、モデル51が適用される処理61と系列81との間の関係を、親子候補として設定する。
〔第5の状態〕サーバ4では、処理74に続けて除外要素の処理75が実行され、その後、サーバ3において処理61,62が終了している。
〔第6の状態〕処理62が終了したことで、系列化手段1cにより、処理74と処理75との処理列がまとめられ系列82が生成される。この場合、系列81と系列82との組み合わせは、処理62に適用されるモデル52に適合している。そこで呼び出し候補判定手段1eは、系列81と処理62との間の関係、および系列82と処理62との間の関係を親子候補として設定する。
このようにして、処理71〜75の系列化と、系列化により生成された系列81,82を用いた親子候補の設定が完了する。
次に、系列化の第2の例について、図5を参照して説明する。第2の例は、参照されているモデルに現れない非除外要素が検出された場合の系列化である。
図5は、第1の実施の形態における系列化の第2の例を示す図である。図5の例では、図3、図4と同様のモデル51,52が定義されているもとする。図5の第1の状態、第2の状態については、図3に示した第1の状態、第2の状態と同じである。
〔第3の状態〕サーバ4において、処理71に続けて、順に処理種別「R1]の処理72、除外要素の処理73、処理種別「R3」の処理76が実行されている。処理種別「R1」は、モデル51,52の双方において最初の呼び出し先の処理の処理種別として定義されている。また、処理73は除外要素である。そのため、処理71、処理72、処理73の処理列はモデル51,52に適合する。他方、処理76は処理種別「R3」であり、処理71、処理72、処理73、処理76の処理列はモデル51,52に適合しない。すなわち、処理76は、処理61,62のいずれの子ともなり得ない。そこで、系列化手段1cは、処理列を分割する。
〔第4の状態〕系列化手段1cは処理列を分割し、モデル51,52に適合しない処理76を含まない処理列を1つの系列83とする。系列化手段1cは、モデル51,52に適合すると判定された非除外要素(処理72)については、系列83に含める。そのため系列化手段1cは、処理72と処理76との間のいずれかの箇所を境界として処理列を分割する。境界の決定については、例えば処理間の時間間隔が最大の箇所を境界とする。図5の例では、処理73と処理76との間が境界に決定され、処理列が分割されている。そして、分割された処理列のうち境界より前に位置する処理列がまとめられ、1つの系列83が生成されている。
生成された系列83は、モデル51に適合している。そこで呼び出し候補判定手段1eは、モデル51が適用される処理61と系列83との間の関係を、親子候補として設定する。
このようにして、参照しているモデル51,52に合致しない非除外要素を検出した場合においても、適切な系列化を行うことができる。
ところで、図3〜図5に示した系列化の例では、処理71以前にサーバ4で実行された処理がないため、系列81,83内の処理列は、処理71が先頭となっている。処理71より前にも除外要素となる複数の除外要素が存在する場合もある。この場合、系列化手段1cは、例えば、モデル51,52に適合する処理72より前にある処理I1または処理I2から呼び出し可能な複数の除外要素から処理72までの間で、処理間の時間間隔が最大の箇所を境界とする。そして系列化手段1cは、境界となる位置の次にある処理を先頭とする系列を作成する。
〔第2の実施の形態〕
次に第2の実施の形態について説明する。第2の実施の形態は、ウェブ3階層システムにおけるトランザクションの解析において、処理の系列化を行うものである。なお以下の説明では、各サーバで実行される処理単位をイベントと呼ぶこととする。
図6は、本実施の形態のシステム構成例を示す図である。図6に示すように、ネットワーク210には複数のクライアント221〜223が接続されている。また、ネットワーク210にはルータ231が接続されている。図中、ルータ231およびルータ231より右側の各装置によって、サービス提供側のネットワークシステムが構成されている。サービス提供側のネットワークシステムは、Webサーバ241、アプリケーションサーバ242、およびデータベース(DB)サーバ244による3階層構造となっている。
ルータ231にはスイッチ232を介してWebサーバ241が接続されている。Webサーバ241は、クライアント221〜223に対してWWW(World Wide Web )による情報提供を行う。Webサーバ241には、スイッチ233を介してアプリケーションサーバ242が接続されている。アプリケーションサーバ242は、Webサーバ241からの要求に応じてデータ処理を実行する。アプリケーションサーバ242には、スイッチ234を介してDBサーバ244が接続されている。DBサーバ244は、アプリケーションサーバ242からの要求に応じてデータベースへのデータの入出力を行う。
なお第2の実施の形態では、アプリケーションサーバ242とDBサーバ244との間には、複数のセッションが予め設定されているものとする。アプリケーションサーバ242がDBサーバ244に処理を要求する場合、いずれかのセッションを介してリクエストメッセージが送信される。また、第2の実施の形態に示す例では、アプリケーションサーバ242が実行する1つのイベントから複数回のDBアクセスが発生するとき、そのイベントはDBアクセスが完了するまで、1つのセッションを占有する。すなわち、アプリケーションサーバ242で実行される1つのイベントに基づいて送信される複数のリクエストメッセージは、1つのセッション上で連続して送信される。
各スイッチ232〜234は、ポートモニタリング機能を有している。ポートモニタリング機能とは、スイッチ232〜234のポートを介して送受信されるパケットのコピーを、予め指定したポートへ送出する機能である。各スイッチ232〜234のコピーされたパケットを送出するポートには、スイッチ235を介して分析装置100が接続されている。
分析装置100は、サービス提供側のネットワーク内で送受信されるパケットの内容を解析し、複数のサーバで処理されるトランザクションを検出する。そして、分析装置100は、検出したトランザクションを実行するのに各サーバが要した時間を分析する。
図7は、本実施の形態に用いる分析装置のハードウェア構成例を示す図である。分析装置100は、CPU(Central Processing Unit)101によって装置全体が制御されている。CPU101には、バス108を介してRAM(Random Access Memory)102、ハードディスクドライブ(HDD:Hard Disk Drive)103、グラフィック処理装置104、入力インタフェース105、光学ドライブ106、および通信インタフェース107が接続されている。
RAM102は、分析装置100の主記憶装置として使用される。RAM102には、CPU101に実行させるOS(Operating System)のプログラムやアプリケーションプログラムの少なくとも一部が一時的に格納される。また、RAM102には、CPU101による処理に必要な各種データが格納される。
HDD103は、内蔵したディスクに対して磁気的にデータの書き込みおよび読み出しを行う。HDD103は、分析装置100の二次記憶装置として使用される。HDD103には、OSのプログラム、アプリケーションプログラム、および各種データが格納される。なお、二次記憶装置としては、フラッシュメモリなどの半導体記憶装置を使用することもできる。
グラフィック処理装置104には、モニタ11が接続されている。グラフィック処理装置104は、CPU101からの命令に従って、画像をモニタ11の画面に表示させる。モニタ11としては、CRT(Cathode Ray Tube)を用いた表示装置や液晶表示装置などがある。
入力インタフェース105には、キーボード12とマウス13とが接続されている。入力インタフェース105は、キーボード12やマウス13から送られてくる信号をCPU101に送信する。なお、マウス13は、ポインティングデバイスの一例であり、他のポインティングデバイスを使用することもできる。他のポインティングデバイスとしては、タッチパネル、タブレット、タッチパッド、トラックボールなどがある。
光学ドライブ106は、レーザ光などを利用して、光ディスク14に記録されたデータの読み取りを行う。光ディスク14は、光の反射によって読み取り可能なようにデータが記録された可搬型の記録媒体である。光ディスク14には、DVD(Digital Versatile Disc)、DVD−RAM、CD−ROM(Compact Disc Read Only Memory)、CD−R(Recordable)/RW(ReWritable)などがある。
通信インタフェース107は、スイッチ235に接続されている。通信インタフェース107は、スイッチ235を介して、ルータ231、Webサーバ241、アプリケーションサーバ242、およびDBサーバ244間で送受信されるパケットを取得(キャプチャ)する。
以上のようなハードウェア構成によって、本実施の形態の処理機能を実現することができる。なお、図7では分析装置100のハードウェア構成を示したが、クライアント221〜223、Webサーバ241、アプリケーションサーバ242、DBサーバ244も同様のハードウェア構成で実現することができる。
図8は、分析装置の機能を示すブロック図である。分析装置100は、ネットワーク監視部110、メッセージ記憶部120、モデル生成部130、モデル記憶部140、系列化部150、系列記憶部160、親子候補設定部170、親子候補記憶部180および分析部190を有している。
ネットワーク監視部110は、スイッチ235を介してパケットを取得し、そのパケットに基づいて各サーバ間で通信されたメッセージを解析する。例えばネットワーク監視部110は、取得したパケットの内容を解析し、1つ以上のパケットで構成されるメッセージを検出する。そして、ネットワーク監視部110は、検出したメッセージを示すメッセージデータをメッセージ記憶部120に格納する。
メッセージ記憶部120は、メッセージデータを記憶する。例えば、RAM102またはHDD103の記憶領域の一部がメッセージ記憶部120として使用される。
モデル生成部130は、メッセージ記憶部120に格納されたメッセージに基づいて、ウェブ3階層システムで実行されるトランザクションのモデルを作成する。この際、モデル生成部130は、DBサーバ244で実行されるイベントを、除外要素と非除外要素とに分ける。例えば、アプリケーションサーバ242で実行されるいずれかの種別のイベントから常に呼び出し対象とされる種別のDBサーバ244のイベントは、非除外要素とされる。他方、アプリケーションサーバ242で実行されるいずれの種別のイベントからも、任意に呼び出される種別のイベント(呼び出されない場合もある種別のイベント)については、除外要素とされる。モデル生成部130は、DBサーバ244のイベントについては、非除外要素のみをモデルの構成要素とする。
モデル生成部130でモデルを生成する場合、例えば、システムの運用を一時的に停止可能であれば、運用停止期間中にテスト用のトランザクションをシステムで実行させる。その際に取得されたメッセージからモデル生成部130がトランザクションのモデルを生成することで、実行させたトランザクションに対する正確なモデルを生成できる。また、システム運用中に取得したメッセージに基づいてモデルを生成する場合、例えば、モデル生成部130は、Webサーバ241で実行される複数のイベントのうち、他のイベントと時間的に重複しない期間に実行されたイベントを抽出する。そして、モデル生成部130は、抽出したWebサーバ241のイベントと、そのイベントの実行期間中に発生したアプリケーションサーバ242やDBサーバ244のイベントに関するメッセージを取得する。これにより、抽出したWebサーバ241のイベントを呼び出し元とするアプリケーションサーバ242のイベント、およびそのアプリケーションサーバ242のイベントを呼び出し元とするDBサーバ244のイベントが明確となる。そこで、モデル生成部130は、取得したメッセージに基づくイベント間の呼び出し関係によりモデルを作成する。生成されたモデルは、イベント間の呼び出し関係が木構造で表される。
ところで、1つのトランザクションにおいて、DBサーバ244で呼び出されるイベント数が非常に多いことがある。そのため取得したメッセージから判別したイベントがモデルに適合するどうかを、1つ1つのモデルと照合すると非常に時間がかかる。また、銀行口座の入出金照会のように個人や期間によって個数が違ったりアクセスがあったりなかったりするトランザクションがある。このようなDBサーバ244へのアクセス回数が異なるトランザクションであっても、アプリケーションサーバ242が受け付けたリクエストは同種の処理の場合がある。このようなアプリケーションサーバ242が受け付けた同種のリクエストに基づいて実行された複数のトランザクションは、モデルを用いたトランザクションの解析においても同一視することが可能である。そこで、モデル生成部130は、あるイベントについては個数が違うだけのトランザクションを同一視することを可能としたモデルを生成する。例えば、モデル生成部130は、同種のトランザクションを同一視することを可能なモデルを作成するため、連続した複数個のイベントを一連の処理と捉え、イベント列を分割する。そしてモデル生成部130は、その代表となるイベント(1個または複数個)をモデル生成に使用する。代表となるイベントとしては、同種のトランザクションにおいて共通に呼び出されているイベントである。ここで、イベント列を分割してできる個々のイベントリストが系列であり、この分割する処理が系列化である。
このようにして、同種の複数のトランザクションそれぞれのモデルを作成した場合にいずれのモデルにも含まれる共通のイベント間の呼び出し関係を定義したモデルが生成される。同種のトランザクションそれぞれのモデルの共通部分のみを残したモデルでは、そのモデルに定義されているすべてのイベントが呼び出されていることが、そのモデルに適合するトランザクションの条件となる。モデルに定義されていないイベントについては、基本的には存在しても存在しなくてもよい。ただし、第2の実施の形態においては、特定のトランザクションに固有のイベントは、他のトランザクションに含まれることはないものとする。そこで、本実施の形態では、いずれかのモデルに含まれるイベントを非除外要素とし、いずれのモデルにも含まれないイベントを除外要素として区別される。そして取得したメッセージから認識されたイベントとモデルとを照合する場合、モデルに含まれない非除外要素を含むトランザクションは、そのモデルに適合しないものとする。この場合、除外要素については、あってもなくてもよい。
モデル生成部130はモデルを生成すると、そのモデルをモデル記憶部140に格納する。
モデル記憶部140は、トランザクションに含まれるメッセージの組み合わせを示すモデルを記憶する。例えば、RAM102またはHDD103の記憶領域の一部がモデル記憶部140として使用される。なおモデルは、クライアントから出力される要求の種別ごとに設けられる。
系列化部150は、ネットワーク監視部110が取得したメッセージからイベントの開始と終了とを認識し、1つのセッションで発生したイベントの系列化を行う。本実施の形態では、DBサーバ244で実行されたイベントについての系列化を行うものとする。系列化を行う場合、系列化部150は、モデル記憶部140に格納されたモデルと系列とを随時照合し、モデルに定義されているDBサーバ244の系列の少なくとも一部に適合する範囲内で、イベントを系列化する。系列化部150は、生成した系列を示す系列情報を系列記憶部160に格納する。系列情報には、系列に含まれるイベントの識別情報の列が含まれる。
系列記憶部160は、系列情報を記憶する。例えば、RAM102またはHDD103の記憶領域の一部が系列記憶部160として使用される。
親子候補設定部170は、系列化部150で生成された系列に基づいて、呼び出し関係の親子候補を設定する。親子候補とは、呼び出し元のイベントを親とし、呼び出し先のイベントを子としたとき、親子関係になる可能性のあるイベント間の関係を示す情報である。親子候補設定部170は、設定した親子候補を示す親子候補情報を、親子候補記憶部180に格納する。親子候補情報には、親となるイベントの識別情報と子となるイベントの識別情報とが含まれる。
親子候補記憶部180は、親子候補情報を記憶する。例えば、RAM102またはHDD103の記憶領域の一部が親子候補記憶部180として使用される。
分析部190は、モデル記憶部140に格納されたモデルと、メッセージ記憶部120に格納されたメッセージとを照合し、モデル全体に適合するトランザクションを検出する。トランザクションは、モデル全体に適合する呼出関係を有する複数のイベントで表される。その際、分析部190は、系列記憶部160を参照し、系列内のイベントについては、同一のイベントから呼び出された一連の処理として認識し、系列全体を含むトランザクションを検出する。このように、系列を用いてメッセージとモデルとの照合を行うことで、呼び出し可能なイベントの組み合わせが少なくなり、メッセージとモデルとの照合処理の効率化が図れる。
また、分析部190は親子候補記憶部180を参照し、系列の親となるイベントを探索する際には、親子候補の親として設定された関係のみを調査する。このように、予め設定された親子候補を使って呼び出し関係の探索を行うことで、メッセージとモデルとの照合処理の効率化が図れる。
また、分析部190は、照合によって認識された各トランザクションに基づいて、種別ごとのトランザクションの処理に要する処理時間を分析することもできる。処理時間は、例えば、サーバごとに計算できる。分析部190は、処理時間の分析結果をグラフなどでモニタ11に表示することもできる。
図9は、メッセージ記憶部内のメッセージシーケンスを示す図である。メッセージ記憶部120には、キャプチャされたパケットから生成された複数のメッセージデータが時系列で格納されている。
メッセージデータの先頭は時刻を示すタイムスタンプである。なお、タイムスタンプは、ネットワーク監視部110が、パケットを取得したときに取得したパケットに付与している。そして、ネットワーク監視部110は、メッセージデータの生成元となったパケットに付与されていたタイムスタンプを、生成されたメッセージデータに付与して、メッセージ記憶部120に格納する。
メッセージデータ内のタイムスタンプの後には、セッション番号とリクエスト番号との組が付与される。タイムスタンプの後の括弧内の値のうち、左側がセッション番号、右側がリクエスト番号である。セッション番号は、通信に使用したセッションのidである。リクエスト番号は、セッションを介して送信されたリクエストメッセージのidである。セッション番号とリクエスト番号との組は、リクエストメッセージとレスポンスメッセージとに対して同じ値が設定される。同じセッション番号の2つのメッセージデータのうち、タイムスタンプの時刻が早い方がリクエストメッセージを示している。また、タイムスタンプの時刻が遅い方がレスポンスメッセージを示している。
メッセージデータ内のセッション番号の後には、プロトコル名が設定されている。図9の例では、プロトコル名として「HTTP」、「IIOP」、「RDB2」といった値が設定されている。プロトコル名によって、どのサーバが実行したイベントに関するメッセージなのかが判別できる。「HTTP」は、Webサーバ241で実行されたイベントに関するメッセージである。「IIOP」は、アプリケーションサーバ242で実行されたイベントに関するメッセージである。「RDB2」は、DBサーバ244で実行されたイベントに関するメッセージである。
メッセージデータ内のプロトコル名の後には、メッセージの内容が設定されている。例えば、リクエストメッセージの内容の一部を、そのリクエストメッセージの名前とすることができる。またリクエストメッセージの名前を、そのリクエストメッセージに応じて実行されるイベントの種別としてもよい。
このようなメッセージデータに基づいて、各サーバで実行されたイベント91〜99が認識される。イベントを認識する場合、まずメッセージデータの中から、イベントの開始を示すリクエストメッセージが検索される。次に、リクエストメッセージと同じセッション番号のレスポンスメッセージが検索される。セッション番号が共通のリクエストメッセージとレスポンスメッセージとにより、1つのイベントの開始時刻と終了時刻が表される。
図9に示したようなメッセージシーケンスに基づいて、モデル生成部130によりモデルが生成される。生成されたモデルは、モデル記憶部140に格納される。
図10は、モデル記憶部のデータ構造例を示す図である。モデル記憶部140には、複数のモデル141,142,143,・・・が格納されている。モデル141,142,143,・・・は、呼び出し関係を表す木構造である。
図10の例では、Webサーバ241で実行されるイベントは「H」の記号と数字とで示されている。アプリケーションサーバ242で実行されるイベントは「I」の記号と数字とで示されている。DBサーバ244で実行されるイベントは「R」の記号と数字とで示されている。それぞれのイベントに付与された数字は、プロトコルごとのイベントを識別するための識別番号である。
モデル141,142,143,・・・では、呼び出し元のイベントを上に記載し、呼び出し先のイベントを下に記載している。最下位層のイベント列については、系列として認識される。例えばモデル141には、Webサーバ241で実行されるイベント「H1」からアプリケーションサーバ242で実行されるイベント「I1」が呼び出されることが示されている。また、モデル141には、アプリケーションサーバ242で実行されるイベント「I1」からDBサーバ244で実行されるイベント「R1,R2,R3」が呼び出されることが示されている。イベント「R1,R2,R3」は、最下位層のイベントであり、系列として認識される。系列の場合、一連の動作の中で全体に共通する動作のみが識別子で定義されているものと解釈される。従って、モデル141には、複数のインスタンス141a,141b,141c,・・・が適合する。例えば、インスタンス141aには、アプリケーションサーバ242で実行されるイベント「I1」からDBサーバ244で実行されるイベント「R1,R2,R4,R4,R3」が呼び出されることが示されている。また、インスタンス141bには、アプリケーションサーバ242で実行されるイベント「I1」からDBサーバ244で実行されるイベント「R1,R2,R4,R4,R4,R3」が呼び出されることが示されている。
なお、図10の例では、「R1」、「R2」、「R3」の各イベントは非除外要素である。また「R4」、「R5」、「R6」の各イベントは除外要素である。
このようにモデルが準備され分析装置100にメッセージ分析の指示が入力されると、所定期間内のメッセージがネットワーク監視部110により取得されメッセージ記憶部120に格納される。この際、ネットワーク監視部110が取得したメッセージは、順次、系列化部150に渡される。すると、系列化部150によりイベントの系列化が行われると共に、親子候補設定部170による親子候補の設定が行われる。そして、所定期間内のメッセージの取得が完了すると、分析部190によるメッセージとモデルとのマッチングが行われ、所定期間内に発生したトランザクションの種別、および処理時間が解析される。
次に、系列化部150による系列化処理と親子候補設定部170による親子候補設定処理について説明する。なお、本実施の形態では、DBサーバ244が実行しているイベントの系列化を行う。そのため、系列化部150は、ネットワーク監視部110から取得したメッセージのうち、アプリケーションサーバ242で実行されたイベントに関するメッセージと、DBサーバ244で実行されたイベントに関するメッセージとについてのみ解析する。アプリケーションサーバ242で実行されたイベントは、親となるイベントと認識される。DBサーバ244で実行されたイベントは、子となるイベントと認識される。Webサーバ241で実行したイベントに関するメッセージについては、系列化の処理には使用されない。また、系列化部150は、モデル記憶部140内のモデルの構造うち、アプリケーションサーバ242で実行されたイベントからDBサーバ244で実行されるイベントへの呼び出し関係のみを参照する。
系列化部150と親子候補設定部170とは、親となるイベントに関するメッセージを取得した場合、以下のような処理を実行する。
系列化部150は、親となるイベントのリクエストメッセージを取得したとき、それ以降の各セッションのデータの観測を開始する。また、系列化部150は、親となるイベントのレスポンスメッセージが届いたとき、モデルに合う形の系列がみつかっていれば、それを子候補に登録する。親子候補設定部170は、互いに、親候補、子候補として相手の設定し合う関係になったイベント間を、親子候補に設定する。
系列化部150と親子候補設定部170とは、子となるイベントに関するメッセージを取得した場合、以下のような処理を実行する。
系列化部150は、系列化する新たなリクエストメッセージ、レスポンスメッセージを取得すると、取得したメッセージで示されるイベントを最新の系列に追加したときに、親となるイベントに適用するモデルに適合するか否かを判断する。親となるイベントに適用するモデルに適合している場合、系列化部150は、取得したメッセージに示されるイベントを系列に加える。親となるイベントに適用するモデルにあわない系列となる場合、系列化部150は系列の分割を検討する。系列化部150は、系列の分割の検討において、他のイベントを親としたモデルとの照合により、既に適切な境界で系列が分割されていれば、それ以上の系列の分割は行われない。この場合、親子候補設定部170は、既に得られている系列との間で親子候補の設定を行う。系列化部150は、系列の分割の検討において、適切な境界での系列の分割が行われていない場合、境界として設定可能な箇所のうち、時間間隔が最大の箇所を選択する。そして、系列化部150は、選択した箇所を境界として系列を分割する。親子候補設定部170は、分割により得られた系列との間で親子候補の設定を行う。
次に、このような系列生成処理および親子候補設定処理について、数学や情報科学における論理や集合の概念を用いて詳細に説明する。以下の説明では、各サーバで実行された個々のイベントを示すデータ、およびイベントの種別を示すデータを、集合を構成する要素とする。
〔事象種類〕
系列化部150による解析対象となる事象は以下の通りである。
・系列の呼び出し元(親のイベント)のリクエストメッセージの取得
・系列の呼び出し元のレスポンスメッセージの取得
・系列要素(子のイベント)のリクエストメッセージの取得
・系列要素のレスポンスメッセージの取得
〔要素判別関数〕
系列化部150には、系列化するプロトコルに関するイベントを示す要素が、除外要素か非除外要素かを示す関数Kが予め定義されている。関数Kは、以下のように表される。
K:{dx,…}→{I,O}
dxは、実行されたイベントの種別を示す要素である。イベントの種別は、イベントの名前(ラベル)によって表される。例えば図9に示したリクエストメッセージの内容の文字列に対応する名前を予め定義しておき、その名前を、リクエストメッセージで実行されるイベントの種別を示す要素として用いることができる。関数Kでは、イベントの種別を示す要素が入力されると、その要素で示されるイベントが除外要素か非除外要素かを示す情報を出力する。除外要素であれば関数Kの処理結果として「I」が出力され、非除外要素であれば関数Kの処理結果として「O」が出力される。系列化部150は、系列要素のリクエストメッセージを取得するごとに、そのリクエストメッセージの内容を引数として関数Kを実行し、処理結果を取得する。これにより、取得したリクエストメッセージにより実行されるイベントが、除外要素か非除外要素かを判別できる。
なお、関数Kに代えて、イベントの種別を示す各要素と、除外要素か非除外要素かを示す情報との対応関係が登録されたテーブルを用いることもできる。その場合、テーブルは、RAM102やHDD103に予め格納される。テーブルを用いる場合、系列化部150は、関数Kの呼び出しに代えてテーブルを参照し、発生したイベントが除外要素か非除外要素かを判断する。
〔モデル構造〕
系列化部150は、モデル記憶部140内のモデルを参照し、系列化のためのモデルを生成する。生成されたモデルは、系列化部150が管理するRAM102内の記憶領域などに格納される。系列化部150で生成されるモデルは、呼び出し元と系列との組み合わせである。データ構造は、以下の通りである。
<呼び出し元データ,系列データ>
呼び出し元データとは、呼び出し元のイベントの種別を示すデータである。系列データは、系列に含まれる呼び出し先のイベントの種別を示すデータを、呼び出し順に並べたデータ列である。このように、系列化部150では、元のモデルの木構造全体でなく、親が非系列、子が系列の部分のみ取り出した部分構造を、照合対象のモデルとする。
また系列化部150は、系列化処理時の中間データとして、各セッションのイベント列のうち、モデルに合致する範囲を示す適合系列情報と、各セッション中のイベント列を系列に分割したときの境界を示す系列分割情報とが用いられる。
〔適合系列情報〕
適合系列情報は、各セッションについて、系列の呼び出し元データについてモデルにあっているか、またあっているならどこまであっているかを表現する状態集合である。適合系列情報(Σ)は以下の式で表される。
各変数は以下を意味する。
・sessionid:セッションのid
・d:親となり得る要素
・modelid:モデルid
・d0:dの子になり得る系列要素のうちの最初の要素(除外要素でもよい)
・ds:dの子になり得る非除外要素のうちの最初の要素
・p:直前に確認したモデル内の系列の位置
式(1)に示す適合系列情報Σで定義された関数により、アプリケーションサーバ242とDBサーバ244との間のセッションのidを入力すると親となるイベントを示すデータが特定される。また、特定された親となるイベントを示すデータに基づきモデルidが特定される。そして、特定されたセッションのid、親となり得る要素およびモデルidに対応するd0、ds、pの各値が特定される。
なお、各発生イベントを特定するため、系列化部150は、レスポンスメッセージを取得した場合に、過去に取得したリクエストメッセージとの対応関係を検出する。そのため系列化部150では、以下の関数Pが定義される。
関数Pは、レスポンスメッセージの入力に対して、対応するリクエストメッセージを返す処理が定義されている。例えば系列化部150は、関数Pを呼び出して実行することで、レスポンスメッセージと同じセッション番号とリクエスト番号との組を有するリクエストメッセージを示すデータを取得できる。
〔系列分割情報〕
系列の分割時には、モデルidに基づいて対応するモデルが参照される。そこで系列化部150には、モデルidからモデルへの写像(M)が以下のように定義される。
l,l0…ln-1は、それぞれデータの名前(系列要素の種別に相当)を示している。lは親となる要素の名前であり、l0…ln-1は子となる要素の名前である。σは、子となる要素の名前の列である。
系列の分割はセッションごとに行われ、各セッションについて以下の系列分割情報(C)が生成される。
これは、sessionidで示されるセッションを介した通信から、系列要素がd0,…,dn1,dn1+1,…,dnの順で取得されたことが示されている。また[di,…,dj]のように括弧で囲まれた系列要素のリストは、リストに示された系列要素の列を有する系列を表している。すなわち、セッションidで示されるセッションを開始したメッセージに基づいて認識された系列要素の列が、括弧で示される各リストからなる系列に分割されている。
ここで、系列[di,…,dj]を表す変数としてsを用いることとする。変数sの右下に系列の識別番号を示す数字を付与することで、個々の系列との対応関係が示される。
〔親子候補情報〕
親子候補設定部170は、呼び出し関係を有する可能性がある要素間の関係(親子候補)を示す親子候補情報を生成する。親子候補情報(R)は、以下のように定義される。
各変数は以下を意味する。
・d: 親となり得る要素
・modelid:モデルid
・sessionid:セッションid
・[s0,…,sn]:系列のリスト
式(5)に示す親子候補情報Rで定義された関数により、親となり得る要素を入力すると、親となり得る要素に基づきモデルidが特定される。また、特定されたモデルidに基づきセッションidが特定される。そして、特定されたセッションidに基づき、系列のリストが特定される。
以上のような情報等を用いて系列化部150が系列化を行い、親子候補設定部170が親子候補を設定する。そして、分析部190が系列分割情報や親子候補情報を用いて、発生したイベントとモデル全体との照合(マッチング)を行い、トランザクションの処理状況を分析する。
図11は、系列化および分析処理の手順を示すフローチャートである。以下、図11に示す処理をステップ番号に沿って説明する。
〔ステップS11〕系列化部150は、ネットワーク監視部110からのメッセージの入力を待つ。
〔ステップS12〕系列化部150は、ネットワーク監視部110で検出されたメッセージを取得する。例えば、図9に示すメッセージ記憶部120に格納される各メッセージが、ネットワーク監視部110から系列化部150に渡される。
〔ステップS13〕系列化部150と親子候補設定部170は、適合系列情報Σ、系列分割情報C、および親子候補情報Rを更新する。この処理の入力は、各セッションの系列分割情報C、および発生したイベントを示す時系列のデータである。なお、系列分割情報Cの初期状態は空である。またこの処理の出力は、親子候補情報Rと各セッションの系列分割情報Cである。この処理の詳細は後述する。
〔ステップS14〕系列化部150は、処理開始後にメッセージ記憶部120に格納されたメッセージの数を示す保存個数の値を更新する。なお、保存個数を示す情報は、例えば系列化部150が管理するRAM102内の記憶領域に一時的に格納されている。
〔ステップS15〕系列化部150は、保存個数が予め設定された一定値を超過したか否かを判断する。超過した場合、処理がステップS16に進められる。超過していなければ、処理がステップS11に進められる。
〔ステップS16〕系列化部150は、系列分割情報Cを系列記憶部160に格納する。親子候補設定部170は、親子候補情報Rを親子候補記憶部180に格納する。そして、分析部190は、系列分割情報Cと親子候補情報Rとを参照し、メッセージ記憶部120に格納されたメッセージとモデル記憶部140に格納されたモデルとを照合する。分析部190は、メッセージとモデルとの照合において、メッセージに基づいて認識されるイベント間の呼び出し関係を、モデルに適合するように決定する。その際、系列に含まれるメッセージは、同一のイベントから呼び出されることが条件となる。分析部190は、照合により決定された呼び出し関係により、実行された各トランザクションを構成するイベントや系列を特定する。そして、分析部190は、サーバで各イベントが実行された時間を計算し、各トランザクションのイベントごとの処理時間を分析する。分析結果は、例えばモニタ11に表示される。
このようにして、取得したメッセージに基づく系列化および分析が行われる。次に、ステップS13に示す処理を詳細に説明する。
図12は、Σ・C・R更新処理の手順を示すフローチャートである。以下、図12に示す処理をステップ番号に沿って説明する。
〔ステップS21〕系列化部150は、取得したメッセージが親となり得る要素のリクエストメッセージまたはレスポンスメッセージか、あるいは系列要素のリクエストメッセージまたはレスポンスメッセージかを判断する。例えば、Webサーバ241とアプリケーションサーバ242との間のセッションから取得したメッセージであれば、親となり得る要素のリクエストメッセージまたはレスポンスメッセージであることが分かる。また、アプリケーションサーバ242とDBサーバ244との間のセッションから取得したメッセージであれば、系列要素のリクエストメッセージまたはレスポンスメッセージであることが分かる。取得したメッセージがリクエストメッセージなのか、あるいはレスポンスメッセージなのかを示す情報は、メッセージの内容に記述されている。そのため、系列化部150は、メッセージの内容を参照することで、リクエストメッセージなのか、あるいはレスポンスメッセージなのかを判別できる。
取得したメッセージが親となり得る要素のリクエストメッセージであれば、処理がステップS22に進められる。取得したメッセージが親となり得る要素のレスポンスメッセージであれば、処理がステップS23に進められる。取得したメッセージが系列要素のリクエストメッセージであれば、処理がステップS24に進められる。取得したメッセージが系列要素のレスポンスメッセージであれば、処理がステップS25に進められる。
〔ステップS22〕系列化部150は、親となり得る要素のリクエストメッセージ取得時には、第1の更新処理を実行する。この処理の詳細は後述する(図13、図14参照)。その後、Σ・C・R更新処理が終了する。
〔ステップS23〕系列化部150は、親となり得る要素のレスポンスメッセージ取得時には、第2の更新処理を実行する。この処理の詳細は後述する(図15、図16参照)。その後、Σ・C・R更新処理が終了する。
〔ステップS24〕系列化部150は、系列要素のリクエストメッセージ取得時には、第3の更新処理を実行する。この処理の詳細は後述する(図17、図18参照)。その後、Σ・C・R更新処理が終了する。
〔ステップS25〕系列化部150は、系列要素のレスポンスメッセージ取得時には、第4の更新処理を実行する。この処理の詳細は後述する(図19〜図22参照)。その後、Σ・C・R更新処理が終了する。
次に、第1〜第4の更新処理それぞれについて詳細に説明する。なお図13〜図30では、変数「Req」はリクエスト(Request)メッセージの要素を示し、変数「Res」はレスポンス(Response)メッセージの要素を示す。
以下、第1〜第4の更新処理の論理的な動作定義例を示し、その動作定義を参照しながら、動作定義に従った更新処理の手順をフローチャートに沿って説明する。なお、動作定義の表記は、以下の規則に従う。
〔代入〕
値の代入は、「A:=V」のような形式で表記される。この式は、Aの値をVに設定することを示している。なお同様の表記は、関数の設定にも使用される。例えばf(2)=1となるように関数fを設定する場合には、f(2):=1と表記される。
〔論理式〕
「かつ」を意味する連言(∧)や「ならば」を意味する含意(⊃)などの論理式に用いられる記号は、数学や情報科学で通常用いられる通りの意味で使用される。例えば、連言や含意以外には、和集合(∪)、「ではない」を意味する否定(¬)などがある。
〔文字列長〕
文字列長nは、「|l0…ln-1|=n」と表記される。
〔組〕
「<a,b>,<a,b,c>,<a,b,c,d>」などで、任意の個数の要素の組が表現される。
〔文字列σの位置pの文字〕
σで表される文字列「l0…ln-1」中の位置pの文字lpは「σ(p)」と表記される。
図13は、第1の更新処理の動作定義の一例を示す図である。図13には、親となり得る要素のリクエストメッセージを取得した場合の系列化部150と親子候補設定部170との動作が定義されている。なお、⊥は未定義値を意味する。
図14は、第1の更新処理の動作定義に従った処理手順を示すフローチャートである。以下図14のステップ番号に沿って、図13の動作定義に従った処理を説明する。
〔ステップS31〕系列化部150は、取得したメッセージに対応する親とり得る要素から子を呼び出し得るすべてのセッションについて、ステップS32〜S35の処理を実行する。この処理は、図13に示す「∀sid∈dom(Σ)」の動作定義に基づいて実行される。
「∀sid∈dom(Σ)」は、任意のセッションidが適合系列情報Σの定義域に属していることを示している。すなわち、取得したメッセージが示す要素が、子の要素の呼び出しに使用できるセッションのセッションidが適合系列情報Σの定義域に属しており、そのセッションidそれぞれを処理対象とすべき旨が示されている。例えばアプリケーションサーバ242のイベントにおいて、データベースアクセスの際に、アプリケーションサーバ242とDBサーバ244との間に予め設けられた複数のセッションのいずれを使用することもできる場合がある。この場合、アプリケーションサーバ242で実行されたイベントを示す要素に関して、アプリケーションサーバ242とDBサーバ244の間のすべてのセッションが、子を呼び出し得るセッションとなる。
〔ステップS32〕系列化部150は、取得したメッセージに対応する親となり得る要素に適用可能なすべてのモデルについて、ステップS33〜S34の処理を実行する。この処理は、図13に示す「∀mid∈dom(M)」の動作定義に基づいて実行される。
「∀mid∈dom(M)」は、任意のモデルidが写像Mの定義域に属していることを示している。系列化部150はこの定義に基づいて、取得したメッセージで示される親となり得る要素に適用可能なすべてのモデルについて動作定義(α)以下の処理を実行する。
〔ステップS33〕系列化部150は、系列の全セッションについてモデルに当て嵌まる部分の情報(適合系列情報Σ)を初期化する。この処理は、「s.t. M(mid)=<Req の名前,_>」および「Σ(sid)(Req)(mid):=<⊥,⊥,0>」に基づいて実行される。
「s.t.」は、「such that」の略であり、右辺に記載されている値を満たすような、写像の変数を求めることを意味する。従って「s.t. M(mid)=<Reqの名前,_>」は、リクエストメッセージの名前が呼び出し元に定義されているモデルのモデルidを求める処理である。このとき得られるモデルidは、1つまたは複数である。
「Σ(sid)(Req)(mid):=<⊥,⊥,0>」は、処理対象のセッションid、リクエストメッセージ、およびモデルidの組に対応する適合系列情報Σの値として、<⊥,⊥,0>を設定することを意味している。すなわち、系列化部150は、適合系列情報Σの初期状態として、親となる要素の子になり得る最初の系列要素、および親となるイベントを示す要素の子になり得る最初の非除外要素それぞれに、未定義値を設定する。また、系列化部150は、適合系列情報Σの初期状態として、直前に確認したモデルの系列の位置を示す値に「0」を設定する。
〔ステップS34〕親子候補設定部170は、すべてのセッションに関して、処理対象となっているモデルに当て嵌まり得る親子候補情報Rを初期化する。
「R(Req)(sid)(mid):=φ」は、処理対象のリクエストメッセージ、セッションid、およびモデルidの組に対応する親子候補情報Rの値として「φ」を設定することを示している。なお親子候補情報Rの値として設定される「φ」は、空集合を意味する。
〔ステップS35〕系列化部150は、取得したメッセージに対応する親となり得る要素に適用可能なすべてのモデルについてステップS33〜S34の処理が終了すると、ステップS33〜S34のループ処理を終了する。
〔ステップS36〕系列化部150は、取得したメッセージに対応する親となり得る要素から子を呼び出し得るすべてのセッションについてステップS32〜S35の処理が終了すると、ステップS32〜S35のループ処理を終了する。その後、第1の更新処理が終了する。
次に第2の更新処理について説明する。
図15は、第2の更新処理の動作定義の一例を示す図である。図15には、親となり得る要素のレスポンスメッセージを取得した場合の系列化部150と親子候補設定部170との動作が定義されている。
図16は、第2の更新処理の動作定義に従った処理手順を示すフローチャートである。以下図16のステップ番号に沿って、図15の動作定義に従った処理を説明する。
〔ステップS41〕系列化部150は、取得したレスポンスメッセージに対応するリクエストメッセージを取得する。これは、図15に示す「Req:=P(Res)」の動作定義に基づいて実行される処理である。すなわち系列化部150は、レスポンスメッセージの識別情報(例えばセッション番号など)を変数として関数Pを実行することで、そのレスポンスメッセージに対応するリクエストメッセージを取得できる。
〔ステップS42〕系列化部150は、取得したメッセージに対応する親となり得る要素から子を呼び出し得るすべてのセッションについて、ステップS43〜S49の処理を実行する。この処理は、図15に示す「∀sid∈dom(Σ)」の動作定義に基づいて実行される。
〔ステップS43〕系列化部150は、取得したメッセージに対応する親となり得る要素に適用可能なすべてのモデルについて、ステップS44〜S48の処理を実行する。この処理は、図15に示す「∀mid∈dom(M)」の動作定義に基づいて実行される。
〔ステップS44〕系列化部150は、処理対象のセッションの系列要素に、処理対処のモデル全体に適合する部分があるか否かを判断する。この処理は、図15に示す「Σ(sid)(Req)(mid)=<d0,ds,p>∧M(mid)=<r,σ>∧r=Reqの名前∧p+1=|σ|」の条件に基づいて実行される。
「Σ(sid)(Req)(mid)=<d0,ds,p>∧M(mid)=<r,σ>∧r=Reqの名前」は、「Req」の名前(ラベル)が「r」が、処理対象のモデルの親となる要素の名前と同じ(r=Reqの名前)であることを示す。つまり処理対象のモデルが、取得したリクエストメッセージに応じた要素が親になり得ることが、第1の条件として定義されている。「p+1=|σ|」は、処理対象のモデルについて与えられたセッション上でそのモデルの系列「σ」全体に適合する部分が現状みつかっていることを示す。図15に示す動作定義では、「⊃」の左側の条件がすべて満たされるならば、下位に定義した動作定義に応じた処理を実行することが示されている。その結果、モデル全体に適合する部分があれば、処理がステップS45に進められる。モデル全体に適合する部分がなければ、処理がステップS48に進められる(図15中(δ)で示す動作定義に基づく)。
〔ステップS45〕系列化部150は、モデル中のσに適合する系列が、既に分割によって得られた系列以降の組み合わせか否かを判断する。この処理は、図15中(β)で示した定義の条件部分「C(sid)の中にd0からdsの1つ前の要素の間の要素を先頭とするリスト[d’,...]が存在する」に基づいて実行される。この条件部分は、ds以前に複数の除外要素がある場合に、d0とdsの1つ前の要素との間に除外要素が存在し得る。そして、もしd0とdsの1つ前の要素との間を境界として既に系列が分割されている場合、d0からdsの1つ前の要素の間の要素(d’)を先頭とするリスト[d’,...]が存在する。このリストには、ds以降の系列要素が含まれている。そのためリスト[d’,...]が存在すれば、既に分割によって得られた系列以降の組み合わせによって、モデル中のσに適合する系列が得られる。
モデル中のσに適合する系列が、既に分割によって得られた系列以降の組み合わせであれば、処理がステップS46に進められる。モデル中のσに適合する系列が、既に分割によって得られた系列以降の組み合わせでなければ、処理がステップS47に進められる。
[ステップS46]親子候補設定部170は、適合する系列の組み合わせを親子候補に設定する。この処理は、図15中(β)で示された定義の結論部分「R(Req)(mid)(sid)=R(Req)(mid)(sid)∪{[σ,...,σ’]}ただし、σ=[d’,...]かつσ’=C(sid)の最後の要素」に基づいて実行される。結論部分は、R(Req)(mid)(sid)に既に設定されている親子関係候補の集合と[σ,...,σ’]との和集合を、R(Req)(mid)(sid)の集合として新たに設定することを示している。この処理が終了すると、処理がステップS48に進められる。
[ステップS47]系列化部150は、リスト[d’,...]が存在しない場合、適切な系列の境界が未定のため、境界を判定して系列を分割する。この処理は、図15中(γ)で示された動作定義に基づいて実行される。この動作定義(γ)の内容は、さらに(γ−1)、(γ−2)、(γ−3)に分けられる。
まず系列化部150は、処理対象のモデルに適合するように分割可能な位置(適合系列情報Σで与えられるd0とdsの間)を求める。次に、系列化部150は、求めた位置のうち時間間隔が最大な場所を境界として系列を分割する。この処理は、図15中(γ−1)で示された動作定義に基づいて実行される。すなわち、「C=[...,[...,d0,...,ds,...],...]で、d0とdsとの間で一番時間間隔の大きい要素対をc,c’として」の部分で、cとc’との間を境界とすることが示されている。そして「C:=「C=[...,[...,d0,...,c],[c’,...,ds,...],...]」の部分で、系列を分割することが示されている。
親子候補設定部170は、分割によって生成された境界より後の系列を、処理対象の親となり得る要素に対して子候補として設定する。この処理は、図15中(γ−2)で示された動作定義「R(Req)(mid)(sid):=R(Req)(mid)(sid)∪{[σ,...,σ’]に基づいて実行される。この場合、σはdsを含む系列[c’,...,ds,...]であり、σ’はσ’=C(sid)の最後の要素である。
さらに親子候補設定部170は、処理対象の親となり得る要素に対して子候補として設定した系列を、監視対象となっている他の親となり得る要素全体に反映させる。すなわち、処理対象の親となり得る要素の子候補として追加した系列が、他の呼び出し元の要素の子候補の一部に含まれていたら、当該追加した系列と同じになるように他の呼び出し元の要素の子候補を分割する。この処理は図15中(γ−3)で示された動作定義「∀r∈dom(R) R(r)(sid)中に[...,c,c’,...]を含めば[...,c],[c’,...]に更新」に基づいて実行される。
[ステップS48]系列化部150は、適合系列情報Σを、処理対象のReqについて削除する。この処理は、図15中(δ)で示す動作定義「∀sid∈dom(Σ) ∀mid∈dom(M) Σ(sid)(Req)(mid):=⊥」に基づいて実行される。
〔ステップS49〕系列化部150は、取得したメッセージに対応する親となり得る要素に適用可能なすべてのモデルについてステップS44〜S48の処理が終了すると、ステップS44〜S48のループ処理を終了する。
〔ステップS50〕系列化部150は、取得したメッセージに対応する親となり得る要素から子を呼び出し得るすべてのセッションについてステップS43〜S49の処理が終了すると、ステップS43〜S49のループ処理を終了する。その後、第2の更新処理が終了する。
次に第3の更新処理について説明する。
図17は、第3の更新処理の動作定義の一例を示す図である。図17には、系列要素のリクエストメッセージを取得した場合の系列化部150の動作が定義されている。
図18は、第3の更新処理の動作定義に従った処理手順を示すフローチャートである。以下図18のステップ番号に沿って、図17の動作定義に従った処理を説明する。
〔ステップS61〕系列化部150は、同一セッション上で対応するレスポンスメッセージを取得した場合に対応付けるリクエストメッセージとして、取得した系列要素のリクエストメッセージのデータを関数Pの戻り値に登録する。この処理は、図17中(ζ)で示す動作定義に基づいて実行される。例えば、系列化部150は、取得したリクエストメッセージのデータからセッションidを取得する。次に系列化部150は、取得したセッションidを関数Pの変数とした場合の値として、取得したリクエストメッセージを示すデータを登録する。
次に第4の更新処理について説明する。
図19は、第4の更新処理の動作定義の一例を示す図である。図19には、系列要素のレスポンスメッセージを取得した場合の系列化部150と親子候補設定部170との動作が定義されている。
図20は、第4の更新処理の動作定義に従った処理手順を示すフローチャートである。以下図20のステップ番号に沿って、図19の動作定義に従った処理を説明する。
〔ステップS71〕系列化部150は、取得したレスポンスメッセージに対応するリクエストメッセージを取得する。これは、図19に示す「Req:=P(Response)」の動作定義に基づいて実行される処理である。すなわち系列化部150は、レスポンスメッセージの識別情報(例えばセッションidなど)を変数として関数Pを実行する。これにより、系列化部150は、そのレスポンスメッセージResponse(sessionid=sid)に対応するリクエストメッセージRequest(r)を取得できる。
〔ステップS72〕系列化部150は、系列要素を系列に追加する。この処理は、図19中(η)で示された動作定義「C(sid):=[...,[...,l,r]] where C(sid)=[...,[...,l]]」に基づいて実行される。なお、追加された要素「r」には、そのレスポンスメッセージの情報も含まれる。
〔ステップS73〕系列化部150は、取得したリクエストメッセージの属するセッションの親となり得るすべての要素について、ステップS73〜S81の処理を実行する。この処理は、図19に示す「∀sid∈dom(Σ(sid))」の動作定義に基づいて実行される。
〔ステップS74〕系列化部150は、処理対象の親となり得る要素に適用可能なすべてのモデルに対して、ステップS74〜S80の処理を実行する。この処理は、図19に示す「「∀mid∈dom(Σ(sid)(Req))」の動作定義に基づいて実行される。
〔ステップS75〕系列化部150は、与えられた親データに対して子候補の列が設定されておらず、かつリクエストメッセージに対応する系列要素が除外要素であるかどうかを判断する。なお、親データに対して子候補の列が設定されていない場合とは、これまで親のリクエストメッセージが届いてから子のセッションのリクエストメッセージが届いていないか、または、届いたが現在照合しているモデルに適合しなかった場合である。この処理は、図19中(θ)で示された動作定義の条件部「d0=⊥∧K(r)=I」に基づいて実行される。定義された条件が満たされる場合、処理がステップS76に進められる。定義された条件が満たされなければ、処理がステップS77に進められる。
〔ステップS76〕系列化部150は、子となり得る最初の要素を更新する。例えば系列化部150は、適合系列情報Σに対して、このリクエストメッセージからモデルに適合するかもしれないという情報を設定する。この処理は、図19中(θ)で示される動作定義の結論部「Σ(sid)(Req)(mid):=<r,ds,p>」に基づいて実行される。ただし、リクエストメッセージを示す「r」には、同一セッションの中の順番などの情報も含まれているものとする。その後、処理がステップS81に進められる。
〔ステップS77〕系列化部150は、検出した系列要素が非除外要素か否かを判断する。この処理は、図19の動作定義「K(r)=O」に基づいて実行される。非除外要素であれば、処理がステップS78に進められる。非除外要素でなければ、処理がステップS81に進められる。
〔ステップS78〕系列化部150は、照合しているセッションの系列に含まれる非除外要素の配列が、モデルの系列全体に適合するか否かを判断する。この処理は、図19の動作定義「M(mid)=<*,σ>」および「p=|σ|」に基づいて実行される。系列が全体適合していれば、処理がステップS79に進められる。部分的にしか適合していか、まったく適合していなければ、処理がステップS80に進められる。
〔ステップS79〕系列化部150は、全体適合系列対応処理を実行する。この処理の詳細は後述する(図21参照)。その後、処理がステップS81に進められる。
〔ステップS80〕系列化部150は、部分適合系列対応処理を実行する。この処理の詳細は後述する(図22参照)。
〔ステップS81〕系列化部150は、適用可能なすべてのモデルについてステップS75〜S80の処理が終了すると、ステップS75〜S80のループ処理を終了する。
〔ステップS82〕系列化部150は、親となり得るすべての要素についてステップS74〜S81の処理が終了すると、ステップS74〜S81のループ処理を終了する。その後、第4の更新処理が終了する。
次に、全体適合系列対応処理について説明する。
図21は、全体適合系列対応処理の手順を示すフローチャートである。以下図21のステップ番号に沿って、図19の動作定義に従った処理を説明する。
〔ステップS91〕系列化部150は、系列を分割する。この処理は、図19中(ι)で示す動作定義に基づいて実行される。この動作定義(ι)の内容は、さらに(ι−1)、(ι−2)、(ι−3)、(ι−4−1)、(ι−4−2)に分けられる。
まず系列化部150は、リクエストメッセージから除外要素が続く間遡って、一番時間間隔の大きいところで系列に分割する。この処理は、図19中(ι−1)で示す動作定義に基づいて実行される。すなわち、「C(sid):=[...,[...n],[n’,...,r]] where[...,n,n’,...,r]」の動作定義により、[...,n,n’,...,r]で示される系列が、要素nと要素n’との間を境界として分割される。このとき、要素rから非除外要素(「K(*)=O」)に到達するまで遡って、除外要素n’(「K(n’)=I」)とその前の要素nとの時間間隔が最大となる位置が、系列の境界となる。
次に系列化部150は、系列の先頭部分として適当な境界がなければ、第2の更新処理における分割処理(ステップS47)と同様に、一番時間間隔の大きい位置を境界として系列を分割する。ここで、系列の先頭部分として適当な境界とは、現在照合しているモデルとの関係におけるd0とdsとの間と位置のうち、他のモデルとの照合時に系列の分割に用いられた境界である。この処理は、図19中(ι−2)の動作定義に基づいて実行される。このように、他のモデルとの照合において既に境界が決定されている場合、その境界以降の処理列が、新たに生成する系列とされる。
さらに親子候補設定部170は、分割によって生成された系列を、親子候補に設定する。この処理は、図19中(ι−3)の動作定義「R(Req)(mid)(sid):=R(Req)(mid)(sid)∪{[σ,...,σ’]}」に基づいて実行される。この場合、σ=[...,ds,...]であり、かつσ’はC(sid)の後ろから2番目の要素である。
〔ステップS92〕系列化部150は、現在処理対象となっている親となり得る要素に対し適用可能なすべてのモデルについて、ステップS93〜S95の処理を実行する。
〔ステップS93〕系列化部150は、モデルの系列の最初の要素にr(届いたレスポンスメッセージに対応するリクエストメッセージの名前(ラベル))が合致するか否かを判断する。この処理は、図19に示す動作定義「∀mid’∈dom(M) s.t.M(mid)’=<Reqの名前,σ’>」に基づいて実行される。名前が合致する場合、処理がステップS94に進められる。名前が合致しない場合、処理がステップS95に進められる。
〔ステップS94〕系列化部150は、モデルの系列の最初の要素に合致するリクエストメッセージであると判定した場合、処理対象となっているモデルに関する適合系列情報Σを更新する。具体的には系列化部150は、ステップS91の系列分割処理で分割された最後の系列の先頭の要素から、現在処理対象となっているモデルに合致する可能性があることを設定する。すなわち、分割時の境界となった位置の次の系列の先頭の要素n’が、適合系列情報Σの変数d0に設定される。また系列化部150は、届いたレスポンスメッセージに対応するリクエストメッセージから合致しないといけないように適合系列情報Σを更新する。すなわち、取得したレスポンスメッセージに対応するリクエストメッセージを示す要素が、適合系列情報Σの変数dsに設定される。この際、系列化部150は、モデルの系列のうちの最初の要素との照合が終了を示したことを示す情報を設定する。すなわち、適合系列情報Σの変数pに「1」が設定される。この処理は、図19中(ι−4−1)で示す動作定義「σ’(0)=r ⊃ Σ(sid)(Req)(mid’):=<n’,r,1>」に基づいて実行される。
〔ステップS95〕系列化部150は、モデルの系列の最初の要素に合致しないリクエストメッセージであると判定した場合、処理対象となっているモデルに関する適合系列情報Σを初期化する。この処理は図19中(ι−4−2)で示す動作定義「σ’(0)≠r ⊃ Σ(sid)(Req)(mid):=<⊥,⊥,0>」に基づいて実行される。
〔ステップS96〕系列化部150は、現在処理対象となっている親となり得る要素に対し適用可能なすべてのモデルについて、ステップS93〜S95の処理が完了するとループ処理を終了すると共に、全体適合系列対応処理を終了する。
次に、部分適合系列対応処理について説明する。
図22は、部分適合系列対応処理の手順を示すフローチャートである。以下図22のステップ番号に沿って、図19の動作定義に従った処理を説明する。
〔ステップS101〕系列化部150は、モデルの系列の途中まで、監視対象のセッションの系列が適合しており、かつ今回得たリクエストメッセージがモデルの系列の次の部分に適合しているかどうかを判断する。この処理は、図19中(κ)で示される動作定義の条件部分「p≠|σ|∧σ(p)=r」に基づいて実行される。当該条件が満たされていれば、処理がステップS105に進められる。当該条件が満たされていなければ、処理がステップS102に進められる。
〔ステップS102〕系列化部150は、少なくとも含まないといけない要素を示す情報(ds)が得られていない(ds=⊥)か否かを判断する。該当情報が得られていない場合、処理がステップS103に進められる。該当情報が得られている場合、処理がステップS104に進められる。
〔ステップS103〕系列化部150は、少なくとも含まないといけない要素を示す情報(ds)が得られていない場合、処理対象のセッションの処理対象のモデルに関する適合系列情報Σを初期化する。この処理は、図19中(λ)で示される動作定義「(ds=⊥) ⊃ Σ(sid)(Req)(mid):=<⊥,⊥,0>」に基づいて実行される。その後、部分適合系列対応処理が終了する。
〔ステップS104〕系列化部150は、少なくとも含まないといけない要素を示す情報(ds)が得られている場合、まず適合系列情報Σを初期化する。その後、系列化部150は、得ていた要素dsの次の要素から、取得したリクエストメッセージまで、順にもう一度、対応するレスポンスメッセージが到着したものとして適合系列情報Σの更新処理を行う。この処理は、図19中(μ)で示す動作定義「(ds≠⊥) ⊃ Σ(sid)(Req)(mid):=<⊥,⊥,0>としてdsの次の要素からrまでの要素について、この処理を繰り返す」に基づいて実行される。その後、部分適合系列対応処理が終了する。
〔ステップS105〕系列化部150は、モデルに合致し得る部分の系列要素が見つかっていない(d0=⊥)か否かを判断する。該当要素が見つかっていない場合、処理がステップS106に進められる。見つかっている場合、処理がステップS107に進められる。
〔ステップS106〕系列化部150は、d0に登録する要素が見つかっていない場合、d0に、取得したレスポンスメッセージに対応するリクエストメッセージを示す要素を設定する。その後、処理がステップS108に進められる。
〔ステップS107〕系列化部150は、d0に登録する要素が見つかっている場合、d0は変更しない。
なおステップS105〜S107の処理は、図19中(κ−1)で示す動作定義「d0’=r if d0=⊥、d0’=d0 otherwise」に基づいて実行される。
〔ステップS108〕系列化部150は、モデルの系列の最初の要素と適合した要素がない(p=0)か否かを判断する。該当する要素がない場合、処理がステップS109に進められる。該当する要素がある場合、処理がステップS110に進められる。
〔ステップS109〕系列化部150は、モデルの系列の最初の要素と適合した要素がない場合、dsに、取得したレスポンスメッセージに対応するリクエストメッセージを示す要素を設定する。その後、処理がステップS110に進められる。
〔ステップS110〕系列化部150は、モデルの系列の最初の要素と適合した要素がある場合、dsは変更しない。
なおステップS108〜S110の処理は、図19中(κ−2)で示す動作定義「ds’=r if p=0、ds’=ds otherwise」に基づいて実行される。
〔ステップS111〕系列化部150は、ステップS105〜S110で設定したd0、dsの値を適合系列情報Σに設定する。その後、部分適合系列対応処理が終了する。
以上のような手順で処理を行うことで、適切な系列化が行われる。以下、系列化の具体例について説明する。
まず、第2の実施の形態における系列化の第1の例について説明する。
図23は、第2の実施の形態における系列化の第1の例を示す図である。第1の例では、名前が「I1」の要素に適用されるモデル「m1」では、呼び出し先として系列「R1,R2」が設定されている。
〔第1−1の状態〕まず、アプリケーションサーバ242からDBサーバ244への「I1」のリクエストメッセージが検出されたものとする。このリクエストメッセージに応じたイベントを示す要素を「a」とする。このときアプリケーションサーバ242とDBサーバ244との間のセッション(se1)上の処理列の系列化を行う場合を想定する。
親となり得る要素「a」の発生により、子候補になるセッション(se1)上の要素を監視するため、まず系列分割情報Cが初期化される。例えば、C(se1)=[...,[...]]とされる。また第1の更新処理の(α)で示される動作定義に従って、適合系列情報Σと親子候補情報Rとが初期化される。
〔第1−2の状態〕次に、アプリケーションサーバ242からDBサーバ244への「R1」のリクエストメッセージと、そのリクエストメッセージに対応するレスポンスメッセージとが検出されたものとする。ここで、検出されたメッセージに応じたイベントを示す系列要素を「b」とする。すると系列分割情報Cの最後に、系列要素「b」が追加される。
また、「R1」のイベントの呼び出しは、モデル「m1」に適合している。そこで、第4の更新処理の(ι)で示される処理に従って、適合系列情報Σが「Σ(se1)(a)(m1):=<b,b,1>」に更新される。この適合系列情報Σの更新処理は、系列要素aを系列要素bの親候補として仮設定することを意味する。
〔第1−3の状態〕次に、アプリケーションサーバ242からDBサーバ244への「R2」のリクエストメッセージと、そのリクエストメッセージに対応するレスポンスメッセージとが検出されたものとする。ここで、検出されたメッセージに応じたイベントを示す系列要素を「c」とする。すると系列分割情報Cの最後に、系列要素「c」が追加される。
また、「R1」に続く「R2」のイベントの呼び出しは、モデル「m1」に適合している。そこで第4の更新処理の(ι)で示される処理に従って、適合系列情報Σが「Σ(se1)(a)(m1):=<b,b,2>」に更新される。すなわち、モデルの系列の何番目まで適合したのかを示す情報がカウントアップされる。この適合系列情報Σの更新処理は、要素「a」を系列要素「c」の親候補として仮設定することを意味する。
〔第1−4の状態〕最後に、DBサーバ244からアプリケーションサーバ242への親となり得る要素「a」のレスポンスメッセージが検出されたものとする。この場合、セッション(se1)上の要素がモデル(m1)の系列に適合している。そこで、第2の更新処理の(β)で示される動作定義に従って、親子候補情報Rが「R(a)(m1)(se1):={[[b,c]]}」に更新される。この親子候補情報Rの更新処理は、親となり得る要素「a」と系列要素「c」との関係を、親子候補に設定することを意味する。
ここで、〔第1−4の状態〕では、親子候補情報Rの更新状況を示しているが、系列化部150は、系列分割情報Cについても、系列要素「b」,「c」を1つの系列301とするように更新することができる。
次に、系列化の第2の例について説明する。
図24は、第2の実施の形態における系列化の第2の例を示す図である。図24の例は、親となり得る要素に複数の親子候補が設定される場合の一例を示している。このような例として、系列上の処理列が観測中にモデルと適合しなくなり、そこで系列の分割を行う場合がある。第2の例では、名前が「I1」の要素に適用されるモデル「m1」では、呼び出し先として系列「R1」が設定されている。
〔第2−1の状態〕まず、アプリケーションサーバ242からDBサーバ244への「I1」の2つのリクエストメッセージが検出されたものとする。このリクエストメッセージに応じたイベントを示す要素を、それぞれ「a」、「b」とする。このときアプリケーションサーバ242とDBサーバ244との間のセッション(se1)上の処理列の系列化を行う場合を想定する。
親となり得る要素「a」、「b」の発生により、セッション(se1)上の子となり得る要素を監視するため、まず系列分割情報Cが初期化される。また第1の更新処理の(α)で示される動作定義に従って、親となり得る要素「a」、「b」ごとに、適合系列情報Σと親子候補情報Rとが初期化される。
〔第2−2の状態〕次に、アプリケーションサーバ242からDBサーバ244への「R1」のリクエストメッセージと、そのリクエストメッセージに対応するレスポンスメッセージとが検出されたものとする。ここで、検出されたメッセージに応じたイベントを示す系列要素を「c」とする。すると系列分割情報Cの最後に、系列要素「c」が追加される。
また、「R1」のイベントの呼び出しは、モデル「m1」に適合している。そこで、第4の更新処理の(ι)で示される動作定義に従って、親となり得る要素「a」に対応する適合系列情報Σが「Σ(se1)(a)(m1):=<c,c,1>」に更新される。同様に、親となり得る要素「b」に対応する適合系列情報Σが「Σ(se1)(b)(m1):=<c,c,1>」に更新される。
〔第2−3の状態〕次に、アプリケーションサーバ242からDBサーバ244への「R1」のリクエストメッセージと、そのリクエストメッセージに対応するレスポンスメッセージとが検出されたものとする。ここで、検出されたメッセージに応じたイベントを示す系列要素を「d」とする。すると第4の更新処理の(η)で示される動作定義に従って、系列分割情報Cの最後に系列要素「d」が追加される。
また、「R1」に続く「R1」のイベントの呼び出しは、モデル「m1」に適合していない。すると、このまま前の系列要素「c」と新たに検出した系列要素「d」とを1つの系列でまとめるとモデルに適合しなくなる。そこで、第4の更新処理の(ι)で示される動作定義に従って、系列要素「c」と系列要素「d」との間を境界として系列が分割されるように系列分割情報Cが更新される。この際、系列要素「c」の手前でも分割され、「c」1つだけからなる系列302が作成される。具体的には、系列分割情報Cが「C(se1):=[...,[...],[c],[d]]」に更新される。
さらに、親となり得る要素「a」に対応する適合系列情報Σが「Σ(se1)(a)(m1):=<d,d,0>」に更新される。同様に、親となり得る要素「b」に対応する適合系列情報Σが「Σ(se1)(b)(m1):=<d,d,0>」に更新される。すなわち、新たに、系列要素「d」の親候補に要素「a」、「b」が仮設定され、系列要素「d」から始まる系列の監視が継続される。
〔第2−4の状態〕最後に、DBサーバ244からアプリケーションサーバ242への親となり得る要素「a」のレスポンスメッセージが検出されたものとする。この場合、セッション(se1)上の系列要素「d」がモデル(m1)の系列に適合している。そこで系列要素「d」1つだけからなる系列303が作成され、各要素「a」との間で親子候補の関係が設定される。すなわち、第2の更新処理の(β)で示される処理に従って、親となり得る要素「a」に対応する親子候補情報Rが「R(a)(m1)(se1):={[[c]],[[d]]}」に更新される。
その後、親となり得る要素「b」のレスポンスメッセージが検出された場合にも同様の親子候補が設定される。すなわち、親となり得る要素「b」に対応する親子候補情報Rが「R(b)(m1)(se1):={[[c]],[[d]]}」に更新される。
このように複数の親候補が設定された場合、本来の親子関係については、分析部190において判断される。すなわち、分析部190は、親子関係の確からしさを統計的な手法などを用いて計算し、親子関係が確かに存在するイベント間の親子関係を特定する。これにより、分析部190では、複数の親子候補の中から、1つの親子関係を特定することができる。なお、分析部190は、親子候補となっていない要素と系列との関係は、親子関係の有無に関する判断対象から除外する。これにより、分析部190における処理負荷が軽減される。
次に、第2の実施の形態における系列化の第3の例について説明する。
図25は、第2の実施の形態における系列化の第3の例を示す図である。系列化の第3の例は、図24に示した第2の例と同様に、データが観測中にモデルと適合しない系列要素を検出する場合の例である。ただし、第3の例では、最初に適合しない系列要素を検出し、その後、途中から適合する系列要素を検出する場合の例である。なお第3の例では、親候補は1つのみとする。また図25の例では、名前が「I1」の要素に適用されるモデル「m1」では、呼び出し先として系列「R1」が設定されている。
〔第3−1の状態〕まず、アプリケーションサーバ242からDBサーバ244への「I1」のリクエストメッセージが検出されたものとする。このリクエストメッセージに応じたイベントを示す要素を、「a」とする。このときアプリケーションサーバ242とDBサーバ244との間のセッション(se1)上の処理列の系列化を行う場合を想定する。
親となり得る要素「a」の発生により、子候補になるセッション(se1)上の要素を監視するため、まず系列分割情報Cが初期化される。また第1の更新処理の(α)で示される動作定義に従って、適合系列情報Σと親子候補情報Rとが初期化される。
〔第3−2の状態〕次に、アプリケーションサーバ242からDBサーバ244への「R2」のリクエストメッセージと、そのリクエストメッセージに対応するレスポンスメッセージとが検出されたものとする。ここで、検出されたメッセージに応じたイベントを示す系列要素を「b」とする。すると系列分割情報Cの最後に、系列要素「b」が追加される。
また、「R2」のイベントの呼び出しは、モデル「m1」に適合していない。そこで、第4の更新処理の(η)で示される動作定義に従って、親となり得る要素「a」に対応する適合系列情報Σが「Σ(se1)(a)(m1):=<⊥,⊥,0>」に初期化される。
〔第3−3の状態〕次に、アプリケーションサーバ242からDBサーバ244への「R1」のリクエストメッセージと、そのリクエストメッセージに対応するレスポンスメッセージとが検出されたものとする。ここで、検出されたメッセージに応じたイベントを示す系列要素を「c」とする。すると系列分割情報Cの最後に、系列要素「c」が追加される。
また、「R1」のイベントの呼び出しは、モデル「m1」に適合している。そこで、第4の更新処理の(κ)で示される動作定義に従って、親となり得る要素「a」に対応する適合系列情報Σが「Σ(se1)(a)(m1):=<c,c,1>」に更新される。
〔第3−4の状態〕最後に、DBサーバ244からアプリケーションサーバ242への親となり得る要素「a」のレスポンスメッセージが検出されたものとする。この場合、セッション(se1)上の系列要素「c」がモデル(m1)の系列に適合している。そこで系列要素「c」1つだけからなる系列304が作成され、各要素「a」との間で親子候補の関係が設定される。すなわち、第2の更新処理の(γ)で示される処理に従って、系列分割情報Cが、「C(se1):=[…,[…,b],[c]]」に更新される。また、親子候補情報Rが「R(a)(m1)(se1):={[[c]]}」に更新される。
このとき、要素「a」以外の親となり得る要素が存在し、系列[b,c]との間で親子候補が既に設定されていた場合、その要素に関する親子候補情報Rにおいて、系列[b,c]が個別の系列[b],[c]に分割される。このように要素「a」に関する処理中に系列が分割された場合、その分割結果に応じて親となり得る他の要素に関する親子候補情報が更新される。これにより、親となり得る要素間の親子候補情報における系列の整合性が保たれる。
次に、第2の実施の形態における系列化の第4の例について、図26、図27を参照して説明する。
図26は、第2の実施の形態における系列化の第4の例の前半を示す図である。第4の例は、モデルに適合する系列要素が検出された後、モデルに適合しない非除外要素が検出されたときに、再び途中から観測結果を調べる場合の例である。第4の例では、名前が「I1」の要素に適用されるモデル「m1」では、呼び出し先として系列「R1,R2」が設定されている。
〔第4−1の状態〕まず、アプリケーションサーバ242からDBサーバ244への「I1」のリクエストメッセージが検出されたものとする。このリクエストメッセージに応じたイベントを示す要素を、「a」とする。このときアプリケーションサーバ242とDBサーバ244との間のセッション(se1)上の処理列の系列化を行う場合を想定する。
親となり得る要素「a」の発生により、子候補になるセッション(se1)上の要素を監視するため、まず系列分割情報Cが初期化される。また第1の更新処理の(α)で示される動作定義に従って、適合系列情報Σと親子候補情報Rとが初期化される。
〔第4−2の状態〕次に、アプリケーションサーバ242からDBサーバ244への「R1」のリクエストメッセージと、そのリクエストメッセージに対応するレスポンスメッセージとが検出されたものとする。ここで、検出されたメッセージに応じたイベントを示す系列要素を「b」とする。すると系列分割情報Cの最後に、系列要素「b」が追加される。
また、「R1」のイベントの呼び出しは、モデル「m1」の系列の先頭の要素に適合しているものの、また「R2」が検出されていないため、系列全体としては一致していない。そこで、第4の更新処理の(κ)で示される動作定義に従って、親となり得る要素「a」に対応する適合系列情報Σが「Σ(se1)(a)(m1):=<b,b,1>」に更新される。
〔第4−3の状態〕次に、アプリケーションサーバ242からDBサーバ244への「R1」のリクエストメッセージと、そのリクエストメッセージに対応するレスポンスメッセージとが検出されたものとする。ここで、検出されたメッセージに応じたイベントを示す系列要素を「c」とする。すると系列分割情報Cの最後に、系列要素「c」が追加される。
また、「R1」のイベントの2回連続での呼び出しは、モデル「m1」に適合していない。そこで、第4の更新処理の(μ)で示される動作定義に従って、まず、親となり得る要素「a」に対応する適合系列情報Σが「Σ(se1)(a)(m1):=<⊥,⊥,0>」に初期化される。そして、系列要素「c」以降でモデルに適合する箇所(途中まででもよい)が確認される。図26の例では、系列要素「c」がモデルの先頭に適合している。そこで、適合する箇所から、モデルにあう系列がある可能性があるように、適合系列情報Σが更新される。すなわち、適合系列情報Σが「Σ(se1)(a)(m1):=<c,c,1>」に更新される。
図27は、第2の実施の形態における系列化の第4の例の後半を示す図である。
〔第4−4の状態〕次に、アプリケーションサーバ242からDBサーバ244への「R2」のリクエストメッセージと、そのリクエストメッセージに対応するレスポンスメッセージとが検出されたものとする。ここで、検出されたメッセージに応じたイベントを示す系列要素を「d」とする。すると系列分割情報Cの最後に、系列要素「d」が追加される。
また、「R1」に続く「R2」のイベントの呼び出しは、モデル「m1」に適合している。そこで第4の更新処理の(κ)で示される処理に従って、適合系列情報Σが「Σ(se1)(a)(m1):=<c,d,2>」に更新される。
〔第4−5の状態〕最後に、DBサーバ244からアプリケーションサーバ242への親となり得る要素「a」のレスポンスメッセージが検出されたものとする。この場合、セッション(se1)上の系列「c,d」がモデル(m1)の系列に適合している。そこで系列要素「c,d」からなる系列305が作成され、要素「a」との間で親子候補の関係が設定される。すなわち、第2の更新処理の(γ)で示される処理に従って、系列分割情報Cが、「C(se1):=[…,[…,b],[c,d]]」に更新される。また、親子候補情報Rが「R(a)(m1)(se1):={[[c,d]]}」に更新される。
次に、第2の実施の形態における系列化の第5の例について説明する。
図28は、第2の実施の形態における系列化の第5の例を示す図である。第5の例は、除外要素を含むデータを観測する場合の系列化の例である。第5の例では、名前が「I1」の要素に適用されるモデル「m1」では、呼び出し先として系列「R1」が設定されている。
〔第5−1の状態〕まず、アプリケーションサーバ242からDBサーバ244への「I1」のリクエストメッセージが検出されたものとする。このリクエストメッセージに応じたイベントを示す要素を、「a」とする。このときアプリケーションサーバ242とDBサーバ244との間のセッション(se1)上の処理列の系列化を行う場合を想定する。
親となり得る要素「a」の発生により、子候補になるセッション(se1)上の要素を監視するため、まず系列分割情報Cが初期化される。また第1の更新処理の(α)で示される動作定義に従って、適合系列情報Σと親子候補情報Rとが初期化される。
〔第5−2の状態〕次に、アプリケーションサーバ242からDBサーバ244への「φ(除外要素)」のリクエストメッセージと、そのリクエストメッセージに対応するレスポンスメッセージとが検出されたものとする。ここで、検出されたメッセージに応じたイベントを示す系列要素を「b」とする。すると系列分割情報Cの最後に、系列要素「b」が追加される。
ここで、系列要素「b」は除外要素であるが、要素「a」の子となり得る最初の要素なので、系列要素「b」から子になり得ることが記録される。すなわち第4の更新処理の(ι)で示される動作定義に従って、親となり得る要素「a」に対応する適合系列情報Σが「Σ(se1)(a)(m1):=<b,⊥,0>」に更新される。
〔第5−3の状態〕次に、アプリケーションサーバ242からDBサーバ244への「R1」のリクエストメッセージと、そのリクエストメッセージに対応するレスポンスメッセージとが検出されたものとする。ここで、検出されたメッセージに応じたイベントを示す系列要素を「c」とする。すると系列分割情報Cの最後に、系列要素「c」が追加される。
また、「R1」のイベントの呼び出しは、モデル「m1」の系列の先頭の要素に適合している。そこで、第4の更新処理の(ι)で示される動作定義に従って、親となり得る要素「a」に対応する適合系列情報Σが「Σ(se1)(a)(m1):=<b,c,1>」に更新される。
〔第5−4の状態〕最後に、DBサーバ244からアプリケーションサーバ242への親となり得る要素「a」のレスポンスメッセージが検出されたものとする。この場合、セッション(se1)上の要素がモデル(m1)の系列に適合している。このとき、系列を生成するための境界の位置としては、系列要素「b」の前と後との両方が考えられる。図28の例では、系列要素「b」の前の時間間隔の方が、系列要素「b」と「c」との間より大きい。そこで、系列要素「b」の前を境界として、系列306が生成される。そして、要素「a」と系列306との関係が親子候補に設定される。すなわち、第2の更新処理の(β)で示される動作定義に従って、親子候補情報Rが「R(a)(m1)(se1):={[[b,c]]}」に更新される。ここで、〔第5−4の状態〕では、親子候補情報Rの更新状況を示しているが、系列化部150は、系列分割情報Cについても、系列要素「b」,「c」を1つの系列306とするように更新することができる。
次に、第2の実施の形態における系列化の第6の例について、図29、図30を参照して説明する。
図29は、第2の実施の形態における系列化の第6の例の前半を示す図である。第6の例は、除外要素を含むデータに複数個の親がある場合の例である。第6の例では、名前が「I1」の要素に適用されるモデル「m1」では、呼び出し先として系列「R1」が設定されている。また、名前が「I2」の要素に適用されるモデル「m2」では、呼び出し先として系列「R1,R2」が設定されている。
〔第6−1の状態〕まず、アプリケーションサーバ242からDBサーバ244への「I1」の2つのリクエストメッセージが検出されたものとする。このリクエストメッセージに応じたイベントを示す要素を、それぞれ「a」、「b」とする。このときアプリケーションサーバ242とDBサーバ244との間のセッション(se1)上の処理列の系列化を行う場合を想定する。
親となり得る要素「a」、「b」の発生により、セッション(se1)上の子となり得る要素を監視するため、まず系列分割情報Cが初期化される。また第1の更新処理の(α)で示される動作定義に従って、親となり得る要素「a」、「b」ごとに、適合系列情報Σと親子候補情報Rとが初期化される。
〔第6−2の状態〕次に、アプリケーションサーバ242からDBサーバ244への「φ(除外要素)」のリクエストメッセージと、そのリクエストメッセージに対応するレスポンスメッセージとが検出されたものとする。ここで、検出されたメッセージに応じたイベントを示す系列要素を「c」とする。すると系列分割情報Cの最後に、系列要素「c」が追加される。
ここで、系列要素「c」は除外要素であるが、要素「a」、「b」それぞれの子となり得る最初の要素なので、系列要素「c」から子になり得ることが記録される。すなわち第4の更新処理の(θ)で示される動作定義に従って、親となり得る要素「a」に対応する適合系列情報Σが「Σ(se1)(a)(m1):=<c,⊥,0>」に更新される。同様に、親となり得る要素「b」に対応する適合系列情報Σが「Σ(se1)(b)(m2):=<c,⊥,0>」に更新される。
〔第6−3の状態〕次に、アプリケーションサーバ242からDBサーバ244への「R1」のリクエストメッセージと、そのリクエストメッセージに対応するレスポンスメッセージとが検出されたものとする。ここで、検出されたメッセージに応じたイベントを示す系列要素を「d」とする。すると系列分割情報Cの最後に、系列要素「d」が追加される。
また、「R1」のイベントの呼び出しは、モデル「m1」の系列の先頭の要素に適合している。そこで、第4の更新処理の(κ)で示される動作定義に従って、親となり得る要素「a」に対応する適合系列情報Σが「Σ(se1)(a)(m1):=<c,d,1>」に更新される。同様に、親となり得る要素「b」に対応する適合系列情報Σが「Σ(se1)(b)(m2):=<c,d,1>」に更新される。
〔第6−4の状態〕次に、アプリケーションサーバ242からDBサーバ244への「φ(除外要素)」のリクエストメッセージと、そのリクエストメッセージに対応するレスポンスメッセージとが検出されたものとする。ここで、検出されたメッセージに応じたイベントを示す系列要素を「e」とする。すると系列分割情報Cの最後に、系列要素「e」が追加される。ここで、検出した系列要素が除外要素であるため、第4の更新処理の(ν)で示される動作定義に従い、適合系列情報Σについては更新されない。
図30は、第2の実施の形態における系列化の第6の例の後半を示す図である。
〔第6−5の状態〕次に、アプリケーションサーバ242からDBサーバ244への「R2」のリクエストメッセージと、そのリクエストメッセージに対応するレスポンスメッセージとが検出されたものとする。ここで、検出されたメッセージに応じたイベントを示す系列要素を「f」とする。すると系列分割情報Cの最後に、系列要素「f」が追加される。
ここで、系列要素「f」は名前が「R2」であり、モデル「m1」に適合しない。ただし、系列要素「e」までの系列がモデル「m1」に適合する。そこで、分割に適切な位置を判断し、その位置を境界として系列が分割される。図30の例では、系列の先頭の位置については、時間間隔が最大の位置が調べられ、系列要素「c」の前の位置が境界とされる。系列の最後の境界は、系列要素「e」の前または後のうち、時間間隔が最大の位置となる。図30の例では、系列要素「e」の後が境界とされる。決定された前後の境界で分割することで、系列307が生成される。具体的には、第4の更新処理の(ι)で示す動作定義に基づいて、系列分割情報Cが「C[se1]:=[…,[…],[c,d,e],[f]]」に更新される。また、親となり得る要素「a」に対応する適合系列情報Σが「Σ(se1)(a)(m1):=<⊥,⊥,0>」に初期化される。
生成された系列307は、親となり得る要素「a」との間に、親子候補の関係が設定される。すなわち、親子関係情報Rが「R(a)(m1)(se1):=[[c,d,e]]」に変更される。
なお、系列要素「f」は、モデル「m2」には適合している。そこで第4の更新処理の(κ)で示される処理に従って、親となり得る要素「b」に対応する適合系列情報Σが「Σ(se1)(b)(m2):=<c,d,2>」に更新される。
〔第6−6の状態〕次に、アプリケーションサーバ242からDBサーバ244への「φ(除外要素)」のリクエストメッセージと、そのリクエストメッセージに対応するレスポンスメッセージとが検出されたものとする。ここで、検出されたメッセージに応じたイベントを示す系列要素を「g」とする。すると系列分割情報Cの最後に、系列要素「g」が追加される。
ここで、系列要素「g」は除外要素であるが、要素「a」の子となり得る最初の要素なので、系列要素「g」から子になり得ることが記録される。すなわち第4の更新処理の(θ)で示される動作定義に従って、親となり得る要素「a」に対応する適合系列情報Σが「Σ(se1)(a)(m1):=<g,⊥,0>」に更新される。
〔第6−7の状態〕DBサーバ244からアプリケーションサーバ242への親となり得る要素「a」のレスポンスメッセージが検出されたものとする。この場合、モデル「m1」の系列全体に適合するセッション「se1」上の系列がない。そのため第2の更新処理の(δ)に示す動作定義に基づき、親子関係情報Σや系列分割情報Cの更新は行われない。ただし、親となり得る要素「a」の適合系列情報Σは値が削除される。すなわち、「Σ(a)(se1)(m1):=⊥」に変更される。
〔第6−8の状態〕最後に、DBサーバ244からアプリケーションサーバ242への親となり得る要素「b」のレスポンスメッセージが検出されたものとする。この場合、先に生成されている系列307と系列308との組み合わせで、モデル「m2」に適合する。そこで、第2の更新処理の(β)で示す動作定義に従って、親となり得る要素「b」の親子関係情報Rが「R(b)(m2)(se1):=[[c,d,e],[f,g]]」に更新される。
以上のようにして、セッションごとの系列化と、親となり得る要素と系列との間の親子候補の設定とが行われる。各セッションの系列分割情報は系列記憶部160に格納され、親子候補を示す親子候補情報は親子候補記憶部180に格納される。
図31は、系列記憶部のデータ構造例を示す図である。系列記憶部160には、セッションごとの系列分割情報161,162,163,・・・が格納される。
図32は、親子候補記憶部のデータ構造例を示す図である。親子候補記憶部180には、親となり得る要素、その要素に適用されるモデル、およびセッションの組に対応する親子候補情報181,182,183,・・・が格納される。
以上のように、第2の実施の形態では、モデルにあうかどうかを考慮しながら系列の分割を行う。そのため、モデルに適合するイベント列を含みながら、モデルに適合しなくなるほど長い系列を作成することがなくなる。
〔その他の応用例〕
第2の実施の形態では、スイッチ232〜234におけるポートミラーリング機能を用いてパケットを収集しているが、各サーバが受信したパケットを分析装置100に転送するようにしてもよい。
また第2の実施の形態では、図10に示すように3階層のトランザクションのモデルからアプリケーションサーバ242とDBサーバ244とのイベントに関する部分のみを抽出して利用している。しかし、アプリケーションサーバ242とDBサーバ244とのイベントの呼び出し関係のみを示すモデルを予め作成しておき、モデル記憶部140に格納しておいてもよい。
上記の処理機能は、コンピュータによって実現することができる。その場合、分析装置が有すべき機能の処理内容を記述した系列生成プログラムが提供される。その系列生成プログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。処理内容を記述した系列生成プログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、磁気記憶装置、光ディスク、光磁気記録媒体、半導体メモリなどがある。磁気記憶装置には、ハードディスク装置(HDD)、フレキシブルディスク(FD)、磁気テープなどがある。光ディスクには、DVD、DVD−RAM、CD−ROM/RWなどがある。光磁気記録媒体には、MO(Magneto-Optical disc)などがある。
系列生成プログラムを流通させる場合には、例えば、その系列生成プログラムが記録されたDVD、CD−ROMなどの可搬型記録媒体が販売される。また、系列生成プログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにその系列生成プログラムを転送することもできる。
系列生成プログラムを実行するコンピュータは、例えば、可搬型記録媒体に記録された系列生成プログラムもしくはサーバコンピュータから転送された系列生成プログラムを、自己の記憶装置に格納する。そして、コンピュータは、自己の記憶装置から系列生成プログラムを読み取り、系列生成プログラムに従った処理を実行する。なお、コンピュータは、可搬型記録媒体から直接系列生成プログラムを読み取り、その系列生成プログラムに従った処理を実行することもできる。また、コンピュータは、サーバコンピュータから系列生成プログラムが転送されるごとに、逐次、受け取った系列生成プログラムに従った処理を実行することもできる。
また、上記の処理機能の少なくとも一部を、DSP(Digital Signal Processor)、ASIC(Application Specific Integrated Circuit)、PLD(Programmable Logic Device)などの電子回路で実現することもできる。
以上、実施の形態を例示したが、実施の形態で示した各部の構成は同様の機能を有する他のものに置換することができる。また、他の任意の構成物や工程が付加されてもよい。さらに、前述した実施の形態のうちの任意の2以上の構成(特徴)を組み合わせたものであってもよい。
以上の実施の形態に開示された技術には、以下の付記に示す技術が含まれる。
(付記1) コンピュータに、
第1の装置と第2の装置が通信したメッセージに基づいて、前記第1の装置と前記第2の装置とのそれぞれで実行された処理を判別し、
前記第1の装置で実行される処理と前記第2の装置で実行される処理との間で発生し得る呼び出し関係を定義したモデルを記憶する記憶手段を参照し、前記第1の装置で実行された処理の実行時間内に前記第2の装置で実行された処理の配列である呼び出し可能処理列から、前記第1の装置で実行された処理を呼び出し元とするモデルにおいて呼び出し先として定義された処理列に少なくとも部分一致する処理列を含み、呼び出し先となり得ない処理を除外した系列を生成する、
処理を実行させる系列生成プログラム。
(付記2) 系列を生成する際には、前記第1の装置で実行された第1の処理を呼び出し元とする第1のモデルにおいて呼び出し先として定義された処理列に少なくとも部分一致する処理列と、前記第1の装置で実行された第2の処理を呼び出し元とする第2のモデルにおいて呼び出し先として定義された処理列に少なくとも部分一致する処理列とが一部重複する場合、少なくとも重複する処理列を含み、前記第1のモデルと前記第2のモデルのいずれかにおいて呼び出し先となり得ない処理を除外した系列を生成する、
ことを特徴とする付記1記載の系列生成プログラム。
(付記3) モデルとの照合対象としない処理が除外要素として定義され、モデルとの照合対象とする処理が非除外要素と定義されており、
系列の生成の際には、前記呼び出し可能処理列において、モデルとの照合の結果、呼び出し先となり得ると判定された非除外要素と呼び出し先となり得ないと判定された非除外要素との間に少なくとも1つの除外要素が存在する場合、いずれかの除外要素の前後の位置を、系列の境界とする、
ことを特徴とする付記1または2のいずれかに記載の系列生成プログラム。
(付記4) 呼び出し先となり得ると判定された非除外要素と呼び出し先となり得ないと判定された非除外要素との間に存在する少なくとも1つの除外要素の前後の位置のうち、処理間の時間間隔が最も長い位置を、系列の境界とする、
ことを特徴とする付記3記載の系列生成プログラム。
(付記5) 前記第1のモデルとの関係において呼び出し先となり得ると判定された非除外要素と呼び出し先となり得ないと判定された非除外要素との間に存在する少なくとも1つの除外要素の前後の位置のうち、前記第2のモデルとの関係において既に境界と判定されている位置がある場合、既に境界と判定されている位置を、前記第1のモデルとの関係において生成される系列の境界とする、
ことを特徴とする付記3記載の系列生成プログラム。
(付記6) 前記コンピュータに、さらに、
系列に含まれる処理が同一の処理から呼び出されることを条件に、前記第1の装置で実行された処理と前記第2の装置で実行された処理との中から、モデル全体に適合する呼び出し関係となる処理の組を検出する、
処理を実行させることを特徴とする付記1乃至5のいずれかに記載の系列生成プログラム。
(付記7) 前記コンピュータに、さらに、
前記第1の装置で実行された処理を呼び出し元とするモデルにおいて呼び出し先として定義された処理列に少なくとも部分一致する処理列を含む系列と、前記第1の装置で実行された処理との関係を、呼び出し候補に設定する、
ことを特徴とする付記1乃至5のいずれかに記載の系列生成プログラム。
(付記8) 前記コンピュータに、さらに、
呼び出し候補に設定されている処理と系列との呼び出し関係の中から、モデル全体に適合する呼び出し関係となる処理の組を検出する、
処理を実行させることを特徴とする付記7記載の系列生成プログラム。
(付記9) 処理の判別の際には、判別した処理に対して、処理に対応するメッセージの通信に使用された前記第1の装置と前記第2の装置との間のセッションの識別番号を付与し、
系列の生成の際には、同一セッションにおける処理の配列を前記呼び出し可能処理列とする、
ことを特徴とする付記1乃至8のいずれかに記載の系列生成プログラム。
(付記10) コンピュータが、
第1の装置と第2の装置が通信したメッセージに基づいて、前記第1の装置と前記第2の装置とのそれぞれで実行された処理を判別し、
前記第1の装置で実行される処理と前記第2の装置で実行される処理との間で発生し得る呼び出し関係を定義したモデルを記憶する記憶手段を参照し、前記第1の装置で実行された処理の実行時間内に前記第2の装置で実行された処理の配列である呼び出し可能処理列から、前記第1の装置で実行された処理を呼び出し元とするモデルにおいて呼び出し先として定義された処理列に少なくとも部分一致する処理列を含み、呼び出し先となり得ない処理を除外した系列を生成する、
ことを特徴とする系列生成方法。
(付記11) 第1の装置と第2の装置が通信したメッセージに基づいて、前記第1の装置と前記第2の装置とのそれぞれで実行された処理を判別する処理判別手段と、
前記第1の装置で実行される処理と前記第2の装置で実行される処理との間で発生し得る呼び出し関係を定義したモデルを記憶する記憶手段を参照し、前記第1の装置で実行された処理の実行時間内に前記第2の装置で実行された処理の配列である呼び出し可能処理列から、前記第1の装置で実行された処理を呼び出し元とするモデルにおいて呼び出し先として定義された処理列に少なくとも部分一致する処理列を含み、呼び出し先となり得ない処理を除外した系列を生成する系列化手段と、
を有する系列生成装置。