以下、本発明の一実施形態を添付図面に基づいて説明する。
図1は、本発明の実施の形態を示し、フロー情報処理装置101を備えたネットワークシステムのブロック図である。
フロー情報処理装置101は、CPU(プロセッサ)2、メモリ3、記憶装置(ストレージ装置)4、インタフェース5及び通信インターフェース104を備えた計算機を主体として構成される。
CPU2は、メモリ3に格納されたプログラム(フロー処理部106)を実行することによって、後述するようにフロー情報200の格納と検索用情報の生成と格納及び検索処理を行う。CPU2は、メモリ3にロードされたフロー処理部106を実行し、受信したフロー情報200を一旦メモリ3に設定したキャッシュ領域30に格納し、所定の条件が成立したときに検索用情報であるランク付きビットマップインデックス700を作成し、このランク付きビットマップインデックス700とフロー情報200を後述するようにファイルにまとめたフロー情報200Aを記憶装置109に格納する。なお、フロー処理部106は、ランク付きビットマップインデックス700を生成する際に、メモリ3上に設定された設定テーブル31に格納された生成条件を参照する。
記憶装置109は、ディスク装置等を含んで構成され、メモリ3のキャッシュ領域30から転送されたファイル形式のフロー情報200Aと、フロー処理部106が生成したランク付きビットマップインデックス700及びフロー処理部106等のプログラムを格納する。なお、フロー処理部106等のプログラムを格納する記憶媒体としてはHDD等で構成された記憶装置109に限定されるものではなく、光学ディスクや不揮発性半導体メモリ等に格納することができる。
インタフェース5は、記憶装置109、入力装置6、ディスプレイ7及通信インターフェース104などに接続される。入力装置15は、担当者によって入力された情報を、インタフェース5を介してCPU2に送信する。ディスプレイ7は、CPU2によって指示された情報を表示する。通信インターフェース104は、LANなどのネットワーク8に接続されて信号(パケット)の送受信を行う。
ネットワーク8には、複数のルータ装置102と、複数のサーバ装置103が接続される。ルータ装置102は、サーバ装置103と外部のネットワークの通信を行い、ルータ装置102が処理した内容をフロー情報200としてフロー情報処理装置101に送信する。また、複数のサーバ装置103のうちの何れかがネットワークシステムの監視を行い、フロー情報処理装置101に対してフロー情報200を要求するクエリを発行する。
図2は、本発明に係わるネットワークシステムの機能ブロック図である。
フロー情報処理装置101は1台以上のルータ装置102と接続される。ルータ装置102は、パケットの転送を行うとフロー情報200をフロー情報処理装置101に送信する。フロー情報処理装置101では、ルータ装置102からのフロー情報200を通信インターフェース104で受信し、プロトコル処理部105によってプロトコルごとの前処理を行い、フロー処理部106にてフロー情報200の蓄積とランク付きビットマップインデックス700の生成と検索処理を実行する。プロトコル処理部105は、フロー情報処理装置101のCPU2で実行されるOSに含まれ、例えば、トランスポート層の処理を行う。プロトコル処理部105は、通信インターフェース104が受信した情報(パケット)のプロトコルから、受信した情報がフロー情報200、クエリ及びその他の情報のいずれであるかを判定し、フロー情報200であれば受信した情報に予め設定した処理を施してからフロー処理部106のフロー情報受信部107に転送し、クエリであれば受信したクエリに予め設定した処理を施してからフロー処理部106のクエリ受信部111に送信する。
ルータ装置102が発行したフロー情報200はまずフロー情報受信部107に送られる。受信したフロー情報200はフロー情報記憶部108を通じて記憶装置109にて記憶する。
フロー情報記憶部108は、図1に示したメモリ3のキャッシュ領域30に設定され、受信したフロー情報200を一時的に格納する。検索用情報生成部110は、所定の条件が成立する度に、キャッシュ領域30のフロー情報記憶部108に格納されたフロー情報200からランク付きビットマップインデックス700を生成し、フロー情報記憶部108のフロー情報200をファイル形式にしたフロー情報200Aと、ランク付きビットマップインデックス700を記憶装置109に格納する。なお、フロー情報記憶部108は、キャッシュ領域30のフロー情報200が記憶装置109に書き込まれると、キャッシュ領域30のフロー情報200をクリアする。
検索用情報生成部110は、検索用情報の生成を開始する所定の条件として、例えば、予め設定した周期となったとき、またはキャッシュ領域30がフロー情報200で満たされて空き容量がなくなったとき(キャッシュ領域30の空き容量が所定値=0%)等を所定の条件の成立とすることができる。
所定の条件を予め設定した周期とした場合、検索用情報生成部110は、図示しないタイマなどで時間を監視し、所定の周期になるとキャッシュ領域30のフロー情報記憶部108の全てのフロー情報200を取得する。そして、検索用情報生成部110は、フロー情報200から後述するようにランク付きビットマップインデックス700を生成して記憶装置109に格納し、さらに取得したフロー情報200をひとつのファイルにまとめてフロー情報200Aとして記憶装置109に格納する。すなわち、所定の周期毎に、ランク付きビットマップインデックス700とフロー情報200を含むファイルとしてのフロー情報200Aが記憶装置109に書き込まれていく。
フロー情報処理装置101は上述のように一台以上のサーバ装置103と接続されており、サーバ装置103は、フロー情報処理装置101が記憶するフロー情報200を参照する際に、検索条件を記した要求(以下クエリ)をフロー情報処理装置101に対して送信する。
フロー情報処理装置101は、サーバ装置103からのクエリを通信インターフェース104で受信し、プロトコル処理部105によってプロトコルごとの前処理を行ってから、クエリ受信部111に送信する。
クエリ処理部112は、受信したクエリから検索条件を抽出して検索部113に転送する。検索部113は、検索条件に応じて記憶装置109から検索用情報を取り出し、検索処理を行う。
検索部113は、検索用情報であるランク付きビットマップインデックス700を用いてクエリで要求されたフロー情報200の検索を行って、検索処理の結果に応じたフロー情報を記憶装置109から取り出す。この際、ランク付きビットマップインデックス700で検索した結果に加えて、フロー情報200が検索要求に合致しているかどうかを記憶装置109のフロー情報200で検索処理を行ってもよい。
検索部113で記憶装置109から取り出したフロー情報200はクエリ処理部112を介して送信部114へ送られる。
検索結果であるフロー情報200は送信部114からプロトコル処理部105を介して所定のプロトコルに整形された後、通信インターフェース104からネットワーク8を介してサーバ装置103へ送信される。
この送信処理は、検索結果が生成される度に実行しても良いし、一定期間または一定量の検索結果を蓄積してからサーバ装置103へ送信してもよい。
これら一連の処理における設定値(例えば、検索用情報の作成開始を判定する所定の条件や、ランク付きビットマップインデックス700を作成するためのパラメータ等)は、管理者またはユーザが、後述するようなユーザインターフェース115を通じて入力装置6等から設定する。
図3は、フロー情報200の一例を示す説明図である。
ルータ装置102から受信したフロー情報200は上記従来例で述べたようにNetFlowやIPFIXによって定められた形式に則り、ルータ装置102が処理したパケットの情報が含まれる。フロー情報200の一例としては、IPパケットにおける送信元のIPアドレス201や送信先のIPアドレス202、プロトコル番号203に加え、IPアドレス間で送受信されたパケットの個数204や合計のバイト数(205)等のフィールドを各エントリに備えた例を示す。
図4はサーバ装置103からフロー情報処理装置101に対して送信されるクエリに含まれる検索条件の一例である。
検索条件には、図2に存在したプロトコル番号301や、IPアドレスにプレフィックス指定を加えたもの302の他に、フロー情報処理装置101がルータ装置102からフロー情報200を受信した時刻の最小値303や時刻の最大値304を指定することもできる。この検索条件を受け付けた検索部113は、指定された時刻範囲(時刻最小値303や時刻最大値304の間)で、指定されたIPアドレス+プレフィックス302で、指定されたプロトコル番号301を含むフロー情報200をランク付きビットマップインデックス700から検索することになる。
図5は、従来例による検索処理の一例を示すフローチャートである。
処理対象となるフロー情報200は、フロー情報処理装置101が受信した全てのフロー情報200である。この際、例として、フロー情報200が記憶装置109を構成するハードディスク装置上に記録されており、記録を行った時間がファイル名に記されているために予め絞り込みが行える場合は、対象とするファイルの絞り込みを行ってもよい。
検索を行う際には、記憶装置109が記録している全フロー情報200に対して(401)一件ずつ取り出し(402)、抽出したフロー情報200が図3に示すような条件(クエリに含まれる検索条件)を満たしているか検査する(403)。検索条件を満たすフロー情報200であると判定した場合は、当該フロー情報200をサーバ装置103に送信する処理(404)を行い、検索条件が満たされない場合は次のフロー情報200に移る。
このような従来例による検索手法においてフロー情報200が、ハードディスク装置のような入出力によるオーバヘッドが大きいメディアに記録されている場合は、検索開始から検索結果の出力までの待ち時間が増大し、クエリの結果を返信するまでの時間が増大するだけでなく、フロー情報処理装置101全体の性能も低下する。
このような総当り的な検索方法に対する解決方法として、検索用情報を用いる方式がある。本発明では検索用情報として、ビットマップインデックスを用いる。
図6はビットマップインデックスの一例を示す説明図である。このビットマップインデックス501、502は、検索用情報生成部110がランク付きビットマップインデックス700を生成する過程で作成するものである。
検索用情報生成部110は、所定の周期になると、図3に示したキャッシュ領域30のフロー情報記憶部108に格納された複数のフロー情報200から、図6に示すようにひとつのファイルで構成されるフロー情報200Aを生成する。
検索用情報生成部110は、フロー情報200を特定するインデックスを行211を付加し、フロー情報200のフィールドの項目名(要素)格納した列210と、各フロー情報200の内容を格納する列212を含むファイルを生成する。例えば、図6の要素Aは、図3に示したプロトコル番号に割り当て、各フロー情報200に含まれるプロトコル番号を行方向に「4」、「17」、「6」と順次格納する。同様に、要素Bには図3に示した送信元IPアドレス201を割り当てて、行方向に各フロー情報200の内容を格納し、要素Cには図3に示した送信先IPアドレス202を割り当てて、行方向に各フロー情報200の内容を格納してフロー情報200Aを生成する。
検索用情報生成部110は、フロー情報200Aのファイル名にフロー情報200を受信した時刻を含める。この時刻は、例えば、フロー情報200の受信時刻は、キャッシュ領域30のフロー情報記憶部108に格納された複数のフロー情報200のうち、最新の時刻と最も古い時刻を対にしたものを用いることができる。
フロー情報200Aは、このように、フロー情報200を識別するインデックスを行211を行方向に設定し、フロー情報200の要素(IPアドレスやプロトコル番号、バイト数あるいはパケット数)を列210方向に設定し、インデックス行211に対応するフロー情報200の要素の値を列212に格納する。
次に、検索用情報生成部110はフロー情報200の要素(項目名)毎に、ビットマップインデックス501、502をそれぞれ生成する。ビットマップインデックス501は、フロー情報200Aの要素Aに関するビットマップインデックスであり、検索用情報生成部110は列510にフロー情報200Aの要素Aが取り得る値を設定し、行511にフロー情報200Aの行211に設定したインデックスを識別子として格納する。なお、インデックスとして行211に付与する識別子はユニークなシリアル値などを用いることができる。検索用情報生成部110は、行511の識別子毎に列512を設定して該当する要素Aの値の行に「1」(ビット情報をオン)を設定する。例えば、フロー情報200Aのインデックス=0のフロー情報は、要素Aの値が「4」であるので、ビットマップインデックス501の識別子=0の列512で要素Aの値が「4」となる行に「1」を設定し、他の行に「0」(ビット情報をオフ)をセットする。検索用情報生成部110は、フロー情報200Aの各インデックスについて要素Aの値に対応するビットマップインデックス501を作成する。
同様に、検索用情報生成部110は、列520にフロー情報200Aの要素Bが取り得る値を設定し、行521にフロー情報200Aの行211に設定したインデックスを識別子として格納する。検索用情報生成部110は、行521の識別子毎に列522を設定して該当する要素Aの値の行に「1」を設定する。
以上の処理により検索用情報生成部110はフロー情報200の要素毎にビットマップインデックス501、502を設定する。なお、上記ではフロー情報200Aの要素A、Bのビットマップインデックスを作成する例を示したが、ビットマップインデックスを作成する要素は予め設定された要素についてのみ作成するようにしてもよい。また、この時点ではビットマップインデックス501、502はメモリ3上に保持される。
図10のビットマップインデックス501Aでは、フロー情報200Aの要素の値Aについて、要素の識別子が0から99まで存在し、各要素が0から4の値を取る場合は、5×100の二値のテーブルを作成する。これがビットマップインデックスである。このビットマップインデックスに対して、行511の識別子1の値が1であるならば、値が1、識別子が1の行の値を1とし、識別子1におけるそれ以外の値は0とする。これを全要素に対して行う。
これらの要素について、値AがXである要素を検索したい場合は、ビットマップインデックスにおける列510の値がXの行を調べ、値が1であるものが該当するものとなる。
図6のビットマップインデックス501,502を利用する際には、検索部113が図7、図8に示すように、検索条件が複数のビットマップインデックス501、502を利用する場合は、検索部113が検索条件に応じて演算用テーブル503、504をメモリ3上に作成することができる。例として、フロー情報200Aの各要素の持つ値Aと値Bに対してビットマップインデックス501、502が作成されている場合に、値Aが1もしくは値Bが2の要素の識別子を検索したい場合は、ビットマップインデックス501、502における値Aの列1と値Bの列2の値をOR演算し、結果が1である識別子の情報を取り出せばよい。これを図7に示すように、演算用テーブル503としてメモリ3上に保持する。
同様に、値Aが1かつ値Bが2の要素の識別子を検索したい場合は、ビットマップインデックス501、502における値Aの列1と値Bの列2の値をAND演算し、結果が1である識別子の情報を取り出せばよい。この演算結果を図8で示すように、演算用テーブル504としてメモリ3上に保持する。
そして、検索部113は、複数の検索条件について図7または図8の演算用テーブル503、504を用いてビットマップの検索を実行することができる。
図9は、本発明のランク付きビットマップインデックスと比較するため、ビットマップインデックス501,502を用いた検索の一例を示すフローチャートである。このフローチャートは、フロー処理部106の検索部113で実行することができる。
検索部113は、クエリ処理部112から受信した検索条件を取得する(601)。そして、検索用情報生成部110は、検索条件に含まれる期間(時刻範囲)から記憶装置109に格納されたビットマップインデックス501、502をメモリ3上に読み込んで。ビットマップインデックス501、502上で検索条件を満たす要素の値とビット(行)を検索する。検索部113は、ビットマップインデックス501、502で検索条件を満たす行があれば、当該行の値が1となっている識別子をフロー情報200Aのインデックスとして取得する(602)。このビットマップインデックス501の検索の際に、検索部113は上記図7、図8で示したような演算用テーブル503,504を作成し、これらのテーブルで検索を行っても良い。
次に、検索部113は、上記検索条件に含まれる期間に該当するフロー情報200Aを記憶装置109から取得し、上記インデックスに該当する列212からフロー情報200を取得する(604、605)。そして、取得したフロー情報200をクエリ処理部112及び送信部114を介してサーバ装置103に応答する(605)。なお、上記ステップ603〜605の処理は、上記ステップ602で取得した識別子の数だけ繰り返す。
この図9に示したビットマップインデックスを利用する処理と、上記図5に示した検索用情報を利用しない従来例の処理との違いは、検索用情報であるビットマップインデックス501,502を用いて予め検索条件に合致するフロー情報200Aを算出し(601)、該当するフロー情報200Aのみを取り出す(602)点である。これによりフロー情報200Aの全体を記憶装置109から読み込む回数が大幅に削減され、クエリの応答時間の短縮およびフロー情報処理装置101の高速化が期待できる。
このビットマップインデックス501、502の長所は、演算用テーブル503,504を生成することで、複数のビットマップインデックス間でANDやORといった演算の容易性と高速性である。短所は、新たなデータ挿入の煩雑性と、検索用データの大型化である。
ただし、ビットマップインデックスに新たにデータを挿入する場合、新たに挿入したデータよりも後方のデータを1ビットずつシフトさせなければならない。また、検索用情報のサイズは要素一つにつき「要素が取る値の範囲×フロー情報数」となり、全要素に対してビットマップインデックスを適用した場合は、受信したフロー情報200と同等の容量が検索用情報に必要となる。
本発明では、ビットマップインデックスの長所を生かし、短所を低減させたものとして「ランク付きビットマップインデックス」を提案する。
図10に、値の取る範囲が0から255、フロー数が0から99のランク付きビットマップインデックス700の例を示す。図6に示したビットマップインデックス501,502では、フロー情報200Aの要素が取る値とビットマップインデックスの行が一対一で対応していたのに対し、図10に示すランク付きビットマップインデックス700では、新たに「その他」行(703)を追加し、出現頻度が低い(出現頻度が所定値未満)の要素をひとつの行にまとめることで、インデックスのデータ量を大幅に削減し、検索部113による検索を高速に行うようにしたものである。
検索用情報生成部110は、上記図6に示したと同様のビットマップインデックス501Aを作成した後、フロー情報200Aの統計や設定値から「ランク数」と「ランキング」を算出する。そして、「ランキング」の上位「ランク数」までをランク付きビットマップインデックス700に格納し、残りを「その他」列に格納する。
図10のビットマップインデックス501Aは、100(0〜99)のフロー情報200が要素の値を100(0〜99)ある場合を示す。ビットマップインデックス501Aは、100個の要素の値を格納する列512と、フロー情報200Aのインデックスを識別子と格納する行511を備え、識別子に対応する列512に上記図6と同様に、フロー情報200Aの要素の値が該当する行に「1」を設定する。
次に、検索用情報生成部110は、列510の要素の値について「1」が設定されている数が大きい順に行方向でソートする。そして、検索用情報生成部110は、予め設定されたランク数Rまでの順位となる行を、ランク付きビットマップインデックス700に加える。つまり、要素の値の出現頻度の高い順にランク数Rまでを、ビットマップインデックスとして利用する。
次に、ランク数Rから最下位の行までのビットを、ひとつの行にまとめ、この行をランク付きビットマップインデックス700のその他703として加える。これにより、ランク付きビットマップインデックス700のデータ量は(ランク数R+1)×フロー情報200の数となり、この例では「1」を設定するビットの領域を5×100のビットで表現することができる。これに対してビットマップインデックス501Aでは、「1」を設定するビットの領域は、要素の値の数×フロー情報200の数となり、この例では、100×100のビット数が必要となる。
このように、ランク付きビットマップインデックス700では、ビットマップインデックス501Aに比して大幅にデータ量を削減でき、さらに、検索対象となる要素の値を格納する行は、ランク数Rとなって検索処理を大幅に高速化することができる。
ここで、フロー情報200の要素となる、プロトコル番号やポート番号やIPアドレスなどは、要素の値が取り得る範囲は0h〜FFh、あるいは0h〜FFFFh等の広い範囲となる。そして、フロー情報200の要素の値は、均等に出現することはほとんどなく、例えば、ネットワーク8内で出現するプロトコル番号は、常用されるプロトコルと、極めて希なプロトコルが存在する。さらに、フロー情報200をサーバ装置103から検索する場合は、ネットワーク8やルータ装置102に障害などが発生した場合であるので、リトライなどによって特定のプロトコルの出現頻度が高くなる傾向がある。
そこで、出現頻度の高い要素の値についてはビットマップインデックス501Aとして使用し、出現頻度の低い要素の値についてはその他703としてランク付きビットマップインデックス700を生成する。
サーバ装置103からのクエリを検索部113が実行し、検索条件がその他703に該当する場合(要素の値の出現頻度が低い)は、上記図5に示したように、記憶装置109のフロー情報200Aから検索するため、検索処理に要する時間は従来例と変わらない。しかし、サーバ装置103からのクエリを検索部113が実行し、検索条件がランク数Rの順位の要素の値と一致すれば、ランク付きビットマップインデックス700からフロー情報200Aのインデックスを取得できるので、このインデックスで目的のフロー情報200Aを記憶装置109から取得することで、前記従来例に比して極めて高速にアクセスすることが可能となる。
そして、上述したように、フロー情報200Aの要素Aの値は、一般的に均一ではなく偏りを持つものであるから、検索条件がその他703となることは頻繁に発生せず、ほとんどの検索条件がランク数Rの範囲で一致するので、検索処理を極めて高速に行うことができるのである。
さらに、ビットマップインデックス501Aは、フロー情報200Aの要素毎に生成する必要があるため、要素の値の数が大きく、フロー情報200が大量にある場合では、ひとつのフロー情報200Aに対するビットマップインデックス501Aの数が増大してデータ量が大きくなるため、検索部113が記憶装置109からビットマップインデックス501Aを読み込む際の時間も増大してしまう。
これに対して、要素の値の数を制限したランク付きビットマップインデックス700では、要素の値の数が大きく、フロー情報200が大量にある場合でも、行の数は所定のランク数R+1を維持できるので、データ量が過大になるのを防いで、検索部113が記憶装置109からランク付きビットマップインデックス700を読み込む際の時間が増大するのを防止して、検索処理の高速化に寄与することができるのである。
図11は、図2に示したユーザインターフェース115の一例を示し、ランク付きビットマップインデックス700を生成する条件を設定するユーザインターフェースで、ディスプレイ7に表示される画面イメージである。
ユーザインターフェース115で、フロー情報200に含まれる要素のうちランク付きビットマップインデックス700を生成する要素(図中蓄積項目)1400を決定するビットマップインデックス作成1401と、要素の出現頻度の順位または比率での何れかを指定するランク設定1402とを含む。
図示の例では、フロー情報200の要素の内、送信元IPアドレス、送信先IPアドレス、プロトコル番号及び送信先ポート番号の要素についてビットマップインデックス作成1401が丸印に設定されて、ビットマップインデックスの生成を選択している。そして、信元IPアドレス、送信先IPアドレスについてはランク設定1402のランク数Rを「5」に設定し、出現頻度が上位4位までの要素をビットマップインデックスに格納し、5位以下をその他703にまとめることを示す。また、プロトコル番号については、フロー情報200の要素のうち、出現頻度の上位95%までの要素についてビットマップインデックスに格納し、残りの5%の出現頻度となる要素は、その他703に格納することを示す。送信先ポート番号も同様であり、出現頻度の上位90%をビットマップインデックスに格納することを示す。これらの設定は、管理者などが入力装置6を構成するマウスやキーボードにより入力する。
フロー処理部106は、ユーザインターフェース115で設定されたランク付きビットマップインデックス700の生成条件をメモリ3上の設定テーブル31に格納し、検索用情報生成部110を実行するときに設定テーブル31に設定された生成条件を参照し、ランク付きビットマップインデックス700を生成する。
図12は、ランク付きビットマップインデックス700を生成する処理の一例を示すフローチャートである。この処理は、フロー処理部106の検索用情報生成部110が所定の条件を満たしたときに実行されるプログラムである。なお、検索用情報生成部110は、上述したように、所定の周期(時間)となったとき、またはキャッシュ領域30の空き容量がなくなったときに、所定の条件を満たしたと判定し、図12の処理を開始する。
まず、ステップ1001では、検索用情報生成部110がキャッシュ領域30のフロー情報記憶部108に格納されている全てのフロー情報200を処理対象としてステップ1004までのループ処理を開始する。
ステップ1002では、検索用情報生成部110がメモリ3上の設定テーブル31を読み込んで、図3に示したフロー情報200のフィールド201〜205のうち、図11のユーザインターフェース115のビットマップインデックス作成1401が選択されている項目を取得する。検索用情報生成部110は、取得した項目をランク付きビットマップインデックス700の作成対象の要素とする。
ステップ1003では、検索用情報生成部110がひとつのフロー情報200を読み込んで、上記ステップ1002で取得した作成対象の要素のフィールド201〜205の値を抽出する。
次に、ステップ1004では、検索用情報生成部110が上記ステップ1003で抽出したフィールドの値の出現頻度(出現回数)に1を加算する。すなわち、図6のビットマップインデックス501の値を格納する列510に対応するフロー情報200の識別子ごとに列512の値に「1」を設定する。
検索用情報生成部110は、上記ステップ1002〜1004のループ処理で、ひとつのフロー情報200の作成対象の要素の出現頻度を求めると、ステップ1001に戻って次のフロー情報200について同様の処理を行う。そして、フロー情報記憶部108の全てのフロー情報200について、ランク付きビットマップインデックス700を作成する対象となっている各要素の値の出現頻度の演算が完了すると、ステップ1005の処理に進む。
ステップ1005では、検索用情報生成部110が、ランク付きビットマップインデックス700の作成対象の各フィールド(要素)について、ステップ1006、1007のループ処理を行う。なお、ステップ1005では、ランク付きビットマップインデックス700の作成対象の要素毎に図6で示したビットマップインデックス501、502を生成しておく。
ステップ1006では、検索用情報生成部110がフィールド201〜205の項目毎に上記ステップ1004で求めた値の出現頻度からビットマップインデックスを作成する。すなわち、上記ステップ1004では、検索用情報生成部110が、フロー情報200のインデックス(識別子)毎に図6に示す列512を作成したので、要素毎のビットマップインデックス501に対して、フロー情報200の識別子毎の列512を加える。この処理によって、現在着目しているフィールド(要素)のビットマップインデックス501が生成される。
次に、ステップ1007では、検索用情報生成部110が設定テーブル31からランク数Rを読み込んで、上記図10で示したように、出現頻度の高い値の順にビットマップインデックス501Aを列方向にソートし、出現頻度の上位「ランク数R」までのビットマップインデックス501Aを保持し、出現頻度の順位がランク数R+1以降の行の値を、その他703の行にまとめて要素毎のランク付きビットマップインデックス700を生成する。
検索用情報生成部110は、ひとつのフィールドについてランク付きビットマップインデックス700を生成すると、ステップ1005に戻って、次のフィールドについてランク付きビットマップインデックス700を生成する処理を繰り返し、全てのフィールドにいついてランク付きビットマップインデックス700を生成する。
上記処理により、図3に示したフロー情報200のフィールド201〜205のうち、図11のユーザインターフェース115でビットマップインデックス作成1401が選択されたフィールド毎に、指定されたランク数R+1の行を備えるランク付きビットマップインデックス700が生成される。なお、上記ではランク数Rで指定された場合を示したが、ランク数が上位からの比率で指示された場合については後述する。
検索用情報生成部110は、全てのフィールド(要素)毎のランク付きビットマップインデックス700の作成が完了すると、ステップ1008で、メモリ3上に保持していた各要素のビットマップインデックス700を記憶措置109に書き出す。このとき、検索用情報生成部110は、キャッシュ領域30のフロー情報記憶部108のフロー情報200にインデックス211を付加してから、上述したようにタイムスタンプをファイル名とする一つのファイルにまとめ、このファイルをフロー情報200Aとして記憶装置109に格納する。
さらに、検索用情報生成部110は、検索処理の高速化を図るため、インデックス情報1200を生成して記憶装置109に格納する。インデックス情報1200は、図13で示すように、一つのエントリ1201にフロー情報200の収集範囲の開始時刻を示す開始時間1202と、フロー情報200Aに含まれるフロー情報の数を示すフロー数1203と、フロー情報200Aに対応するランク付きビットマップインデックス700A,700Bのランク数Rと、ビットマップインデックス700A、700Bの格納位置を示すインデックス1205を含む。
以上の処理によって、フロー情報処理装置101がルータ装置102から受信したフロー情報200を収集し、所定の条件が成立すると、検索用情報生成部110は、ユーザインターフェース115で指定された要素(フィールド)毎にランク付きビットマップインデックス700を生成する。そして、検索用情報生成部110は、図13で示すように、フロー情報200をひとつのファイルにまとめたフロー情報200Aと、ランク付きビットマップインデックス700のインデックスとするインデックス情報1200を生成して記憶装置109に格納する。
次に、ランク付きビットマップインデックス700を利用する検索処理について説明する。
図14にランク付きビットマップインデックスを用いる検索処理のフローチャートの一例を示す。この処理は、クエリ受信部111が検索条件を含むクエリを受け付けて、クエリ処理部112が検索部113に検索条件を通知し、検索部113が処理を実行する。
まず、ステップ801で検索部113は、サーバ装置103からのクエリを受け取るとその中から検索条件を取り出す。なお、検索条件には、時刻と、要素及び要素の値が含まれる。
ステップ802では、検索部113が記憶装置109に格納されたインデックス情報1200を参照し、開始時間1202から所定時間以内に検索条件の時刻が含まれるエントリを特定する。そして、特定したエントリについて、検索条件に含まれる要素からインデックス1205を検索し、検索対象のランク付きビットマップインデックス700をメモリ3に読み込む。次に、検索部113は、後述する図15のように、検索条件に合致するフロー情報をランク付きビットマップインデックス700によって検索し、検索条件に一致するビットがランク数R内の行にあれば、フロー情報200Aのインデックスに対応する識別子を取得する。一方、検索条件に一致するビットが「その他」であれば、検索結果は「その他」として記憶する。この処理は、検索条件に含まれるフロー情報200の要素毎のランク付きビットマップインデックス700で行われる。
検索部113は、上記ステップ802で取得した識別子の数(取得するフロー情報の数)だけステップ803〜807の処理を繰り返す。
まず、ステップ804では、記憶装置109から検索条件に含まれる時刻を含むフロー情報200Aを特定し、取得した識別子に対応するフロー情報200Aをメモリ3に読み込む。
ステップ805では、検索部113がメモリ3に読み込んだフロー情報200Aについてランク付きビットマップインデックス700の「その他」に該当しているかどうか判定する。読み込んだフロー情報200Aが「その他」に該当していない場合はステップ807の送信処理へ移行する。一方、上記ステップ802のランク付きビットマップインデックス700の検索の結果が「その他」に該当している場合は対象のフロー情報200Aが検索条件に合致している保障がないためステップ806の確認処理を行う。
ステップ806では、上記図5に示した従来の検索処理によって、検索部113は検索条件に一致するフロー情報200Aを記憶装置109に格納されているフロー情報200Aから検索する。そして、検索条件に一致するフロー情報200Aがあればステップ807へ進む。検索条件に一致するフロー情報200Aがない場合には、ステップ803へ戻って次の識別子について上記処理を繰り返す。
ステップ807では、ステップ804またはステップ806で読み込んだ、フロー情報200Aをクエリに対する応答としてサーバ装置103に返信する。
以上の検索処理により、メモリ3上に読み込んだランク付きビットマップインデックス700で、検索条件に一致するビットがあれば識別子を取得することでフロー情報200A内のインデックスを得ることができるので、ステップ804で行う記憶装置109からフロー情報200Aを取得する処理時間は上記従来例のように全てのフロー情報200Aを検索する必要がないので、極めて短時間で処理を行うことが可能となる。そして、ランク付きビットマップインデックス700の検索結果が「その他」の場合のみ、従来例と同様に記憶装置109のフロー情報200Aを検索することになる。しかしながら、上述したようにフロー情報200Aの特性から、ランク付きビットマップインデックス700の検索結果が「その他」となる機会は少ないため、検索処理全体としては従来例に比して極めて高速に処理することが可能となるのである。
図15は上記図13のステップ802で示したランク付きビットマップインデックス700を用いる検索処理のフローチャートを示す。
ステップ901では、検索部113は、まず上記図7に示した演算用テーブル503と同様にして検索条件に応じた演算用テーブルをメモリ3上に作成する。この演算用テーブルは、なお、演算用テーブルは、検索条件が単一の要素に対して単一の検索条件の場合は、図7に示したランク付きビットマップインデックス700のランク数Rに対応する部分となる。
次に、ステップ902では、検索部113がその他用テーブルをメモリ3上に作成する。その他用テーブルは、ランク付きビットマップインデックス700の検索結果を管理するため、検索条件がランク数Rの要素の値に一致しなかった回数を計数するもので、検索する要素の値に対する検索回数を格納可能なテーブルであればよい。
次に、ステップ903〜906では、検索条件のパラメータ(例えば、要素)の数だけランク付きビットマップインデックス700を用いた演算を繰り返す。ステップ904では、検索部113が検索条件のパラメータに一致するビット列(図10の列710でヒットした要素の値に一致する行)を抽出する。次に、ステップ905では、抽出したビット列をステップ901で生成した演算用テーブルに格納し、検索条件のパラメータと比較を行う。この比較演算の結果である要素の値に対応する識別子を演算用テーブルに格納する。
次に、ステップ906では、上記ステップ904の処理で、要素の値としてヒットした行が「その他」であるか否かを判定し、「その他」であればステップ907に進み、ランク数R内の要素にヒットした場合は、ステップ903に戻って次のパラメータに関して検索を実施する。
ステップ907では、上記ステップ902で作成したその他用テーブルに「1」を加算して更新する。
本発明では、検索部113が記憶装置109から取り出したフロー情報200(ランク付きビットマップインデックス700)に占める「その他」以外の割合を「ヒット率」、「その他」の割合を「ミス率」と呼ぶ。ヒット率が高いほど記憶装置109からフロー情報200Aを読み込むオーバヘッドが減り、フロー情報処理装置101全体の性能が向上する。
以上の処理により、検索条件のパラメータの数だけランク付きビットマップインデックス700を用いて検索を行うことで、検索条件に一致したビット列が演算用テーブルに格納され、ランク数R内の要素の値でヒットしなかった回数がその他用テーブルに記録される。検索部113は、演算用テーブルに格納された要素の値の数と、その他用テーブルの値の和で、演算用テーブルに格納された要素の値の数を除してヒット率を求めることができる。また、検索部113は、演算用テーブルに格納された要素の値の数と、その他用テーブルの値の和で、その他用テーブルの値を除してミス率を求めることができる。
さらに、「その他」の行を参照したかどうか記録することでステップ904の段階で追加の処理である記憶装置109からの識別子の検索が必要か否かを知ることができる。
図16は、フロー情報処理装置101に入力されたクエリの一例を示し、図17は、図16のクエリに対する検索処理の結果の一例を示す説明図である。
図16では、サーバ装置103がフロー情報処理装置101に要求したクエリ1301を示す。クエリ1301には、サーバ装置103が要求する情報(抽出情報)として、送信元IPアドレスと、送信先IPアドレスが設定される。抽出情報の読み出し先として、フロー情報200Aが指定される。抽出情報の検索条件(検索情報)としては、開始時刻と終了時刻及び要素の値としてプロトコル番号が指定される。
上記クエリ1301を受け付けたフロー情報処理装置101が、上記図14、図15の検索処理を行ってサーバ装置103へ出力した結果が図17に示すクエリ出力1302となる。図17のクエリ出力は、検索条件の開始時刻と終了時刻の期間で、要素の値がプロトコル番号=6のフロー情報200Aから送信先IPアドレスと送信元IPアドレスが識別子(フローID)毎に出力される。
上記図16,図17の例では、要素(プロトコル番号)の値(=6)は、図10のランク付きビットマップインデックス700の最初の行でヒットする。検索部113は、ヒットした行の識別子(=1,2,4)を取得する。検索部113は、取得した識別子に対応するフロー情報200Aのインデックスから抽出情報を読み込んでサーバ装置103に応答する。
以上により、メモリ3上に読み込んだランク付きビットマップインデックス700で、検索条件に一致するビットがあれば識別子を取得し、この識別子からフロー情報200A内のインデックスを得ることができるので、記憶装置109からフロー情報200Aを取得する処理時間は上記従来例のように全てのフロー情報200Aを検索する必要がないので、極めて短時間で処理を行うことが可能となり、フロー情報処理装置101が大量のフロー情報200Aを管理する場合であっても、高速な検索が可能となる。
図18は、上記図11に示したユーザーインターフェース115でランク設定を比率で指定した場合に「ランク数」または「ランキング」をフロー情報200内の各要素の出現頻度から決定するようにしたものである。
ランク付きビットマップインデックス700における「ランク数」「ランキング」はフロー情報200内の各要素の出現頻度の統計は、フロー情報200を受信するたびに行ってもよく、特定時間や特定個数ごとに一括して行ってもよい。
以下に「ランク数」または「ランキング」を予め設定された比率に基づいて決定する例を示す。
図18は、ランク付きビットマップインデックス700を生成する処理の一例を示すフローチャートである。この処理は、図12と同様に、フロー処理部106の検索用情報生成部110が所定の条件を満たしたときに実行されるプログラムである。なお、検索用情報生成部110は、上述したように、所定の周期(時間)となったとき、またはキャッシュ領域30の空き容量がなくなったときに、所定の条件を満たしたと判定し、図18の処理を開始する。
まず、ステップ1101では、検索用情報生成部110がキャッシュ領域30のフロー情報記憶部108に格納されている全てのフロー情報200を処理対象としてステップ1104までのループ処理を開始する。
ステップ1102では、検索用情報生成部110がメモリ3上の設定テーブル31を読み込んで、図3に示したフロー情報200のフィールド201〜205のうち、図11のユーザインターフェース115のビットマップインデックス作成1401が選択され、かつ、ランク設定1402が上位からの比率で指定された項目を取得する。検索用情報生成部110は、取得した項目をランク付きビットマップインデックス700の作成対象の要素とする。
ステップ1103では、検索用情報生成部110がキャッシュ領域30からひとつのフロー情報200を読み込んで、上記ステップ1102で取得した作成対象の要素のフィールド201〜205の値を抽出する。
次に、ステップ1104では、検索用情報生成部110が上記ステップ1103で抽出したフィールドの値の出現頻度(出現回数)に1を加算する。すなわち、図6のビットマップインデックス501の値を格納する列510に対応するフロー情報200の識別子ごとに列512の値に「1」を設定する。
検索用情報生成部110は、上記ステップ1102〜1004のループ処理で、ひとつのフロー情報200の作成対象の要素の出現頻度を求めると、ステップ1101に戻って次のフロー情報200について同様の処理を行う。そして、フロー情報記憶部108の全てのフロー情報200について、ランク付きビットマップインデックス700を作成する対象となっている各要素の値の出現頻度の演算が完了すると、ステップ1105の処理に進む。
ステップ1105では、ランクの順位(ランキング)を示す変数Nに初期値として「1」を設定する。
ステップ1106では、検索用情報生成部110がフィールド201〜205の項目毎に上記ステップ1104で求めた値の出現頻度の高い順にソートを行って、出現順位の最も高いフィールドの値に変数Nを設定し、上記図12のステップ1006と同様に、現在着目しているフィールド(要素)のビットマップインデックス501を生成する。
次に、ステップ1107では、現在着目しているフィールドの値の変数Nの値が1〜Nの数と、作成対象のフロー情報200の全体の数の比率から出現頻度が第1位から第N位までの値の数の割合を求める。
ステップ1108では、ユーザーインターフェース115で指定された比率と、ステップ1107で求めた割合を比較して、この割合が指定された比率を超えたか否かを判定する。割合が指定された比率を超えていれば、ステップ1109に進みランク付きビットマップインデックス700を生成し、割合が指定された比率以下であれば、ステップ1110に進んで変数Nに1を加えてから、上記ステップ1106に戻って次の順位Nのビットマップインデックスを作成する。
ステップ1109では、作成対象のフロー情報200の全体の数に対するフィールドの値の変数Nの値が1〜Nの数の割合が、指定された比率に達したので、変数N=1〜Nまでのランク数の要素の値についてランク付きビットマップインデックス700を生成し、変数N=N+1以降の順位の要素の値についてはその他の行703にまとめてランク付きビットマップインデックス700を完成させる。
以上のように、ユーザーインターフェース115にてランク設定1402が上位からの比率の場合には、作成対象のフロー情報200の全体の数に対するフィールドの値の変数Nの値が1〜Nの数の割合が指定された比率となるランク数Rが自動的に決定されるのである。これにより、検索処理を行ったときには、検索条件が出現頻度の高い要素の値で一致する確率が向上し、検索のミスヒットによってフロー情報200Aのインデックスを記憶装置109から検索する機会を低減することができる。したがって、フロー情報処理装置101を大規模なネットワークに設置して、大量のフロー情報200を収集する場合でも、検索処理の速度が低下するのを防ぎ、フロー情報処理装置101の負荷が過大になるのを防ぐことができる。
なお、上記実施形態ではフロー情報を送信する装置としてルーター装置を用いる例を示したが、パケットを転送して、転送した結果をフロー情報として出力可能な装置であればよく、例えば、L3(Layer 3)スイッチやロードバランサ等の通信装置を用いることができる。