以下、図面を参照して、本発明の各実施形態について説明する。
[第1の実施形態]
図1は、本発明の第1の実施形態に係る情報処理装置(以下、コンピュータと表記)を備えるクラスタシステムのハードウェア構成を示すブロック図である。
図1に示すように、クラスタシステムは、複数のコンピュータ10を備える。複数のコンピュータ10には、例えば稼動系コンピュータ及び複数の待機系コンピュータが含まれる。
複数のコンピュータ10は、例えばネットワークを介して互いに通信可能に接続されている。
このクラスタシステムは、当該クラスタシステムを構成する複数のコンピュータ10のうち、例えば稼動系コンピュータとして動作するコンピュータ(稼動系コンピュータ)10で障害が発生した場合に、当該稼動系コンピュータ10の処理が待機系コンピュータとして動作するコンピュータ(待機系コンピュータ)10に引き継がれる高可用性(High Availability)クラスタシステム(HAクラスタシステム)である。これにより、クラスタシステムにおいては、例えば稼働系コンピュータ10において障害が発生した場合であっても待機系コンピュータ10において運用を継続することが可能となる。
図2は、図1に示す複数のコンピュータ10の各々(以下、単にコンピュータ10と表記)の主として機能構成を示すブロック図である。
図2に示すように、コンピュータ10上では、クラスタソフトウェア20、アプリケーションプログラム30、ジャケットライブラリ40、ログ管理マネージャ50及びオペレーティングシステム(OS:Operating System)60が動作する。なお、コンピュータ10上では、例えば複数のアプリケーションプログラム30が動作するものとする。
また、コンピュータ10は、クラスタソフトウェアログファイル70、アプリケーションログファイル(第1のログファイル)80及び複製アプリケーションログファイル(第2のログファイル)90を有する。
なお、コンピュータ10は、各機能を実現するためのハードウェア構成、またはハードウェアとソフトウェアとの組み合わせ構成として実現されている。ソフトウェアは、予め記憶媒体又はネットワークからインストールされ、その機能を実現させるためのプログラムからなる。ソフトウェアで実現可能な要素としては、例えば、クラスタソフトウェア20、アプリケーションプログラム30、ジャケットライブラリ40、ログ管理マネージャ50及びオペレーティングシステム60が挙げられる。
また、クラスタソフトウェアログファイル70、アプリケーションログファイル80及び複製アプリケーションログファイル90は、例えばハードディスクドライブ(HDD:Hard Disk Drive)のような記憶装置にその領域が確保されている。
クラスタソフトウェア20は、例えばクラスタシステムを構成する他のコンピュータ10(のクラスタソフトウェア20)と連携して当該クラスタシステムを管理及び運用する。これにより、クラスタシステム全体として各種機能が提供される。
クラスタソフトウェア20は、クラスタシステムにおいて提供される機能単位を管理し、当該機能単位の状態、例えば開始及び停止等を制御する機能を有する。この機能単位は、例えば1つまたは複数のアプリケーションプログラム30からなり、システムが提供する役割の単位である。
クラスタソフトウェア20は、上記したクラスタシステムにおいて提供される機能単位を表す機能単位情報及び当該機能単位の状態等の情報をログ管理マネージャ50に対して通知する。
また、クラスタソフトウェア20は、当該クラスタソフトウェア20による管理及び制御に応じたログ情報(クラスタソフトウェア20のログ)を、例えばオペレーティングシステム60に対して出力する。このクラスタソフトウェア20のログは、クラスタシステムによって提供される(クラスタソフトウェア20によって管理される)機能単位で出力される。クラスタソフトウェア20のログは、例えばクラスタシステムにおける障害解析等に用いられる。クラスタソフトウェア20のログには、例えばクラスタソフトウェア20によって管理される機能単位を表す情報(以下、機能単位情報と表記)及び当該機能単位でのログが出力された時刻を示す時刻情報が付加される。
アプリケーションプログラム30は、クラスタシステムにおいて提供される機能を実現するためのプログラムである。アプリケーションプログラム30は、当該アプリケーションプログラム30のログ(アプリケーションプログラム30の動作に関するログ)をオペレーティングシステム60に出力する機能を有する。これにより、上記した一の機能単位をなす一つまたは複数のアプリケーションプログラム30のログ(動作ログ)が例えばアプリケーションログファイル80に出力される。このアプリケーションプログラム30の動作ログは、上記したクラスタソフトウェア20のログと同様に、例えばクラスタシステムにおける障害解析等に用いられる。
ジャケットライブラリ40は、アプリケーションプログラム30から出力された動作ログをフック(取得)する。これにより、ジャケットライブラリ40は、アプリケーションプログラム30によって出力された動作ログの書き込みを検出する。ジャケットライブラリ40は、フックされた動作ログをログ管理マネージャ50に出力する。また、ジャケットライブラリ40は、フックされた動作ログをオペレーティングシステム60に対して出力する。
ログ管理マネージャ50は、ジャケットライブラリ40によって出力されたアプリケーションプログラム30の動作ログに、当該アプリケーションプログラム30からなる機能単位を表す機能単位情報を付加してアプリケーションログファイル80とは異なる複製アプリケーションログファイル90に書き込む機能を有する。このとき、ログ管理マネージャ50は、上記したクラスタソフトウェア20から通知された情報に応じて書き込み処理を実行する。ログ管理マネージャ50は、機能単位情報が付加されたログをオペレーティングシステム60に対して出力することによって、当該ログを複製アプリケーションログファイル90に書き込む。
オペレーティングシステム60は、クラスタソフトウェア20によって出力されたクラスタソフトウェア20のログをクラスタソフトウェアログファイル70に書き込む処理を実行する。
オペレーティングシステム60は、ジャケットライブラリ40によって出力されたアプリケーションプログラム30の動作ログをアプリケーションログファイル80に書き込む処理を実行する。
また、オペレーティングシステム60は、例えばログ管理マネージャ50によって出力された機能単位情報が付加された当該機能単位情報によって表される機能単位をなすアプリケーションプログラム30の動作ログを複製アプリケーションログファイル90に書き込む処理を実行する。
ここで、図3を参照して、前述したクラスタシステムにおいて提供される機能単位について説明する。
図3に示すように、例えばクラスタシステムにおいて提供される機能単位として機能単位α(単にFnαと表記)、機能単位β(単にFnβと表記)及び機能単位γ(単にFnγと表記)が存在するものとする。また、コンピュータ10上では、例えばアプリケーション1〜3が動作するものとする。また、コンピュータ10は、ログファイルA〜Dを有するものとする。
ここでは、Fnαは、アプリケーションプログラム1及び2からなるものとする。Fnβは、アプリケーションプログラム3からなるものとする。また、Fnγは、アプリケーションプログラム3からなるものとする。
このように、Fn(機能単位)は、複数のアプリケーションプログラムからなることがある。また、複数のFnが1つのアプリケーションプログラムを共有することがある。換言すれば、Fn及びアプリケーションプログラムは、1:N(Nは1以上の整数)の関係にある。
また、アプリケーションプログラム1は、Fnαのログ(α)をログファイルA及びBに出力する。つまり、アプリケーションプログラム1は、当該アプリケーションプログラム1からなるFnαのログ(α)を出力する。
アプリケーションプログラム2は、Fnαのログ(α)をログファイルCに出力する。また、アプリケーションプログラム3は、Fnβのログ(β)及びFnγのログ(γ)をログファイルDに出力する。
このように、1つのアプリケーションプログラムは、複数のログファイルにログを出力することがある。また、複数のアプリケーションプログラムは、1つのログファイルにログを出力することはない。つまり、複数のアプリケーションプログラムは、1つのログファイルを共有しない。以上から、アプリケーションプログラム及びログファイルは、1:M(Mは1以上の整数)の関係にある。
上記したように、例えば図2に示すアプリケーションログファイル80は、複数のログファイルを含む構成であっても構わない。
図4は、図2に示すクラスタソフトウェア20の主として機能構成を示すブロック図である。図2に示すように、クラスタソフトウェア20は、HAクラスタ制御部21、ログ対応情報登録部22及び制御情報送信部23を含む。換言すれば、クラスタソフトウェア20は、HAクラスタ制御部21、ログ対応情報登録部22及び制御情報送信部23というモジュールで構成される。
HAクラスタ制御部21は、例えばクラスタシステムにおいて提供される機能単位の情報を有し、当該機能単位で機能を実現するソフトウェアやハードウェアの制御及び監視を行う。これにより、クラスタシステムにおいて提供される機能単位の高可用性が実現される。HAクラスタ制御部21は、アプリケーションプログラム30からなる機能単位の開始及び停止等の制御を実行する。
ログ対応情報登録部22は、例えばクラスタシステムの運用を開始する前のHAクラスタ制御部21から呼ばれ、当該クラスタシステムによって提供される機能単位を表す機能単位情報及び当該機能単位をなすアプリケーションプログラム30の動作ログが出力されるログファイルを示す情報(以下、ログファイル情報と表記)を含むログ対応情報をログ管理マネージャ50に出力(送信)する。
ここで、図5は、ログ対応情報登録部22によって出力されるログ対応情報のデータ構造の一例を示す。図5に示すように、ログ対応情報登録部22によって出力されるログ対応情報には、機能単位情報及びログファイル情報(ログファイル名)が含まれる。
図5に示す例では、ログ対応情報には、例えば機能単位情報「機能単位1」及びログファイル情報「ログファイルA」(を含むペア情報)が含まれる。また、ログ対応情報には、例えば機能単位情報「機能単位1」及びログファイル情報「ログファイルB」が含まれる。また、ログ対応情報には、例えば機能単位情報「機能単位2」及びログファイル情報「ログファイルC」が含まれる。
再び図4に戻ると、制御情報送信部23は、例えばHAクラスタ制御部21によってコンピュータ10上で機能単位が制御される際に、当該機能単位を表す機能単位情報及び当該機能単位の制御された内容(制御内容)を含む制御情報をログ管理マネージャ50に出力する。また、制御情報送信部23は、例えばクラスタソフトウェア20が再起動された場合には、その旨を示す情報(再起動情報)をログ管理マネージャ50に出力する。
ここで、図6は、制御情報送信部23によって出力される制御情報及び再起動情報のデータ構造の一例を示す。図6に示すように、制御情報送信部23によって出力される制御情報には、機能単位情報及び制御内容が含まれる。なお、制御内容には、例えば開始及び停止が含まれる。
図6に示す例では、制御情報には、例えば機能単位情報「機能単位1」及び制御内容「開始」が含まれる。また、制御情報には、例えば機能単位情報「機能単位1」及び制御内容「停止」が含まれる。
また、図6に示すように、例えばクラスタソフトウェア20が再起動されたときには、その旨を示す再起動情報がログ管理マネージャ50に対して出力される。
次に、図7は、図2に示すジャケットライブラリ40の主として機能構成を示すブロック図である。
図7に示すように、ジャケットライブラリ40は、openフック部41、ファイル名対応テーブル42、writeフック部43及びwrite情報送信部44を含む。換言すれば、ジャケットライブラリ40は、openフック部41、writeフック部43及びwrite情報送信部44というモジュールと、ファイル名対応テーブル42というデータから構成される。
openフック部41は、アプリケーションプログラム30からのopen要求をフックする。このopen要求は、例えばアプリケーションプログラム30の動作ログがアプリケーションログファイル80に出力される際に、当該アプリケーションログファイル80を開くための初期動作として、アプリケーションプログラム30から出力される。open要求には、当該open要求の対象となるアプリケーションログファイル80のファイル名が含まれる。openフック部41は、フックされたopen要求に含まれるファイル名を取得する。openフック部41は、ファイル名が取得されると、フックされたopen要求をオペレーティングシステム60に対して出力する。
ここで、オペレーティングシステム60は、openシステムコール(図示せず)を含む。openシステムコールは、ジャケットライブラリ40からのopen要求を受けると、当該open要求に応じて上記したアプリケーションログファイル80を開く処理を実行する。また、openシステムコールは、open要求に応じた処理が実行されると、当該open要求に対する応答をアプリケーションプログラム30に返す。
また、openフック部41は、オペレーティングシステム60からのopen要求に対する応答をフックする。この応答には、open要求の対象となるアプリケーションログファイル80を識別するためのファイル識別子が含まれる。openフック部41は、フックされた応答に含まれるファイル識別子を取得する。
openフック部41は、取得されたファイル名及びファイル識別子を対応付けてファイル名対応テーブル42に追加(登録)する。なお、このファイル名対応テーブル42は、例えば記憶装置にその領域が確保される。
openフック部41は、ファイル名対応テーブル42に対してファイル名及びファイル識別子を追加した後、フックされた応答をアプリケーションプログラム30に返す。
writeフック部43は、アプリケーションプログラム30からのwrite要求をフックする。アプリケーションプログラム30は、このwrite要求により、例えばアプリケーションプログラム30の動作ログ(書込みデータ)をアプリケーションログファイル80に書き込む(出力する)ことをオペレーティングシステム60に対して要求する。このwrite要求には、アプリケーションプログラム30の動作ログ(の内容)及び当該動作ログが出力される(書き込まれる)アプリケーションログファイル80を識別するためのファイル識別子が含まれる。また、write要求には、例えばアプリケーションプログラム30の動作ログを書き込む物理的な位置を示すアドレス情報等が含まれる。
writeフック部43は、フックされたwrite要求に含まれるアプリケーションプログラム30の動作ログ及びファイル識別子を取得する。writeフック部43は、取得された動作ログ及びファイル識別子を含む情報送信要求をwrite情報送信部44に出力する。
writeフック部43は、情報送信要求をwrite情報送信部44に出力した後、フックされたwrite要求をオペレーティングシステム60に出力する。
ここで、オペレーティングシステム60は、writeシステムコール(図示せず)を含む。writeシステムコールは、ジャケットライブラリ40からのwrite要求を受けると、当該write要求に含まれるアプリケーションプログラム30の動作ログを、当該write要求に含まれるファイル識別子によって識別されるアプリケーションログファイル80に書き込む処理を実行する。writeシステムコールは、write要求に応じた処理が実行されると、当該write要求に対する応答をアプリケーションプログラム30に返す。
writeフック部43は、オペレーティングシステム60からのwrite要求に対する応答をフックし、アプリケーションプログラム30に返す。
write情報送信部44は、アプリケーションプログラム30のwrite要求実行時にwriteフック部43から呼ばれる。write情報送信部44は、writeフック部43からの情報送信要求を受けると、例えばオペレーティングシステム60から現在時刻を示す時刻情報を取得する。換言すれば、この時刻情報は、例えばジャケットライブラリ40(に含まれるwriteフック部43)によってwrite要求がフック(アプリケーションプログラム30の動作ログ及びファイル識別子が取得)された時刻を示す。
また、write情報送信部44は、情報送信要求に含まれるファイル識別子に対応付けてファイル名対応テーブル42に登録されているファイル名を取得する。これにより、write情報送信部44は、ファイル識別子からのファイル名変換を行う。
write情報送信部44は、取得されたファイル名(書込み先ログファイル情報)、情報送信要求に含まれるアプリケーションプログラム30の動作ログ(書込みデータ)及び取得された時刻情報を、ログ管理マネージャ50に対して送信(出力)する。以下、write情報送信部44によって送信される情報(書込み先ログファイル情報、書込みデータ及び時刻情報)をまとめてwrite情報と称する。
ここで、図8は、図7に示すファイル名対応テーブル42のデータ構造の一例を示す。図8に示すように、ファイル名対応テーブル42には、ファイル識別子及び当該ファイル識別子によって識別されるアプリケーションログファイル80のファイル名が対応付けて保持(登録)されている。
図8に示す例では、ファイル名対応テーブル42には、ファイル識別子「識別子α」及びファイル名「ログファイルA」が対応付けて保持されている。これによれば、「識別子α」によって識別されるアプリケーションログファイル80のファイル名が「ログファイルA」であることが示される。
また、ファイル名対応テーブル42には、ファイル識別子「識別子β」及びファイル名「ログファイルB」、ファイル識別子「識別子θ」及びファイル名「ログファイルC」が対応付けて保持されている。
図9は、write情報送信部44によって送信されるwrite情報のデータ構造の一例を示す。
図9に示すように、write情報には、書込み先ログファイル情報、書込みデータ及び時刻情報が対応付けて含まれる。書込み先ログファイル情報は、アプリケーションプログラム30の動作ログが出力されるアプリケーションログファイル80のファイル名である。書込みデータは、アプリケーションプログラム30の動作ログ(の内容)を示す。また、時刻情報は、上記したようにwriteフック部43からの情報送信要求を受けた際にオペレーティングシステム60から取得される。
図10は、図2に示すログ管理マネージャ50の主として機能構成を示すブロック図である。図10に示すように、ログ管理マネージャ50は、ログ対応情報受信部51、制御情報受信部52、ログ対応情報管理部53、ログ対応情報テーブル54、write情報受信部55、書込判定部56及び書込処理部57を含む。換言すれば、ログ管理マネージャ50は、ログ対応情報受信部51、制御情報受信部52、ログ対応情報管理部53、write情報受信部55、書込判定部56及び書込処理部57というモジュールと、ログ対応情報テーブル54というデータから構成される。
ログ対応情報受信部51は、クラスタソフトウェア20に含まれるログ対応情報登録部22によって出力(送信)されたログ対応情報を取得(受信)する。このログ対応情報には、機能単位を表す機能単位情報及び当該機能単位をなすアプリケーションプログラム30の動作ログが出力されるログファイルを示すログファイル情報が含まれる。ログ対応情報受信部51は、取得されたログ対応情報をログ対応情報管理部53に渡す。
制御情報受信部52は、クラスタソフトウェア20に含まれる制御情報送信部23によって出力(送信)された制御情報を取得(受信)する。この制御情報には、機能単位情報及び当該機能単位情報によって表される機能単位の制御内容が含まれる。この制御内容には、例えば機能単位の開始及び停止が含まれる。これにより、制御情報受信部52は、制御情報に含まれる機能単位情報によって表される機能単位の状態(を示す情報)を取得する。
また、制御情報受信部52は、制御情報送信部23によって出力された再起動情報を取得する。
制御情報受信部52は、取得された制御情報及び再起動情報をログ対応情報管理部53に渡す。
ログ対応情報管理部53は、ログ対応情報受信部51から渡されたログ対応情報を取得する。ログ対応情報管理部53は、取得されたログ対応情報に応じてログ対応情報テーブル54を更新する。
ここで、ログ対応情報テーブル54には、機能単位情報、ログファイル情報及び状態が保持される。機能単位情報は、クラスタシステムにおいて提供される機能単位を表す。ログファイル情報は、機能単位情報によって表される機能単位をなすアプリケーションプログラム30の動作ログ(アプリケーションプログラム30によって出力される動作ログ)が出力されるアプリケーションログファイル80を示す。また、状態は、機能単位情報によって表される機能単位の状態、例えば開始(状態)及び停止(状態)を示す。開始は機能単位が開始したことを示し、停止は機能単位が停止したことを示す。なお、ログ対応情報テーブル54は、例えば記憶装置にその領域が確保されている。
ログ対応情報管理部53は、取得されたログ対応情報に含まれる機能単位情報及びログファイル情報を対応付けてログ対応情報テーブル54に登録する。このとき、ログ対応情報テーブル54において、登録された機能単位情報及びログファイル情報に対応付けられている状態は停止とする。
ログ対応情報管理部53は、制御情報受信部52から渡された制御情報及び再起動情報を取得する。ログ対応情報管理部53は、取得された制御情報及び再起動情報に応じてログ対応情報テーブル54を更新する。
ログ対応情報管理部53は、取得された制御情報に含まれる制御内容が開始である場合、当該制御情報に含まれる機能単位情報に対応付けて開始を、ログ対応情報テーブル54に保持させる(登録する)。また、ログ対応情報管理部53は、取得された制御情報に含まれる制御内容が停止である場合、当該制御情報に含まれる機能単位情報に対応付けて停止を、ログ対応情報テーブル54に保持させる。
また、ログ対応情報管理部53は、再起動情報が取得された場合、ログ対応情報テーブル54において、全ての機能単位情報に対応付けられている状態を停止に更新する。
write情報受信部55は、ジャケットライブラリ40に含まれるwrite情報送信部44によって出力(送信)されたwrite情報を取得(受信)する。このwrite情報には、上記したように書込み先ログファイル情報(ファイル名)、書込みデータ(アプリケーションプログラム30の動作ログ)及び時刻情報が含まれる。write情報受信部55は、取得されたwrite情報を書込判定部56に渡す。
書込判定部56は、write情報受信部55から渡されたwrite情報を取得する。書込判定部56は、取得されたwrite情報に基づいて、当該write情報に含まれる書込みデータを複製アプリケーションログファイル90に書き込むか否かを判定する。このとき、書込判定部56は、ログ対応情報テーブル54を参照して判定処理を実行する。
書込判定部56は、取得されたwrite情報に含まれる書込み先ログファイル情報(ログファイル情報)に対応付けてログ対応情報テーブル54に保持されている状態が開始であれば、当該書込み先ログファイル情報に対応付けてログ対応情報テーブル54に保持されている機能単位情報及び当該write情報に含まれる時刻情報を、当該write情報に含まれる書込みデータに付加する。
また、書込判定部56は、取得されたwrite情報に含まれる書込み先ログファイル情報に対応付けてログ対応情報テーブル54に保持されている状態が停止であれば、当該write情報に含まれる時刻情報のみを、当該write情報に含まれる書込みデータに付加する。
書込判定部56は、取得されたwrite情報に含まれている書込みデータを書込み処理部57に渡す。
書込処理部57は、書込判定部56から渡された書込みデータを取得する。この書込みデータには、上記したように機能単位情報及び時刻情報(または時刻情報のみ)が付加されている。書込処理部57は、取得された書込みデータをオペレーティングシステム60に対して出力することにより、当該書込みデータを複製アプリケーションログファイル90に書き込む処理を実行する。オペレーティングシステム60に含まれるwriteシステムコールは、書込処理部57によって出力された書込みデータを複製アプリケーションログファイル90に書き込む。このとき、例えば複製アプリケーションログファイル90が存在しない(つまり、作成されていない)場合には、当該複製アプリケーションログファイル90が作成される。
つまり、複製アプリケーションログファイル90には、例えば機能単位情報及び時刻情報(または時刻情報のみ)が付加されたアプリケーションプログラム30の動作ログ(書込みデータ)が書き込まれる。
図11は、図10に示すログ対応情報テーブル54のデータ構造の一例を示す。図11に示すように、ログ対応情報テーブル54には、機能単位情報、ログファイル情報及び状態が保持される。上記したように、ログ対応情報テーブル54は、ログ対応情報受信部51によって取得(受信)されたログ対応情報、制御情報受信部52によって取得(受信)された制御情報及び再起動情報に応じて更新される。
図11に示す例では、ログ対応情報テーブル54には、機能単位情報「機能単位1」、ログファイル情報「ログファイルA」及び状態「開始」が保持されている。これによれば、「機能単位1」によって表される機能単位をなすアプリケーションプログラム30の動作ログが出力されるアプリケーションログファイル80は「ログファイルA」であり、当該機能単位の状態が「開始状態」(つまり、開始されている)ことが示される。
また、ログ対応情報テーブル54には、機能単位情報「機能単位1」、ログファイル情報「ログファイルB」及び状態「開始」が保持されている。同様に、ログ対応情報テーブル54には、機能単位情報「機能単位2」、ログファイル情報「ログファイルC」及び状態「停止」が保持されている。
次に、図12のフローチャートを参照して、コンピュータ10のアプリケーションプログラム30が動作ログを出力する際の処理手順について説明する。
なお、ジャケットライブラリ40に含まれるファイル名対応テーブル42には、上記したようにopenフック部41によってファイル識別子及びファイル名が既に登録されているものとする。
また、ログ管理マネージャ50に含まれるログ対応情報テーブル54は、上記したようにログ対応情報管理部53によって更新されている(つまり、機能単位情報、ログファイル情報及び状態が保持されている)ものとする。
まず、アプリケーションプログラム30は、動作ログ(書込みデータ)を出力するために、オペレーティングシステム60のwriteシステムコールを実行する(ステップS1)。
アプリケーションプログラム30は、writeシステムコールが実行されると、書込みデータ及び当該書込みデータが出力される(書き込まれる)アプリケーションログファイル80を識別するためのファイル識別子を含むwrite要求をオペレーティングシステム60に対して出力する(ステップS2)。
次に、ジャケットライブラリ40に含まれるwriteフック部43は、アプリケーションプログラム30から出力されたwrite要求をフックする(ステップS3)。
write情報送信部44は、write要求フック部43によってフックされたwrite要求に含まれるファイル識別子に対応付けてファイル名対応テーブル42に保持されているファイル名を取得する。また、write情報送信部44は、現在時刻を示す時刻情報をオペレーティングシステム60に対して要求することにより、当該時刻情報を取得する。
write情報送信部44は、取得されたファイル名(書込み先ログファイル情報)、writeフック部43によってフックされたwrite要求に含まれるアプリケーションプログラム30の動作ログ(書込みデータ)及び取得された時刻情報を含むwrite情報をログ管理マネージャ50に対して出力(送信)する(ステップS4)。
ログ管理マネージャ50に含まれるwrite情報受信部55は、ジャケットライブラリ40(に含まれるwrite情報送信部44)によって出力されたwrite情報を取得(受信)する。
書込判定部56は、write情報受信部55によって取得されたwrite情報に基づいて、当該write情報に含まれる書込みデータを複製アプリケーションログファイル90に書き込むか否かの判定処理を実行する(ステップS5)。このとき、書込判定部56は、ログ対応情報テーブル54を参照して判定処理を実行する。この書込判定部56の処理の詳細については後述する。
書込判定部56は、書込みデータを複製アプリケーションログファイル90に書き込むと判定された場合、write情報受信部55によって取得されたwrite情報に含まれる書込み先ログファイル情報に対応付けてログ対応情報テーブル54に保持されている状態に応じて機能単位情報及び時刻情報(または時刻情報のみ)を当該書込みデータに付加する。
書込処理部57は、書込判定部56によって機能単位情報及び時刻情報(または時刻情報のみ)が付加された書込みデータを、オペレーティングシステム60(に含まれるwriteシステムコール)を介して複製アプリケーションログファイル90に書き込む(ステップS6)。
次に、図13のフローチャートを参照して、上記したログ管理マネージャ50に含まれる書込判定部56の処理手順について説明する。
まず、書込判定部56は、write情報受信部55から渡されたwrite情報を取得する(ステップS11)。このwrite情報には、書込み先ログファイル情報、書込みデータ及び時刻情報が含まれる。
次に、書込判定部56は、取得されたwrite情報に含まれる書込み先ログファイル情報がログ対応情報テーブル54に保持されているか否かを判定する(ステップS12)。
書込み先ログファイル情報がログ対応情報テーブル54に保持されていると判定された場合(ステップS12のYES)、書込判定部56は、当該書込み先ログファイル情報に対応付けて当該ログ対応情報テーブル54に保持されている状態が「開始」であるか否かを判定する(ステップS13)。
書込み先ログファイル情報に対応付けてログ対応情報テーブル54に保持されている状態が「開始」であると判定された場合(ステップS13のYES)、書込判定部56は、取得されたwrite情報に含まれる書込みデータに、当該書込み先ログファイル情報に対応付けてログ対応情報テーブル54に保持されている機能単位情報及び取得されたwrite情報に含まれる時刻情報を付加する(ステップS14)。
書込判定部56は、ステップS14において機能単位情報及び時刻情報が付加された書込みデータを書込処理部57に渡す(ステップS15)。
これにより、書込処理部57は、オペレーティングシステム60(に含まれるwriteシステムコール)を介して、機能単位情報及び時刻情報が付加された書込みデータを複製アプリケーションログファイル90に書き込む。
一方、ステップS12において書込み先ログファイル情報がログ対応情報テーブル54に保持されていないと判定された場合、処理は終了される。
また、ステップS13において書込み先ログファイル情報に対応付けてログ対応情報テーブル54に保持されている状態が「開始」でない、つまり、「停止」であると判定された場合、書込判定部56は、取得されたwrite情報に含まれる書込みデータに、当該write情報に含まれる時刻情報を付加する(ステップS16)。
この場合、書込判定部56は、ステップS16において時刻情報が付加された書込みデータを書込処理部57に渡す(ステップS15)。これにより、書込処理部57は、オペレーティングシステム60(に含まれるwriteシステムコール)を介して、時刻情報のみが付加された書込みデータを複製アプリケーションログファイル90に書き込む。
ここで、図14は、例えばクラスタソフトウェアログファイル70に書き込まれたくラスタソフトウェア20のログ及び複製アプリケーションログファイル90に書き込まれた書込みデータ(つまり、アプリケーションプログラム30の動作ログ)のつき合わせのイメージの一例を示す。
上述したように、クラスタソフトウェアログファイル70に書き込まれているクラスタソフトウェア20のログには、クラスタソフトウェア20によって管理される機能単位を表す機能単位情報及び当該クラスタソフトウェア20のログ(当該機能単位で出力されたログ)が出力された時刻(を示す時刻情報)が付加されている。
また、上記したように、複製アプリケーションログファイル90に書き込まれた書込みデータには、機能単位を表す機能単位情報及び時刻情報が付加されている。なお、複製アプリケーションログファイル90においては、例えば停止状態であるアプリケーションプログラム30の動作ログ(書込みデータ)には時刻情報のみが付加されている。
図14に示す例では、例えば複数のコンピュータ10に含まれるコンピュータ1において機能単位情報「機能単位1」によって表される機能単位が提供されており、当該コンピュータ1において障害が検出されたことにより、当該機能単位がコンピュータ2において提供された場合の書込みデータ、つまり、機能単位をなすアプリケーションプログラム30の動作ログが示されている。
図14に示すように、コンピュータ1及びコンピュータ2の複製アプリケーションログファイル90とクラスタソフトウェアログファイル70に書き込まれているログには、機能単位を表す機能単位情報(例えば、機能単位1)が付加されている。
これにより、この機能単位情報(一意の情報)を用いることで、例えばアプリケーションプログラム30によって出力されるログとクラスタソフトウェ20によって出力されるログを容易につき合わせることができる。同様に、機能単位情報を用いることで、クラスタシステムにおける複数のコンピュータ10(ここでは、コンピュータ1及び2)にまたがったログ(書込みデータ)を容易につき合わせることが可能となる。更に、時刻情報を用いることで、出力された順でのログの参照が可能になる。
上記したように本実施形態においては、アプリケーションプログラム30のログ(動作ログ)がアプリケーションログファイル80に出力される際に、当該ログにクラスタシステムによって提供される機能単位を表す機能単位情報を付加して複製アプリケーションログファイル90に書き込む。つまり、クラスタソフトウェアログファイル70に書き込まれているログ及び複製アプリケーションログファイル90に書き込まれているログには、一意の情報(機能単位情報)が付加されているため、当該クラスタソフトウェアログファイル70及び複製アプリケーションログファイル90を参照することで、アプリケーションプログラム30のログとクラスタソフトウェア20のログとのつき合わせが容易にできる。これにより、例えばクラスタシステムにおいて障害が発生した際に、当該クラスタシステムにおいて提供される機能単位でのログ解析(障害解析)が容易になる。
また、本実施形態においては、上記したように機能単位情報が付加されたアプリケーションプログラム30のログが複製アプリケーションログファイル90に書き込まれるため、例えばクラスタシステムを構成する複数のコンピュータ10上のアプリケーションプログラム30のログ(つまり、複製アプリケーションログファイル90に書き込まれている書込みデータ)を容易につき合わせることができる。これにより、クラスタシステムにおいて提供される機能単位でのログ解析が容易になる。
また、本実施形態においては、アプリケーションプログラム30のログに時刻情報を付加することで、例えばどのようなアプリケーションプログラム30のログであっても時間での順序付けができる。したがって、クラスタシステムにおいて提供される機能単位でのログ解析が容易になる。
[第2の実施形態]
次に、図15を参照して、本発明の第2の実施形態について説明する。図15は、本実施形態に係るコンピュータの主として機能構成を示すブロック図である。なお、前述した図2と同様の部分には同一参照符号を付してその詳しい説明を省略する。ここでは、図2と異なる部分について主に述べる。以下の各実施形態についても同様にして重複した説明を省略する。
図15に示すように、コンピュータ100上では、ログ管理マネージャ500が動作する。本実施形態においては、前述した第1の実施形態におけるジャケットライブラリ40のようにアプリケーションプログラム30によって出力される動作ログの書き込み(つまり、アプリケーションログファイル80の更新)を当該書き込み時に検出するのではなく、ログ管理マネージャ500が定期的にアプリケーションログファイル80の更新を監視(確認)することで当該ログの書き込みを検出する点が、前述した第1の実施形態とは異なる。つまり、本実施形態においては、アプリケーションプログラム30の動作ログがアプリケーションログファイル80に書き込まれた後に、当該動作ログの書き込みが検出される。
ログ管理マネージャ500は、アプリケーションログファイル80の更新を定期的に監視する。ログ管理マネージャ500は、アプリケーションログファイル80が更新されている場合、当該アプリケーションログファイル80において更新されたアプリケーションプログラム30の動作ログに必要な情報を付加し、当該ログを複製アプリケーションログファイル90に書き込む機能を有する。
図16は、図15に示すログ管理マネージャ500の主として機能構成を示すブロック図である。なお、前述した図10と同様の部分には同一参照符号を付してその詳しい説明を省略する。ここでは、図10と異なる部分について主に述べる。以下の各実施形態についても同様にして重複した説明を省略する。
図16に示すように、ログ管理マネージャ500は、更新情報取得部501を含む。更新情報取得部501は、上記したように定期的にアプリケーションログファイル80を監視する。これにより、更新情報取得部501は、アプリケーションログファイル80の更新を検出する。
この場合、更新情報取得部501は、例えばアプリケーションログファイル80のサイズを記憶しておき、当該サイズの増加によって当該アプリケーションログファイル80の更新を検出する。
更新情報取得部501は、アプリケーションログファイル80の更新が検出された場合、当該更新された部分の更新データ(差分データ)を当該アプリケーションログファイル80から取得する。この更新データは、アプリケーションログファイル80の更新の際に、当該アプリケーションログファイル80に書き込まれたアプリケーションプログラム30の動作ログである。
また、更新情報取得部501は、アプリケーションログファイル80の更新が検出された場合、例えばオペレーティングシステム60から現在時刻を示す時刻情報を取得する。
更新情報取得部501は、更新が検出されたアプリケーションログファイル80(監視対象のアプリケーションログファイル80)のファイル名、取得された更新データ(アプリケーションプログラム30の動作ログ)及び取得された時刻情報を含む情報を書込判定部56に渡す。
なお、書込判定部56に渡されたファイル名、更新データ及び時刻情報を含む情報は、前述した第1の実施形態におけるwrite情報に相当する。
上記した点以外については、前述した第1の実施形態と同様であるため、その詳しい説明を省略する。
上記したように本実施形態においては、前述した第1の実施形態と比較して、アプリケーションプログラム30から出力されるwrite要求をフックする必要がないため、当該アプリケーションプログラム30の動作に全く影響を与えることがない。つまり、本実施形態においては、例えばwrite要求をフックすることによるアプリケーションプログラム30の処理遅延を解消することが可能となる。
[第3の実施形態]
次に、図17を参照して、本発明の第3の実施形態について説明する。図17は、本実施形態に係るコンピュータの主として機能構成を示すブロック図である。なお、本実施形態におけるログ管理マネージャ500の構成は、前述した図16と同様であるため、適宜図16を用いて説明する。ここでは、前述した第2の実施形態におけるログ管理マネージャ500と動作が異なる部分について主に説明する。
図17に示すように、コンピュータ110上では、ログ構造ファイルシステム410及びログ管理マネージャ500が動作する。
ログ構造ファイルシステム410は、オペレーティングシステム60が有する機能の1つとして提供するものであり、アプリケーションログファイル80内のデータ(アプリケーションログファイル80に書き込まれるアプリケーションプログラム30の動作ログ)を管理する機能を有する。
本実施形態においては、アプリケーションログファイル80の更新の確認をアプリケーションログファイル80自体ではなく、ログ構造ファイルシステム410に対して行う点が、前述した第2の実施形態とは異なる。また、本実施形態においては、アプリケーションログファイル80が、例えば当該アプリケーションログファイル80の更新された部分の更新データの情報(アプリケーションログファイル80に書き込まれたアプリケーションプログラム30の動作ログ及び更新時刻を示す時刻情報)をログとして持つログ構造ファイルシステム上にあることが、前述した第2の実施形態とは異なる。
ログ管理マネージャ500に含まれる更新情報取得部501は、ログ構造ファイルシステム410に対して定期的にアプリケーションログファイル80の更新の確認を行う。これにより、更新情報取得部501は、アプリケーションログファイル80の更新が検出された場合には、当該更新された部分の更新データ(アプリケーションプログラム30の動作ログ)及び当該更新された時刻(更新時刻)を示す時刻情報をログ構造ファイルシステム410から取得する。
上記した点以外については、前述した第2の実施形態と同様であるため、その詳しい説明を省略する。
上記したように本実施形態においては、前述した第2の実施形態と同様に、アプリケーションプログラム30から出力されるwrite要求をフックする必要がないため、当該アプリケーションプログラム30の処理遅延を解消することができる。
ここで、前述した第2の実施形態においては、例えばログ管理マネージャ500がアプリケーションログファイル80の更新を検出した後に時刻情報が取得されるため、実際の更新時刻(アプリケーションプログラム30によって出力された動作ログがアプリケーションログファイル80に書き込まれた時刻)と取得された時刻情報によって示される時刻とが、更新確認の時間間隔分ずれる可能性がある。
これに対して、本実施形態においては、前述した第2の実施形態と比較して、ログ構造ファイルシステム410がアプリケーションログファイル80における更新データの情報(アプリケーションプログラム30の動作ログ及び更新時刻を示す時刻情報)を保持しているため、アプリケーションプログラム30から出力された動作ログ(複製アプリケーションログファイル90に書き込まれる書込みデータ)に付加される時刻情報が実際の更新時刻と異なることを解消できる。
[第4の実施形態]
次に、図18を参照して、本発明の第4の実施形態について説明する。図18は、本実施形態に係るコンピュータの主として機能構成を示すブロック図である。なお、本実施形態におけるログ管理マネージャ500の構成は、前述した図16と同様であるため、適宜図16を用いて説明する。ここでは、前述した第2の実施形態におけるログ管理マネージャ500と動作が異なる部分について主に説明する。
図18に示すように、コンピュータ120上では、デバイスドライバ420及びログ管理マネージャ500が動作する。また、本実施形態においては、アプリケーションログファイル80は、例えばハードディスクドライブ(HDD)800のような記憶装置に格納されているものとする。
デバイスドライバ420は、例えばアプリケーションログファイル80が格納されているHDD800を動作させるためのソフトウェアである。このデバイスドライバ420は、オペレーティングシステム60に組み込まれる。
ログ管理マネージャ500に含まれる更新情報取得部501は、デバイスドライバ420に対して定期的にアプリケーションログファイル80の更新の確認を行う。このとき、更新情報取得部501は、更新確認要求をデバイスドライバ420に対して出力する。
ここで、図19は、図18に示すデバイスドライバ420の主として機能構成を示すブロック図である。
図19に示すように、デバイスドライバ420は、更新検出部421、更新処理部422、更新情報管理部423、更新情報格納部424及び更新確認要求応答部425を含む。換言すれば、デバイスドライバ420は、更新検出部421、更新処理部422、更新情報管理部423及び更新確認要求応答部425というモジュールと、更新情報というデータから構成される。
更新検出部421は、例えばアプリケーションプログラム30によって出力されたwrite要求を取得する。更新検出部421は、例えばオペレーティングシステム60(に含まれるwriteシステムコール)を介してwrite要求を取得する。このwrite要求には、例えばアプリケーションプログラム30の動作ログ(書込みデータ)及び当該書込みデータが書き込まれる物理的な位置を示すHDD800のアドレス(アドレス情報)が含まれる。
更新検出部421は、write要求が取得されると、HDD800(に格納されるアプリケーションログファイル80)に対する書き込み(つまり、アプリケーションログファイル80の更新)を検出する。更新検出部421は、HDD800への書き込みが検出された場合、オペレーティングシステム60から現在時刻を示す時刻情報を取得する。
更新検出部421は、取得されたwrite要求に含まれる書込みデータ、アドレス情報及び取得された時刻情報を含む追加要求を更新情報管理部423に出力する。
更新検出部421は、追加要求(書込みデータ、アドレス情報及び時刻情報)が更新情報管理部423に出力された後、取得されたwrite要求(に含まれる書込みデータ及びアドレス情報)を更新処理部422に渡す。
更新処理部422は、更新検出部421から渡されたwrite要求を取得する。更新処理部422は、取得されたwrite要求に含まれるアドレス情報に基づいて、書込みデータをHDD800に格納されているアプリケーションログファイル80に書き込む。これにより、更新処理部422は、アプリケーションログファイル80を更新する。
更新情報管理部423は、更新検出部421からの追加要求を取得する。更新情報管理部423は、取得された追加要求に応じて、更新情報格納部424に更新情報を追加(格納)する。更新情報管理部423は、取得された追加要求に含まれる書込みデータ、アドレス情報及び時刻情報を更新情報として更新情報格納部424に追加する。
更新確認要求応答部425は、ログ管理マネージャ500(に含まれる更新情報取得部501)からの更新確認要求を取得する。更新確認要求応答部425は、取得された更新確認要求を更新情報管理部423に渡す。
ここで、更新確認要求応答部425から更新確認要求を受けると、更新情報管理部423は、更新情報格納部424に格納されている更新情報を全て更新確認要求応答部425に返す。このとき、更新情報管理部423は、更新情報格納部424に格納されている更新情報を削除(クリア)する。
更新確認要求応答部425は、更新確認要求に対する応答として、更新情報管理部423からの更新情報をログ管理マネージャ500に対して出力する。
このように、更新確認要求応答部425から更新情報が出力された場合、ログ管理マネージャ500に含まれる更新情報取得部501は、当該更新情報を取得する。更新情報取得部501は、取得された更新情報に含まれるアドレス情報をもとにファイルシステムを解析する。これにより、更新情報取得部501は、取得された更新情報に含まれるアドレス情報をファイル名に変換する機能を有する。
更新情報取得部501は、変換されたファイル名、取得された更新情報に含まれる書込みデータ及び時刻情報を含む情報を書込判定部56に渡す。
上記した点以外については、前述した第2及び第3の実施形態と同様であるためその詳しい説明を省略する。
上記したように本実施形態においては、前述した第3の実施形態と同様に、アプリケーションプログラム30から出力されるwrite要求をフックする必要がないため、当該アプリケーションプログラム30の処理遅延を解消することができる。
また、本実施形態においては、デバイスドライバ420から時刻情報を含む更新情報を取得するため、アプリケーションプログラム30から出力された動作ログに付加される時刻情報が実際の更新時刻と異なることを解消できる。
なお、本実施形態においては、ログ管理マネージャ500が定期的にデバイスドライバ420に対してアプリケーションログファイル80の更新を確認するものとして説明したが、デバイスドライバ420に含まれる更新検出部421によってアプリケーションログファイル80の更新が検出された際に、更新情報をログ管理マネージャ500に対して通知する構成であっても構わない。つまり、アプリケーションログファイル80の更新(書き込み)を検出する層をドライバ層にすることで、例えば前述した第1の実施形態と比較して、当該更新の検出が下位の層になるためアプリケーションプログラム30の動作に与える影響を小さくすることができる。
[第5の実施形態]
次に、本発明の第5の実施形態について説明する。本実施形態においては、前述した図2に示すコンピュータ10上で、クラスタソフトウェア20に代えてクラスタソフトウェア200、ジャケットライブラリ40に代えてジャケットライブラリ430、ログ管理マネージャ50に代えてログ管理マネージャ510が動作するものとする。なお、本実施形態においては、これら以外については便宜的に図2を用いて説明する。
ここで、コンピュータ10上で動作するアプリケーションプログラム30は、例えば少なくとも1つ以上のプロセスから構成される。例えばアプリケーションプログラム30からなる機能単位が開始された際には、当該機能単位に対応するプロセスが実行される(立ち上がる)。また、アプリケーションプログラム30の動作ログは、当該アプリケーションプログラム30からなる機能単位に対応するプロセス(当該アプリケーションプログラム30を構成するプロセス)から出力される。アプリケーションプログラム30の動作ログを出力するプロセスは、当該動作ログをアプリケーションログファイル80に書き込む(出力する)際には、オペレーティングシステム60に含まれるwriteシステムコールを実行する。
以下、本実施形態におけるクラスタソフトウェア200、ジャケットライブラリ430及びログ管理マネージャ510について説明する。
図20は、本実施形態に係るコンピュータ10に含まれるクラスタソフトウェア200の主として機能構成を示すブロック図である。なお、前述した図4と同様の部分には同一参照符号を付してその詳しい説明を省略する。ここでは、図4と異なる部分について主に述べる。以下の実施形態についても同様にして重複した説明を省略する。
クラスタソフトウェア200は、プロセス識別子取得通知受信部201を含む。プロセス識別子取得通知受信部201は、後述するプロセス識別子取得通知をログ管理マネージャ510から受け取り、HAクラスタ制御部21にその旨を通知する機能を有する。
なお、本実施形態におけるHAクラスタ制御部21では、アプリケーションプログラム30(からなる機能単位)を開始した後、プロセス識別子取得通知受信部201からの通知を受けるまでは次の機能単位の開始は行わない。
図21は、本実施形態に係るコンピュータ10に含まれるジャケットライブラリ430の主として機能構成を示すブロック図である。なお、前述した図7と同様の部分には同一参照符号を付してその詳しい説明を省略する。ここでは、図7と異なる部分について主に述べる。以下の実施形態についても同様にして重複した説明を省略する。
ジャケットライブラリ430は、プロセス識別子送信部431及びwrite情報送信部432を含む。
プロセス識別子送信部431は、アプリケーションプログラム30を構成するプロセスを識別するためのプロセス識別子を取得する。プロセス識別子送信部431は、オペレーティングシステム60に対して問い合わせることによりプロセス識別子を取得する。
ここで、ジャケットライブラリ430は、例えばアプリケーションプログラム30からなる機能単位が開始された際に実行されるプロセスによってロードされる。プロセス識別子送信部431は、ジャケットライブラリ430がロードされたときに呼ばれ、ジャケットライブラリ430をロードしたプロセスを識別するためのプロセス識別子を取得する。
プロセス識別情報送信部431は、取得されたプロセス識別子(情報)をログ管理マネージャ510に対して送信する。
write情報送信部432は、write情報をログ管理マネージャ510に出力(送信)する際、当該アプリケーションプログラム30の動作ログを出力したプロセス(オペレーティングシステム60に含まれるwriteシステムコールを実行したプロセス)を識別するためのプロセス識別子を取得する。write情報送信部432は、オペレーティングシステム60に問い合わせることにより、プロセス識別子を取得する。
これにより、write情報送信部432は、取得されたプロセス識別子を含むwrite情報をログ管理マネージャ510に対して出力(送信)する。
ここで、図22は、write情報送信部432によって出力されるwrite情報のデータ構造の一例を示す。図22に示すように、write情報送信部432によって出力されるwrite情報には、書込み先ファイル情報(ファイル名)、書込みデータ(アプリケーションプログラム30の動作ログ)、時刻情報及びプロセス識別子(情報)が含まれる。
図23は、本実施形態に係るコンピュータ10に含まれるログ管理マネージャ510の主として機能構成を示すブロック図である。なお、前述した図10と同様の部分には同一参照符号を付してその詳しい説明を省略する。ここでは、図10と異なる部分について主に述べる。以下の実施形態についても同様にして重複した説明を省略する。
図23に示すように、ログ管理マネージャ510は、プロセス識別子受信部511、通知部512、ログ対応情報管理部513、ログ対応情報テーブル514、write情報受信部515及び書込判定部516を含む。
プロセス識別子受信部511は、上記したジャケットライブラリ430(に含まれるプロセス識別子送信部431)によって出力されたプロセス識別子(情報)を取得(受信)する。プロセス識別子受信部511は、取得されたプロセス識別子をログ対応情報管理部513に渡す。
通知部512は、プロセス識別子受信部511から呼ばれ、当該プロセス識別子受信部511がプロセス識別子を取得した旨(前述したプロセス識別子取得通知)をクラスタソフトウェア200に対して通知する。
ログ対応情報管理部513は、プロセス識別子受信部511から渡されたプロセス識別子を取得する。ログ対応情報管理部513は、プロセス識別子が取得されると、ログ対応情報テーブル514を更新する。
ログ対応情報管理部513は、ログ対応情報テーブル514において、制御情報受信部52から渡された制御情報に基づいて最後に状態が「開始」に更新された機能単位情報を特定する。ログ対応情報管理部513は、特定された機能単位情報に対応付けてプロセス識別子をログ対応情報テーブル514に保持させる(登録する)。これにより、ログ対応情報テーブル514は更新される。この特定された機能単位情報は、プロセス識別子受信部511から渡されたプロセス識別子によって識別されるプロセスに対応する機能単位を表す。
write情報受信部515は、ジャケットライブラリ430(に含まれるwrite情報送信部432)によって出力されたwrite情報を取得(受信)する。上記したように、このwrite情報には、書込み先ログファイル情報(ファイル名)、書込みデータ(アプリケーションプログラム30の動作ログ)、時刻情報及びプロセス識別子が含まれる。write情報受信部515は、取得されたwrite情報を書込判定部516に渡す。
書込判定部516は、write情報受信部515から渡されたwrite情報を取得する。取得されたwrite情報に基づいて、当該write情報に含まれる書込みデータを複製アプリケーションログファイル90に書き込むか否かを判定する。このとき、書込判定部516は、ログ対応情報テーブル514を参照して判定処理を実行する。書込判定部516は、この処理において書込みデータに機能単位情報及び時刻情報(または時刻情報のみ)を付加する。なお、書込判定部516の処理の詳細については後述する。
ここで、上記したようにクラスタソフトウェア200(に含まれるHAクラスタ制御部21)では、プロセス識別子取得通知を受けるまでは次の機能単位の開始は行わない。つまり、クラスタソフトウェア200では、ログ対応情報テーブル514においてプロセス識別子の対応付けが行われるまで、同時に異なるプロセスが立ち上がらないように管理が行われる。したがって、対応付けの完了を表すプロセス識別子取得通知を受けると、クラスタソフトウェア200では、次の機能単位が開始される。
図24は、図23に示すログ対応情報テーブル514のデータ構造の一例を示す。図24に示すように、ログ対応情報テーブル514には、機能単位情報、ログファイル情報、状態及びプロセス識別子が保持される。プロセス識別子は、機能単位情報によって表される機能単位に対応するプロセス(つまり、当該機能単位が開始された際に実行されるプロセス)を識別する識別子である。
図24に示す例では、ログ対応情報テーブル514には、機能単位情報「機能単位1」、ログファイル情報「ログファイルA」、状態「開始」及びプロセス識別子「133」が保持されている。これによれば、「機能単位1」によって表される機能単位に対応するプロセスがプロセス識別子「133」によって識別されるプロセスであることが示される。
また、ログ対応情報テーブル514には、機能単位情報「機能単位1」、ログファイル情報「ログファイルB」、状態「開始」及びプロセス識別子「133」が保持されている。同様に、ログ対応情報テーブル514には、機能単位情報「機能単位2」、ログファイル情報「ログファイルC」及び状態「停止」が保持されている。
なお、上記したようにプロセス識別子は、状態が「開始」である機能単位を表す機能単位情報に対応付けて保持されるので、状態が「停止」である場合にはプロセス識別子は保持されない。
また、図24に示すように、機能単位情報(、ログファイル情報及び状態)に対応付けてログ対応情報テーブル514に保持されるプロセス識別子は、複数であっても構わない。
次に、図25のフローチャートを参照して、本実施形態における書込判定部516の処理手順について説明する。
まず、前述した図13に示すステップS11〜ステップS13に相当するステップS21〜ステップS24の処理が実行される。
ステップS23において書込み先ログファイル情報に対応付けてログ対応情報テーブル514に保持されている状態が「開始」であると判定された場合、書込判定部516は、ステップS21において取得されたwrite情報に含まれるプロセス識別子が当該書込み先ログファイル情報に対応付けてログ対応情報テーブル514に保持されているプロセス識別子と同一であるか否かを判定する(ステップS24)。
同一であると判定された場合(ステップS24のYES)、前述した図13に示すステップS14及びステップS15の処理に相当するステップS25及びステップS26の処理が実行される。
一方、同一でない、つまり、異なると判定された場合(ステップS24のNO)、前述した図13に示すステップS16の処理に相当するステップS27の処理が実行される。ステップS27の処理が実行されると、ステップS26の処理が実行される。
本実施形態においては、例えば異なる機能単位に対応する異なるプロセスが同一のアプリケーションログファイル80に当該機能単位をなすアプリケーションプログラム30の動作ログを出力する場合を想定している。前述した第1〜第4の実施形態では、このような場合、異なる機能単位をなすアプリケーションプログラム30動作ログであっても同一の機能単位情報が付加されて複製アプリケーションログファイル90に書き込まれる場合がある。
これに対して、本実施形態においては、ジャケットライブラリ430によって出力されるwrite情報に含まれるプロセス識別子がログ対応情報テーブル514に保持されているプロセス識別子と同一である場合にのみ機能単位情報が書込みデータ(アプリケーションプログラム30の動作ログ)に付加される。これにより、本実施形態においては、上記したような異なる機能単位に対応する異なるプロセスが同一のアプリケーションログファイル80に当該機能単位をなすアプリケーションプログラム30の動作ログを書き込む場合であっても、プロセス識別子によってプロセスを区別することで、当該動作ログを出力したプロセスに対応する機能単位を表す機能単位情報を書込みデータに付加することが可能となる。
[第6の実施形態]
次に、本発明の第6の実施形態について説明する。本実施形態に係るコンピュータの構成は、前述した第5の実施形態と同様であるため、適宜、図20、図21及び図23を用いて説明する。
前述した第5の実施形態においてはプロセス識別子によってプロセスを区別したが、本実施形態においては、更に当該プロセスを構成するスレッドをスレッド識別子によって区別する点が当該第5の実施形態とは異なる。
ここで、アプリケーションプログラム30を構成するプロセスは、1つ以上のスレッドから構成される。例えばアプリケーションプログラム30からなる機能単位が開始された際には、当該機能単位に対応するスレッドが実行される。また、アプリケーションプログラム30の動作ログは、当該機能単位に対応するスレッド(当該アプリケーションプログラム30を構成するスレッド)から出力される。
以下、図20、図21及び図23を用いて本実施形態に係るコンピュータ10の構成について説明する。
まず、図20を用いて、本実施形態に係るコンピュータ10に含まれるクラスタソフトウェア200について説明する。
クラスタソフトウェア200に含まれるプロセス識別子取得通知受信部201は、後述するスレッド識別子取得通知をログ管理マネージャ510から受け取り、HAクラスタ制御部21にその旨を通知する機能を有する。なお、このスレッド識別子取得通知は、前述した第5の実施形態におけるプロセス識別子取得通知に相当するものであるため、その詳しい説明については省略する。
次に、図21を用いて、本実施形態に係るコンピュータ10に含まれるジャケットライブラリ430について説明する。
ジャケットライブラリ430に含まれるプロセス識別子送信部431は、プロセス識別子に加えて、更にスレッド識別子を取得する。プロセス識別子送信部431は、オペレーティングシステム60に対して問い合わせることによりスレッド識別子及びプロセス識別子を取得する。
ここで、ジャケットライブラリ430は、例えばアプリケーションプログラム30からなる機能単位が開始された際に実行されるスレッドによってロードされる。プロセス識別子送信部431は、ジャケットライブラリ430がロードされたときに呼ばれ、ジャケットライブラリ430をロードしたスレッドを識別するためのスレッド識別子及び当該スレッドから構成されるプロセスを識別するためのプロセス識別子を取得する。
プロセス識別子情報送信部431は、取得されたスレッド識別子及びプロセス識別子をログ管理マネージャ510に対して送信する。
ジャケットライブラリ430に含まれるwrite情報送信部432は、write情報をログ管理マネージャ510に出力(送信)する際、アプリケーションプログラム30の動作ログを出力したスレッドを識別するためのスレッド識別子及び当該スレッドから構成されるプロセスを識別するためのプロセス識別子を取得する。write情報送信部432は、オペレーティングシステム60に問い合わせることにより、スレッド識別子及びプロセス識別子を取得する。
write情報送信部432は、上記した書込み先ログファイル情報、アプリケーションプログラム30の動作ログ及び時刻情報に加えて、取得されたスレッド識別子及びプロセス識別子を含むwrite情報をログ管理マネージャ510に対して出力(送信)する。
次に、図23を用いて、本実施形態に係るコンピュータ10に含まれるログ管理マネージャ510について説明する。
ログ管理マネージャ510に含まれるプロセス識別子受信部511は、上記したジャケットライブラリ430(に含まれるプロセス識別子送信部431)によって出力されたスレッド識別子及びプロセス識別子を取得(受信)する。プロセス識別子受信部511は、取得されたスレッド識別子及びプロセス識別子をログ対応情報管理部513に渡す。
ログ管理マネージャ510に含まれる通知部512は、プロセス識別子受信部511から呼ばれ、当該プロセス識別子受信部511がスレッド識別子(及びプロセス識別子)を取得した旨(前述したスレッド識別子取得通知)をクラスタソフトウェア200に対して通知する。
ログ管理マネージャ510に含まれるログ対応情報管理部513は、プロセス識別子受信部511から渡されたスレッド識別子及びプロセス識別子を取得する。ログ対応情報管理部513は、スレッド識別子及びプロセス識別子が取得されると、ログ対応情報テーブル514を更新する。
ログ対応情報管理部513は、ログ対応情報テーブル514において、制御情報受信部52から渡された制御情報に基づいて最後に状態が「開始」に更新された機能単位情報を特定する。ログ対応情報管理部513は、特定された機能単位情報に対応付けてスレッド識別子及びプロセス識別子をログ対応情報テーブル514に保持させる(登録する)。これにより、ログ対応情報テーブル514は更新される。この特定された機能単位情報によって表される機能単位は、プロセス識別子受信部511から渡されたスレッド識別子によって識別されるスレッドに対応する機能単位である。
ログ管理マネージャ510に含まれるwrite情報受信部515は、ジャケットライブラリ430(に含まれるwrite情報送信部432)によって出力されたwrite情報を取得(受信)する。上記したように、このwrite情報には、書込み先ログファイル情報(ファイル名)、書込みデータ(アプリケーションプログラム30の動作ログ)、時刻情報、スレッド識別子及びプロセス識別子が含まれる。write情報受信部515は、取得されたwrite情報を書込判定部516に渡す。
ログ管理マネージャ510に含まれる書込判定部516は、write情報受信部515から渡されたwrite情報に基づいて、当該write情報に含まれる書込みデータを複製アプリケーションログファイル90に書き込むか否かを判定する。このとき、書込み判定部516は、ログ対応情報テーブル514を参照して判定処理を実行する。書込判定部516は、この処理において書込みデータに機能単位情報及び時刻情報(または時刻情報のみ)を付加する。なお、書込判定部516の処理の詳細については後述する。
図26は、本実施形態におけるログ対応情報テーブル514のデータ構造の一例を示す。図26に示すように、ログ対応情報テーブル514には、機能単位情報、ログファイル情報、状態、スレッド識別子及びプロセス識別子が保持される。スレッド識別子は、機能単位情報によって表される機能単位に対応するスレッドを識別するための識別子である。プロセス識別子は、スレッド識別子によって識別されるスレッドから構成されるプロセスを識別するための識別子である。
図26に示す例では、ログ対応情報テーブル514には、機能単位情報「機能単位1」、ログファイル情報「ログファイルA」、状態「開始」、スレッド識別子「30」及びプロセス識別子「133」が保持されている。これによれば、「機能単位1」によって表される機能単位に対応するスレッドがスレッド識別子「30」によって識別されるスレッドであることが示される。また、スレッド識別子「30」によって識別されるスレッドから構成されるプロセスがプロセス識別子「133」によって識別されるプロセスであることが示される。
また、ログ対応情報テーブル514には、機能単位情報「機能単位1」、ログファイル情報「ログファイルB」、状態「開始」、スレッド識別子「30」及びプロセス識別子「133」が保持されている。同様に、ログ対応情報テーブル514には、機能単位情報「機能単位2」、ログファイル情報「ログファイルC」及び状態「停止」が保持されている。
なお、上記したようにスレッド識別子及びプロセス識別子は、状態が「開始」である機能単位を表す機能単位情報に対応付けて保持されるので、状態が「停止」である場合にはスレッド識別子及びプロセス識別子は保持されない。
次に、図27のフローチャートを参照して、本実施形態における書込判定部516の処理手順について説明する。
まず、前述した図25に示すステップS21〜ステップS24に相当するステップS31〜ステップS34の処理が実行される。
ここで、ステップS31において取得されたwrite情報に含まれるプロセス識別子が当該write情報に含まれる書込み先ログファイル情報に対応付けてログ対応情報テーブル514に保持されているプロセス識別子と同一であると判定された場合を想定する(ステップS34のYES)。この場合、書込判定部516は、取得されたwrite情報に含まれるスレッド識別子が当該write情報に含まれる書込み先ログファイル情報に対応付けてログ対応情報テーブル514に保持されているスレッド識別子と同一であるか否かを判定する(ステップS35)。
同一であると判定された場合(ステップS35のYES)、前述した図25に示すステップS25及びステップS26の処理に相当するステップS36及びステップS37の処理が実行される。
一方、同一でない、つまり、異なると判定された場合(ステップS35のNO)、前述した図25に示すステップS27の処理に相当するステップS38の処理が実行される。ステップS38の処理が実行されると、ステップS37の処理が実行される。
本実施形態においては、例えば異なる機能単位に対応する異なるスレッドが同一のアプリケーションログファイル80に当該機能単位をなすアプリケーションプログラム30の動作ログを出力する場合を想定している。前述した第5の実施形態では、例えば異なるスレッドが同一のアプリケーションログファイル80にアプリケーションプログラム30の動作ログを出力した場合であっても、当該異なるスレッドから構成されるプロセスが同一である場合には、異なる機能単位をなすアプリケーションプログラム30の動作ログであっても同一の機能単位情報が付加されて複製アプリケーションログファイル90に書き込まれる場合がある。
これに対して、本実施形態においては、ジャケットライブラリ430によって出力されるwrite情報に含まれるスレッド識別子がログ対応情報テーブル514に保持されているスレッド識別子と同一である場合にのみ機能単位情報が書込みデータ(アプリケーションプログラム30の動作ログ)に付加される。これにより、本実施形態においては、上記したような異なる機能単位に対応する異なるスレッドが同一のプロセスを構成し、かつ、同一のアプリケーションログファイル80に当該機能単位をなすアプリケーションプログラム30の動作ログを書き込む場合であっても、スレッド識別子によってスレッドを区別することで、当該動作ログを出力したスレッドに対応する機能単位を表す機能単位情報を書込みデータに付加することが可能となる。
また、本実施形態においては、プロセス識別子を用いてプロセスも区別するので、例えばプロセスは異なるがスレッド識別子が同一であるような場合であっても、スレッド識別子及びプロセス識別子を用いることでスレッドを区別することが可能となる。
なお、本願発明は、上記各実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記各実施形態に開示されている複数の構成要素の適宜な組合せにより種々の発明を形成できる。例えば、各実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。更に、異なる実施形態に亘る構成要素を適宜組合せてもよい。
10,100,110,120…コンピュータ、20…クラスタソフトウェア、21…HAクラスタ制御部、22…ログ対応情報登録部、23…制御情報送信部、30…アプリケーションプログラム、40,430…ジャケットライブラリ、41…openフック部、42…ファイル名対応テーブル、43…writeフック部、44,432…write情報送信部、50,500,510…ログ管理マネージャ、51…ログ対応情報受信部、52…制御情報受信部、53,513…ログ対応情報管理部、54,514…ログ対応情報テーブル、55,515…write情報受信部、56,516…書込判定部、57…書込処理部、60…オペレーティングシステム、70…クラスタソフトウェアログファイル、80…アプリケーションログファイル(第1のログファイル)、90…複製アプリケーションログファイル(第2のログファイル)、201…プロセス識別子取得通知受信部、410…ログ構造ファイルシステム、420…デバイスドライバ、421…更新検出部、422…更新処理部、423…更新情報管理部、424…更新情報格納部、425…更新確認要求応答部、431…プロセス識別子送信部、501…更新情報取得部、511…プロセス識別子受信部、512…通知部、800…ハードディスクドライブ(HDD)。