以下、添付図面を参照して、本発明によるファイル差分管理装置10の実施例を説明する。本実施例において、ファイル差分管理装置10は、世代管理タイプ、データベースタイプ(DBタイプ)、再帰タイプの3つのタイプのファイルを差分管理対象ファイルとして管理する。
世代管理タイプ用のファイルとは、UNIX(登録商標)のシステムログのような管理をされるファイルを示し、あるイベント(例えばサーバの再起動、ファイルサイズ、時間)が発生した時に、書き込み中のファイルの世代が切り替わり、それまで書き込んでいたファイルは1世代前のファイルとして管理される。ファイルの世代が切り替わるときに現在まで書き込んでいたファイルのファイル名の変更がされる場合もある(例えばFreeBSD(Free Berkeley Software Distribution)のシステムログ)。又、管理する世代数が決まっている場合、世代数が上限を超えないように古い世代に関する情報が削除される場合もある。更に、管理する世代数は無限の場合や期間で規定される場合もある。
例えば、管理対象となる「世代管理タイプ」のファイル「host01:/var/adm/syslog/OLDsyslog.log」とファイル「host01:/var/adm/syslog/syslog.log」が、ファイル「host01:/var/adm/syslog/syslog.log」が現在書き込み中のファイルであるとする。サーバの再起動やサーバの切り換え等のイベントの発生に伴いファイルの変更が行われ、ファイル名が「host01:/var/adm/syslog/syslog.log」から「host01:/var/adm/syslog/OLDsyslog.log」に変更される。ここで、世代数が「1」に設定されている場合、ファイルの変更に応じて元のファイル「host01:/var/adm/syslog/OLDsyslog.log」は削除される。
DBタイプ用のファイルとは、Windows(登録商標)のイベントログをCSV形式で保存するときに出力されるようなファイルを示し、ファイルとして図示しないデータベースに格納されているデータがタイムスタンプ順にソートされて出力される。すなわち、DBタイプ用のファイル内のデータはタイムスタンプを持つ。例えば、データベースに格納されているデータが昇順にソートされて出力される場合、ファイルの始点が最も古いデータになり、ファイルの終端が最も新しいデータになる。又、データベースに格納されるデータは、ある条件(例えばデータベースに格納しているデータ数、データベースに格納しているデータサイズ、各データのタイムスタンプ)をもとに削除される場合もある。
再帰タイプ用のファイルとは、1つのファイルに対して再帰的にデータを出力するファイルを示す。ここで再帰的にデータを出力するとは、ファイルに対して順次データを出力し、ある条件(データ数、ファイルサイズ等)を満たしたときに、データの出力位置をファイルの始点に戻し、そこからまた順次データを出力する。尚、再帰タイプ用のファイル内のデータはタイムスタンプを持つことを条件とするが、データが時系列にソートされていない場合も対象とする。
1.構成
図1を参照して、本発明によるファイル差分管理装置10の構成を説明する。図1は、ファイル差分管理装置10の構成図である。本発明によるファイル差分管理装置10は、バス17を介して相互に接続されるCPU11と、RAM12と、記憶装置13と、入力装置14と、出力装置15と、I/Oインタフェース16を具備する。記憶装置13はハードディスクやメモリ等の記憶装置である。又、入力装置14は、キーボードやマウス等のユーザによって操作されることで、各種データをCPU11や記憶装置13に出力する。出力装置15は、モニタやプリンタに例示され、CPU11から出力される回路解析の結果をユーザが視認できる形式で出力する。I/Oインタフェース16は、図示しない他のコンピュータ装置やデータベースとのデータや信号の送受信を行う。
CPU11は、入力装置14からの入力に応答して、記憶装置13内の差分管理プログラム20を実行し、ファイルの差分管理を行う。この際、記憶装置13からの各種データやプログラムはRAM12に一時格納され、CPU11は、RAM12内のデータを用いて各種処理を実行する。
記憶装置13は、差分管理プログラム20、グループ情報テーブル21、差分検出情報テーブル22を格納している。又、記憶装置13は、I/Oインタフェースを介して入力された差分管理対象となるファイル(以下、差分管理対象ファイルと称す)が記録される記憶領域として差分管理対象格納部23を有している。
図2は、グループ情報テーブル21の構成の一例を示す図である。グループ情報テーブル21は、ユーザによって設定されたグループ情報210を格納するテーブルである。グループ情報210とは、差分管理対象ファイルの所属するグループを規定するための情報であり、グループ名によって識別される。グループ情報テーブル21には、グループ名毎に、グループ所属条件、ファイル名の固定フィールド、ファイルのタイプが対応付けられてグループ情報210として設定される。
グループ所属条件とは、差分管理対象ファイルがグループに所属するための条件である。グループ所属条件は、ファイルのパスを示す正規表現などを用いた条件式であることが好ましい。この場合、ファイルのパスがこの条件式に適合する差分管理対象ファイルが、このグループ所属条件に対応するグループに所属すると判定される。
ファイル名の固定フィールドは、グループに所属するファイルのファイル名の固定フィールドを規定する情報である。例えば、「preg_match_all(“/([A−Za−z0−9]+)(¥.log)([1−9])/”, $filename, $matches);」の第1及び第2パタンがファイル名の固定フィールドとして設定されている場合、ファイル名の固定フィールドが「*.log」(*.log)である差分管理対象ファイルが、このファイル名の固定フィールドに対応するグループに所属すると判定される(ただし、*は任意の英数字の組み合せで表現される)。
又、グループ情報210には、タイプとして「世代管理タイプ」、「DBタイプ」、「再帰タイプ」のいずれかが設定される。
図3は、差分検出情報テーブル22の構成の一例を示す図である。差分検出情報テーブル22は、差分管理装置10において既に差分管理されている差分管理対象ファイル(以下、前回差分検出ファイルと称す)に関する情報が差分検出情報220として記録される。ここで、前回差分検出ファイルは、差分管理装置に前回入力され、差分検出情報220が既に検出、記録された差分管理対象ファイルである。差分検出情報220は、前回差分検出ファイルに対応するグループ名、ファイルパス、オブジェクト識別子、作成日時、サイズ、チェックサム、差分情報230(差分始点検出用データ)を含む。又、差分検出情報テーブル22には、差分検出情報220を参照可能か否かを決める参照可否フラグが設定される。
グループ名は、グループ情報210に含まれるグループ名に対応し、管理されているファイルのグループを特定する情報である。ファイルパスは、前回差分検出ファイルを特定するファイル名である。オブジェクト識別子は、前回差分検出ファイルに設定されたオブジェクト識別子である。作成日時、サイズは、それぞれ前回差分検出ファイルの作成日時及びデータサイズである。チェックサムは、前回差分検出ファイルに設定されたチェックサムである。
差分管理対象格納部23は、差分管理対象ファイルや、差分管理対象ファイルに関する情報(ファイルパス、オブジェクト識別子、作成日時、サイズ、チェックサム)が記録される記憶領域である。差分管理対象格納部23には、定期的に、又は不定期的にI/Oインタフェース17を介して入力された複数の差分管理対象ファイル(以下、差分管理対象ファイル群200と称す)が記録される。
CPU11は、差分管理プログラム20を実行することで、図4に示す差分管理モジュール100の機能を実現する。差分管理モジュール100は、差分管理対象モジュール101、差分情報管理モジュール102、差分情報検出モジュール103、差分情報出力モジュール104を備える。これらのモジュールはそれぞれ概略つぎのような機能を有する。
差分管理対象登録モジュール101は、入力装置14から入力された情報に基づき差分管理対象ファイル群200をグループ分けするために必要なグループ情報210を作成する機能を有する。ユーザは、入力装置14を用いてグループ情報210に含める情報(グループ所属条件、タイプ、ファイル名の固定フィールドの設定)を差分管理対象登録モジュール101に出力する。差分管理対象登録モジュール101は、入力された情報からグループ情報210を作成し、差分情報管理モジュール102に渡す機能を有する。
差分情報管理モジュール102は、差分管理対象登録モジュール101から渡されるグループ情報210を差分検出情報テーブル21に格納する機能と、差分情報検出モジュール103にグループ情報210や差分検出情報220を渡す機能を有する。又、差分情報管理モジュール102は、差分情報検出モジュール103で生成された新たな差分検出情報220を受け取り、差分検出情報テーブル22に格納する機能を有する。
差分情報検出モジュール103は、差分情報管理モジュール102からグループ情報210を取得し、差分管理対象ファイル群200内の差分管理対象ファイルをグループ分けする機能を有する。又、差分情報検出モジュール103は、差分情報管理モジュール102から差分検出情報220を取得し、差分管理対象格納部23から差分対象ファイル群200と、差分管理対象ファイル毎のファイル情報201を取得する機能を有する。差分情報検出モジュール103は、差分検出情報220とファイル情報201とから次回の差分検出のために必要な新たな差分検出情報220を生成する。ファイル情報201には、差分管理対象ファイルがもともと置かれていたマシン(ファイルへの書き込みが行われるマシン)上でのファイルパス、作成日時、オブジェクト識別子(Windows(登録商標)の場合はBirth Object ID、UNIX(登録商標)やLinuxの場合はi−node)、ファイルサイズなどが含まれる。尚、ファイル情報201はオブジェクト識別子を含まなくても良い。差分情報検出モジュール103は、取得した差分管理対象ファイル群200と差分検出情報220とファイル情報201とを用いて、差分データ300の位置を取得し、差分情報230として差分情報出力モジュール104に出力する機能を有する。ここで、差分データ300とは、差分管理対象ファイルの全データのうち、前回差分管理対象ファイルから新たに追加されたデータである。又、差分情報230は、差分管理対象ファイルにおける差分データ300の位置(始点及び終点)を示すデータである。尚、差分管理対象ファイルのデータの終点が分かれば、差分情報230は、差分データ300の終点を示す情報を含まなくても良い。
差分情報出力モジュール104は、差分情報検出モジュール103から取得した差分情報230に基づいて、差分管理対象ファイルから差分データを読み込み出力装置15に出力する機能を有する。
2.動作
図5から図10を参照して、本発明によるファイル差分管理装置10の実施例における動作(ファイル差分管理方法)の詳細を説明する。
(グループ情報設定)
本発明によるファイル差分管理装置10ではファイル管理を行う前に、ユーザは、予めグループ情報210をグループ情報テーブル21に設定する。図5は、グループ情報210の設定動作を示すフロー図である。図2及び図5を参照して、本発明に係るグループ情報210の設定動作の詳細を説明する。
差分管理対象登録モジュール101は、入力装置14からの指定情報に応じて、差分管理対象ファイル群200をグループ分けするためグループ名を作成する(ステップS101)。ここでは、グループ名として「host01 syslog.log」、「host02 Apache access_log」、「host03 event.csv」の3つのグループが設定される。以下、グループ名「host01 syslog.log」で特定されるグループをグループA、グループ名「host02 Apache access_log」で特定されるグループをグループB、グループ名「host03 event.csv」で特定されるグループをグループCと称して説明する。
次に、差分管理対象登録モジュール101は、入力装置14からの指定情報に応じて、各グループにグループ所属条件を設定する。ここでは、グループAに「host01:¥/var¥/adm¥/syslog¥/(OLD|)syslog¥.log」という正規表現が設定され、グループBに「host02:C:¥¥Program Files¥¥Apache Group¥¥Apache¥¥logs¥¥access_log(¥.[1−9]{0,1})」という正規表現が設定され、グループCにhost03:C:¥¥Documents and Settings¥¥user1¥¥My Documents¥¥event¥.csv」という正規表現が設定される。
この場合、グループAのグループ所属条件に適合するファイルパスは、「host01:/var/adm/syslog/OLDsyslog.log」と「host01:/var/adm/syslog/syslog.log」がある。逆に、グループAに「host01:/var/adm/syslog/OLDsyslog.log」と「host01:/var/adm/syslog/syslog.log」を所属させたい場合、ユーザは、これらのファイルパスに適合する「host01:¥/var¥/adm¥/syslog¥/(OLD|)syslog¥.log」という正規表現をグループ所属条件として設定しても良い。
同様に、グループBのグループ所属条件として、host02のCドライブのProgram Files¥Apache Group¥Apache¥logs¥access_logやProgram Files¥Apache Group¥Apache¥logs¥access_log.1、Program Files¥Apache Group¥Apache¥logs¥access_log.2などを所属させるために「host02:C:¥¥Program Files¥¥Apache Group¥¥Apache¥¥logs¥¥access_log(¥.[1−9]{0,1})」という正規表現が設定される。
グループCのグループ所属条件として、host03のCドライブのDocuments and Settings¥user1¥My Documents¥event.csvを所属させるために「host03:C:¥¥Documents and Settings¥¥user1¥¥My Documents¥¥event¥.csv」という正規表現が設定される。
次に、差分管理対象登録モジュール101は、入力装置14からの指定情報に応じて、グループタイプを各グループに設定する(ステップS103)。ここでは、グループAとグループCが世代管理タイプとして設定され、グループBがDBタイプとして設定される。
次に、差分管理対象登録モジュール101は、入力装置14からの指定情報に応じて、各グループに所属する差分管理対象ファイルのファイル名の固定フィールドを設定する(ステップS104)。ここでは、グループAにおけるファイル名の固定フィールドとして、「preg_match_all(“/(OLD|)(syslog¥.log)/”, $filename, $matches);」「preg_match_all(“/(access_log)(¥.[1−9]{0,1}|)/”, $filename, $matches);」の第2パタンが設定され、グループBにおけるファイル名の固定フィールドとして、「preg_match_all(“/(access_log)(¥.[1−9]{0,1}|)/”, $filename, $matches);」の第1パタンが設定され、グループCにおけるファイル名の固定フィールドとして、「preg_match_all(“/(event¥.csv)/”, $filename, $matches);」の第1パタンが設定される。
作成されたグループA、B、Cに関するグループ情報210は、差分情報管理モジュール102によってグループ情報テーブル21に記録される(ステップS105)。尚、ステップS102〜S104の設定順は、上述の順番とは限らない。
以上のように、グループ情報テーブル21には、図2に示すようなグループ情報210が登録される。グループ情報210が登録されると差分情報検出モジュール103は、差分管理対象格納部23から差分管理対象ファイル群200を取得し、差分検出を行うことができる。
(差分検出)
図6は、本発明による差分検出処理の動作を示すフロー図である。図6を参照して、ファイル差分管理装置10における差分検出処理の概要を説明する。
差分情報検出モジュール103は、差分検出を指示されると差分管理対象格納部23から差分管理対象ファイル群200を取得する(ステップS201)。この際、差分情報検出モジュール103は、差分管理対象ファイル群200とともに、差分管理対象ファイル毎のファイル情報201も取得する。尚、差分検出の指示は、定期的に、あるいは何らかのイベント(サーバの再起動、ファイルサイズ、時間)に応じて行われる。
次に、差分情報検出モジュール103は、差分情報管理モジュール102から有効なグループ情報210を全て取得する(ステップS202)。ここでは、差分情報検出モジュール103は、図2に示されるグループ情報テーブル21からグループA、B、Cに関するグループ情報210を取得する。
次に、差分情報検出モジュール103は、差分情報管理モジュール102から差分検出情報220を取得する(ステップS203)。ここでは、差分情報検出モジュール103差分検出情報テーブル22に記録され、参照可能に設定された全ての差分検出情報220を取得する。
次に、差分情報検出モジュール103は、ステップS201で取得したファイル情報201とステップS202で取得したグループ情報210とに基づいて、差分管理対象ファイル群200をグループ分けする(ステップS204)。ここでは、ファイル情報201に含まれるファイルパスが、グループ情報210に含まれるグループ所属条件に適合する場合、当該ファイル情報201に対応する差分管理対象ファイルが、当該グループ所属条件に対応するグループに所属していると判定される。
差分管理対象ファイルをグループに対応付けることで、ステップS205の差分検出処理で用いる差分検出情報220及びファイルタイプ(世代管理用タイプ、DBタイプ、再帰タイプのいずれか)を特定することができる。
差分管理対象ファイル群200の全てのファイルをグループ毎に分類すると、差分情報検出モジュール103は、差分対象ファイル群200のうち、前回差分対象ファイルと差分のある差分対象ファイルから新たな差分検出情報220を取得し、グループに対応付けて差分検出情報テーブル22に記録する(ステップS205)。この際、同じグループの古い差分検出情報220(前回差分検出ファイルに対応する差分検出情報220)は削除され、今回格納された新たな差分検出情報は参照可能に設定される。
次に、図6から図9を参照して、本発明によるファイル差分管理装置10における差分検出処理の詳細を説明する。
先ず、差分検出情報テーブル22に差分検出情報220が記録されていない初期状態において行われる世代管理用の差分管理対象ファイルに対する差分検出処理の詳細を説明する。
差分情報検出モジュール103は、差分検出処理の指示に応答して、差分管理対象ファイル群200と、対応するファイル情報201を取得する(ステップS201)。ここでは、差分情報検出モジュール103は、差分管理対象ファイル群200として1つの差分管理対象ファイル(ファイル情報201:ファイルパス=「host01:/var/adm/syslog/syslog.log」、作成日時=「2007年1月1日 13:01:01」、オブジェクト識別子=「7176224」、ファイルサイズ=「1024バイト」)を取得する。
次に、差分情報検出モジュール103は、グループ情報テーブル21に登録されているグループA、B、Cのグループ情報210を取得する(ステップS202)。
初期状態では差分検出情報テーブル22に、差分検出情報220が記録されていないため、差分情報検出モジュール103は、「差分検出情報なし」という差分検出情報220を取得する(ステップS203)。
差分情報検出モジュール103は、取得した差分管理対象ファイルをグループ情報210に基づいてグループに割り当てる(ステップS204)。ここでは、取得した差分管理対象ファイル「host01:/var/adm/syslog/syslog.log」は、グループA(グループ名:「host01 syslog.log」)のグループ所属条件「host01:¥/var¥/adm¥/syslog¥/(OLD|)syslog¥.log」に適合するため、グループAに対応付けられる。
差分情報検出モジュール103は、取得した差分管理対象ファイル群200内の全てのファイルの差分検出処理を行い、差分検出情報テーブル22を更新する(ステップS205)。
図7は、ステップS205における差分検出処理の動作を示すフロー図である。図7を参照して、ステップS205における差分検出処理の詳細を説明する。
先ず、差分情報検出モジュール103は、グループを1つ選択し、グループに所属する差分管理対象ファイルの差分検出処理を開始する(ステップS301)。ここでは、グループAが選択される。差分情報検出モジュール103は、グループを選択すると、そのグループのタイプを確認する(ステップS302)。選択したグループが「世代管理タイプ」である場合、ステップS303の処理に移行し(ステップS302Yes)、「DBタイプ」又は「再帰タイプ」である場合、ステップS309の処理に移行する(ステップS302No)。
グループAは世代管理タイプであるため、差分情報検出モジュール103は、グループAに所属する差分管理対象ファイルを選択し、世代管理タイプ用の差分検出処理を行う(ステップS303)。ここでは差分管理対象ファイル「host01:/var/adm/syslog/syslog.log」が選択される。ステップS303における世代管理タイプ用の差分検出処理の詳細を図8に示す。
図8を参照して、差分情報検出モジュール103は、ステップS301において選択したグループに所属する前回差分検出ファイルがあるかを確認する(ステップS401)。ここで、グループに前回差分検出ファイルがある場合、すなわち、グループに対応付けられた差分検出情報220が既に記録されている場合、ステップS403の処理に移行する(ステップS401Yes)。一方、グループに所属する前回差分検出ファイルがない場合、すなわち、グループに対応付けられた差分検出情報220が未登録の場合、差分情報検出モジュール103は、ステップS303で選択された差分管理対象ファイルのデータの全てを差分データ300として判定する(ステップS402)。この際、差分情報検出モジュール103は、差分管理対象ファイルにおけるデータの始点及び終点を差分情報230として取得する。
ここでは、グループAに対する差分検出はこれが最初であるため、前回差分検出ファイルがないことが確認される。この場合、ステップS402の処理において、差分管理対象ファイル「host01:/var/adm/syslog/syslog.log」のデータは、全て新たなデータ、すなわち全て差分データ300であると判定される。又、差分情報検出モジュール103は、差分管理対象ファイル「host01:/var/adm/syslog/syslog.log」のデータの始点及び終端を差分データ300の始点及び終点として指定する差分情報230を取得する。
以上のように、ステップS303における差分検出処理が終了すると、図7に示すステップS304における処理に移行する。
差分情報検出モジュール103は、差分管理対象ファイルとともに取得したファイル情報201から世代管理タイプ用の差分検出情報220を取得する(ステップS304)。詳細には、差分情報検出モジュール103は、ファイル情報201と、差分データ300の読み取り位置を示す差分情報230と、差分管理対象ファイルが所属するグループとを対応付けて新たな差分検出情報220として取得する。ここでは、差分情報検出モジュール103は、差分管理対象ファイル「host01:/var/adm/syslog/syslog.log」のファイル情報201(ファイルパス=「host01:/var/adm/syslog/syslog.log」、作成日時=「2007年1月1日 13:01:01」、オブジェクト識別子=「7176224」、ファイルサイズ=「1024バイト」)と、差分情報230=「始点:ファイルの先頭、終点:ファイルの終端」と、グループAとを対応付けて新たな差分検出情報220として取得する。ただし、ファイルパスは、差分検出情報220として必須ではない。
差分情報検出モジュール103は、新たに取得した差分検出情報220を、差分情報管理モジュール102を介して、差分検出情報テーブル22に記録する(ステップS305)。尚、このタイミングでは記録した差分検出情報テーブル22の差分検出情報は参照できない。このため、差分情報管理モジュール102は、新たに記録された差分検出情報220を参照可能に設定する(ステップS306)。
図9に、ステップS306における処理の動作の詳細を示す。図9を参照して、差分情報検出モジュール103は、取得した差分情報230を差分情報出力モジュール104に渡す(ステップS501)。差分情報出力モジュール104は、差分情報230に対応する差分管理対象ファイルから差分情報230の示す差分の始点から終点までのデータを順に読み込み、差分データ300として出力する(ステップS502)。ここではファイル「host01:/var/adm/syslog/syslog.log」のデータの全てが読み込まれ、出力装置15に出力される。この際、差分情報管理モジュール102は、今回処置したグループに対応する古い差分検出情報220(前回差分検出ファイルの差分検出情報220)を削除し、今回、新たに格納した差分検出情報220を参照可能に設定する。ここでは削除する差分検出情報は無いため、今回格納した新たな差分検出情報220(ファイルパス=「host01:/var/adm/syslog/syslog.log」、作成日時=「2007年1月1日 13:01:01」、オブジェクト識別子=「7176224」、ファイルサイズ=「1024バイト」、差分情報230=「始点:ファイルの先頭、終点:ファイルの終端」)が参照可能に設定される。
ステップS303〜S306の処理は、選択したグループに所属する全ての差分管理対象ファイルについて行われる(ステップS307)。グループ内の全ての差分管理対象ファイルに対しステップS303〜S306の処理が行われると、ステップS308に移行する(ステップS307Yes)。ステップS308では、差分管理対象ファイル群200内の全てのファイルに対し、差分検出処理が実行されたかどうかが確認される。ここで、選択されていない差分管理対象ファイルがある場合、ステップS301に移行して、当該ファイルが所属するグループを選択し、差分検出処理を実行する。このように、ステップS301以降に続く差分検出処理は、取得した差分管理対象ファイル群200が所属する全てのグループに対して行われる。ここでは、取得した差分管理対象ファイルがグループAのみに所属するため、グループAに所属する差分管理対象ファイル群200に対してのみ差分検出処理が行われる。
以上のように、初期状態において、世代管理タイプの差分管理対象ファイルが入力された場合、新たな差分検出情報220(グループ名=「host01 syslog.log」、ファイルパス=「host01:/var/adm/syslog/syslog.log」、作成日時=「2007年1月1日 13:01:01」、オブジェクト識別子=「7176224」、ファイルサイズ=「1024バイト」、差分情報230=「始点:ファイルの先頭、終点:ファイルの終端」)が記録される。
次に、差分検出情報テーブル22に上述の差分検出情報220が記録されている状態において、差分情報検出モジュール103に対し新たな差分情報検出処理が指示された場合について説明する。
差分情報検出モジュール103は、差分検出処理の指示に応答して差分管理対象ファイル群200と、対応するファイル情報201を取得する(ステップS201)。ここでは、差分情報検出モジュール103は、差分管理対象ファイル群200として2つの差分管理対象ファイル(ファイル情報201:ファイルパス=「host01:/var/adm/syslog/OLDsyslog.log」、作成日時=「2007年1月1日 13:01:01」、オブジェクト識別子=「7176224」、ファイルサイズ=「2048バイト」)と、差分管理対象ファイル(ファイル情報201:ファイルパス=「host01:/var/adm/syslog/syslog.log」、作成日時=「2007年2月1日 13:01:01」、オブジェクト識別子=「7176225」、ファイルサイズ=「512バイト」)を取得する。
次に、差分情報検出モジュール103は、グループ情報テーブル21に登録されているグループA、B、Cのグループ情報210を取得する(ステップS202)。
差分情報管理モジュール102は、差分検出情報テーブル22を参照して、既に記録されている差分検出情報220(グループ名=「host01 syslog.log」、ファイルパス=「host01:/var/adm/syslog/syslog.log」、作成日時=「2007年1月1日 13:01:01」、オブジェクト識別子=「7176224」、ファイルサイズ=「1024バイト」、差分情報230=「始点:ファイルの先頭、終点:ファイルの終端」)を差分情報検出モジュール103に渡す(ステップS203)。
差分情報検出モジュール103は、取得した差分管理対象ファイル群200をグループ情報210に基づいてグループ分けする(ステップS204)。ここでは、取得した差分管理対象ファイル「host01:/var/adm/syslog/syslog.log」及びファイル「host01:/var/adm/syslog/OLDsyslog.log」は、両者ともグループA(グループ名:「host01 syslog.log」)のグループ所属条件「host01:¥/var¥/adm¥/syslog¥/(OLD|)syslog¥.log」に適合するため、グループAに対応付けられる。
差分情報検出モジュール103は、取得した差分管理対象ファイル群200内の全てのファイルの差分検出処理を行い、差分検出情報テーブル22を更新する(ステップS205)。図7を参照して、ステップS205における差分検出処理の詳細を説明する。
先ず、差分情報検出モジュール103は、グループを1つ選択し、グループに所属する差分管理対象ファイルの差分検出処理を開始する(ステップS301)。ここでは、グループAが選択される。差分情報検出モジュール103は、グループを選択すると、そのグループのタイプを確認する(ステップS302)。選択したグループが「世代管理タイプ」である場合、ステップS303の処理に移行し(ステップS302Yes)、「DBタイプ」又は「再帰タイプ」である場合、ステップS309の処理に移行する(ステップS302No)。
グループAは世代管理タイプであるため、差分情報検出モジュール103は、グループAに所属する差分管理対象ファイルを選択し、世代管理タイプ用の差分検出処理を行う(ステップS303)。ここでは最初に差分管理対象ファイル「host01:/var/adm/syslog/OLDsyslog.log」が選択される。
図8を参照して、ステップS303における差分検出処理の詳細を説明する。差分情報検出モジュール103は、ステップS301において選択したグループに所属する前回差分検出ファイルがあるかを確認する(ステップS401)。ここではグループAの前回差分検出ファイルに対応する差分検出情報220(ファイルパス=「host01:/var/adm/syslog/syslog.log」、作成日時=「2007年1月1日 13:01:01」、オブジェクト識別子=「7176224」、ファイルサイズ=「1024バイト」、差分情報230=「始点:ファイルの先頭、終点:ファイルの終端」)があることが確認される。このため、差分情報検出モジュール103は、ステップS403の処理に移行する。
差分情報検出モジュール103は、差分管理対象ファイルのファイル情報201にオブジェクト識別子があるかを確認する(ステップS403)。ここで、ファイル情報201にオブジェクト識別子がない場合、ステップS408の処理に移行する(ステップS403No)。一方、ファイル情報201にオブジェクト識別子がある場合、差分情報検出モジュール103は、そのオブジェクト識別子と一致するオブジェクト識別子を有する差分検出情報220が記録されているかを確認する(ステップS403、Yes、S404)。ここでは、差分管理対象ファイル「host01:/var/adm/syslog/OLDsyslog.log」のファイル情報201にオブジェクト識別子があることが確認される。又、ファイル情報201に含まれるオブジェクト識別子=「7176224」と差分検出情報220(前回差分検出ファイル「host01:/var/adm/syslog/syslog.log」に対応)に含まれるオブジェクト識別子=「7176224」が一致することが確認される。
ステップS404において、ファイル情報201内のオブジェクト識別子と一致する差分検出情報220がある場合、差分情報検出モジュール405は、オブジェクト識別子が一致する差分検出情報220の中にファイル情報201に含まれる作成日時に一致する作成日時を有する差分検出情報220があるかを確認する(ステップS405)。ここではファイル情報201に含まれる作成日時=「2007年1月1日 13:01:01」と差分検出情報220(前回差分検出ファイル「host01:/var/adm/syslog/syslog.log」に対応)の作成日時=「2007年1月1日 13:01:01」が一致することが確認される。
ここで、ファイル情報201がファイルの作成日時を持たない場合、ステップS405における作成日時の比較処理は行われない。この場合、次のような比較処理が行われても良い。
差分情報検出モジュール103は、ファイル情報201と差分検出情報220のそれぞれに含まれるチェックサムを比較し、チェックサムが一致する場合はその内容の比較を行う。ここで、チェックサムの比較は、ファイル全体である必要はなく、最大でも前回差分検出ファイルのファイルサイズまでのチェックサムでよい。
差分管理対象ファイル群200内の差分管理対象ファイルをオープンもしくはハードリンクしておいた場合、ファイルが削除されてすぐに別のファイルが作成されても、同じi−nodeがそのファイルに使用されることはない。このような場合、差分情報検出モジュール103は、オブジェクト識別子(i−node)のみを比較することで同一ファイルか否かの判断をすることができる。すなわち、このような場合、ステップS405の作成日時比較処理は省略できる。差分管理対象ファイルをオープンもしくはハードリンクしておく必要がある期間は、差分管理モジュール100が、当該ファイルが削除されたことを検出するまでの間である。換言すると、差分管理対象ファイルをオープンもしくはハードリンクしておく必要がある期間は、そのファイルに対しての最後の差分検出が実行される直前からそのファイルが削除された後に差分検出が実行されるまでの間である。ただし、この期間がこれより長くなっても問題はない。
ファイルのデータ更新が0世代目のファイルに対してのみ差分管理が行われるグループにおいて、0世代目以外の差分管理対象ファイルと0世代目以外の前回差分検出ファイル同士が比較される場合、ファイルデータの更新日時が、比較対象として使用されることが好ましい。又、0世代目の差分管理対象ファイルと0世代目の前回差分検出ファイル同士が比較される場合、チェックサムが比較対象として使用されるか、0世代目の差分管理対象ファイルと0世代目の前回差分検出ファイルが同じオブジェクト識別子(i−node)にならないように、ファイルをオープンもしくはハードリンクしておき、オブジェクト識別子(i−node)のみの比較が行われることが好ましい。ただし、0世代目か否かの判定にはファイル名を利用する。
次に、ステップS404、S405における処理の結果、ファイル情報201内のオブジェクト識別子と作成日時とが一致する差分検出情報220がある場合、差分情報検出モジュール103は、ファイル情報201内のファイルのデータサイズと、当該差分検出情報220に含まれるデータサイズとを比較する(ステップS406)。これにより、オブジェクト識別子と作成日時が一致する差分管理対象ファイルと前回差分検出ファイルとのファイルサイズを比較することができる。ステップS406の処理において、差分管理対象ファイルのサイズが前回差分検出ファイルのサイズ以下である場合、差分なしと判定される(ステップS407)。この場合、差分検出情報220は更新されない。一方、ステップS406の処理において差分管理対象ファイルのサイズが前回差分検出ファイルのサイズより大きい場合、そのサイズ差分のデータが差分データ300として判定される。この場合、差分情報検出モジュール103は、前回差分検出ファイルの終端の次のデータを始点として指定し、差分管理対象ファイルの終端をデータの終端として指定する差分情報230を取得する。ここでは、差分管理対象ファイル「host01:/var/adm/syslog/OLDsyslog.log」のサイズ=「2048バイト」と前回差分検出ファイル「host01:/var/adm/syslog/syslog.log」のサイズ=「1024バイト」が比較され、差分管理対象ファイル「host01:/var/adm/syslog/OLDsyslog.log」のサイズの方が「1024バイト」大きいため、差分管理対象ファイルの始点から1024バイト進んだ位置からファイルの終端までが差分データ300であると判断される。又、差分情報検出モジュール103は、差分管理対象ファイル「host01:/var/adm/syslog/OLDsyslog.log」の1025バイト目を差分データ300の始点、その終端を差分データ300の終端として指定する差分情報230を取得する。
一方、ステップS404において、ファイル情報201内のオブジェクト識別子と一致する差分検出情報220がない場合、あるいは、ステップS405において、ファイル情報201内の作成日時と一致する差分検出情報220がない場合、選択された差分管理対象ファイルのデータは、全て新たなデータ、すなわち全て差分データ300であると判定される(ステップS402)。この際、差分情報検出モジュール103は、差分管理対象ファイルのデータの始点及び終点を差分データ300の始点及び終点として指定する差分情報230を取得する。
以上のように、ステップS303における差分検出処理が終了すると、図7に示すステップS304における処理に移行する。
差分情報検出モジュール103は、差分管理対象ファイルとともに取得したファイル情報201から世代管理タイプ用の差分検出情報220を取得する(ステップS304)。ここでは、差分情報検出モジュール103は、差分管理対象ファイル「host01:/var/adm/syslog/OLDsyslog.log」のファイル情報201(ファイルパス=「host01:/var/adm/syslog/OLDsyslog.log」、作成日時=「2007年1月1日 13:01:01」、オブジェクト識別子=「7176224」、ファイルサイズ=「2048バイト」)と、差分情報230=「始点:ファイルの先頭から1025バイト目、終点:ファイルの終端」と、グループAとを対応付けて新たな差分検出情報220として取得する。ただし、ファイルパスは、差分検出情報220として必須ではない。
差分情報検出モジュール103は、取得した新たな差分検出情報220を差分情報管理モジュール102を介して、差分検出情報テーブル22に記録する(ステップS305)。ここでは、新たな差分検出情報220として(ファイル名=「host01 syslog.log」、ファイルパス=「host01:/var/adm/syslog/OLDsyslog.log」、作成日時=「2007年1月1日 13:01:01」、オブジェクト識別子=「7176224」、ファイルサイズ=「2048バイト」、差分情報230=始点:ファイルの先頭から1025バイト目、終点:ファイルの終端)が記録される。尚、このタイミングでは記録した差分検出情報テーブル22の差分検出情報は参照できない。このため、差分情報管理モジュール102は、新たに記録された差分検出情報220を参照可能に設定する(ステップS306)。
図9を参照して、差分情報検出モジュール103は、取得した差分情報230を差分情報出力モジュール104に渡す(ステップS501)。差分情報出力モジュール104は、差分情報230に対応する差分管理対象ファイルから差分情報230の示す差分の始点から終点までのデータを順に読み込み、差分データ300として出力する(ステップS502)。ここでは、差分情報230を参照して差分管理対象ファイル「host01:/var/adm/syslog/OLDsyslog.log」の1025ビット目から終端(2048ビット目)までのデータが順に読み込まれ出力装置15に出力される。この際、差分情報管理モジュール102は、今回処置したグループに対応する古い差分検出情報220(前回差分検出ファイルの差分検出情報220)を削除し、今回、新たに格納した差分検出情報220を参照可能に設定する。ここでは、今回格納した新たな差分検出情報220(ファイル名=「host01 syslog.log」、ファイルパス=「host01:/var/adm/syslog/OLDsyslog.log」、作成日時=「2007年1月1日 13:01:01」、オブジェクト識別子=「7176224」、ファイルサイズ=「2048バイト」、差分情報230=「始点:ファイルの先頭から1025バイト目、終点:ファイルの終端」)が参照可能に設定される。
差分管理対象ファイル群200内に、グループAに所属し、差分検出されていない差分管理対象ファイルが有る場合、ステップS303に移行する(ステップS307No)。ステップS303では、次の差分管理対象ファイルが選択され、世代管理タイプ用の差分検出処理が行われる。ここでは、差分管理対象ファイル「host01:/var/adm/syslog/syslog.log」(ファイル情報201:ファイルパス=「host01:/var/adm/syslog/syslog.log」、作成日時=「2007年2月1日 13:01:01」、オブジェクト識別子=「7176225」、ファイルサイズ=「512バイト」)が選択される。
図8を参照して、ステップS303における差分検出処理の詳細を説明する。差分情報検出モジュール103は、ステップS301において選択したグループに所属する前回差分検出ファイルがあるかを確認する(ステップS401)。ここでは、グループAの前回差分検出ファイルに対応する差分検出情報220(ファイルパス=「host01:/var/adm/syslog/OLDsyslog.log」、作成日時=「2007年1月1日 13:01:01」、オブジェクト識別子=「7176224」、ファイルサイズ=「2048バイト」、差分情報230=「始点:ファイルの先頭から1025バイト目、終点:ファイルの終端」)があることが確認される。このため、差分情報検出モジュール103は、ステップS403の処理に移行する。
差分情報検出モジュール103は、差分管理対象ファイルのファイル情報201にオブジェクト識別子があるかを確認する(ステップS403)。ここでは、差分管理対象ファイル「host01:/var/adm/syslog/syslog.log」のファイル情報201にオブジェクト識別子があることが確認される(ステップS403Yes)。次に、ファイル情報201に含まれるオブジェクト識別子=「7176225」と一致する差分検出情報220が差分検出情報テーブル22にないことが確認される(ステップS404No)。
ファイル情報201に含まれるオブジェクト識別子に一致する差分検出情報220が差分検出情報テーブル22にないため、差分情報検出モジュール103は、差分管理対象ファイル「host01:/var/adm/syslog/syslog.log」の全てが差分データ300であると判定する(ステップS402)。又、差分情報検出モジュール103は、差分管理対象ファイル「host01:/var/adm/syslog/syslog.log」のデータの始点及び終端を差分データ300の始点及び終点として指定する差分情報230を取得する。
以上のように、ステップS303における差分検出処理が終了すると、図7に示すステップS304における処理に移行する。
差分情報検出モジュール103は、差分管理対象ファイルとともに取得したファイル情報201から世代管理タイプ用の差分検出情報220を取得する(ステップS304)。ここでは、差分情報検出モジュール103は、差分管理対象ファイル「host01:/var/adm/syslog/syslog.log」のファイル情報201(ファイルパス=「host01:/var/adm/syslog/syslog.log」、作成日時=「2007年2月1日 13:01:01」、オブジェクト識別子=「7176225」、ファイルサイズ=「512バイト」)と、差分情報230=「始点:ファイルの先頭、終点:ファイルの終端」と、グループAを対応付けて新たな差分検出情報220として取得する。ただし、ファイルパスは、差分検出情報220として必須ではない。
差分情報検出モジュール103は、新たに取得した差分検出情報220を差分情報管理モジュール102を介して、差分検出情報テーブル22に記録する(ステップS305)。差分情報検出モジュール103は、取得した差分情報230を差分情報出力モジュール104に渡す。差分情報出力モジュール104は、差分情報230に対応する差分管理対象ファイルから差分情報230の示す差分の始点から終点までのデータを順に読み込み、差分データ300として出力する。ここではファイル「host01:/var/adm/syslog/syslog.log」のデータの全てが読み込まれ、出力装置15に出力される。この際、差分情報管理モジュール102は、今回、新たに格納した差分検出情報220(ファイルパス=「host01:/var/adm/syslog/syslog.log」のファイル情報201(ファイルパス=「host01:/var/adm/syslog/syslog.log」、作成日時=「2007年2月1日 13:01:01」、オブジェクト識別子=「7176225」、ファイルサイズ=「512バイト」、差分情報230=「始点:ファイルの先頭、終点:ファイルの終端」)が参照可能に設定される。
ステップS303〜S306の処理は、選択したグループに所属する全ての差分管理対象ファイルについて行われる(ステップS307)。グループ内の全ての差分管理対象ファイルに対しステップS303〜S306の処理が行われると、ステップS308に移行する(ステップS307Yes)。ステップS308では、差分管理対象ファイル群200内の全てのファイルに対し、差分検出処理が実行されたかが確認される。ここで、選択されていない差分管理対象ファイルがある場合、ステップS301に移行して、当該ファイルが所属するグループを選択し、差分検出処理を実行する。このように、ステップS301以降に続く差分検出処理は、取得した差分管理対象ファイル群200が所属する全てのグループに対して行われる。ここでは、取得した差分管理対象ファイルがグループAのみに所属するため、グループAに所属する差分管理対象ファイル群200に対してのみ差分検出処理が行われる。
以上のように、グループAに対応する差分検出情報220として前回記録された差分検出情報220(ファイルパス=「host01:/var/adm/syslog/syslog.log」、作成日時=「2007年1月1日 13:01:01」、オブジェクト識別子=「7176224」、ファイルサイズ=「1024バイト」、差分情報230=始点:ファイルの先頭、終点:ファイルの終端)が削除され、差分検出情報220(ファイルパス=「host01:/var/adm/syslog/OLDsyslog.log」、作成日時=「2007年1月1日 13:01:01」、オブジェクト識別子=「7176224」、ファイルサイズ=「2048バイト」、差分情報230=始点:ファイルの先頭から1025バイト目、終点:ファイルの終端)と、差分検出情報220(ファイルパス=「host01:/var/adm/syslog/syslog.log」、作成日時=「2007年2月1日 13:01:01」、オブジェクト識別子=「7176225」、ファイルサイズ=「512バイト」、差分情報230=「始点:ファイルの先頭、終点:ファイルの終端」)がグループAに対応する新たな差分検出情報220として記録される。
以上のように本発明では、入力された差分管理対象ファイルの元のファイル(変更前又は変更なし)が、前回差分検出ファイルであるか否かの判定(差分管理対象ファイルと前回差分検出ファイルが同一ファイルであるか否かの判定)をファイルパス、オブジェクト識別子、作成日時などの組み合わせで行う。このため、ファイル名が変更されても同一ファイルか否かの判定をすることができる。
又、本発明では、さらに、同一ファイルと判定したファイル同士のファイルサイズを比較して更新前のファイルと更新後のファイルの差分が検出される。これにより、ファイルへの出力が追記されたファイルに対し、ファイルの中身を比較することなく差分を検出できる。
次に、オブジェクト識別子のない差分管理対象ファイルに対する差分検出処理の詳細を説明する。ここでは、差分検出情報220(グループ名=host02 Apache access_log、ファイルパス=「host02:C:¥Program Files¥Apache Group¥Apache¥logs¥access_log.1」、作成日時=「2007年2月1日 13:01:01」、オブジェクト識別子=「なし」、ファイルサイズ=「512バイト」)と、差分検出情報220(グループ名=host02 Apache access_log、ファイルパス=「host02:C:¥Program Files¥Apache Group¥Apache¥logs¥access_log」、作成日時=「2007年3月1日 13:01:01」、オブジェクト識別子=「なし」、ファイルサイズ=「1024バイト」)が差分検出情報テーブル22に記録されているものとする。
差分情報検出モジュール103は、差分検出処理の指示に応答して差分管理対象ファイル群200と、対応するファイル情報201を取得する(ステップS201)。ここでは、差分情報検出モジュール103は、差分管理対象ファイル群200として2つの差分管理対象ファイル(ファイル情報201:ファイルパス=「host02:C:¥Program Files¥Apache Group¥Apache¥logs¥access_log.1」、作成日時=「2007年2月1日 13:01:01」、オブジェクト識別子=「なし」、ファイルサイズ=「512バイト」)と、差分管理対象ファイル(ファイル情報201:ファイルパス=「host02:C:¥Program Files¥Apache Group¥Apache¥logs¥access_log」、作成日時=「2007年3月1日 13:01:01」、オブジェクト識別子=「なし」、ファイルサイズ=「2048バイト」)を取得する。
差分情報検出モジュール103は、グループ情報テーブル21に登録されているグループA、B、Cのグループ情報210を取得する(ステップS202)。
差分情報管理モジュール102は、差分検出情報テーブル22を参照して、既に記録されている差分検出情報220(グループ名=host02 Apache access_log、ファイルパス=「host02:C:¥Program Files¥Apache Group¥Apache¥logs¥access_log.1」、作成日時=「2007年2月1日 13:01:01」、オブジェクト識別子=「なし」、ファイルサイズ=「512バイト」、差分情報230=始点:ファイルの先頭、終点:ファイルの終端)と、差分検出情報220(グループ名=host02 Apache access_log、ファイルパス=「host02:C:¥Program Files¥Apache Group¥Apache¥logs¥access_log」、作成日時=「2007年3月1日 13:01:01」、オブジェクト識別子=「なし」、ファイルサイズ=「1024バイト」、差分情報230=「始点:ファイルの先頭、終点:ファイルの終端」)を差分情報検出モジュール103に渡す(ステップS203)。
差分情報検出モジュール103は、取得した差分管理対象ファイル群200をグループ情報210に基づいてグループ分けする(ステップS204)。ここでは、取得した差分管理対象ファイル「host02:C:¥Program Files¥Apache Group¥Apache¥logs¥access_log.1」及び「host02:C:¥Program Files¥Apache Group¥Apache¥logs¥access_log」は、両者ともグループB(グループ名:「host02 Apache access_log」)のグループ所属条件「host02:C:¥¥Program Files¥¥Apache Group¥¥Apache¥¥logs¥¥access_log(¥.[1−9]{0,1})」に適合するため、グループBに対応付けられる。
差分情報検出モジュール103は、取得した差分管理対象ファイル群200内の全てのファイルの差分検出処理を行い、差分検出情報テーブル22を更新する(ステップS205)。図7を参照して、ステップS205における差分検出処理の詳細を説明する。
先ず、差分情報検出モジュール103は、グループを1つ選択し、グループに所属する差分管理対象ファイルの差分検出処理を開始する(ステップS301)。ここでは、グループBが選択される。差分情報検出モジュール103は、グループを選択すると、そのグループのタイプを確認する(ステップS302)。
グループBは世代管理タイプであるため、差分情報検出モジュール103は、グループBに所属する差分管理対象ファイルを選択し、世代管理タイプ用の差分検出処理を行う(ステップS303)。ここでは最初に差分管理対象ファイル「host02:C:¥Program Files¥Apache Group¥Apache¥logs¥access_log.1」が選択される。
図8を参照して、ステップS303における差分検出処理の詳細を説明する。差分情報検出モジュール103は、ステップS301において選択したグループに所属する前回差分検出ファイルがあるかを確認する(ステップS401)。ここではグループBの前回差分検出ファイルに対応する差分検出情報220(グループ名=host02 Apache access_log、ファイルパス=「host02:C:¥Program Files¥Apache Group¥Apache¥logs¥access_log.1」、作成日時=「2007年2月1日 13:01:01」、オブジェクト識別子=「なし」、ファイルサイズ=「512バイト」、差分情報230=始点:ファイルの先頭、終点:ファイルの終端)と、差分検出情報220(グループ名=host02 Apache access_log、ファイルパス=「host02:C:¥Program Files¥Apache Group¥Apache¥logs¥access_log」、作成日時=「2007年3月1日 13:01:01」、オブジェクト識別子=「なし」、ファイルサイズ=「1024バイト」、差分情報230=「始点:ファイルの先頭、終点:ファイルの終端」)があることが確認される。このため、差分情報検出モジュール103は、ステップS403の処理に移行する。
差分情報検出モジュール103は、差分管理対象ファイルのファイル情報201にオブジェクト識別子があるかを確認する(ステップS403)。ここでは、差分管理対象ファイル「host02:C:¥Program Files¥Apache Group¥Apache¥logs¥access_log.1」のファイル情報201にオブジェクト識別子がないことが確認される(ステップS403No)。この場合、差分情報検出モジュール103は、差分管理対象ファイルのファイル名の固定フィールドが検証対象のグループに対応するファイル名の固定フィールドの条件に適合するかどうかを確認する(ステップS408)。ファイル名の固定フィールドが適合しない場合、差分管理対象ファイルは新しいファイルとして判定される(ステップS408No)。この場合、差分管理対象ファイルの全てが差分データ300として判定される。一方、ファイル名の固定フィールドが適合する場合、ステップS405における作成日時の比較処理に移行する。ここでは差分管理対象ファイル「host02:C:¥Program Files¥Apache Group¥Apache¥logs¥access_log.1」のファイル名の固定フィールド「access_log」は、グループBに対応するファイルの固定フィールド「preg_match_all(“/(access_log)(¥.[1−9]{0,1}|)/”, $filename, $matches);」の第1パタンに適合するため、差分情報検出モジュール103は、作成日時比較処理に移行する(ステップS408Yes)。
差分情報検出モジュール405は、ファイル情報201に含まれる作成日時に一致する作成日時を有する差分検出情報220があるかを確認する(ステップS405)。ここではファイル情報201に含まれる作成日時=「2007年2月1日 13:01:01」と差分検出情報220(前回差分検出ファイル「host02:C:¥Program Files¥Apache Group¥Apache¥logs¥access_log.1」に対応)の作成日時=「2007年2月1日 13:01:01」が一致することが確認される。
次に、ファイル情報201内の作成日時と一致する差分検出情報220がある場合、差分情報検出モジュール103は、ファイル情報201内のファイルのデータサイズと、当該差分検出情報220に含まれるデータサイズとを比較する(ステップS406)。これにより、作成日時が一致する差分管理対象ファイルと前回差分検出ファイルとのファイルサイズを比較することができる。ステップS406の処理において、差分管理対象ファイルのサイズが前回差分検出ファイルのサイズ以下である場合、差分なしと判定される(ステップS407)。この場合、差分検出情報220は更新されない。一方、ステップS406の処理において差分管理対象ファイルのサイズが前回差分検出ファイルのサイズより大きい場合、そのサイズ差分のデータが差分データ300として判定される。この場合、差分情報検出モジュール103は、前回差分検出ファイルの終端の次のデータを始点として指定し、差分管理対象ファイルの終端をデータの終端として指定する差分情報230を取得する。ここでは、差分管理対象ファイル「host02:C:¥Program Files¥Apache Group¥Apache¥logs¥access_log.1」のファイルサイズ=「512バイト」と、作成日時が一致する前回差分検出ファイル「host02:C:¥Program Files¥Apache Group¥Apache¥logs¥access_log.1」のファイルサイズ=「512バイト」が比較され、ファイルサイズに差がないことが確認される(ステップS407)。この場合、差分情報検出モジュール103は、差分管理対象ファイル「host02:C:¥Program Files¥Apache Group¥Apache¥logs¥access_log.1」の始点及び終点を差分データ300の始点及び終点として指定する差分情報230を取得する。
以上のように、ステップS303における差分検出処理が終了すると、図7に示すステップS304における処理に移行する。
差分情報検出モジュール103は、差分管理対象ファイルとともに取得したファイル情報201から世代管理タイプ用の差分検出情報220を取得する(ステップS304)。ここでは、差分情報検出モジュール103は、差分管理対象ファイル「「host02:C:¥Program Files¥Apache Group¥Apache¥logs¥access_log.1」のファイル情報201(ファイルパス=「host02:C:¥Program Files¥Apache Group¥Apache¥logs¥access_log.1」、作成日時=「2007年2月1日 13:01:01」、オブジェクト識別子=「なし」、ファイルサイズ=「512バイト」と、差分情報230=「始点:ファイルの先頭、終点:ファイルの終端」と、グループBとを対応付けて新たな差分検出情報220として取得する。ただし、ファイルパスは、差分検出情報220として必須ではない。
差分情報検出モジュール103は、取得した新たな差分検出情報220を差分情報管理モジュール102を介して、差分検出情報テーブル22に記録する(ステップS305)。ここでは、新たな差分検出情報220として(グループ名=「host02 Apache access_log」、ファイルパス=「host02:C:¥Program Files¥Apache Group¥Apache¥logs¥access_log.1」、作成日時=「2007年2月1日 13:01:01」、オブジェクト識別子=「なし」、ファイルサイズ=「512バイト」、差分情報230=「始点:ファイルの先頭、終点:ファイルの終端」)が記録される。尚、このタイミングでは記録した差分検出情報テーブル22の差分検出情報は参照できない。このため、差分情報管理モジュール102は、新たに記録された差分検出情報220を参照可能に設定する(ステップS306)。
ステップS306において、差分情報検出モジュール103は、取得した差分情報230を差分情報出力モジュール104に渡す。ここでは、差分管理対象ファイル「host02:C:¥Program Files¥Apache Group¥Apache¥logs¥access_log.1」に新たなデータ(差分データ300)がないことを差分情報230として差分情報出力モジュール104に通知する。差分情報出力モジュール104は、差分情報230に基づいて差分管理対象ファイル「host02:C:¥Program Files¥Apache Group¥Apache¥logs¥access_log.1」からのデータの読み出しを行わない。差分情報管理モジュール102は、今回処置したグループに対応する古い差分検出情報220(ファイルパス=「host02:C:¥Program Files¥Apache Group¥Apache¥logs¥access_log.1」、作成日時=「2007年2月1日 13:01:01」、オブジェクト識別子=「なし」、ファイルサイズ=「512バイト」、差分情報230=始点:ファイルの先頭、終点:ファイルの終端)を削除し、今回、新たに格納した差分検出情報220を参照可能に設定する。ここでは、今回格納した新たな差分検出情報220(グループ名=「host02 Apache access_log」、ファイルパス=「host02:C:¥Program Files¥Apache Group¥Apache¥logs¥access_log.1」、作成日時=「2007年2月1日 13:01:01」、オブジェクト識別子=「なし」、ファイルサイズ=「512バイト」、差分情報230=「始点:ファイルの先頭、終点:ファイルの終端」)が参照可能に設定される。
次に、差分管理対象ファイル群200内に、グループBに所属し、差分検出されていない差分管理対象ファイルが有る場合、ステップS303に移行する(ステップS307No)。ステップS303では、次の差分管理対象ファイルが選択され、世代管理タイプ用の差分検出処理が行われる。ここでは、差分管理対象ファイル「host02:C:¥Program Files¥Apache Group¥Apache¥logs¥access_log」(ファイルパス=「host02:C:¥Program Files¥Apache Group¥Apache¥logs¥access_log」、作成日時=「2007年3月1日 13:01:01」、オブジェクト識別子=「なし」、ファイルサイズ=「1024バイト」)が選択される。
図8を参照して、ステップS303における差分検出処理の詳細を説明する。差分情報検出モジュール103は、ステップS301において選択したグループに所属する前回差分検出ファイルがあるかを確認する(ステップS401)。ここではグループBの前回差分検出ファイルに対応する差分検出情報220(グループ名=host02 Apache access_log、ファイルパス=「host02:C:¥Program Files¥Apache Group¥Apache¥logs¥access_log.1」、作成日時=「2007年2月1日 13:01:01」、オブジェクト識別子=「なし」、ファイルサイズ=「512バイト」、差分情報230=「始点:ファイルの先頭、終点:ファイルの終端」)と、差分検出情報220(グループ名=host02 Apache access_log、ファイルパス=「host02:C:¥Program Files¥Apache Group¥Apache¥logs¥access_log」、作成日時=「2007年3月1日 13:01:01」、オブジェクト識別子=「なし」、ファイルサイズ=「1024バイト」、差分情報=「始点:ファイルの先頭、終点:ファイルの終端」)があることが確認される。このため、差分情報検出モジュール103は、ステップS403の処理に移行する。
差分情報検出モジュール103は、差分管理対象ファイルのファイル情報201にオブジェクト識別子があるかを確認する(ステップS403)。ここでは、差分管理対象ファイル「host02:C:¥Program Files¥Apache Group¥Apache¥logs¥access_log」のファイル情報201にオブジェクト識別子がないことが確認される(ステップS403No)。この場合、差分情報検出モジュール103は、差分管理対象ファイルのファイル名の固定フィールドが検証対象のグループに対応するファイル名の固定フィールドの条件に適合するかどうかを確認する(ステップS408)。ファイル名の固定フィールドが適合しない場合、差分管理対象ファイルは新しいファイルとして判定される(ステップS408No)。この際、差分管理対象ファイルの全てが差分データ300として判定される。一方、ファイル名の固定フィールドが適合する場合、ステップS405における作成日時比較処理に移行する。ここでは差分管理対象ファイル「host02:C:¥Program Files¥Apache Group¥Apache¥logs¥access_log」のファイル名の固定フィールド「access_log」は、グループBに対応するファイルの固定フィールド「preg_match_all(“/(access_log)(¥.[1−9]{0,1}|)/”, $filename, $matches);」の第1パタンに適合するため、差分情報検出モジュール103は、作成日時比較処理に移行する(ステップS408Yes)。
差分情報検出モジュール405は、ファイル情報201に含まれる作成日時に一致する作成日時を有する差分検出情報220があるかを確認する(ステップS405)。ここではファイル情報201に含まれる作成日時=「2007年3月1日 13:01:01」と差分検出情報220(前回差分検出ファイル「host02:C:¥Program Files¥Apache Group¥Apache¥logs¥access_log」に対応)の作成日時=「2007年3月1日 13:01:01」が一致することが確認される。
次に、ファイル情報201内の作成日時と一致する差分検出情報220がある場合、差分情報検出モジュール103は、ファイル情報201内のファイルのデータサイズと、当該差分検出情報220に含まれるデータサイズとを比較する(ステップS406)。ここでは、差分管理対象ファイル「host02:C:¥Program Files¥Apache Group¥Apache¥logs¥access_log」のファイルサイズ=「2048バイト」と前回差分検出ファイル「host02:C:¥Program Files¥Apache Group¥Apache¥logs¥access_log」のファイルサイズ=「1024バイト」が比較され、差分管理対象ファイル「host02:C:¥Program Files¥Apache Group¥Apache¥logs¥access_log」のファイルサイズが1024バイト大きいことが確認される(ステップS406Yes)。この場合、差分管理対象ファイルのサイズの方が「1024バイト」大きいため、差分管理対象ファイルの始点から1024バイト進んだ位置からファイルの終端までが差分データ300であると判断される。又、差分情報検出モジュール103は、差分管理対象ファイル「host02:C:¥Program Files¥Apache Group¥Apache¥logs¥access_log」の1025バイト目を差分データ300の始点、その終端を差分データ300の終端として指定する差分情報230を取得する(ステップS409)。
以上のように、ステップS303における差分検出処理が終了すると、図7に示すステップS304における処理に移行する。
差分情報検出モジュール103は、差分管理対象ファイルとともに取得したファイル情報201から世代管理タイプ用の差分検出情報220を取得する(ステップS304)。ここでは、差分情報検出モジュール103は、差分管理対象ファイル「host01:/var/adm/syslog/OLDsyslog.log」のファイル情報201(ファイル情報201:ファイルパス=「host02:C:¥Program Files¥Apache Group¥Apache¥logs¥access_log」、作成日時=「2007年3月1日 13:01:01」、オブジェクト識別子=「なし」、ファイルサイズ=「2048バイト」)と、差分情報230=「始点:ファイルの先頭から1025バイト目、終点:ファイルの終端」とグループBとを対応付けて新たな差分検出情報220として取得する。ただし、ファイルパスは、差分検出情報220として必須ではない。
差分情報検出モジュール103は、取得した新たな差分検出情報220を差分情報管理モジュール102を介して、差分検出情報テーブル22に記録する(ステップS305)。ここでは、新たな差分検出情報220として(グループ名=「host02 Apache access_log」、ファイルパス=「host02:C:¥Program Files¥Apache Group¥Apache¥logs¥access_log」、作成日時=「2007年3月1日 13:01:01」、オブジェクト識別子=「なし」、ファイルサイズ=「2048バイト」、差分情報230=始点:ファイルの先頭から1025バイト目、終点:ファイルの終端)が記録される。尚、このタイミングでは記録した差分検出情報テーブル22の差分検出情報は参照できない。このため、差分情報管理モジュール102は、新たに記録された差分検出情報220を参照可能に設定する(ステップS306)。
図9を参照して、差分情報検出モジュール103は、取得した差分情報230を差分情報出力モジュール104に渡す(ステップS501)。差分情報出力モジュール104は、差分情報230に対応する差分管理対象ファイルから差分情報230の示す差分の始点から終点までのデータを順に読み込み、差分データ300として出力する(ステップS502)。ここでは、差分情報230を参照して差分管理対象ファイル「host02:C:¥Program Files¥Apache Group¥Apache¥logs¥access_log」の1025ビット目から終端(2048ビット目)までのデータが順に読み込まれ出力装置15に出力される。この際、差分情報管理モジュール102は、今回処置したグループに対応する古い差分検出情報220(前回差分検出ファイル「host02:C:¥Program Files¥Apache Group¥Apache¥logs¥access_log」の差分検出情報220)を削除し、今回、新たに格納した差分検出情報220を参照可能に設定する。ここでは、今回格納した新たな差分検出情報220(グループ名=「host02 Apache access_log」、ファイルパス=「host02:C:¥Program Files¥Apache Group¥Apache¥logs¥access_log」、作成日時=「2007年3月1日 13:01:01」、オブジェクト識別子=「なし」、ファイルサイズ=「2048バイト」、差分情報230=始点:ファイルの先頭から1025バイト目、終点:ファイルの終端)が参照可能に設定される。
ステップS303〜S306の処理は、選択したグループに所属する全ての差分管理対象ファイルについて行われる(ステップS307)。グループ内の全ての差分管理対象ファイルに対しステップS303〜S306の処理が行われると、ステップS308に移行する(ステップS307Yes)。ステップS308では、差分管理対象ファイル群200内の全てのファイルに対し、差分検出処理が実行されたかが確認される。ここで、選択されていない差分管理対象ファイルがある場合、ステップS301に移行して、当該ファイルが所属するグループを選択し、差分検出処理を実行する。このように、ステップS301以降に続く差分検出処理は、取得した差分管理対象ファイル群200が所属する全てのグループに対して行われる。ここでは、取得した差分管理対象ファイルがグループBのみに所属するため、グループBに所属する差分管理対象ファイル群200に対してのみ差分検出処理が行われる。
以上のように、グループBに対応する差分検出情報220として前回記録された差分検出情報220(ファイルパス=「host02:C:¥Program Files¥Apache Group¥Apache¥logs¥access_log.1」、作成日時=「2007年2月1日 13:01:01」、オブジェクト識別子=「なし」、ファイルサイズ=「512バイト」、差分情報230=「始点:ファイルの先頭、終点:ファイルの終端」))と、差分検出情報220(ファイルパス=「host02:C:¥Program Files¥Apache Group¥Apache¥logs¥access_log」、作成日時=「2007年3月1日 13:01:01」、オブジェクト識別子=「なし」、ファイルサイズ=「1024バイト」、差分情報230=「始点:ファイルの先頭、終点:ファイルの終端」)が削除され、差分検出情報220(差分管理対象ファイル(ファイル情報201:ファイルパス=「host02:C:¥Program Files¥Apache Group¥Apache¥logs¥access_log.1」、作成日時=「2007年2月1日 13:01:01」、オブジェクト識別子=「なし」、ファイルサイズ=「512バイト」、差分情報230=始点:ファイルの先頭から1025バイト目、終点:ファイルの終端)と、差分検出情報220(ファイル情報201:ファイルパス=「host02:C:¥Program Files¥Apache Group¥Apache¥logs¥access_log」、作成日時=「2007年3月1日 13:01:01」、オブジェクト識別子=「なし」、ファイルサイズ=「2048バイト」、差分情報230=始点:ファイルの先頭から1025バイト目、終点:ファイルの終端)がグループBに対応する新たな差分検出情報220として記録される。
本発明では、差分管理対象のファイルにオブジェクト識別子が含まれていない場合でも、ファイル名の固定フィールドを検証し、作成日時を比較することで、差分管理対象ファイルと同一な前回差分検出ファイルを抽出し、両者の差分を検出することができる。
次に、差分検出情報テーブル22に差分検出情報220が記録されていない初期状態において行われるDB用の差分管理対象ファイルに対する差分検出処理の詳細を説明する。
差分情報検出モジュール103は、差分検出処理の指示に応答して差分管理対象ファイル群200と、対応するファイル情報201を取得する(ステップS201)。ここでは、差分情報検出モジュール103は、差分管理対象ファイル群200として差分管理対象ファイル(ファイル情報201:ファイルパス=「host03:C:¥Documents and Settings¥user1¥My Documents¥event.csv」、作成日時=「2007年2月2日 14:02:02」、オブジェクト識別子=「なし」、ファイルサイズ=「512バイト」)とを取得する。
次に、差分情報検出モジュール103は、グループ情報テーブル21に登録されているグループA、B、Cのグループ情報210を取得する(ステップS202)。
初期状態では差分検出情報テーブル22に、差分検出情報220が記録されていないため、差分情報検出モジュール103は、「差分検出情報なし」という差分検出情報220を取得する(ステップS203)。
差分情報検出モジュール103は、取得した差分管理対象ファイルをグループ情報210に基づいてグループ分けする(ステップS204)。ここでは、取得した差分管理対象ファイル「host03:C:¥Documents and Settings¥user1¥My Documents¥event.csv」は、グループB(グループ名:「host03 event.csv」)のグループ所属条件「host03:C:¥¥Documents and Settings¥¥user1¥¥My Documents¥¥event¥.csv」に適合するため、グループBに対応付けられる。
差分情報検出モジュール103は、取得した差分管理対象ファイル群200内の全てのファイルの差分検出処理を行い、差分検出情報テーブル22を更新する(ステップS205)。図7を参照して、ステップS205における差分検出処理の詳細を説明する。
先ず、差分情報検出モジュール103は、グループを1つ選択し、グループに所属する差分管理対象ファイルの差分検出処理を開始する(ステップS301)。ここでは、グループCが選択される。差分情報検出モジュール103は、グループを選択すると、そのグループのタイプを確認する(ステップS302)。選択したグループが「DBタイプ」又は「再帰タイプ」である場合、ステップS309の処理に移行する(ステップS302No)。
グループCはDBタイプであるため、差分情報検出モジュール103は、グループCに所属する差分管理対象ファイルを選択し、DBタイプ用の差分検出処理を行う(ステップS309)。ここでは差分管理対象ファイル「host03:C:¥Documents and Settings¥user1¥My Documents¥event.csv」が選択される。ステップS309におけるDBタイプ用の差分検出処理の詳細を図10に示す。
図10を参照して、差分情報検出モジュール103は、ステップS301において選択したグループに所属する前回差分検出ファイルがあるかを確認する(ステップS601)。ここで、グループに前回差分検出ファイルがある場合、すなわち、グループに対応付けられた差分検出情報220が既に記録されている場合、ステップS603の処理に移行する(ステップS601Yes)。一方、グループに所属する前回差分検出ファイルがない場合、すなわち、グループに対応付けられた差分検出情報220が未登録の場合、差分情報検出モジュール103は、ステップS303で選択された差分管理対象ファイルのデータの全てを差分データ300として判定する(ステップS602)。この際、差分情報検出モジュール103は、差分管理対象ファイルにおけるデータの始点及び終点を差分情報230として取得する。
ここでは、グループCに対する差分検出はこれが最初であるため、前回差分検出ファイルがないことが確認される。この場合、ステップS602の処理において、差分管理対象ファイル「host01:/var/adm/syslog/syslog.log」のデータは、全て新たなデータ、すなわち全て差分データ300であると判定される。又、差分情報検出モジュール103は、差分管理対象ファイル「host03:C:¥Documents and Settings¥user1¥My Documents¥event.csv」のデータの始点及び終端を差分データ300の始点及び終点として指定する差分情報230を取得する。
以上のように、ステップS303における差分検出処理が終了すると、図7に示すステップS310における処理に移行する。
差分情報検出モジュール103は、差分管理対象ファイルとともに取得したファイル情報201からDBタイプ用の差分検出情報220を取得する(ステップS310)。この際、差分検出情報220には差分データ300の読み取り位置を示す差分情報230が含まれる。DBタイプ用の差分情報230は、差分管理対象ファイルにおける最後のデータから遡って、少なくとも1回(1回より多くても良い)タイムスタンプが変化するデータまでのデータを含む。例えば、差分管理対象ファイルのデータが以下のように昇順に並んでいる場合、
「2007/03/01 10:10:10 message_1」、「2007/03/01 10:10:10 message_2」、「2007/03/01 10:10:10 message_3」、「2007/03/01 10:10:10 message_1」、「2007/03/01 10:10:10 message_2」、「2007/03/01 10:10:11 message_3」、「2007/03/01 10:10:11 message_1」、「2007/03/01 10:10:12 message_2」、「2007/03/01 10:10:12 message_3」、
DB用の差分情報230は、最後のデータ(「2007/03/01 10:10:12 message_3」)から 1回タイムスタンプが変化するデータ(「2007/03/01 10:10:11 message_1」)までのデータとなる。すなわち、差分情報230は、「2007/03/01 10:10:11 message_1」、「2007/03/01 10:10:12 message_2」、「2007/03/01 10:10:12 message_3」となる。
差分情報検出モジュール103は、新たに取得した差分検出情報220を差分情報管理モジュール102を介して、差分検出情報テーブル22に記録する(ステップS305)。尚、このタイミングでは記録した差分検出情報テーブル22の差分検出情報は参照できない。このため、差分情報管理モジュール102は、新たに記録された差分検出情報220を参照可能に設定する(ステップS306)。
図9を参照して、差分情報検出モジュール103は、取得した差分情報230を差分情報出力モジュール104に渡す(ステップS501)。差分情報出力モジュール104は、差分情報230に対応する差分管理対象ファイルから差分情報230に基づいて差分の始点から終点までのデータを順に読み込み、差分データ300として出力する(ステップS502)。ここではファイル「host03:C:¥Documents and Settings¥user1¥My Documents¥event.csv」のデータの全てが読み込まれ、出力装置15に出力される。この際、差分情報管理モジュール102は、今回処置したグループに対応する古い差分検出情報220(前回差分検出ファイルの差分検出情報220)を削除し、今回、新たに格納した差分検出情報220を参照可能に設定する。ここでは、削除する差分検出情報は無いため、今回格納した新たな差分検出情報220(ファイルパス=「host03:C:¥Documents and Settings¥user1¥My Documents¥event.csv」、作成日時=「2007年2月2日 14:02:02」、オブジェクト識別子=「なし」、ファイルサイズ=「512バイト」、差分情報230=「2007/03/01 10:10:11 message_1」、「2007/03/01 10:10:12 message_2」、「2007/03/01 10:10:12 message_3」)が参照可能に設定される。
ステップS303〜S306の処理は、選択したグループに所属する全ての差分管理対象ファイルについて行われる(ステップS307)。ここでは、取得した差分管理対象ファイルがグループCのみに所属するため、グループCに所属する差分管理対象ファイル群200に対してのみ差分検出処理が行われる。
次に、差分検出情報テーブル22に上述の差分検出情報220が記録されている状態において、差分情報検出モジュール103に対し新たな差分情報検出処理が指示された場合について説明する。
差分情報検出モジュール103は、差分検出処理の指示に応答して差分管理対象ファイル群200と、対応するファイル情報201を取得する(ステップS201)。ここでは、差分情報検出モジュール103は、差分管理対象ファイル群200として差分管理対象ファイル(ファイル情報201:ファイルパス=「host03:C:¥Documents and Settings¥user1¥My Documents¥event.csv」、作成日時=「2007年3月3日 15:03:03」、オブジェクト識別子=「なし」、ファイルサイズ=「512バイト」)を取得する。
次に、差分情報検出モジュール103は、グループ情報テーブル21に登録されているグループA、B、Cのグループ情報210を取得する(ステップS202)。
差分情報管理モジュール102は、差分検出情報テーブル22を参照して、既に記録されている差分検出情報220(グループ名=「host03 event.csv」、ファイルパス=「host03:C:¥Documents and Settings¥user1¥My Documents¥event.csv」、作成日時=「2007年2月2日 14:02:02」、オブジェクト識別子=「なし」、ファイルサイズ=「512バイト」、差分情報230=「2007/03/01 10:10:11 message_1」、「2007/03/01 10:10:12 message_2」、「2007/03/01 10:10:12 message_3」)を差分情報検出モジュール103に渡す(ステップS203)。
差分情報検出モジュール103は、取得した差分管理対象ファイル群200をグループ情報210に基づいてグループ分けする(ステップS204)。ここでは、取得した差分管理対象ファイル「host03:C:¥Documents and Settings¥user1¥My Documents¥event.csv」のグループ所属条件host03:C:¥¥Documents and Settings¥¥user1¥¥My Documents¥¥event¥.csv」に適合するため、グループCに対応付けられる。
差分情報検出モジュール103は、取得した差分管理対象ファイル群200内の全てのファイルの差分検出処理を行い、差分検出情報テーブル22を更新する(ステップS205)。図7を参照して、ステップS205における差分検出処理の詳細を説明する。
先ず、差分情報検出モジュール103は、グループを1つ選択し、グループに所属する差分管理対象ファイルの差分検出処理を開始する(ステップS301)。ここでは、グループCが選択される。差分情報検出モジュール103は、グループを選択すると、そのグループのタイプを確認する(ステップS302)。
グループCはDBタイプであるため、差分情報検出モジュール103は、グループCに所属する差分管理対象ファイルを選択し、DBタイプ用の差分検出処理を行う(ステップS309)。ここでは差分管理対象ファイル「host03:C:¥Documents and Settings¥user1¥My Documents¥event.csv」が選択される。
図10を参照して、ステップS306における差分検出処理の詳細を説明する。差分情報検出モジュール103は、ステップS301において選択したグループに所属する前回差分検出ファイルがあるかを確認する(ステップS601)。ここではグループCの前回差分検出ファイルに対応する差分検出情報220(「host03:C:¥Documents and Settings¥user1¥My Documents¥event.csv」、作成日時=「2007年2月2日 14:02:02」、オブジェクト識別子=「なし」、ファイルサイズ=「512バイト」、差分情報230=「2007/03/01 10:10:11 message_1」、「2007/03/01 10:10:12 message_2」、「2007/03/01 10:10:12 message_3」))があることが確認される。このため、差分情報検出モジュール103は、ステップS603の処理に移行する。
差分情報検出モジュール103は、差分管理対象ファイル「host03:C:¥Documents and Settings¥user1¥My Documents¥event.csv」内で最も古いデータの位置を探索する(ステップS603)。ここで、差分情報検出モジュール103はタイムスタンプを参照し、差分管理対象ファイル内のデータが昇順に並んでいる場合はファイルの始点、降順に並んでいる場合はファイル終点を最も古いデータの位置とする。
次に、差分情報検出モジュール103は、最も古いデータの位置から差分データ300の開始位置を探索する(ステップS604)。詳細には、差分情報検出モジュール103は、差分管理対象ファイルの最も古いデータの位置から前回差分検出ファイルにないデータの位置を探索する。差分情報検出モジュール103は、差分管理対象ファイルの最も古いデータから順に差分検出情報220に含まれる差分情報230と一致するデータを探索し、一致したデータの次のデータを差分データ300の開始位置として判定する。この際、差分情報230と一致するデータがない場合、差分情報検出モジュール103は、差分情報230内の最も古いデータを古い順に1つずつ削除し、差分管理対象ファイルの最も古いデータの位置に適合させる。これにより、差分管理対象ファイルの最も古いデータと差分情報230の最も古いデータを適合させることができる。ここで、両者の最も古いデータを適合させることができた場合、差分情報検出モジュール103は、適合したデータの次のデータを前回差分検出ファイルにない差分データ300の開始位置として判定する。
ステップS604において差分データ300の開始位置が発見されない場合、差分なしと判定される。すなわち、全ての差分情報230内のデータを削除した場合は、ファイルの全てが差分データ300であると判定される(ステップS605No、S607)。この場合、差分検出情報220の更新は行われない。一方、差分データ300の開始位置が発見された場合、開始位置から最も新しいデータ位置までが差分データ300として判定される(ステップ605Yes、S606)。この場合、差分情報検出モジュール103は、発見した開始位置から最も新しいデータ位置までのデータを新しい差分情報230として取得する。ここでは、差分管理対象ファイルにおいて、差分情報230のデータと一致するデータの次のデータの位置を発見できたものとする。
以上のように、ステップS303における差分検出処理が終了すると、図7に示すステップS310における処理に移行する。
差分情報検出モジュール103は、差分管理対象ファイルとともに取得したファイル情報201からDBタイプ用の差分検出情報220を取得する(ステップS310)。この際、差分検出情報220には差分データ300の読み取り位置を示す差分情報230が含まれる。ここでは、差分情報検出モジュール103は、差分管理対象ファイル「host03:C:¥Documents and Settings¥user1¥My Documents¥event.csv」のファイル情報201ファイル情報201:ファイルパス=「host03:C:¥Documents and Settings¥user1¥My Documents¥event.csv」、作成日時=「2007年2月2日 14:02:02」、オブジェクト識別子=「なし」、ファイルサイズ=「512バイト」)と、ステップS307で取得した差分情報230差分情報230=「始点:一致データの次のデータ位置、終点:最も新しいデータ位置」とグループCを対応付けて新たな差分検出情報220として取得する。ただし、ファイルパスは、差分検出情報220として必須ではない。
差分情報検出モジュール103は、取得した新たな差分検出情報220を差分情報管理モジュール102を介して、差分検出情報テーブル22に記録する(ステップS311)。ここでは、新たな差分検出情報220として(ファイル情報201:ファイルパス=「host03:C:¥Documents and Settings¥user1¥My Documents¥event.csv」、作成日時=「2007年2月2日 14:02:02」、オブジェクト識別子=「なし」、ファイルサイズ=「512バイト」、差分情報230)がグループCに対応付けられて記録される。尚、このタイミングでは記録した差分検出情報テーブル22の差分検出情報は参照できない。このため、差分情報管理モジュール102は、新たに記録された差分検出情報220を参照可能に設定する(ステップS312)。
図9を参照して、差分情報検出モジュール103は、取得した差分情報230を差分情報出力モジュール104に渡す(ステップS501)。差分情報出力モジュール104は、差分情報230に対応する差分管理対象ファイルから差分情報230の示す差分の始点から終点までのデータを順に読み込み、差分データ300として出力する(ステップS502)。ここでは、差分情報230を参照して、差分管理対象ファイル「host03:C:¥Documents and Settings¥user1¥My Documents¥event.csv」における差分の始点(一致するデータの次のデータの位置)から最も新しいデータの位置(昇順の場合ファイルの終点、降順の場合ファイルの始点)までのデータが順に読み込まれ出力装置15に出力される。この際、差分情報管理モジュール102は、今回処置したグループに対応する古い差分検出情報220(前回差分検出ファイルの差分検出情報220)を削除し、今回、新たに格納した差分検出情報220を参照可能に設定する。ここでは、今回格納した新たな差分検出情報220(グループ名=「host03 event.csv」、ファイルパス=「host03:C:¥Documents and Settings¥user1¥My Documents¥event.csv」、作成日時=「2007年2月2日 14:02:02」、オブジェクト識別子=「なし」、ファイルサイズ=「512バイト」、差分情報230=「始点:一致データの次のデータ位置、終点:最も新しいデータ位置」)が参照可能に設定される。
ステップS309〜S312の処理は、選択したグループに所属する全ての差分管理対象ファイルについて行われる(ステップS313)。グループ内の全ての差分管理対象ファイルに対しステップS303〜S306の処理が行われると、ステップS308に移行する(ステップS313Yes)。ステップS308では、差分管理対象ファイル群200内の全てのファイルに対し、差分検出処理が実行されたかどうかが確認される。ここで、選択されていない差分管理対象ファイルがある場合、ステップS301に移行して、当該ファイルが所属するグループを選択し、差分検出処理を実行する。このように、ステップS301以降に続く差分検出処理は、取得した差分管理対象ファイル群200が所属する全てのグループに対して行われる。ここでは、取得した差分管理対象ファイルがグループCのみに所属するため、グループCに所属する差分管理対象ファイル群200に対してのみ差分検出処理が行われる。
以上のように、本発明によるファイル差分管理装置10は、データスタンプに基づいて最も古いデータの位置や、最も新しいデータの位置を判別することで、取得した差分管理対象ファイルにおける差分データ300の開始位置を検出する。詳細には、ファイル差分管理装置10は、差分検出時のファイルの最もタイムスタンプが大きい(最近の)データから遡って、少なくとも次にタイムスタンプが大きいデータまでを差分情報230として保持する。ファイル差分管理装置10は、差分管理対象ファイルにおいて、最もタイムスタンプが小さい(最古の)データの位置から最もタイムスタンプが大きいデータの位置に向かって、差分情報230と完全一致する部分を検索し、最初に一致したところの次のデータから最もタイムスタンプが大きいデータまでを差分の始点から終点までを新たな差分情報230として取得することができる。又、両者に完全に一致する部分がない場合は、保持している差分検出情報の最も古いデータを1つ削除して、対象のファイルの最もタイムスタンプが小さいデータの位置に合わせて比較を行う(削除して比較を行う処理は一致するまで行われる)。削除することによって一致させることができた場合は、一致したところの次のデータから最もタイムスタンプが大きいデータまでを差分の始点から終点までとして取得することができる。差分情報230を最後まで削除した場合は、対象のファイルはすべてが新しいデータであると判定する。このように、本発明によるファイル差分管理装置10は、各データがタイムスタンプを持ち、古いデータから順次削除されるようなファイルに対しても差分検出できる。
次に、DBタイプと再帰タイプのファイルに対する差分管理の違いについて説明する。再帰タイプの差分管理対象ファイルに対する差分検出処理は、ステップS603における処理のみがDBタイプに対する処理と相違し、その他の処理は、同様である。
ステップS603の処理において、「再帰タイプ」の差分管理対象ファイルの最も古いデータの位置を探索する場合、差分情報検出モジュール103は、データのタイムスタンプの前後関係を確認し、タイムスタンプが逆行している箇所で、その差が最も大きいところを最も古いデータの位置とする。
例えば、次のようにデータが並んでいる場合、
「2007/03/01 10:10:10 msg_A」、「2007/03/01 10:10:11 msg_B」、「2007/03/01 10:10:10 msg_C」、「2007/02/01 10:10:11 msg_D」、「2007/02/01 10:10:10 message_E、
タイムスタンプが逆行し、その差が最も大きいデータ「2007/02/01 10:10:11 msg_D」の位置を最も古いデータの位置とする。また、最も新しいデータの位置は、最も大きいデータの前にある「2007/03/01 10:10:10 msg_C」の位置とする。
以上のように、本発明によれば、ファイルのタイプが再帰タイプであっても、データスタンプに基づいて最も古いデータの位置や、最も新しいデータの位置を判別することができる。
本発明では、ファイルの差分管理の範囲を同一グループ内のファイルとし、その中で前回差分検出時のファイル群と今回のファイル群のファイルのオブジェクト識別子、ファイルの作成日時、ファイル名などを用いて、同一ファイルかどうかを判定する。このため、ファイル名が変更されても、ファイルの差分管理を行うことができる。又、同一ファイルとして判定された場合、ファイルのサイズを用いて新たに追加されたデータの位置を取得することができる。この場合、本発明によるファイル差分管理装置10は、ファイルの内容を比較することなく差分を検出できるため、前回差分検出ファイルの内容を保持する必要は無い。従って、差分管理に必要な記憶容量を小さくすることができる。
又、データベースからタイムスタンプを持つデータを取り出したファイル(DBタイプ)や、1つのファイルにタイムスタンプを持つデータを再帰的に出力するファイル(再帰タイプ)の場合、ファイル差分管理装置10は、タイムスタンプに基づいて差分データ300の始点及び終点を検出することができる。
従って、本発明によれば、定期的にログファイルを収集するシステムにおいて、そのログファイルから新しいログデータのみを収集するための装置(プログラム)に適用できる。
以上、本発明の実施例を詳述してきたが、具体的な構成は上記実施例に限られるものではなく、本発明の要旨を逸脱しない範囲の変更があっても本発明に含まれる。本実施例では、世代管理タイプ、DBタイプ、再帰タイプの3つのタイプのグループが登録されたファイル差分管理装置を一例に説明したが、登録されるグループの種類や数は1以上であればこれに限らない。又、ファイル差分管理装置10に取得される差分管理対象ファイル群200は、複数種類のグループに対応するファイル群を含んでいても良い。