[実施の形態1]
図1に、ネットワーク監視システムの構成例を示す。ネットワーク監視装置101は、ネットワークタップ105を介して監視対象ネットワーク103に接続している。監視対象ネットワーク103は、例えばLAN(Local Area Network)である。ネットワーク監視装置101は、監視対象ネットワーク103を伝送されているパケットをキャプチャする。例えば、監視対象ネットワーク103のスイッチを通過するパケットをミラーポートに複製してキャプチャする。あるいは、タップを使用してキャプチャするようにしてもよい。尚、パケットは、PDUの例である。
ネットワーク監視装置101は、NIC(Network Interface Card)111、ドライバ113、パケットバッファ115、解析部117、統計部119、コネクションテーブル記憶部121、インデックスバッファ123、異常テーブル記憶部125及び格納処理部127を有している。
NIC111は、ネットワークに接続するためのインターフェースカードである。ドライバ113は、パケットを抽出し、抽出したパケットをパケットバッファ115に格納すると共に、抽出したパケットにIDを割り当てる。パケットバッファ115は、パケットを格納する。
解析部117は、主にパケットを解析し、異常が発生したコネクションを特定するとともに、パケットをコネクション毎に分別するためのインデックスレコードを生成する。インデックスレコードを設けることによって、パケットを収集する処理の負荷が軽減される。解析部117は、L4解析部131とL7解析部133とを有している。L4解析部131は、ISO(International Organization for Standardization )のOSI(Open Systems Interconnection)参照モデルにおける第4層(以下、L4という。)に関する解析を行う。L7解析部133は、ISOのOSI参照モデルにおける第7層(以下、L7という。)に関する解析を行う。
統計部119は、解析結果に基づき統計処理を行う。統計部119は、L4統計部135とL7統計部137とを有している。L4統計部135は、L4に関する統計処理を行う。具体的には、L4統計部135は、送受信パケット数及びバイト数、パケットのロス数、RTT等の統計的な解析情報によりネットワーク状態をほぼリアルタイムに診断する。L7統計部137は、L7に関する統計処理を行う。
コネクションテーブル記憶部121は、パケットから抽出したコネクションに関するコネクションテーブルを記憶する。インデックスバッファ123は、パケットとコネクションとを対応付けるインデックスレコードを記憶する。尚、本実施の形態では、リングバッファ形式でインデックスレコードを管理する例を示す。また、後述する実施の形態では、2つのバッファテーブル形式でインデックスレコードを管理する例を示す。異常テーブル記憶部125は、異常が発生しているコネクションを特定するための異常テーブルを記憶する。本実施の形態では、異常種別毎に異常テーブルが設けられる例について説明するが、異常テーブルは複数の異常種別をまとめて管理するようにしてもよい。
ネットワーク監視装置101は、伝送ネットワーク107を介してストレージ装置109に接続している。ストレージ装置109は、統計データ記憶部141と保存データ記憶部143とを有している。統計データ記憶部141は、統計部119における統計処理の結果を記憶する。保存データ記憶部143は、ネットワーク監視装置101から送られる保存データを記憶する。伝送ネットワーク107は、監視対象ネットワーク103と同じネットワークであってもよい。
ドライバ113、パケットバッファ115、解析部117、統計部119、コネクションテーブル記憶部121、インデックスバッファ123、異常テーブル記憶部125、格納処理部127、L4解析部131、L7解析部133、L4統計部135及びL7統計部137は、例えば図38に示すハードウエア資源によって実現される。また、ドライバ113、解析部117、統計部119、格納処理部127、L4解析部131、L7解析部133、L4統計部135及びL7統計部137は、当該モジュールの処理の一部又は全部を、メモリ2501(図38)にロードされたプログラムをCPU(Central Processing Unit)2503(図38)で順次実行することにより実現するようにしてもよい。以上で、ネットワーク監視システムの構成についての説明を終える。
次に、コネクションテーブル記憶部121に記憶されるコネクションテーブルについて説明する。図2に、コネクションテーブルの例を示す。コネクションテーブルには、コネクション毎に、コネクションを定義するデータが設定されている。
コネクションテーブルは、コネクション毎のレコードを有している。レコードは、コネクションIDを設定するためのフィールドと、送信元IP(Internet Protocol)アドレスを設定するためのフィールドと、送信元ポート番号を設定するためのフィールドと、送信先IPアドレスを設定するためのフィールドと、送信先ポート番号を設定するためのフィールドと、プロトコル番号を設定するためのフィールドとを有している。
コネクションIDは、コネクションを特定するために解析部117が割り振る識別子である。送信元IPアドレスは、当該パケットの送信元であるホスト装置のIPアドレスである。送信元ポート番号は、当該パケットの送信元であるホスト装置において当該パケットを送出するポートの番号である。送信先IPアドレスは、当該パケットの送信先に相当するホスト装置のIPアドレスである。送信先ポート番号は、当該パケットの送信先に相当するホスト装置において当該パケットを受け入れるポートの番号である。プロトコル番号は、ISOのOSI参照モデルにおける第4層のプロトコルを識別する番号である。プロトコル番号「6」は、TCP(Transmission Control Protocol)を示し、プロトコル番号「17」は、UDP(User Datagram Protocol)を示している。
この例における第1レコードは、コネクションID「CN−0001」が割り振られたコネクションについて、IPアドレス「10.20.30.40」のホスト装置におけるポート番号「2000」が送信元に相当し、IPアドレス「10.20.30.50」のホスト装置におけるポート番号「20」が送信先に相当することを示している。また、第1レコードは、このコネクションにおける第4層のプロトコルは、TCPであることも示している。
この例における第2レコードは、コネクションID「CN−0002」が割り振られたコネクションについて、IPアドレス「20.30.40.50」のホスト装置におけるポート番号「3000」が送信元に相当し、IPアドレス「10.20.30.60」のホスト装置におけるポート番号「80」が送信先に相当することを示している。また、第2レコードは、このコネクションにおける第4層のプロトコルは、TCPであることも示している。
この例における第3レコードは、コネクションID「CN−0003」が割り振られたコネクションについて、IPアドレス「30.40.50.60」のホスト装置におけるポート番号「4000」が送信元に相当し、IPアドレス「40.50.60.70」のホスト装置におけるポート番号「3000」が送信先に相当することを示している。また、第3レコードは、このコネクションにおける第4層のプロトコルは、UDPであることも示している。以上で、コネクションテーブルについての説明を終える。
次に、インデックスバッファ123について説明する。図3に、インデックスバッファ123の例を示す。インデックスバッファ123は、リングバッファ301を記憶している。リングバッファ301は、ヘッダ部を有している。ヘッダ部には、周期番号を設定するためのフィールドと、開始レコード番号を設定するためのフィールドと、終了レコード番号を設定するためのフィールドと、が設けられている。周期番号は、当該周期を特定する番号である。周期番号は、シーケンシャルに付与される。開始レコード番号は、当該周期における先頭のインデックスレコードを特定する。終了レコード番号は、当該周期における末尾のインデックスレコードを特定する。
リングバッファ301のデータ本体は、パケット毎のインデックスレコードを有している。レコードは、パケットIDを設定するためのフィールドと、コネクションIDを設定するためのフィールドとを有している。パケットIDは、キャプチャされたパケットにシーケンシャルに付与される識別子である。この例におけるコネクションIDは、当該パケットの特性に係る識別子の例である。これらのインデックスレコードは、最後のインデックスレコードの次に最初のインデックスレコードへ続くように環状で管理される。
この例は、第1周期の途中の状態を示している。周期番号「1」で特定される周期におけるインデックスレコードは、1番目から始まり、この時点において6番目まで設定されている。
この例は、第1レコードにおいて、パケットID「PC−000001」が割り振られたパケットに係るコネクションは、コネクションID「CN−0001」によって特定されることを示している。
同様にこの例は、第2レコードにおいて、パケットID「PC−000002」が割り振られたパケットに係るコネクションは、コネクションID「CN−0002」によって特定されることを示している。
同様にこの例は、第3レコードにおいて、パケットID「PC−000003」が割り振られたパケットに係るコネクションは、コネクションID「CN−0002」によって特定されることを示している。
同様にこの例は、第4レコードにおいて、パケットID「PC−000004」が割り振られたパケットに係るコネクションは、コネクションID「CN−0003」によって特定されることを示している。
同様にこの例は、第5レコードにおいて、パケットID「PC−000005」が割り振られたパケットに係るコネクションは、コネクションID「CN−0003」によって特定されることを示している。
同様にこの例は、第6レコードにおいて、パケットID「PC−000006」が割り振られたパケットに係るコネクションは、コネクションID「CN−0001」によって特定されることを示している。
図4は、第2周期の途中の状態を示している。周期番号「2」で特定される周期におけるインデックスレコードは、100001番目から始まり、この時点において100003番目まで設定されている。
この例は、第100001レコードにおいて、パケットID「PC−100001」が割り振られたパケットに係るコネクションは、コネクションID「CN−0003」によって特定されることを示している。
同様にこの例は、第100002レコードにおいて、パケットID「PC−100002」が割り振られたパケットに係るコネクションは、コネクションID「CN−0002」によって特定されることを示している。
同様にこの例は、第100003レコードにおいて、パケットID「PC−100003」が割り振られたパケットに係るコネクションは、コネクションID「CN−0004」によって特定されることを示している。以上で、インデックスバッファ123についての説明を終える。
次に、異常テーブル記憶部125に記憶される異常テーブルについて説明する。この例では、異常テーブルは、異常種別毎に設けられる。図5に、「ロス増加」に関する異常テーブルの例を示す。この異常テーブルは、「ロス増加」が発生しているコネクション毎のレコードを有している。レコードは、「ロス増加」が発生しているコネクションに係るコネクションID(以下、「ロス増加」のコネクションIDという。)を設定するためのフィールドと、異常解消タイミングを設定するためのフィールドとを有している。異常解消タイミングを設定するためのフィールドには、「ロス増加」が解消したタイミングを特定する周期番号が設定される。
この例における第1レコードは、コネクションID「CN−0001」で特定されるコネクションにおいて「ロス増加」が発生し、未だその「ロス増加」が解消していないことを示している。
同様にこの例における第2レコードは、コネクションID「CN−0004」で特定されるコネクションにおいても「ロス増加」が発生し、未だその「ロス増加」が解消していないことを示している。
図6に、「RTT増加」に関する異常テーブルの例を示す。この異常テーブルは、「RTT増加」が発生しているコネクション毎のレコードを有している。レコードは、「RTT増加」が発生しているコネクションに係るコネクションID(以下、「RTT増加」のコネクションIDという。)を設定するためのフィールドと、異常解消タイミングを設定するためのフィールドとを有している。異常解消タイミングを設定するためのフィールドには、「RTT増加」が解消したタイミングを特定する周期番号が設定される。
この例における第1レコードは、コネクションID「CN−0003」で特定されるコネクションにおいて「RTT増加」が発生し、未だその「RTT増加」が解消していないことを示している。
図7に、「サーバ遅延増加」に関する異常テーブルの例を示す。この異常テーブルは、「サーバ遅延増加」が発生しているコネクション毎のレコードを有している。レコードは、「サーバ遅延増加」が発生しているコネクションに係るコネクションID(以下、「サーバ遅延増加」のコネクションIDという。)を設定するためのフィールドと、異常解消タイミングを設定するためのフィールドとを有している。異常解消タイミングを設定するためのフィールドには、「サーバ遅延増加」が解消したタイミングを特定する周期番号が設定される。この例は、いずれのコネクションにおいても「サーバ遅延増加」が発生してないことを示している。以上で、異常テーブル記憶部125に記憶される異常テーブルについての説明を終える。
以下、ネットワーク監視装置101における処理について説明する。まず、ドライバ113による割り当て処理について説明する。図8に、ドライバ113による割り当て処理フローを示す。ドライバ113は、監視対象ネットワーク103からキャプチャしたパケットの各々にパケットIDを割り当てると共に、当該パケットの各々をパケットバッファ115に格納する。
ドライバ113は、待機して、NIC111からパケットを受ける(S801)。NIC111からパケットを受けると、ドライバ113は受けたパケットにパケットIDを割り当てる(S803)。パケットIDは、シーケンシャルに割り当てられる。そして、ドライバ113は、パケットバッファ115にパケットを格納する(S805)。また、ドライバ113は、パケットIDとパケットヘッダのアドレスとを含む通知を解析部117に渡す(S807)。そして、S801の処理に戻る。以上で、ドライバ113による割り当て処理についての説明を終える。
次に、解析部117のモジュール構成について説明する。図9に、解析部117のモジュール構成例を示す。解析部117は、L4解析部131とL7解析部133との他に、記憶部901、受付部903、コネクションテーブル生成部905、インデックス生成部907及び異常テーブル生成部909を有している。
記憶部901は、解析部117の内部で用いるデータを記憶する。受付部903は、ドライバ113から通知を受け付ける。コネクションテーブル生成部905は、コネクションテーブルを生成する。インデックス生成部907は、インデックスレコードを生成する。異常テーブル生成部909は、異常テーブルを生成する。
記憶部901、受付部903、コネクションテーブル生成部905、インデックス生成部907及び異常テーブル生成部909は、例えば図38に示すハードウエア資源によって実現される。また、受付部903、コネクションテーブル生成部905、インデックス生成部907及び異常テーブル生成部909は、当該モジュールの処理の一部又は全部を、メモリ2501(図38)にロードされたプログラムをCPU2503(図38)で順次実行することにより実現するようにしてもよい。以上で、解析部117のモジュール構成についての説明を終える。
次に、解析部117の処理について説明する。図10及び図11に、解析部117の処理フローを示す。受付部903がドライバ113から通知を受けると(S1001)、インデックス生成部907は、通知から得られるパケットIDを、リングバッファ301の新しいインデックスレコードに書く(S1003)。最終のインデックスレコードに至った場合には、先頭のインデックスレコードが次のインデックスレコードとなる。
L4解析部131は、通知に含まれるアドレスによってパケットヘッダを特定する(S1005)。L4解析部131は、当該パケットのプロトコルが所定のプロトコルに該当するか否かを判定する(S1007)。所定のプロトコルは、例えばTCPとUDPとである。所定のプロトコルは、例えば記憶部901に記憶されるプロトコルテーブルに設定されるようにしてもよい。当該パケットのプロトコルが所定のプロトコルに該当しないと判定した場合には、端子Bを介して図11のS1017の処理に移る。このとき、新しいレコードにおけるコネクションIDのフィールドは、未設定のままとなる。
一方、当該パケットのプロトコルが所定のプロトコルに該当すると判定した場合には、L4解析部131は、パケットヘッダからコネクションデータを抽出する(S1009)。コネクションデータには、送信元IPアドレス、送信元ポート番号、送信先IPアドレス、送信先ポート番号及びプロトコル番号が含まれる。コネクションテーブル生成部905は、コネクションデータが既にコネクションテーブル(図2)に登録されているか否かを判定する(S1011)。コネクションデータが既にコネクションテーブルに登録されていると判定した場合には、端子Aを介して図11のS1015の処理に移る。
コネクションデータが未だコネクションテーブルに登録されていないと判定した場合には、コネクションテーブル生成部905は、コネクションテーブルにレコードを追加する(S1013)。新たなレコードには、新たなコネクションIDと当該コネクションデータが設定される。具体的には、コネクションID、送信元IPアドレス、送信元ポート番号、送信先IPアドレス、送信先ポート番号及びプロトコル番号が設定される。S1013の処理を終えると、端子Aを介して図11のS1015の処理に移る。
図11の処理に移って、インデックス生成部907は、当該インデックスレコードにコネクションIDを書く(S1015)。コネクションIDは、コネクションテーブルに基づいて特定される。
インデックス生成部907は、終了レコード番号をインクリメントする(S1017)。最終のインデックスレコードに至った場合には、次の最終レコード番号は先頭のレコード番号となる。
続いて、L4解析部131は、L4解析処理を実行する(S1019)。L4解析処理において、L4解析部131は、異常が生じているコネクションを検出する。この例のL4解析部131は、「ロス増加」が生じたコネクション、「RTT増加」が生じたコネクション及び「サーバ遅延増加」が生じたコネクションを検出する。L4解析部131は、例えば異常種別毎の検出結果として異常が生じているコネクションのIDを出力する。L4解析処理は、従来の処理と同様であるので、これ以上説明しない。
この例では、L4解析部131によるL4解析処理によって異常を検出するが、L7解析部133によるL7解析処理によって異常を検出するようにしてもよい。また、L4統計部135によるL4統計処理によって異常を検出するようにしてもよい。あるいは、L7統計部137によるL7統計処理によって異常を検出するようにしてもよい。
異常テーブル生成部909は、異常テーブル生成処理を実行する(S1021)。図12に、異常テーブル生成処理フローを示す。異常テーブル生成部909は、異常テーブルに登録されている異常コネクションのうち、未処理の異常コネクションを1つ特定する(S1201)。このとき、異常テーブル生成部909は、例えば図5乃至図7に示した各異常テーブルに設定されているコネクションIDを順次特定する。
異常テーブル生成部909は、当該異常コネクションが解消したか否かを判定する(S1203)。具体的には、異常テーブル生成部909は、S1201で特定したコネクションIDがL4解析処理されたコネクションのIDと一致し、且つ異常が起きていないければ、異常は解消したと判定する。
当該異常コネクションが解消したと判定した場合には、異常テーブル生成部909は、当該コネクションIDに対応する異常解消タイミングを設定する(S1205)。この例では、現在の周期番号によって、異常の解消を検出した時が特定される。具体的には、異常テーブルのレコードにおける異常解消タイミングのフィールドに、現在の周期番号が設定される。現在の周期番号は、記憶部901に記憶されている。そして、S1207の処理に移る。
異常解消タイミングが設定された異常テーブルの例を、図13に示す。この例における第1レコードは、コネクションID「CN−0001」で特定されるコネクションにおいて発生した「ロス増加」が、第10周期において解消したことを示している。
当該異常コネクションが解消していないと判定した場合には、従って、そのままS1207の処理に移る。
異常テーブル生成部909は、S1203について未処理の異常コネクションがあるか否かを判定する(S1207)。S1203について未処理の異常コネクションがあると判定した場合には、S1201に戻って、異常テーブル生成部909は上述の処理を繰り返す。
S1203について未処理の異常コネクションがないと判定した場合には、異常テーブル生成部909は、検出された異常コネクションが登録されているか否かを判定する(S1209)。異常テーブル生成部909は、例えば異常コネクションのIDが既に異常テーブルに設定されている場合に、当該異常コネクションが登録されていると判定し、異常テーブル生成処理を終える。
当該異常コネクションが登録されていないと判定した場合には、異常テーブル生成部909は、当該異常コネクションを登録する(S1211)。具体的には、異常テーブル生成部909は、検出された異常種別に関する異常テーブルの新しいレコードのコネクションIDのフィールドに当該異常コネクションのIDを設定する。そして、異常テーブル生成処理を終え、図11に示したS1023の処理に移る。
図11の説明に戻って、L7解析部133は、L7解析処理を実行する(S1023)。L7解析処理は、従来の処理と同様であるので、これ以上説明しない。
インデックス生成部907は、以下の処理で周期管理を行う。インデックス生成部907は、現在の周期を経過したか否かを判定する(S1025)。インデックス生成部907は、例えば現在の周期が開始した時点から所定時間を経過した場合に、現在の周期を経過したと判定する。現在の周期を経過したと判定した場合には、インデックス生成部907は、周期番号をインクリメントする(S1027)。更に、インデックス生成部907は、開始レコード番号を設定する(S1029)。設定される開始レコード番号は、現時点の終了レコードの次のレコードを指す。
この例では、インデックス生成部907において周期管理を行うが、周期管理部を設けて、インデックス生成部907の処理とは別個に周期管理を行うようにしてもよい。
図11に示した処理を終えると、端子Cを介して図10に示したS1001の処理に戻り、上述の処理を繰り返す。以上で解析部117の処理についての説明を終える。
続いて、格納処理部127について説明する。格納処理部127のモジュール構成について説明する。図14に、格納処理部127のモジュール構成例を示す。格納処理部127は、読取部1401、インデックステーブル記憶部1403、判定部1405、保存データ生成部1407、一時記憶部1409、収集データ記憶部1411、メタデータ記憶部1413及び書込部1415を有している。
読取部1401は、インデックスバッファ123からインデックスレコードを読み取り、読み取ったインデックスレコードを含むインデックステーブルをインデックステーブル記憶部1403に記憶させる。インデックステーブル記憶部1403は、周期毎に分けられたインデックステーブルを記憶する。判定部1405は、周期番号に基づいて、インデックステーブルを保存対象とするか否かを判定する。保存データ生成部1407は、保存対象となったインデックステーブルに基づいて保存データを生成する。一時記憶部1409は、パケットバッファ115からまとめて読み込まれたパケット群を一時的に記憶する。収集データ記憶部1411は、保存データの一部である収集データを記憶する。メタデータ記憶部1413は、保存データの一部であるメタデータを記憶する。書込部1415は、保存データをストレージ装置109の保存データ記憶部143に書き込む。
読取部1401、インデックステーブル記憶部1403、判定部1405、保存データ生成部1407、一時記憶部1409、収集データ記憶部1411、メタデータ記憶部1413及び書込部1415は、例えば図38に示すハードウエア資源によって実現される。また、読取部1401、判定部1405、保存データ生成部1407及び書込部1415は、当該モジュールの処理の一部又は全部を、メモリ2501(図38)にロードされたプログラムをCPU2503(図38)で順次実行することにより実現するようにしてもよい。以上で、格納処理部127のモジュール構成についての説明を終える。
次に、インデックステーブルについて説明する。図15に、インデックステーブル記憶部1403の例を示す。インデックステーブル記憶部1403は、周期毎のインデックステーブル1501を記憶している。インデックステーブル1501aは、第1周期において受け付けたパケットに係るインデックスレコードを含んでいる。インデックステーブル1501bは、第2周期において受け付けたパケットに係るインデックスレコードを含んでいる。インデックステーブル1501cは、第3周期において受け付けたパケットに係るインデックスレコードを含んでいる。
インデックステーブル1501は、ヘッダ部を有している。ヘッダ部には、周期番号を設定するためのフィールドと、保存フラグを設定するためのフィールドとが設けられている。保存フラグは、当該インデックステーブル1501で特定されるパケットを保存する時機に至った場合にONに設定される。
この例で、インデックステーブル1501a乃至インデックステーブル1501cのいずれも、未だパケットを保存する時機に至っていない。
リングバッファ301のデータ本体は、パケット毎のインデックスレコードを有している。インデックスレコードは、パケットバッファ115の場合と同様の構成を有する。
インデックステーブル1501aの第1レコードは、第1周期において1番目に受け付けたパケットがパケットID「PC−000001」によって特定され、そのパケットのコネクションがコネクションID「CN−0001」によって特定されることを示している。
同様にインデックステーブル1501aの第2レコードは、第1周期において2番目に受け付けたパケットがパケットID「PC−000002」によって特定され、そのパケットのコネクションがコネクションID「CN−0002」によって特定されることを示している。
同様にインデックステーブル1501aの第3レコードは、第1周期において3番目に受け付けたパケットがパケットID「PC−000003」によって特定され、そのパケットのコネクションがコネクションID「CN−0002」によって特定されることを示している。
また、インデックステーブル1501bの第1レコードは、第2周期において1番目に受け付けたパケットがパケットID「PC−100001」によって特定され、そのパケットのコネクションがコネクションID「CN−0003」によって特定されることを示している。
同様にインデックステーブル1501bの第2レコードは、第2周期において2番目に受け付けたパケットがパケットID「PC−100002」によって特定され、そのパケットのコネクションがコネクションID「CN−0002」によって特定されることを示している。
同様にインデックステーブル1501bの第3レコードは、第2周期において3番目に受け付けたパケットがパケットID「PC−100003」によって特定され、そのパケットのコネクションがコネクションID「CN−0004」によって特定されることを示している。
また、インデックステーブル1501cの第1レコードは、第3周期において1番目に受け付けたパケットがパケットID「PC−200011」によって特定され、そのパケットのコネクションがコネクションID「CN−0003」によって特定されることを示している。
同様にインデックステーブル1501cの第2レコードは、第3周期において2番目に受け付けたパケットがパケットID「PC−200012」によって特定され、そのパケットのコネクションがコネクションID「CN−0002」によって特定されることを示している。
同様にインデックステーブル1501cの第3レコードは、第3周期において3番目に受け付けたパケットがパケットID「PC−200013」によって特定され、そのパケットのコネクションがコネクションID「CN−0004」によって特定されることを示している。以上で、インデックステーブルについての説明を終える。
次に、読取部1401の処理について説明する。図16に、読取部1401の処理フローを示す。読取部1401は、インデックスバッファ123のリングバッファ301から順次インデックスレコードを読み、読んだインデックスレコードをインデックステーブル記憶部1403のインデックステーブル1501に格納する。そのため、読取部1401は、読み取っていないインデックスレコードがあるか否かを判定する(S1601)。読み取っていないインデックスレコードがないと判定した場合には、読取部1401は再びS1601の処理を行う。
読み取っていないインデックスレコードがあると判定した場合には、読取部1401は、当該インデックスレコードを読み取る(S1603)。
読取部1401は、現在の周期番号を特定する(S1605)。読取部1401は、例えばリングバッファ301のヘッダ部に設定されている周期番号を読む。あるいは、読取部1401は、解析部117から現在の周期番号を取得するようにしてもよい。また、読取部1401は、インデックスの生成を開始してからの経過時間を、1周期に相当する時間で割って、その商に1を加えることによって現在の周期番号を特定するようにしてもよい。
そして、読取部1401は、周期番号が切り替わったか否かを判定する(S1607)。具体的には、読取部1401は、S1605で特定した現在の周期番号が、以前の周期番号よりも1増えた場合に周期番号が切り替わったと判定する。
周期番号が切り替わったと判定した場合には、読取部1401は、インデックステーブル記憶部1403に新たなインデックステーブル1501を生成する(S1609)。新たなインデックステーブル1501における周期番号のフィールドには、S1605で特定された現在の周期番号が設定される。また、新たなインデックステーブル1501における保存のフィールドは、OFFに設定される。
読取部1401は、インデックスレコードを新しいインデックステーブル1501に書く(S1611)。このとき、読取部1401は、S1603で読み取ったインデックスレコードを新しいインデックステーブル1501の先頭レコードにコピーする。そして、S1601の処理に戻る。
一方、周期番号が切り替わっていないと判定した場合には、読取部1401は、インデックスレコードを最新のインデックステーブル1501に書く(S1613)。つまり、読取部1401は、それまでインデックスレコードが書かれていたインデックステーブル1501に、次のインデックスレコードを追加する。そして、S1601の処理に戻る。 ここでは、S1603で1つのインデックスレコードを読み、1つのインデックスレコード毎に、S1605乃至S1613の処理を行う例を示したが、S1603で複数のインデックスレコードを読み、S1605乃至S1613の処理で各インデックスレコードをインデックステーブルに振り分けるようにしてもよい。以上で、読取部1401の処理についての説明を終える。
次に、判定部1405の処理について説明する。図17に、判定部1405の処理フローを示す。判定部1405は、現在の周期よりも所定の周期数だけ遡った周期に係るインデックステーブル1501の保存フラグをONにする。この処理によって、異常コネクションを検出した周期より前の周期においてパケットバッファ115に格納されたパケットを収集するようにする。
そのため、判定部1405は、現在の周期番号を特定する(S1701)。判定部1405は、例えばリングバッファ301のヘッダ部に設定されている周期番号を読む。あるいは、判定部1405は、解析部117から現在の周期番号を取得するようにしてもよい。また、判定部1405は、インデックスの生成を開始してからの経過時間を、1周期に相当する時間で割って、その商に1を加えることによって現在の周期番号を特定するようにしてもよい。
そして、判定部1405は、周期番号が切り替わったか否かを判定する(S1703)。具体的には、判定部1405は、S1701で特定した現在の周期番号が、以前の周期番号よりも1増えた場合に周期番号が切り替わったと判定する。周期番号が切り替わっていないと判定した場合には、S1701の処理に戻る。
周期番号が切り替わったと判定した場合には、判定部1405は、現在の周期番号から所定数を引いて、保存対象を特定する周期番号を求める(S1705)。例えば所定数が4であれば、現在の周期の4つ前の周期においてパケットバッファ115に格納されたパケットが、保存対象となる。尚、この時点で、保存対象となるパケットはまだパケットバッファ115に残存している。
判定部1405は、インデックステーブル記憶部1403における未処理のインデックステーブル1501を1つ特定する(S1707)。例えば、判定部1405は、インデックステーブル記憶部1403におけるインデックステーブル1501を古い方から順次特定する。
判定部1405は、S1707で特定されたインデックステーブル1501が保存対象に関するか否かを判定する(S1709)。具体的には、判定部1405は、S1707で特定されたインデックステーブル1501における周期番号が、S1705で求めた保存対象の周期番号と一致する場合に、当該インデックステーブル1501が保存対象に関すると判定する。
S1707で特定されたインデックステーブル1501が保存対象に関すると判定した場合には、判定部1405は、当該インデックステーブル1501の保存フラグをONに設定する(S1711)。S1707で特定されたインデックステーブル1501が保存対象に関しないと判定した場合には、判定部1405は、当該インデックステーブル1501の保存フラグをOFFに設定する(S1713)。
判定部1405は、S1709について未処理のインデックステーブル1501があるか否かを判定する(S1715)。S1709について未処理のインデックステーブル1501があると判定した場合には、S1707の処理に戻る。S1709について未処理のインデックステーブル1501がないと判定した場合には、S1701の処理に戻る。以上で、判定部1405の処理についての説明を終える。
次に、保存データ生成部1407の処理によって生成される収集データについて説明する。図18に、収集データ記憶部1411の例を示す。異常種別毎に、収集データセット1801を記憶するための領域を有している。また、収集データセット1801には、当該異常が発生したコネクションに係るパケットを連結した収集データ1803が記憶される。
例えば、収集データセット1801aは「ロス増加」に関する。そして、収集データセット1801aは、「ロス増加」が発生したコネクション(コネクションID:「CN−0001」)に係るパケットを連結した収集データ1803aと、同じく「ロス増加」が発生したコネクション(コネクションID:「CN−0004」)に係るパケットを連結した収集データ1803bとを含んでいる。尚、この例で収集データ1803aにおける1番目のパケットの先頭位置を示すオフセットは「0」であり、同じく収集データ1803aにおける2番目のパケットの先頭位置を示すオフセットは「624」である。更に、収集データ1803bにおける1番目のパケットの先頭位置を示すオフセットは「62004」である。
また、収集データセット1801bは「RTT増加」に関する。そして、収集データセット1801bは、「RTT増加」が発生したコネクション(コネクションID:「CN−0003」)に係るパケットを連結した収集データ1803cを記憶している。
続いて、保存データ生成部1407の処理によって生成されるメタデータについて説明する。図19に、メタデータの例を示す。メタデータは、収集データ1803に対応付けて設けられる。図19に示したメタデータは、図18に示した収集データ1803aに対応付けられている。メタデータは、ヘッダ部とテーブル部とを有している。
ヘッダ部には、コネクションIDを設定するためのフィールドと、送信元IPアドレスを設定するためのフィールドと、送信元ポート番号を設定するためのフィールドと、送信先IPアドレスを設定するためのフィールドと、送信先ポート番号を設定するためのフィールドと、プロトコル番号を設定するためのフィールドとが含まれている。
この例のヘッダ部は、このメタデータが、コネクションID「CN−0001」のコネクションに係るパケットの収集データ1803aに対応することを示している。また、この例のヘッダ部は、このコネクションについて、IPアドレス「10.20.30.40」のホスト装置におけるポート番号「2000」が送信元に相当し、IPアドレス「10.20.30.50」のホスト装置におけるポート番号「20」が送信先に相当することを示している。更に、この例のヘッダ部は、このコネクションにおける第4層のプロトコルは、TCPであることも示している。
テーブル部には、収集データ1803aに含まれるパケット毎のレコードが設けられている。レコードには、パケットIDを設定するためのフィールドと、オフセットを設定するためのフィールドとが設けられている。この例は、1番目のパケットがパケットID「PC−000001」で特定され、オフセット「0」を先頭に格納されていることを示している。更にこの例は、2番目のパケットがパケットID「PC−000006」で特定され、オフセット「624」を先頭に格納されていることを示している。
図18に示した収集データ1803b及び収集データ1803cについても、同様にメタデータが設けられる。
次に、メタデータ記憶部1413に生成される上位メタデータについて説明する。図20に、上位メタデータの例を示す。上位メタデータは、異常種別毎に設けられる。上位メタデータは、ヘッダ部とテーブル部とを有している。ヘッダ部には、異常種別を設定するためのフィールドが設けられる。この例では、「ロス増加」が設定されている。
テーブル部のレコードには、コネクションIDを設定するためのフィールドと、開始オフセットを設定するためのフィールドとが設けられている。この例のテーブル部の第1レコードは、1番目のメタデータがコネクションID「CN−0001」に関し、1番目の収集データ1803aがオフセット「0」を先頭に格納されていることを示している。同様にこの例のテーブル部の第2レコードは、2番目のメタデータがコネクションID「CN−0004」に関し、2番目の収集データ1803bがオフセット「62004」を先頭に格納されていることを示している。
次に、書込部1415によって書き込まれる保存データについて説明する。図21に、保存データの例を示す。本実施の形態に係る保存データは、図21に例示したようなオブジェクト2101の構成を有している。オブジェクト2101は、収集データセット1801を含んでいる。この例における収集データセット1801aは、収集データ1803aと収集データ1803bとを含んでいる。
オブジェクト2101は、メタデータセット2103を含んでいる。この例におけるメタデータセット2103aは、収集データ1803aに関するメタデータ2105aと、収集データ1803bに関するメタデータ2105bと、更にそれらのメタデータ2105に関する上位メタデータ2107とを含んでいる。
次に、図22に、格納処理部127の処理フローを示す。保存データ生成部1407は、保存フラグONのインデックステーブル1501があるか否かを判定する(S2201)。保存フラグONのインデックステーブル1501がないと判定した場合には、保存データ生成部1407はS2201の処理を繰り返す。
保存フラグONのインデックステーブル1501があると判定した場合には、保存データ生成部1407は、保存フラグONのインデックステーブル1501を特定する(S2203)。図17において説明したように、保存フラグONのインデックステーブル1501は、現在から所定数遡った周期に係るインデックステーブル1501である。このインデックステーブル1501で管理されているパケットのうちから、収集すべきパケットが選択される。
保存データ生成部1407は、現時点において異常コネクションがあるか否かを判定する(S2205)。保存データ生成部1407は、例えば図5乃至図7に示した異常テーブルにおいてコネクションIDが設定されている場合に、現時点において異常コネクションがあると判定する。
パケットバッファ115からのデータ読み取り回数を減らすために、保存データ生成部1407は、パケット群を一括して読み取り、読み取ったパケット群を一時記憶部1409に記憶させる(S2207)。但し、以下の処理でパケットを1個ずつ読む場合には、S2207の処理は省いてもよい。
保存データ生成部1407は、S2211とS2213について未処理の異常コネクションを1つ特定する(S2209)。例えば、保存データ生成部1407は、図5乃至図7に示した異常テーブルに含まれるコネクションIDを順次特定する。
保存データ生成部1407は、保存データ生成処理を実行する(S2211)。保存データ生成処理において、収集データ記憶部1411とメタデータ記憶部1413とに新たなデータが生成される。
図23に、保存データ生成処理フローを示す。保存データ生成部1407は、当該異常種別に関する上位メタデータがなければ生成する。そのため、保存データ生成部1407は、当該異常種別に関する上位メタデータがあるか否かを判定する(S2301)。当該異常種別は、図22のS2209で異常コネクションを特定したときに参照した異常テーブルの異常種別に相当する。
当該異常種別に関する上位メタデータがないと判定した場合には、保存データ生成部1407は、当該異常種別に関する上位メタデータを生成する(S2303)。図20に例示したように、上位メタデータにおける異常種別のフィールドには、当該異常種別が設定される。この時点で、テーブル部にレコードは設定されていない。
保存データ生成部1407は、図22のS2203で特定されたインデックステーブル1501において、S2307について未処理のインデックスレコードを1つ特定する(S2305)。保存データ生成部1407は、例えばインデックステーブル1501に含まれるインデックスレコードを順次特定する。
保存データ生成部1407は、当該インデックスレコードにおけるコネクションIDが当該異常コネクションに相当するか否かを判定する(S2307)。当該異常コネクションは、上述したように図22のS2209で特定されている。
当該インデックスレコードにおけるコネクションIDが当該異常コネクションに相当しないと判定した場合には、当該インデックスレコードで特定されるパケットは登録しない。従って、そのままS2311の処理に移る。
当該インデックスレコードにおけるコネクションIDが当該異常コネクションに相当すると判定した場合には、当該インデックスレコードで特定されるパケットは登録される。そのため、保存データ生成部1407は、パケット登録処理を実行する(S2309)。
図24に、パケット登録処理フローを示す。保存データ生成部1407は、当該異常コネクションのIDが上位メタデータ2107のテーブル部に含まれるか否かを判定する(S2401)。当該異常コネクションは、上述したように図22のS2209で特定されている。
当該異常コネクションのIDが上位メタデータ2107のテーブル部に含まれないと判定した場合には、保存データ生成部1407は、上位メタデータのテーブル部にレコードを追加する(S2403)。
追加されたレコードには、図20を用いて上述したように当該異常コネクションのIDと開始オフセットとが設定される。
更に、保存データ生成部1407は、当該異常コネクションに関するメタデータを生成する(S2405)。メタデータのヘッダ部には、図19を用いて上述したように当該異常コネクションに関するデータが設定される。
また、保存データ生成部1407は、図18に示したように、収集データ記憶部1411に当該異常コネクションに対応する収集データ1803のための領域を設定する(S2407)。そして、S2409の処理に移る。
一方、当該異常コネクションのIDが上位メタデータ2107のテーブル部に含まれると判定した場合には、そのままS2409の処理に移る。
保存データ生成部1407は、図23のS2305において特定したインデックスレコードに含まれるパケットIDに対応するパケットを一時記憶部1409から読み、そのパケットを当該異常コネクションに対応する収集データに追加する(S2409)。
保存データ生成部1407は、更にメタデータのテーブル部にレコードを追加する(S2411)。追加されたレコードには、図19に示したように、パケットIDと、追加されたパケットのオフセットとが設定される。そして、パケット登録処理を終えると、図23のS2311の処理に戻る。
図23の説明に戻って、保存データ生成部1407は、S2307について未処理のインデックスレコードがあるか否かを判定する(S2311)。未処理のインデックスレコードがあると判定した場合には、S2305の処理に戻って、上述した処理を繰り返す。一方、未処理のインデックスレコードがないと判定した場合には、保存データ生成処理を終え、図22に示したS2213の処理に戻る。
このようにして、保存データ生成部1407は、異常が生じているコネクションIDに対応する複数のパケットIDを特定し、各パケットIDに対応するパケットを収集する。
図22の説明に戻って、書込部1415は、書き込み処理を実行する(S2213)。本実施の形態では、書き込み処理(A)が実行される。図25に、書き込み処理(A)フローを示す。書込部1415は、書き込みのタイミングに至ったか否かを判定する(S2501)。書込部1415は、例えば所定の間隔が経過すると、書き込みのタイミングに至ったと判定する。
書き込みのタイミングに至ったと判定した場合には、書込部1415は、メタデータ記憶部1413に記憶されているメタデータセットと、収集データ記憶部1411に記憶されている収集データセットとを、伝送ネットワーク107を介して保存データ記憶部143に書き込む(S2503)。この例では、書込部1415は、図21に示したようにオブジェクト2101の形式に従ってこれらのデータを書く。
そして、書込部1415は、メタデータ記憶部1413に記憶されているメタデータセットと、収集データ記憶部1411に記憶されている収集データセットとを削除して(S2505)、書き込み処理(A)を終える。
書き込みのタイミングに至っていないと判定した場合には、そのまま書き込み処理(A)を終える。書き込み処理(A)を終えると、図22に示したS2215の処理に戻る。
図22の説明に戻って、保存データ生成部1407は、S2211及びS2213について未処理の異常コネクションがあるか否かを判定する(S2215)。未処理の異常コネクションがあると判定した場合には、S2209の処理に戻って、上述の処理を繰り返す。
一方、未処理の異常コネクションがないと判定した場合には、保存データ生成部1407は、異常コネクション取消処理を実行する(S2217)。
図26に、異常コネクション取消処理フローを示す。異常コネクション取消処理において、パケットの収集を終えた異常コネクションを取り消す。
保存データ生成部1407は、当該インデックステーブル1501の周期番号を特定する(S2601)。当該インデックステーブル1501は、上述したように図22のS2203で特定されている。
保存データ生成部1407は、S2605について未処理の異常コネクションを1つ特定する(S2603)。例えば、保存データ生成部1407は、図5乃至図7に示した異常テーブルに含まれるコネクションIDを順次特定する。
保存データ生成部1407は、異常テーブルにおいて当該コネクションIDに対応する異常解消タイミングを特定し、当該異常解消タイミングが当該インデックステーブル1501の周期番号と一致するか否かを判定する(S2605)。
当該異常解消タイミングが当該インデックステーブル1501の周期番号と一致すると判定した場合には、保存データ生成部1407は、当該異常コネクションを取り消す(S2607)。具体的には、保存データ生成部1407は、異常テーブルにおける当該コネクションIDのレコードを削除し、あるいは当該レコードのコネクションIDのフィールドと、異常解消タイミングのフィールドとを未設定とする。そして、S2609の処理に移る。
当該異常解消タイミングが当該インデックステーブル1501の周期番号と一致しないと判定した場合には、未だパケットの収集を終えていないので、そのままS2609の処理に移る。当該異常解消タイミングが未設定である場合も、そのままS2609の処理に移る。
保存データ生成部1407は、S2605について未処理の異常コネクションがあるか否かを判定する(S2609)。S2605について未処理の異常コネクションがあると判定した場合には、S2603の処理に戻って、上述した処理を繰り返す。
一方、S2605について未処理の異常コネクションがないと判定した場合には、異常コネクション取消処理を終え、図22に示したS2219の処理に戻る。
このようにして、保存データ生成部1407は、少なくとも異常の解消を検出した周期までにパケットバッファ115に格納されたパケットを収集する。例えば、図13に示した例の場合、「ロス増加」が生じているコネクション(コネクションID:CN−0001)については、第10周期において「ロス増加」が解消し、第10周期までのパケットが収集される。
図22の説明に戻って、保存データ生成部1407は、S2203で特定されたインデックステーブル1501を削除する(S2219)。そして、S2201の処理に戻り、上述の処理を繰り返す。以上で、格納処理部127の処理についての説明を終える。
この実施の形態によれば、異常コネクションを事後的に解析する為のデータ保存量を少なくすることができる。
更に、異常が生じる前にキャプチャしたパケットも保存できる。例えば、異常が発生する前のコネクションの状態を把握することに役立つ。
また、異常が解消するまでにキャプチャしたパケットを保存できる。例えば、コネクションにおける異常解消の過程を把握することに役立つ。
尚、パケット毎に異常の有無を識別しなくてもよいので、処理負荷が小さいという面もある。
[実施の形態2]
上述した実施の形態では、所定の異常種別に関するパケットを収集する例について説明したが、本実施の形態では、パケットを収集すべき異常種別を、ストレージ装置109における記憶状態に応じて決める例について説明する。
図27に、実施の形態2に係る格納処理部127のモジュール構成例を示す。本実施の形態に係る格納処理部127は、集計データ記憶部2701とポリシーデータ記憶部2703とを有している。書込部1415は、ストレージ装置109の記憶状態に関するデータを集計する処理も行う。集計データ記憶部2701は、書込部1415によって集計されたデータを記憶する。ポリシーデータ記憶部2703は、異常種別を決めるためのポリシーに関するデータを予め記憶している。
集計データ記憶部2701に記憶される集計データについて説明する。図28に、集計データの例を示す。集計データは、各記録時間に、書き込み量(Gバイト)、書込み時間(秒)及びストレージ残量(Gバイト)を対応付けている。
書き込み量(Gバイト)は、前回の記録時間から当該記録時間までの間に書き込んだ保存データのサイズを示している。
書込み時間(秒)は、前回の記録時間から当該記録時間までの間に保存データの書き込んだ処理時間を示している。
ストレージ残量(Gバイト)は、当該記録時間における残りの記憶容量を示している。
この例では、30秒の間隔で集計データを記録する。この例は、9時59分30秒〜10時00分00秒において、0.626Gバイトの保存データを書き込み、その書き込みに6秒要したことを示している。また、この例は、10時00分00秒に残りの記憶容量が6002Gバイトであることを示している。
更にこの例は、10時00分00秒〜10時00分30秒において、2.534Gバイトの保存データを書き込み、その書き込みに24秒要したことを示している。また、この例は、10時00分30秒に残りの記憶容量が5999Gバイトであることを示している。
更にこの例は、10時00分30秒〜10時01分00秒において、1.245Gバイトの保存データを書き込み、その書き込みに12秒要したことを示している。また、この例は、10時01分00秒に残りの記憶容量が5998Gバイトであることを示している。以上で、集計データ記憶部2701に記憶される集計データについての説明を終える。
本実施の形態では、書き込み処理(A)に代えて書き込み処理(B)を行う。図29に、書き込み処理(B)フローを示す。書込部1415は、図25に示したS2501の場合と同様に、書き込みのタイミングに至ったか否かを判定する(S2901)。
書き込みのタイミングに至ったと判定した場合には、書込部1415は、図25に示したS2503の場合と同様に、メタデータと収集データとを書き込む(S2903)。書込部1415は、S2903におけるストレージ装置109への書き込み量を算出する(S2905)。更に、書込部1415は、S2903におけるストレージ装置109への書き込み時間を算出する(S2907)。
そして、書込部1415は、図25に示したS2505の場合と同様に、メタデータセットと収集データセットとを削除する(S2909)。そして、S2911の処理に移る。
一方、書き込みのタイミングに至っていないと判定した場合には、そのままS2911の処理に移る。
書込部1415は、記録のタイミングに至ったか否かを判定する(S2911)。書込部1415は、例えば所定の間隔で、集計データを記録する。書込部1415は、収集データ記憶部1411及びメタデータ記憶部1413に記憶されているデータ量が所定量に達した場合に、記録のタイミングに至ったと判定するようにしてもよい。
記録のタイミングに至ったと判定した場合には、書込部1415は、ストレージ装置109の残量を特定する(S2913)。書込部1415は、例えばストレージ装置109から残量を示すデータを取得する。そして、書込部1415は、集計データを集計データ記憶部2701に記録して(S2915)、書き込み処理(B)を終える。図28を用いて上述したように、書込部1415は、各記録時間に、書き込み量(Gバイト)、書込み時間(秒)及びストレージ残量(Gバイト)を対応付ける。集計データにおける書き込み量は、当該期間においてS2905で算出した書き込み量を合算した値である。集計データにおける書き込み時間は、当該期間においてS2907で算出した書き込み時間を合算した値である。
一方、記録のタイミングに至っていないと判定した場合には、そのまま書き込み処理(B)を終える。以上で、書き込み処理(B)についての説明を終える。
また、本実施の形態では、図22及び図23に示した格納処理部127の処理に代えて、図30及び図31に示した処理を行う。図30及び図31に、実施の形態2に係る格納処理部127の処理フローを示す。S2201及びS2203における処理は、図22の場合と同様である。そして、保存データ生成部1407は、ポリシー判定処理を実行する(S3001)。
図32に、ポリシー判定処理フローを示す。ポリシー判定処理では、集計データ記憶部2701に記憶されている集計データに基づいて、異常種別を選択するためのポリシーを判定する。
保存データ生成部1407は、過去のストレージ残量から最新のストレージ残量を差し引くことによって、ストレージ残量の減少量を算出する(S3201)。保存データ生成部1407は、複数の周期に関する減少量の単純平均あるいは加重平均を算出するようにしてもよい。
保存データ生成部1407は、最新の書き込み時間が上限の閾値(例えば、28秒)以上であるか否かを判定する(S3203)。最新の書き込み時間が上限の閾値以上であると判定した場合には、保存データ生成部1407は、書き込み量を減らすポリシーを選択する(S3205)。
ここで、ポリシーデータ記憶部2703に記憶されているポリシーデータについて説明する。図33に、ポリシーデータの例を示す。ポリシーデータは、ポリシーに従って保存対象に関する異常種別を定めている。
この例では、ポリシー毎にレコードが設けられている。レコードには、各異常種別を保存対象とするか否かを特定するデータが設定されている。この例で、第1レコードは、第1ポリシーでは「ロス増加」、「RTT増加」及び「サーバ遅延増加」が保存対象に関することを示している。第2レコードは、第2ポリシーでは「ロス増加」及び「RTT増加」が保存対象に関し、「サーバ遅延増加」が保存対象に関しないことを示している。第3レコードは、第3ポリシーでは「ロス増加」が保存対象に関し、「RTT増加」及び「サーバ遅延増加」が保存対象に関しないことを示している。この例では、第1ポリシーにおいて最も書き込み量が多く、第2ポリシーにおいて次に書き込み量が多く、第3ポリシーにおいて書き込み量が最も少ない。
図32のS3205では、例えば図33に示した例において、現在のポリシーよりも下位のポリシーが選択される。
図32の説明に戻って、S3203の処理で最新の書き込み時間が上限の閾値以上ではないと判定した場合には、保存データ生成部1407は、最新の書き込み時間が下限の閾値(例えば、12秒)以下であるか否かを判定する(S3207)。
最新の書き込み時間が下限の閾値以下ではないと判定した場合には、保存データ生成部1407は、S3201で算出した減少量が上限の閾値(例えば、2.8Gバイト)以上であるか否かを判定する(S3209)。
S3201で算出した減少量が上限の閾値以上であると判定した場合には、S3205において書き込み量を減らすポリシーを選択する。
一方、S3201で算出した減少量が上限の閾値以上ではないと判定した場合には、保存データ生成部1407は、現状のポリシーを選択する(S3211)。つまり、ポリシーは変更されない。
S3207において最新の書き込み時間が下限の閾値以下であると判定した場合には、保存データ生成部1407は、S3201で算出した減少量が下限の閾値(例えば、1.1Gバイト)以下であるか否かを判定する(S3213)。
S3201で算出した減少量が下限の閾値以下であると判定した場合には、保存データ生成部1407は、書き込み量を増やすポリシーを選択する(S3215)。図33に示した例の場合には、現在のポリシーよりも上位のポリシーが選択される。
一方、S3201で算出した減少量が下限の閾値以下ではないと判定した場合には、S3209の処理に移って、上述の処理を行う。ポリシー判定処理を終えると、図30に示したS3003の処理に移る。
図30の説明に戻って、保存データ生成部1407は、S3001で判定したポリシーに従って異常種別を特定する(S3003)。そして、端子Dを介して図31に示したS2205の処理に移る。
S2205では、S3003で特定された異常種別に係る異常テーブルに、異常コネクションがあるか否かを判定する。以下、S2207乃至S2217においても、同様にS3003で特定された異常種別に係る異常テーブルにおける異常コネクションを処理の対象とする。
S2219は、図22の場合と同様である。S2219を終えると、端子Eを介して図30に示したS2201の処理に戻る。
このようにして、ストレージ装置109における記憶状態が悪化していると推測される場合には、書き込み量を減らすように異常種別を選択すれば、データ保存の失敗を減らすことができる。また、ストレージ装置109における記憶状態が改善していると推測される場合には、書き込み量を増やすように異常種別を選択すれば、多くの異常を解析できる。
この実施の形態によれば、ストレージ装置109などの記憶部の記憶状態に応じてデータ保存量を加減できる。
[実施の形態3]
上述の実施の形態では、インデックスバッファ123においてリングバッファ301を用いる例を説明したが、本実施の形態では、インデックスバッファ123において2面のバッファテーブルを用いる例について説明する。
本実施の形態では、周期毎にインデックス生成部907がインデックスレコードを書き込むバッファテーブルを切り替える。保存データ生成部1407は、インデックスレコードを書き込まれていない方のバッファテーブルからインデックスレコードを読み込む。そのため、保存データ生成部1407は、インデックス生成部907と同期して、インデックス生成部907と反対になるようにバッファテーブルを切り替える。
図34に、実施の形態3に係るインデックスバッファ123の例を示す。インデックスバッファ123は、図示するようにバッファテーブル3401を2つ含んでいる。バッファテーブル3401は、ヘッダ部を有している。ヘッダ部には、周期番号を設定するためのフィールドと、レコード数を設定するためのフィールドとが設けられている。周期番号は、当該周期を特定する番号である。周期番号は、シーケンシャルに付与される。レコード数は、当該周期におけるインデックスレコードの数である。
バッファテーブル3401のデータ本体は、パケット毎のインデックスレコードを有している。インデックスレコードの構成は、実施の形態1の場合と同様である。
この例は、第2周期の途中の状態を示している。バッファテーブル3401aは、既に終了した第1周期における100000個のインデックスレコードを含んでいる。
この例は、第1レコードにおいて、パケットID「PC−000001」が割り振られたパケットに係るコネクションは、コネクションID「CN−0001」によって特定されることを示している。
同様にこの例は、第2レコードにおいて、パケットID「PC−000002」が割り振られたパケットに係るコネクションは、コネクションID「CN−0002」によって特定されることを示している。
同様にこの例は、第3レコードにおいて、パケットID「PC−000003」が割り振られたパケットに係るコネクションは、コネクションID「CN−0002」によって特定されることを示している。
同様にこの例は、第4レコードにおいて、パケットID「PC−000004」が割り振られたパケットに係るコネクションは、コネクションID「CN−0003」によって特定されることを示している。
同様にこの例は、第5レコードにおいて、パケットID「PC−000005」が割り振られたパケットに係るコネクションは、コネクションID「CN−0003」によって特定されることを示している。
同様にこの例は、第6レコードにおいて、パケットID「PC−000006」が割り振られたパケットに係るコネクションは、コネクションID「CN−0001」によって特定されることを示している。
バッファテーブル3401bは、進行中の第2周期における3個のインデックスレコードを含んでいる。
この例は、第1レコードにおいて、パケットID「PC−100001」が割り振られたパケットに係るコネクションは、コネクションID「CN−0003」によって特定されることを示している。
同様にこの例は、第2レコードにおいて、パケットID「PC−100002」が割り振られたパケットに係るコネクションは、コネクションID「CN−0002」によって特定されることを示している。
同様にこの例は、第3レコードにおいて、パケットID「PC−100003」が割り振られたパケットに係るコネクションは、コネクションID「CN−0004」によって特定されることを示している。
尚、第3周期に移った場合には、バッファテーブル3401aの周期番号が「3」となり、レコード数が0となる。このように、周期毎にバッファテーブル3401aとバッファテーブル3401bとが切り替えられる。
また、本実施の形態では、図10及び図11に示した解析部117の処理に代えて、図35及び図36に示した処理を行う。
図35及び図36に、実施の形態3に係る解析部117の処理フローを示す。S1001の処理は、図10の場合と同様である。
インデックス生成部907は、書き込み先のバッファテーブル3401の新しいインデックスレコードにパケットIDを書く(S3501)。
S1005乃至S1013の処理については、図10の場合と同様である。尚、S1007で所定のプロトコルではないと判定した場合には、端子Gを介して図36に示したS3505の処理に移る。S3505の処理については、後述する。S1011においてコネクションデータが登録されていると判定した場合、あるいはS1013の処理を終えた場合には、端子Fを介して図36のS3503の処理に移る。
図36の処理に移って、インデックス生成部907は、S3501でパケットIDを書いたレコードに、コネクションIDを書く(S3503)。そして、インデックス生成部907は、書き込み先のバッファテーブル3401におけるレコード数をインクリメントする(S3505)。
S1019乃至S1023の処理については、図11の場合と同様である。
インデックス生成部907は、バッファテーブル3401を切り替えるタイミングに至ったか否かを判定する(S3507)。この例では、インデックス生成部907は、図11の場合と同様に所定の周期に従って、バッファテーブル3401を切り替えるタイミングに至ったと判定する。インデックス生成部907は、レコード数が所定の値に達した場合に、バッファテーブル3401を切り替えるタイミングに至ったと判定するようにしてもよい。
バッファテーブル3401を切り替えるタイミングに至ったと判定した場合には、インデックス生成部907は、書き込み先のバッファテーブル3401を切り替える(S3509)。そして、インデックス生成部907は、切り替え先のバッファテーブル3401における周期番号に2を加える(S3511)。このとき、インデックス生成部907は、レコード数を「0」に初期化する。そして、端子Hを介して、図35に示したS1001の処理に戻る。
一方、バッファテーブル3401を切り替えるタイミングに至っていないと判定した場合には、端子Hを介して、図35に示したS1001の処理に戻る。以上で、解析部117の処理フローについての説明を終える。
また、本実施の形態では、図16に示した読取部1401の処理に代えて、図37に示した処理を行う。
読取部1401は、現在の周期番号を特定する(S3701)。読取部1401は、例えば2つのバッファテーブル3401のヘッダ部に設定されている周期番号のうち、大きい方の周期番号を特定する。あるいは、読取部1401は、解析部117から現在の周期番号を取得するようにしてもよい。また、読取部1401は、インデックスの生成を開始してからの経過時間を、1周期に相当する時間で割って、その商に1を加えることによって現在の周期番号を特定するようにしてもよい。
読取部1401は、周期番号が切り替わったか否かを判定する(S3703)。具体的には、読取部1401は、S3701で特定した現在の周期番号が、以前の周期番号よりも1増えた場合に周期番号が切り替わったと判定する。
周期番号が切り替わったと判定した場合には、読取部1401は、新たなインデックステーブル1501を生成し(S3705)、書き込まれていない方のバッファテーブル3401のデータをインデックステーブル1501にコピーする(S3707)。具体的には、周期番号とインデックスレコードとをコピーする。そして、S3701の処理に戻る。
周期番号が切り替わっていないと判定した場合には、S3701の処理に戻る。
このように、バッファテーブルを切り替えて用いる場合には、同じ周期のパケットについて、保存データを生成する処理が、インデックスを生成する処理よりも一定時間遅れるので、異常を検出した時点ですぐに保存データを生成するようにすると、異常発生前のパケットを収集することになる。
この実施の形態によれば、インデックステーブル1501を切り替えれば、解析部117がインデックスレコードを書き込む領域と格納処理部127がインデックスレコードを読み出す領域とが常に異なり、完全ロックフリーアルゴリズムによって、マルチコアを生かす並列処理が実現される。例えば、ストレージ装置109に対する処理待ちで一部のオブジェクトの格納が遅れても、全体処理に対する影響は抑えられ、また復旧されるまでデータを消失しないようにできる。
以上本発明の実施の形態を説明したが、本発明はこれに限定されるものではない。例えば、上述の機能ブロック構成は実際のプログラムモジュール構成に一致しない場合もある。
また、上で説明した各記憶領域の構成は一例であって、上記のような構成でなければならないわけではない。さらに、処理フローにおいても、処理結果が変わらなければ処理の順番を入れ替えることも可能である。さらに、並列に実行させるようにしても良い。
なお、上で述べたネットワーク監視装置101は、コンピュータ装置であって、図38に示すように、メモリ2501とCPU(Central Processing Unit)2503とハードディスク・ドライブ(HDD:Hard Disk Drive)2505と表示装置2509に接続される表示制御部2507とリムーバブル・ディスク2511用のドライブ装置2513と入力装置2515とネットワークに接続するための通信制御部2517とがバス2519で接続されている。オペレーティング・システム(OS:Operating System)及び本実施例における処理を実施するためのアプリケーション・プログラムは、HDD2505に格納されており、CPU2503により実行される際にはHDD2505からメモリ2501に読み出される。CPU2503は、アプリケーション・プログラムの処理内容に応じて表示制御部2507、通信制御部2517、ドライブ装置2513を制御して、所定の動作を行わせる。また、処理途中のデータについては、主としてメモリ2501に格納されるが、HDD2505に格納されるようにしてもよい。本発明の実施例では、上で述べた処理を実施するためのアプリケーション・プログラムはコンピュータ読み取り可能なリムーバブル・ディスク2511に格納されて頒布され、ドライブ装置2513からHDD2505にインストールされる。インターネットなどのネットワーク及び通信制御部2517を経由して、HDD2505にインストールされる場合もある。このようなコンピュータ装置は、上で述べたCPU2503、メモリ2501などのハードウエアとOS及びアプリケーション・プログラムなどのプログラムとが有機的に協働することにより、上で述べたような各種機能を実現する。
以上述べた本発明の実施の形態をまとめると、以下のようになる。
本実施の形態に係るパケット保存方法は、ネットワークからキャプチャしたパケットの各々に第1識別子を割り当てると共に、当該パケットの各々をバッファに格納する処理と、第1識別子の各々に、当該第1識別子に係るパケットのコネクションを特定する第2識別子を対応付ける処理と、パケットの解析によって異常が生じているコネクションを検出する処理と、異常が生じているコネクションの第2識別子が対応付けられている複数の第1識別子を特定し、特定した当該複数の第1識別子の各々が割り当てられているパケットをバッファから収集し、収集した複数の当該パケットを記憶部に格納する格納処理とを含む。
このようにすれば、異常コネクションを事後的に解析する為のデータ保存量を少なくすることができる。
上記格納処理において、異常が生じているコネクションを検出した時よりも所定期間遡った時以降にバッファに格納されたパケットのうちから、収集すべきパケットを選択するようにしてもよい。
このようにすれば、異常が生じる前にキャプチャしたパケットも保存できる。例えば、異常が発生する前のコネクションの状態を把握することに役立つ。
上記パケット保存方法は、更に、異常の解消を検出する処理を含むようにしてもよい。また、上記格納処理において、異常の解消を検出した時までにバッファに格納されたパケットのうちから、収集すべきパケットを選択するようにしてもよい。
このようにすれば、異常が解消するまでにキャプチャしたパケットを保存できる。例えば、コネクションにおける異常解消の過程を把握することに役立つ。
上記パケット保存方法は、更に、記憶部における記憶状態に応じて、異常の種別を特定する処理を含むようにしてもよい。
このようにすれば、記憶部の記憶状態に応じてデータ保存量を加減できる。
なお、上記方法による処理をコンピュータに行わせるためのプログラムを作成することができ、当該プログラムは、例えばフレキシブルディスク、CD−ROM、光磁気ディスク、半導体メモリ、ハードディスク等のコンピュータ読み取り可能な記憶媒体又は記憶装置に格納されるようにしてもよい。尚、中間的な処理結果は、一般的にメインメモリ等の記憶装置に一時保管される。
以上の実施例を含む実施形態に関し、さらに以下の付記を開示する。
(付記1)
ネットワークからキャプチャしたパケットの各々に第1識別子を割り当てると共に、当該パケットの各々をバッファに格納する処理と、
前記第1識別子の各々に、当該第1識別子に係るパケットのコネクションを特定する第2識別子を対応付ける処理と、
前記パケットの解析によって異常が生じているコネクションを検出する処理と、
前記異常が生じているコネクションの第2識別子が対応付けられている複数の第1識別子を特定し、特定した当該複数の第1識別子の各々が割り当てられているパケットを前記バッファから収集し、収集した複数の当該パケットを記憶部に格納する格納処理と
を含み、コンピュータにより実行されるパケット保存方法。
(付記2)
前記格納処理において、
前記異常が生じているコネクションを検出した時よりも所定期間遡った時以降に前記バッファに格納されたパケットのうちから、収集すべき前記パケットを選択する
付記1記載のパケット保存方法。
(付記3)
更に、前記異常の解消を検出する処理を含み、
前記格納処理において、前記異常の解消を検出した時までに前記バッファに格納された前記パケットのうちから、収集すべき前記パケットを選択する
付記1又は2記載のパケット保存方法。
(付記4)
更に、前記記憶部における記憶状態に応じて、前記異常の種別を特定する処理
を含む付記1乃至3のいずれか1つ記載のパケット保存方法。
(付記5)
ネットワークからキャプチャしたパケットの各々に第1識別子を割り当てると共に、当該パケットの各々をバッファに格納する処理と、
前記第1識別子の各々に、当該第1識別子に係るパケットのコネクションを特定する第2識別子を対応付ける処理と、
前記パケットの解析によって異常が生じているコネクションを検出する処理と、
前記異常が生じているコネクションの第2識別子が対応付けられている複数の第1識別子を特定し、特定した当該複数の第1識別子の各々が割り当てられているパケットを前記バッファから収集し、収集した複数の当該パケットを記憶部に格納する格納処理と
をコンピュータに実行させるためのパケット保存プログラム。
(付記6)
ネットワークからキャプチャしたパケットの各々に第1識別子を割り当てると共に、当該パケットの各々をバッファに格納する第1格納処理部と、
前記第1識別子の各々に、当該第1識別子に係るパケットのコネクションを特定する第2識別子を対応付ける対応付け部と、
前記パケットの解析によって異常が生じているコネクションを検出する検出部と、
前記異常が生じているコネクションの第2識別子が対応付けられている複数の第1識別子を特定し、特定した当該複数の第1識別子の各々が割り当てられているパケットを前記バッファから収集し、収集した複数の当該パケットを記憶部に格納する第2格納処理部と
を含み、コンピュータにより実行されるパケット保存装置。