説明

ログ管理システム、ログ管理方法、アプリケーションサーバ、およびログサーバ

【課題】複数のユーザからの要求に応じて並行して処理を行うシステムにおいて、重複したログの保存を防止し、かつ、ログの記録漏れを避ける。
【解決手段】アプリケーションサーバ102は、ログを収集してログサーバに送信する1以上のログデータ収集手段3221と、前記1以上のログデータ収集手段を一意に特定するための識別子を生成してログサーバ103に提供する提供手段3225とを有し、前記ログサーバは、受信したログに対応付けられた前記識別子とすでに記憶されているログに対応付けられた識別子とが一致し、かつ受信したログに含まれる当該ログを一意に特定するための他の情報とすでに記憶されているログに含まれる当該ログを一意に特定するための他の情報とが一致している場合に当該受信したログを記憶させず、それ以外の場合に当該受信したログを記憶する。

【発明の詳細な説明】
【技術分野】
【0001】
クラウド環境における、ログの管理を行うログ管理システム、ログ管理方法、アプリケーションサーバ、およびログサーバに関する。
【背景技術】
【0002】
近年、クラウドコンピューティングシステムと呼ばれる技術が注目を集めている。クラウドコンピューティングシステムにおいて、クラウドサービスベンダーは、インターネット上に、仮想的なサーバ(VM:Virtual Machine)やストレージ、また種々のサービスを提供する。アプリケーション開発者は、クラウドサービスベンダーに利用料を支払い、それらのサービスを使用することで、クラウドアプリケーションの開発が可能となる。
【0003】
ここで、クラウドコンピューティングシステムにおける、ログの管理方法について考える。クラウドサービスでは、複数のサーバ(VM)上でサービスが提供されており、それぞれのサービスで、ログが出力される。特許文献1では、サーバ上に実装されたクライアントが、各サーバ上で出力されたログをログ管理サーバに送信する。これにより、ログの一元的な管理が可能となり、ログの集計や、表示、出力といった作業のパフォーマンス、および効率を上げることが出来る。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特開2010−072984号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
クラウドサービスのように、多くのユーザが使用し、かつ、異なる人物が、同じユーザID(アカウント)等を用いてログイン可能なシステムを考える。このとき、各ユーザが同一のイベント(例えば、プリント等)の処理を行うことが可能であるため、イベントを特定する項目からのみでは、収集したログが、すでに保持管理しているログと重複しているかどうかの判断はできない。
【0006】
また、あるクライアントがログを送信できない状態に陥っている場合に、サーバがログの集計を行うと、あるクライアントから集めるべきログが収集できないため、その間のログの記録漏れが発生する。
【課題を解決するための手段】
【0007】
上記課題を解決するために、本願発明は以下の構成を有する。すなわち、ユーザからの要求に応じてサービスを提供するアプリケーションサーバと、前記アプリケーションサーバが提供したサービスのログを蓄積するログサーバとを含むログ管理システムであって、前記アプリケーションサーバは、ユーザからの要求に応じて行った処理のログをファイルに出力するログファイル出力手段と、前記ログファイル出力手段にてログが出力されたファイルのうち、収集対象となるファイルから前記ログを収集して前記ログサーバに送信する1以上のログデータ収集手段と、前記1以上のログデータ収集手段を一意に特定するための識別子を生成し、当該識別子を前記ログサーバに提供する提供手段とを有し、前記ログサーバは、前記アプリケーションサーバから送信されたログを受信し、記憶部に記憶する記憶手段を有し、前記記憶手段は、受信したログに対応付けられた前記アプリケーションサーバから提供された識別子とすでに前記記憶部に記憶されているログに対応付けられた識別子とが一致し、かつ受信したログに含まれる当該ログを一意に特定するための他の情報とすでに前記記憶部に記憶されているログに含まれる当該ログを一意に特定するための他の情報とが一致している場合に当該受信したログを記憶させず、それ以外の場合に当該受信したログを記憶することを特徴とするログ管理システム。
【発明の効果】
【0008】
本発明により、複数のユーザからの要求に応じて並行して処理を行うシステムにおいて、処理を行った結果としてのログに対し、重複したログの保存を防止し、かつ、ログの記録漏れを避けることが可能となる。
【図面の簡単な説明】
【0009】
【図1】システム構成図。
【図2】アプリケーションサーバ102のハードウェア構成図。
【図3】機能ブロック図。
【図4】ログ収集部の設定ファイルの記述例を示す図。
【図5】ログフィルタのI/FおよびLogDataクラスの定義例を示す図。
【図6】IDファイルの記述例を示す図。
【図7】レコードを初期登録した際のレコードファイルの記述例を示す図。
【図8】ログDBの構成例を示す図。
【図9】ステータスDBの構成例を示す図。
【図10】アーカイブアプリケーションの設定ファイルの記述例を示す図。
【図11】ログ収集部の起動、およびIDファイルの作成に関するフローチャート。
【図12】ログ収集部のログ収集に関するフローチャート。
【図13】バッチアプリケーションサーバのログ出力に関するフローチャート。
【図14】フェールオーバー時のアプリケーションサーバの処理のフローチャート
【発明を実施するための形態】
【0010】
以下に、本発明の好ましい実施の形態を、添付の図面に基づいて詳細に説明する。
【0011】
[システム構成]
図1は、本発明の一実施形態に係るログ管理システムの全体構成を示している。ネットワーク100を介して、PC101、アプリケーションサーバ102、ログサーバ103、ストレージサーバ104、およびバッチアプリケーションサーバ105が接続されている。アプリケーションサーバ102は、PC101からのネットワーク100を介して送信されるリクエストを受信し、処理を行う。ログサーバ103は、アプリケーションサーバ102から送信されるログを受信し、ストレージサーバ104に保存させる機能、および、バッチアプリケーションサーバ105からのログデータの出力要求を受信し、該当の処理を行う機能を備える。ストレージサーバ104は、ログサーバ103が収集したログを保存する。
【0012】
ネットワーク100は、上述の各装置間での情報をやりとりのための通信回線として働き、有線、無線と回線の形態は問わない。また、ネットワーク100は、インターネットなどの外部ネットワークやLANなどの内部ネットワークを組み合わせて構成されるものとする。
【0013】
また、図1において、2台のアプリケーションサーバ102を示しているが、これに限定するものではない。同様に各サーバも1台構成に限定するものではなく、複数台の物理的な構成を備えていても構わない。また、本実施形態において、各サーバを機能ごとに別個の装置として示しているが、単一の装置にて実現するようにしても構わない。例えば、ログサーバ103、ストレージサーバ104、およびバッチアプリケーションサーバ105を1台の装置にて構成するようにしても構わない。また、物理的に1台の装置において複数のVMが動作するように構成してもよいし、複数の物理的な装置が協働して複数のVMが動作するように構成してもよい。
【0014】
[ハードウェア構成]
図2は、本発明の一実施形態に係るハードウェア構成を示している。なお、図1に示した各装置も同様の構成を有するものとし、ここではアプリケーションサーバ102を例にとって説明する。
【0015】
アプリケーションサーバ102は、CPU(Central Processing Unit)201、直接記憶部202、間接記憶部203、およびネットワークインタフェース204を備える。CPU201は、各記憶部に格納された所定のプログラムを実行し、アプリケーションサーバ102の各種制御を指示するユニットである。直接記憶部202は、CPU201がプログラムを実行する際に使用するワークメモリであり、CPU201が実行するプログラムは直接記憶部202にロードされる。直接記憶部202は、RAM(Randam Access Memory)により実現される。間接記憶部203は、アプリケーションプログラム、およびOS(Operating System)を含む各種プログラムが記憶されている。
【0016】
間接記憶部203に記憶されている各種プログラムは、CPU201がプログラムを実行する際に直接記憶部202へ読みだされる。間接記憶部203は、ROM(Read Only Memory)、HDD(Hard Disc Drive)、または、SSD(Solid State Drive)により実現される。なお、CPU201は、マルチプロセッサでも良い。また、アプリケーションサーバ102内の各構成要素は、内部バス(不図示)によって互いに通信可能なように接続されている。ネットワークインタフェース204は、ネットワーク100に接続されており、ネットワーク100に接続されている他の装置と通信が可能となる。PC101、ログサーバ103、ストレージサーバ104、およびバッチアプリケーションサーバ105も同様のハードウェア構成をしているため、説明は割愛する。また、各装置は、ここに示していない構成要素を備えていても構わず、汎用的なコンピュータにて実現可能である。
【0017】
[ソフトウェア構成]
図3は、本発明の一実施形態に係るシステムを構成する各装置の機能ブロック図(ソフトウェア構成)を示す。まず、PC101についての説明を行う。PC101は、ネットワーク通信部313、ユーザインタフェース312、ウェブブラウザ311から構成される。ユーザインタフェース312は、ユーザが、PC101によって提供される各種アプリケーション(不図示)を使用するためのインタフェースである。これを介して入力されるユーザ操作に従って、PC101は、各種アプリケーションを実行する。アプリケーションの1種であるウェブブラウザ311は、ネットワーク100を介して、ネットワーク通信部313から送受信される情報に応じて、各種情報の表示を行う。
【0018】
ウェブブラウザ311は、図2の間接記憶部203に保存されているプログラムが、直接記憶部202にロードされ、CPU201により実行されることで実現される。本実施形態では、PC101を操作するユーザが、ユーザインタフェース312、ネットワーク通信部313を介してアプリケーションサーバ102のリクエスト処理部3211と通信を行い、データの送受信を行う。
【0019】
次に、アプリケーションサーバ102上に実装されるアプリケーション部321に含まれるリクエスト処理部3211、ログファイル出力部3212、リクエスト処理部状態監視部3213に関して説明する。リクエスト処理部3211は、PC101からのリクエストを受信し、受信した内容に応じた処理を行う。例えば、アプリケーションサーバ102がオンライン上でのプリントサービスを実現しているとする。ユーザは、PC101を用いて印刷をする対象のドキュメントを選択し、また印刷設定などを指定し、アプリケーションサーバ102に対して、印刷処理のリクエストを送信する。アプリケーションサーバ102は、受信したリクエストに従ってドキュメントを印刷可能な形式に変換し、プリントサーバ(不図示)に送信するといった処理を行う。
【0020】
ここでは、一例としてプリントシステムの例を述べたが、アプリケーションサーバ102にて実現される機能に制限は存在しない。リクエスト処理部3211は、一般的なWebサーバと同等の機能を持ち、同期処理を行うことが可能である。リクエスト処理部3211は、ネットワーク100を介して、別のアプリケーションサーバ102と通信することも可能である。また、リクエスト処理部3211は、定期的にリクエスト処理部状態監視部3213に対して、動作中を表すパケットを送信する。
【0021】
ログファイル出力部3212は、リクエスト処理部3211の処理内容に応じて、その処理のログをファイルに出力する。この際、出力されるログには、そのリクエストに対する処理が行われた時間が記録されている必要がある。その他の項目(例えば、ユーザカウントや、処理の内容に関するログ)に関しては、任意の項目を出力してもよい。ログのフォーマットに関する制約は特に存在せず、任意のフォーマット、例えばコンマ区切りやタブ区切り等、種々の形式での出力が可能である。また、処理内容やアプリケーションごとに、異なるファイルにログを出力することができる。
【0022】
リクエスト処理部状態監視部3213は、リクエスト処理部3211から定期的にパケットが送信されてくるか否かを監視する。パケットが送信されてこなかった場合には、リクエスト処理部状態監視部3213は、リクエスト処理部3211が動作継続不能状態になっているものとし、フェールオーバーを行う。フェールオーバーのフローに関しては、図14を用いて後述する。
【0023】
次に、アプリケーションサーバ102上に実現されるログ収集エージェント部322に関して説明する。ログ収集エージェント部322は、複数の処理部(ログデータ収集部3221、ログデータ送信部3222、ステータス送信部3223、ログフィルタ部3224、およびID管理部3225)から構成される。以下に、各処理部の説明を記載する。
【0024】
まず、ログデータ収集部3221は、ログファイル出力部3212がファイルに出力したログファイルから、ログを読み込む。前述したようにログファイル出力部3212は、任意のフォーマットで記述されたログをファイルに出力する。ストレージサーバ104のログDB部341に定義されたスキーマに沿ってログを保存するためには、任意のフォーマットで記載されたログを、スキーマに従った形式に変換する必要がある。そこで、ログフィルタ部3224を用いて、ファイルに記載されたログのフォーマットを、スキーマに適する形式に変換する。
【0025】
ログフィルタ部3224は、ログデータ収集部3221から渡されたログをスキーマに従った形式に変換し、ログデータ収集部3221に返す。ログフィルタ部3224が適切な形式に変換することにより、任意のフォーマットへの対応が可能となる。ログフィルタ部3224の詳細については図5を用いて説明する。ここで、1つのアプリケーションサーバ102には、複数のログ収集エージェント部322を動作させることが出来る。ログ収集エージェント部322は、設定ファイルを備え、それぞれに対して、収集対象とするログファイルの名前等を定義することが出来る。
【0026】
また、ログフィルタ部3224も、それぞれに対して設定することが出来る。これにより、例えばログファイル出力部3212が複数のログファイルを、異なるフォーマットで出力する場合にも、対応することが出来る。
【0027】
ログデータ収集部3221は、ログフィルタ部3224によって変換されたログデータを、ログデータ送信部3222に渡す。ログデータ送信部3222は、ログデータ収集部3221から渡された、ログデータをログDBリクエスト処理部331に送信する。ログDBリクエスト処理部331は、受信したログデータをログDB部341に保存する。ログDB部341に保存されるログデータには、時刻やログを発生させる処理を行ったユーザID、処理の内容等の情報が記載されており、それらの情報を基にユーザに対して、サービスの使用量に応じた請求をすることも可能である。ログDB部341のスキーマについては後述する。
【0028】
また、ログデータ収集部3221は、ログデータの送信処理が正常に終了した場合には、ステータス送信部3223に対して、ログファイルからログを収集した時刻を通知する。ステータス送信部3223は、その時刻をステータスDBリクエスト処理部333に送信する。この際、ログ収集エージェント部322を識別するための情報として、各ログ収集エージェント部に対して割り当てられたIDを対応付けて送信する。ステータスDBリクエスト処理部333は、受信したIDと時刻との組を、ストレージサーバ104のステータスDB部342に保存する。このIDと時刻との組をステータスとして扱い、ステータスはステータスに含まれるIDを備えるログ収集エージェント部322が何時までのログを保存しているかを示す情報となる。
【0029】
また、ログ収集エージェント部322には、IDを発行するための処理部として、ID管理部3225が存在する。ID管理部3225は、ログ収集エージェント部322の起動と同時に処理を開始し、当該ログ収集エージェント部に固有のIDを発行し、ログデータ収集部3221にそのID情報を通知する。このIDは、アプリケーションサーバ102上のファイル(IDファイル)として管理される。IDファイルのフォーマット、ファイル名、および保存パス等に関しては図6を用いて後述する。
【0030】
次に、バッチアプリケーションサーバ105に含まれる各処理部を説明する。バッチアプリケーションサーバ105上では、ログDB部341に格納されたログを出力するためのアプリケーション(アーカイブアプリケーション)が実装されている。まず、取得日時指定部351では、ログDB部341から取得する時刻の範囲を指定し、その範囲を、ログデータ取得部353に対して通知する。
【0031】
次に、ステータス確認部352は、ログサーバ103のステータスDBリクエスト処理部333に対して、ステータス取得のリクエストを送信する。また、ステータス確認部352は、ログサーバ103のログDBリクエスト処理部331に対して、ログDB部341に保存されているログの中で、最も古い時刻を持つログの時刻の取得リクエストを送信する。ログDBリクエスト処理部331はリクエストを受信したら、ログDB部341に格納されているログの時刻から、最も古い時刻を取得し、ステータス確認部352に送信する。その後、ステータス確認部352は、受信した最も古い時刻のログの時刻と、ステータスに記録されている時刻とをログデータ取得部353に通知する。
【0032】
ログデータ取得部353は、取得日時指定部351、およびステータス確認部352から通知された時刻を比較する。比較のロジックに関しては、後述のフローチャートの説明にて詳細に述べる。比較の結果、取得日時指定部351より通知された範囲のログデータの取得が可能と判断した場合には、ログDBリクエスト処理部331に対してログ取得要求のリクエストを送信する。ログDBリクエスト処理部331は、リクエストを受信したら、ログDB部341からログを取得し、ログデータ取得部353に送信する。ログデータ取得部353は、受信したデータをログデータ出力部354に渡す。ログデータ出力部354は、受け取ったログデータの形式を整形し、ファイルに出力する。
【0033】
次に、ログサーバ103について説明する。まず、ログDBリクエスト処理部331は、アプリケーションサーバ102、およびバッチアプリケーションサーバ105から送信されるストレージサーバ104のログDB部341に対する処理に関するリクエストを受信する。そして、ログDBリクエスト処理部331は、受信したリクエストに応じた処理を行う。また、ログDBリクエスト処理部331は、リクエストを受信した際には、ログDBI/O部332に対して、処理のリクエストを送信する。ログDBI/O部332は、ログDBリクエスト処理部331から受信したリクエストに応じた処理をログDB部341に対して実行する。同様に、ステータスDBリクエスト処理部333は、アプリケーションサーバ102、およびバッチアプリケーションサーバ105から送信されるステータスDB部342に対する処理に関するリクエストを受信する。そして、ステータスDBリクエスト処理部333は、受信したリクエストに応じた処理を行う。また、ステータスDBリクエスト処理部333は、リクエストを受信した際には、ステータスDBI/O部334に対して、処理のリクエストを行う。ステータスDBI/O部334は、ステータスDBリクエスト処理部333から受信したリクエストに応じた処理をステータスDB部342に対して実行する。
【0034】
次に、ストレージサーバ104について説明する。ログDB部341は、ログサーバ103を介して収集した各ログを蓄積し、保存する。ステータスDB部342は、アプリケーションサーバ102が有する各ログ収集エージェント部のステータスとIDとを対応付けて保持する。ここでのデータ構造に関しては、図8を用いて後述する。また、各DB(データベース)部は、ストレージサーバ104が備える間接記憶部等によって実現される。
【0035】
[ログ収集エージェント部の設定ファイル]
図4を用いて、各ログ収集エージェント部が備える設定ファイルに設定可能な項目の説明を行う。まずログフィルタ部3224に関する設定項目であるフィルタ名4011、およびアセンブリ名4012に関して説明する。本実施形態において、アプリケーションサーバ102は、VMの技術を利用して物理的な1台の装置において、複数の仮想的に異なるサーバを提供することができる。この場合には、設定ファイルも1台の装置の中に複数保持することとなる。前述したようにログ収集エージェント部322はログフィルタ部3224を備える。ログフィルタ部3224は、収集対象のログファイルのフォーマットによって変わりうるため、ログデータ収集部3221を変更することなく、ログフィルタ部3224を変更可能なようにすることが望ましい。そこで、実行時にリンクすることが可能な形式(例えば、Windows(登録商標)であればdll(Dynamic Link Library)ファイル)で、ログフィルタ部3224を実装する。
【0036】
また、設定ファイルに、そのアセンブリパスを記載し、ログデータ収集部3221が実行時に、動的に読み込むことが出来るようにすることで、ログフィルタ部3224を容易に変更可能とする。ここで、設定ファイル中のlogFilterタグは複数作成することが出来、複数のログフィルタ部に関する設定を1つの設定ファイルに記述することが出来る。その際、各logFilterタグに割り振られたフィルタ名4011は一意となるように設定する必要がある。
【0037】
次にagentタグについて説明する。agentタグには、ログデータ収集部3221に関する設定を記述する。以下に設定項目に関する説明を述べる。Agent名4013は、agentを一意に識別する名前である。agentタグは、複数記述することが出来、各agentタグに割り当てられたAgent名4013はログデータ収集部3221を特定するために一意となる必要がある。
【0038】
次に、interval4014には、agent(ログデータ収集部3221)の起動間隔を設定する。指定された間隔に応じて、ログデータ収集部3221は、各サービスのログファイルからのログの読み込み処理を行う。dir4015は、ログデータ収集部3221が、収集を行う対象のログファイルが存在するフォルダパスを記述する。また、filenameRegEx4017は、収集対象のファイル名の正規表現を記載する。ログデータ収集部3221は、dir4015に存在し、filenameRegEx4017に一致する全てのファイルを収集対象とする。
【0039】
includeSubDir4016には、dir4015以下に存在するサブフォルダに含まれるログも、収集対象とする否かを設定する。logFilter−ref4018には、使用するフィルタ名4011を設定する。ここで設定したlogFilter名に一致するアセンブリをロードし、ログフィルタ部3224を作成する。logServer4019、およびstatuServer4020には、ログデータ収集部3221が接続するログDBリクエスト処理部331、およびステータスDBリクエスト処理部333のアドレスを設定する。ログ収集エージェント部322は、その起動時にこの設定ファイルを読み込み、その設定に従って処理を行う。詳細な処理フローに関しては、図12を用いて後述する。
【0040】
[ログフィルタI/F]
図5(a)に、ログフィルタI/Fの定義例を示す。ログ収集エージェント部322のログフィルタ部3224を作成する場合には、ログフィルタI/F501を実装したモジュールを作成する必要がある。図5(a)に示した例では、プログラミング言語としてC#を選択し、C#に基づいたI/F定義の例を記載している。しかしながら、プログラミング言語を限定するものではなく、ログ収集エージェント部322がロードできるモジュールの作成が可能であれば、いずれのプログラム言語を用いても構わない。
【0041】
プログラム言語としてC#を用いた場合、図5(a)に示すようにインタフェース定義部分は、クラス5011、戻り値5012、関数5013、引数5014から構成される。ログフィルタ部3224の作成者は、クラス5011を継承したクラスを作成したクラスを作成し、そのクラスで関数5013を備える関数を実装する。この関数には、ログ収集エージェント部322がログファイルから読みだした1行の文字列が引数5014に与えられる。ログフィルタ部3224の作成者は、引数5014を解析し、図5(b)に示す様なプロパティを備えるクラスを作成し、戻り値5012として返す関数を実装する。
【0042】
図5(b)に、LogDataクラスのプロパティの定義例を示す。本プロパティの定義も同様に、プログラミング言語としてC#を用いた場合の定義例を示している。
【0043】
以下に、各プロパティの説明を記載する。TimeStamp5021は、ログに記載されている時刻(タイムスタンプ)を設定するためのプロパティである。TenantId5022には、ログを出力するきっかけとなった操作を行ったユーザが所属するテナント(会社、組織)を識別するためのIDを設定するためのプロパティである。UserId5023は、ログを出力する起因となった操作を行ったユーザを識別するためのIDを設定するためのプロパティである。ServiceId5024は、ユーザが行った操作の内容、例えば、Print、Scanといった操作の種類を表すためのIDである。最後に、ObjetctID5025には、処理の対象、例えばプリントの場合であれば、プリントしたドキュメントの名前などを設定するためのプロパティである。
【0044】
図5(b)における本定義例では、上記5つのプロパティを定義したが、これに限定するものではない。その他の項目をログとして記録したい場合には、LogDataクラス502にプロパティを追加し、関数5013の実装にて、その項目に値を設定するように、ログフィルタ部3224の実装を行う。また、TimeStamp5021以外の項目をログとして記録しない場合には、プロパティをクラスの定義から削除しても構わない。
【0045】
[IDファイル]
図6を用いて、IDファイルの説明を行う。本実施形態に係るIDファイルは図6に示す様なスキーマによって構成される。IDファイルはagentId6011タグから構成され、その属性であるidには、ログ収集エージェント部322を一意に識別するための識別子(GUID:Global Unique IDentifier)を設定する。GUIDは、ログ収集エージェント部322が起動する際に、ログ収集エージェント部322自身で作成する。この作成されるIDファイルは、前述したログ収集エージェント部322の設定ファイルにおいてdir4015が示すフォルダに保存される。もし、フォルダが存在しない場合には、ログ収集エージェント部322は起動しない。また、IDファイルのファイル名は、設定ファイルのfilenameRegEx4017から生成される文字列を使用する。
【0046】
前述したようにfilenameRegEx4017には正規表現が設定されるため、「?」や「¥」等のファイル名には指定出来ない文字列が設定される可能性がある。そのため、filenameRegEx4017に指定された文字列から、ファイル名に使用できる文字列への変換処理を行う。具体的には、Base64エンコーディングを用いて文字列変換することや、「¥」などの文字列を「bs」などの文字列に置き換えることがあげられる。ここで、変換の際の条件として、変換前の文字列と変換後の文字列が写像関係になっていることが挙げられる。
【0047】
なお、本実施形態では、1台の物理的な装置の中に複数のVM(アプリケーションサーバ)を動作させている場合には、各VMそれぞれのログ収集エージェント部322ごとにIDファイルが生成されることとなる。
【0048】
[レコードファイル]
前述したように、ログデータ収集部3221は、定期的にログファイルを読み込む。そして、ログデータ収集部3221は、新規に追加されたログのみに対して、ログフィルタ部3224を用いて整形し、ストレージサーバ104のログDB部341にログデータを格納する。このように新規に追加されたログのみを対象とすることで、パフォーマンスを向上させることが出来る。新規に追加されたログのみを対象とするために、前回の収集時に、ログデータ収集部3221が収集を行ったファイルの位置や、収集を行った時間などを記録する必要がある。そのデータを、ログの収集状況を示すレコードファイルと呼ばれるファイルに記載する。ここで、レコードファイルはログ収集エージェント部322が存在するフォルダに、動的に作成される。また、レコードファイルのファイル名は、ログ収集エージェント部322の設定ファイルにおいて、Agent名4013の末尾に「.xml」を追記したファイル名とする。
【0049】
図7を用いて、本実施形態に係るレコードファイルの説明を行う。レコードファイルは、図7に示す様な形式のファイルである。recordタグは、filename7011、updateTime7012、offset7013、lineNumber7014の4つの属性から構成される。recordタグは、ログデータ収集部3221が収集対象とするファイルの数だけ作成される。filename7011は、ログデータ収集部3221が収集しているログファイルの名称が設定される。updateTime7012には、ログデータ収集部3221が、前回の収集を行った時間を設定する。filename7011が示すファイルに対して、過去に収集処理を行っていない場合には、初期値として“1970/01/01 00:00:00”が設定される。
【0050】
offset7013には、ログデータ収集部3221が収集が完了した個所への、ファイル先頭からのバイト数(データサイズ)が設定される。最後に、lineNumber7014には、収集が完了したログの行番号が設定される。filename7011が示すファイルに対して、収集処理を行っていない場合には、offset7013、およびlineNumber7014には、“0”が設定される。ログデータ収集部3221は、前述したinterval4014毎に起動し、レコードファイルを読み込む。その後、filename7011の更新時間をチェックし、その時間とupdateTime7012とを比較する。updateTime7012の方が古い場合には、ログデータ収集部3221は、ファイル先頭からoffset7013が示すバイト数だけファイルを移動し、ログの収集を開始する。ログの収集が完了した場合には、各項目の更新を行う。このようにすることで、新規に追加されたログのみを収集することが出来る。図7にはXML(extensible Markup Language)のフォーマットで各情報が記載されているが、XML形式である必要はなく。コンマ区切り(CSV形式)等で、各項目が記載されていても問題はない。
【0051】
[ログDB]
図8を用いて、本実施形態に係るログDB部341にて保持されるログDB801の説明をする。まず、ログDB801に必要な項目としては、TimeStamp8011、AgentID8012、FileName8013、LineNumber8014の4つの項目が存在する。TimeStamp8011には、そのログに記録されている事象が発生していた時間が格納される。AgentID8012には、そのログを収集したログ収集エージェント部322が有する、IDファイルに記載されているIDが格納される。FileName8013には、そのログが記録されていたログファイルのファイルパスが記載される。最後にLineNumber8014には、そのログのログファイルに置ける行番号が格納される。
【0052】
これらの4つの項目は、ログDB部341のログDB801への、同じログを2度以上重複して記録すること(以下、2重記録)を防ぐために必要となる。例えば、前述したレコードファイルが、何らかの理由で読み込めなくなった場合、ログデータ収集部3221は、収集対象のフォルダに存在する全てのファイルの先頭から、再度収集を行ってしまう。その際、すでに収集したログをログDB部341に再度格納するため、その結果として2重記録が発生する。そこで、本実施形態では、上記4つの項目が一意となるようにログDB801に制約を張る。例えば、RDBMS(Relatinal DataBase Managemenet System)の場合には、上記4つの項目をUniqueとなるように制約を張ることで、2重記録防止の対応が可能となる。また、Key−Value Storeの場合には、上記4つの文字列の組み合わせをキーとして定義することで、同じキーを持つデータの格納が出来なくなり、重複した記録を防止する対応が可能となる。
【0053】
上記4つの項目以外の項目に関しては、ログとして残す必要がある項目に応じて、任意に追加することが可能である。例えば、図8の場合、TenantID8015、UserID8016、ServiceID8017、ObjectID8018がログの項目として列挙されている。TenantID8015には、その処理を行ったユーザが所属する組織(例えば会社等)が記録される。UserID8016には、その処理を行ったユーザを特定するための情報が記録される。ここで、UserIDのみでそのユーザが特定される必要はなく、例えばTenantIDとの組み合わせでそのユーザを一意に特定できればよい。
【0054】
ServiceID8017には、そのユーザが使用したサービスのIDが記録される。例えばユーザ追加機能や、Print、Scanといった機能のサービスIDが記録される。最後に、ObjectID8018には、処理を行った対象が記録される。例えばユーザの追加処理(Add User)であれば、追加されたユーザIDが記録される。また、Printや、Scanであれば、その対象のドキュメント名などが記録される。上記で上げた項目以外を記録した場合には、その項目のカラムなどを追加することで、新しい項目を記録することが可能となる。
【0055】
なお、本実施形態では、TimeStamp8011、AgentID8012、FileName8013、LineNumber8014の4つの項目をキーとして、ログを格納するか否かを判定している。しかし、これに限定するものではなく、AgentID8012以外の項目については、これらの項目のうちのいずれかであってもよいし、更に別の項目を追加するようにしてもよい。つまり、AgentID8012を必須のキー項目とし、更に1以上の他のキー項目の情報を用いて、ログの特定を行うようにすることができる。なお、ここで用いる項目を変更する場合には、図5(b)に示すLogDataクラス502にて取得する情報も変更する必要が有る。
【0056】
[ステータスDB]
図9(a)、(b)を用いて、本実施形態に係るステータスDB部342にて保持されるステータスDBの説明を行う。ストレージサーバ104のステータスDB部342には、ステータスDBとしてログ収集エージェント部322のID(AgentID9011、9021)と、そのログ収集エージェント部322がログの収集をした時刻(LastCrawlTime9012、9022)とが記録される。このLastCrawlTimeに記録されている時刻は、この時刻までにログファイルに出力されていたログは、全てログDB部341に格納されている、という事を保証するための値である。
【0057】
まず図9(a)を用いて、初回登録時に、ステータスDB部342に登録される内容についての説明を行う。ログ収集エージェント部322は、その起動時にIDファイルを読み込む(または作成する)。そこで作成したIDをステータスDB部342に送信することで、自身のIDに対応するデータをステータスDB部342に登録する。その際、LastCrawlTime9012は、初期登録ステータスを表す時刻(1970/01/01 00:00:00)が登録される。本実施形態では、初期登録時刻として、“1970/01/01 00:00:00”を使用しているが、例えば現在時刻より1年以上過去の値を使っても特に問題はない。ここで用いられる初期登録の値としての条件は、このシステムを使用する日時とは、等しくならないことである。
【0058】
ログ収集エージェント部322は初期登録後、ログデータ収集部3221がログの収集処理を行う。ログ収集エージェント部322は、ログDB部341へのログの格納処理が成功した後に、ステータスDBリクエスト処理部333に対して、自身のIDと、現在時刻を対応付けて送信する。ステータスDBリクエスト処理部333は、受信したデータからIDを取出し、IDと等しいAgentID9011、9021を有するエンティティのLastCrawlTime9022を受信した時刻で更新する。このように、ログ収集エージェント部322はステータスDB部342の更新を行う。
【0059】
[アーカイブアプリケーションの設定ファイル]
図10を用いて、本実施形態に係るバッチアプリケーションサーバ105で動作する、アーカイブアプリケーション(不図示)の設定ファイル10000の定義を示す。ここで、アーカイブアプリケーションは、ログDB部341に格納されているログデータをファイルに出力する機能を備えるアプリケーションである。アーカイブアプリケーションの設定ファイルは、図10に記載されているように、XML形式で記載される。ここで、設定ファイルのフォーマットは、XML形式のみではなく、例えばコンマ等で各項目が区切られたCSV形式(Comma Separated Values)などでも良い。
【0060】
アーカイブアプリケーションは、設定ファイル10000にて、まずarchiveSettingタグを有する。このタグは、saveDirectory10001、logDbUri10002、statusDbUri10003、startDate10004、およびendDate10005から構成される。saveDirectory10001は、アーカイブアプリケーションが出力するファイルを保存するディレクトリパスを示す。アーカイブアプリケーションは、日付毎にログを取得し、その取得した日付をファイル名としたファイルを作成する。
【0061】
例えば、2011年1月1日のログを、DBから取得した場合には、「20110101.csv」の様なファイル名を有するファイルをsaveDirectory10001が示すフォルダに保存する。logDbUri10002には、ログDBリクエスト処理部331のアドレスを記述する。statusDbUri10003には、ステータスDBリクエスト処理部333のアドレスを記載する。startDate10004には、ログを保管する期間の開始日を記載する。図10に示した例の場合、ログDB部341に格納されているログのTimeStamp8011が「2011年1月5日0時0分0秒」以降のログを対象とする。endDate10005は、ログを保管する期間の終了日を記載する。図10に示した例の場合、ログDB部341に格納されているログのTimeStamp8011が「2011年1月20日0時0分0秒」未満のログを対象とする。
【0062】
アーカイブアプリケーションを用いて、ログDB部341に格納されているログを外部に保管することが出来る。保管されたログはログDB部341からの削除が可能となるため、ストレージ容量の確保、およびストレージの仕様に関するコストを削減することが出来る。また、図10には示されていないが、設定ファイル10000内に、AgentIDを指定するようにしても構わない。この場合には、特定のログ収集エージェント部が収集したログのみを出力するようにもできる。
【0063】
[フローチャート]
図11乃至図14を用いて、本発明における、アプリケーションサーバ102、ログサーバ103、バッチアプリケーションサーバ105、ストレージサーバ104の処理の流れを詳細に説明する。
【0064】
[ログ収集エージェント部の起動]
まず、図11を用いて、ログ収集エージェント部322の起動時の処理の流れについて説明する。本処理フローは、本実施形態において、アプリケーションサーバ102、およびログサーバ103がそれぞれ備えるCPUが、間接記憶部に記憶されたプログラムを直接記憶部に読み出し、実行することで実現される。
【0065】
S1101では、アプリケーションサーバ102のOS(不図示)は、ログ収集エージェント部322を起動する。
【0066】
S1102では、ログ収集エージェント部322は、図4に示すような設定ファイルを読み込む。設定ファイルの読み込みに失敗した場合には(S1103にてNO)、S1123に遷移する。設定ファイルの読み込みが成功した場合には(S1103にてYES)、S1104に遷移する。
【0067】
S1104では、ログ収集エージェント部322は、設定ファイルに記載されたagentsタグに含まれる全agentタグの設定に基づいて全てのagentを生成したかどうかをチェックする。つまり、ログ収集エージェント部322は、設定ファイルのagentsタブに定義された全てのログデータ収集部を生成したか否かを判定する。全てのagentタグに基づいてagentを生成した場合には(S1104にてYES)、S1118に遷移する。全てのagentを生成していない場合には(S1104にてNO)、S1105に遷移する。
【0068】
S1105では、ログ収集エージェント部322は、設定ファイルに記載されたdir4015で示されたagent(ログデータ収集部)によるログの収集対象となるフォルダが存在するかどうかをチェックする。フォルダが存在しない場合には(S1105にてNO)、S1123に遷移する。フォルダが存在していない場合には(S1105にてYES)、S1106に遷移する。S1106では、ログ収集エージェント部322は、存在しているフォルダ内にfilenameRegEx4017から生成されるファイル名を有するIDファイルが存在しているかチェックする。IDファイルが存在していない場合には(S1106にてNO)、S1109に遷移する。また、IDファイルが存在している場合には(S1106にてYES)、S1107に遷移する。
【0069】
S1109では、ログ収集エージェント部322は、IDファイルを作成し、ファイルにIDを記載する。このとき、ファイルの作成に失敗した場合には(S1110にてNO)、S1123に遷移する。ファイルの作成に成功した場合には(S1110にてYES)、S1111に遷移する。
【0070】
S1107では、ログ収集エージェント部322は、図6に示すようなIDファイルから当該ログ収集エージェント部に対応するIDの情報を読み込む。このとき、IDファイルの読み込み処理に失敗した場合には(S1108にてNO)、S1123に遷移する。IDファイルの読み込み処理に成功した場合には(S1108にてYES)、S1111に遷移する。
【0071】
S1111では、ログ収集エージェント部322は、図4の設定ファイルに記載されているアセンブリ名4012が示すモジュールをロードし、図5に示すログフィルタ部3224を作成する。
【0072】
S1112では、ログ収集エージェント部322は、ログデータ収集部3221を生成する。S1113では、ログ収集エージェント部322は、図4の設定ファイルのAgent名4013の末尾に「.xml」が追記されたファイル、例えば図7に示すようなレコードファイル、が存在するか否かをチェックする。レコードファイルが存在する場合には(S1113にてYES)、S1114に遷移する。レコードファイルが存在しない場合には(S1113にてNO)、S1115に遷移する。
【0073】
S1114では、ログ収集エージェント部322は、レコードファイルを読みこむ。S1115では、ログ収集エージェント部322は、レコードファイルを作成する。ここで、レコードファイルには、設定ファイルのdir4015に指定されたフォルダパスに存在し、filenameRegEx4017に一致するファイル名を持つ全ログファイルを、レコードファイルに初期登録する。つまり、図7のレコードファイル701に示すrecordタブから構成される要素がログファイルの数だけ登録される。
【0074】
S1116では、ログ収集エージェント部322は、図6に示すような自身のエージェントIDをログサーバ103のステータスDBリクエスト処理部333に送信する。S1112では、ログサーバ103は、受信したステータスIDを用いて、ストレージサーバ104のステータスDB部342に初期登録する。
【0075】
S1118では、ログ収集エージェント部322は、設定ファイルから生成された全てのログデータ収集部3221の処理を開始したか否かを確認する。全てログデータ収集部3221が処理を開始していない場合には(S1118にてNO)、S1119に遷移する。全てのagentタグから生成されたログデータ収集部3221が処理開始済みである場合には(S1118にてYES)、S1123に遷移する。
【0076】
S1119では、ログ収集エージェント部322は、ログデータ収集部3221の処理を開始する。S1120では、ログ収集エージェント部322は、ログを収集し、ログサーバ103に送信する。この処理の詳細に関しては、図12を用いたフローチャートの説明にて行う。S1121では、ログサーバ103は、受信したデータをストレージサーバ104のログDB部341に格納する。
【0077】
S1122では、ログ収集エージェント部322は、設定ファイルのinterval4014にて設定された秒数後に、ログデータ収集部3221が、処理を再開するようにタイマーを設定し、待機する。そして、所定の時間が経過した場合には、ログデータ収集部3221は処理を再開する。S1123では、ログ収集エージェント部322は、処理中にエラーが発生したものとし、処理を停止する。
【0078】
[ログデータ収集部の処理の流れ]
図12を用いて、ログデータ収集部3221の処理の流れについて説明する。本処理フローは、本実施形態において、アプリケーションサーバ102、およびログサーバ103がそれぞれ備えるCPUが、間接記憶部に記憶されたプログラムを直接記憶部に読み出し、実行することで実現される。
【0079】
S1201では、アプリケーションサーバ102のOS/タイマーは、ログデータ収集部3221の処理の再開命令を発行する。ここで、再開命令を発行する場合とは、図11の1122にて示したように、待機状態にあるログデータ収集部3221の処理を再開させる場合が該当する。S1202では、ログデータ収集部3221は、ログ収集エージェント部322の停止命令の有無をチェックする。停止命令があった場合には(S1202にてYES)、S1217に遷移する。また、停止命令がなかった場合は(S1202にてNO)、S1203に遷移する。
【0080】
S1203では、ログデータ収集部3221は、図4に示す設定ファイルのdir4015に記載のフォルダパスに存在し、かつ、filenameRegEx4017に一致するファイル名を有するファイルの一覧を取得する。S1204では、ログデータ収集部3221は、S1203で取得したファイルの一覧の中で、レコードファイルに記録されていないファイル名を有するファイルを、レコードファイルに初期登録する。
【0081】
S1205では、ログデータ収集部3221は、レコードファイルに記録された、updateTime7012と、ファイルの更新時間とを比較し、updateTime7012が示す時間以降に更新されたファイルの一覧を取得する。S1206では、ログデータ収集部3221は、S1205で取得したファイルの一覧の数を確認する。ファイルの数が“0”、つまり更新されたログファイルが存在しない場合には(S1206にてNO)、S1213に遷移する。また、ファイルの数が1以上、つまり更新されたファイルが存在する場合には(S1206にてYES)、S1207に遷移する。
【0082】
S1207では、ログデータ収集部3221は、S1205で取得したファイルの一覧に対して、S1208乃至S1211の処理を行ったかどうかを確認する。つまり、ログデータ収集部3221は、全ログファイルを収集済みか否かを判定する。S1208乃至S1211の処理を行っていない場合には(S1207にてNO)、S1208に遷移する。ファイルの一覧に含まれる全てのファイルに対して、S1208乃至S1211の処理を行った場合には(S1207にてYES)、S1212に遷移する。
【0083】
S1208では、ログデータ収集部3221は、S1205で取得したファイルの一覧に含まれる一つのファイルから、ログを読み込む。そして、ログデータ収集部3221は、ログフィルタ部3224を用いてログを整形し、ログサーバ103のログDBリクエスト処理部331に対して、整形したログを送信する。送信の際には、ログフィルタ部3224によって整形されたデータに、ログデータ収集部3221が読み込んだファイル名、ログの行数、および自身に割り当てられたIDを対応付けて送信する。
【0084】
S1209では、ログサーバ103は、S1208にてログデータ収集部3221より送信されたログデータを受信し、そのデータをストレージサーバ104のログDB部341に格納する。そして、ログサーバ103は、ログDB部341に格納が成功したかどうかをログデータ収集部3221に送信する。
【0085】
S1210では、ログデータ収集部3221は、ログサーバ103から送信された処理結果を受信し、ログサーバ103によるログの格納が成功したか否かを判定する。処理結果が格納が成功した旨を示す正常終了であれば(S1210にてYES)、S1211に遷移する。処理結果が異常終了を示すものであれば(S1210にてNO)、S1207に遷移する。
【0086】
S1211では、ログデータ収集部3221は、レコードファイルを更新する。具体的には、updateTime7012を現在時刻とし、offset7013をファイル末尾のバイト数、lineNumber7014をファイルの最後の行の行番号とする。レコードファイルの更新後、S1207に遷移する。
【0087】
S1212では、ログデータ収集部3221は、S1205で取得した全てのファイルに対して、S1208乃至S1211の処理が成功したかどうかを確認する。全てのファイルに対して、S1208乃至S1211の処理が成功した場合には(S1212にてYES)、S1213に遷移する。一つ以上のログファイルに対して、S1208乃至S1211の処理が失敗していた場合には(S1212にてNO)、S1215に遷移する。
【0088】
S1213では、ログデータ収集部3221は、ログサーバ103のステータスDBリクエスト処理部333に対して、LastCrawlTimeを表す時刻と、自身のIDとを関連付けたデータを送信する。ここで、送信するLastCrawlTimeを表す時刻は、S1208にてログファイルからログを読み込む前に取得した時刻とする。
【0089】
S1214では、ログサーバ103は、ログデータ収集部3221より送信された、IDとLastCrawlTimeとが関連付けられたデータを受信する。受信した後に、ログサーバ103は、受信したIDと等しいAgentIDを有するステータスDBのエンティティに含まれるLastCrawlTimeを、受信したLastCrawlTimeで更新する。
【0090】
S1215では、ログデータ収集部3221は、ログ収集エージェント部322の停止命令の有無をチェックする。停止命令があった場合には(S1215にてYES)、S1217に遷移する。また、停止命令がなかった場合は(S1215にてNO)、S1216に遷移する。
【0091】
S1216では、ログデータ収集部3221は、設定ファイルのinterval4014に記載されていた秒数後に、S1201の処理が呼び出されるように、タイマーを設定する。S1217では、ログデータ収集部3221は、処理を停止する。
【0092】
[バッチアプリケーションサーバ105の処理の流れ]
図13を用いて、バッチアプリケーションサーバ105に存在する、アーカイブアプリケーション(不図示)の処理フローについて説明する。本処理フローは、本実施形態において、ログサーバ103、およびバッチアプリケーションサーバ105がそれぞれ備えるCPUが、間接記憶部に記憶されたプログラムを直接記憶部に読み出し、実行することで実現される。
【0093】
S1301では、アーカイブアプリケーションは、図10に示す設定ファイルに記載されているStartDate10004、およびEndDate10005から、ログを保管する期間を取得する。以下の説明においては、StartDate10004が表す時間を「ログ取得開始日」、EndDate10005が示す時間を「ログ取得終了日」と記載する。S1302では、アーカイブアプリケーションは、ログサーバ103のステータスDBリクエスト処理部333に対して、ログ取得可能範囲の終了日の取得要求を発行する。
【0094】
S1303では、ログサーバ103のステータスDBリクエスト処理部333は、ストレージサーバ104のステータスDB部342からLastCrawlTime9022の一覧を取得する。S1304では、ステータスDBリクエスト処理部333は、取得したLastCrawlTimeの一覧に要素が含まれるかどうかを確認する。取得したLastCrawlTimeの一覧に要素が含まれていない場合には(S1304にてNO)、S1316に遷移する。また、要素が含まれている場合には(S1304にてYES)、S1305に遷移する。
【0095】
S1305では、ステータスDBリクエスト処理部333は、S1303で取得したLastCrawlTimeの一覧の中に、初期値(本実施形態では、「1970/01/01」)が存在するか否かを確認する。一覧の中に初期値が存在する場合には(S1305にてYES)、S1316に遷移する。また、一覧の中に初期値が存在しない場合には(S1305にてNO)、S1306に遷移する。
【0096】
S1306では、ステータスDBリクエスト処理部333は、S1303で取得したLastCrawlTimeの一覧の中で、最も古い時間を取得する。そして、ステータスDBリクエスト処理部333は、取得した時間を、バッチアプリケーションサーバ105のアーカイブアプリケーションに対して送信する。
【0097】
S1307では、アーカイブアプリケーションは、受信した時間と、ログ取得終了日とを比較する。ここで、S1306で取得した時間が、ログ取得終了日が示す時間よりも新しい場合には(S1308にてYES)、S1321に遷移する。また、S1306で取得した時間が、ログ取得終了日が示す時間よりも古い場合には(S1308にてNO)、S1309に遷移する。
【0098】
S1309では、アーカイブアプリケーションは、ログサーバ103のログDBリクエスト処理部331に対し、ストレージサーバ104のログDB部341に存在するログの中で最も古いTimeStampを持つログのTimeStampの取得要求を発行する。
【0099】
S1310では、ログDBリクエスト処理部331は、ログDB部341の中でも最も古いTimeStampを有するログのTimeStampを取得し、バッチアプリケーションサーバ105に対して送信する。
【0100】
S1311では、アーカイブアプリケーションは、ログサーバ103から取得した時間と、ログ取得開始日とを比較する。ここで、ログ取得開始日の方が新しい場合には(SS1312にてYES)、S1313に遷移する。また、ログ取得開始日が、取得した時間よりも古い場合には(S1312にてNO)、S1321に遷移する。
【0101】
S1313では、アーカイブアプリケーションは、ログサーバ103のログDBリクエスト処理部331に対して、ログ取得開始日からログ取得終了日の間のログの取得要求を発行する。S1314では、ログサーバ103のログDBリクエスト処理部331は、受信したログ取得開始日からログ取得終了日に該当するTimeStampを有するログを、ログDB部341から全て取得する。
【0102】
S1314では、ログサーバ103のログDBリクエスト処理部331は、終了コードに正常終了を示す値を設定する。ここで、正常終了を示すコードに対する値の制約は特にない。つまり、正常終了を示すものであれば、コードをどのように定義しても構わない。S1316では、ログDBリクエスト処理部331は、終了コードに異常終了を示すコードを設定する。
【0103】
S1317では、ログDBリクエスト処理部331は、S1314で取得した全ログデータと、S1315、もしくはS1316で設定した終了コードとの組をバッチアプリケーションサーバ105のアーカイブアプリケーションに送信する。
【0104】
S1318では、バッチアプリケーションサーバ105のアーカイブアプリケーションは、ログサーバ103のログDBリクエスト処理部331から送信されたログデータの集合と、終了コードとの組を受信する。S1319では、アーカイブアプリケーションは、受信した終了コードがエラーコードであるか、否かを確認する。終了コードが異常終了を示すものである場合には(S1319にてNO)、S1321に遷移する。また、終了コードが正常終了コードである場合は(S1319にてYES)、S1320に遷移する。
【0105】
S1320では、アーカイブアプリケーションは、受信したログデータを、CSV形式に整形して、ファイルに出力する。ここで、出力ファイルのフォーマットはCSV形式である必要はなく、任意のフォーマットで出力してもよい。S1321にて、アーカイブアプリケーションは、処理を終了する。
【0106】
[フェールオーバー時の処理の流れ]
フェールオーバーした際の、アプリケーションサーバ102の処理の流れについて説明する。ここで、フェールオーバーとは、一般的にコールドスタンバイや、ホットスタンバイと呼ばれる形式の仕組みを指す。上記の方式では、例えば、あるアプリケーションサーバにおいて処理の継続が不能状態に陥った場合、そのアプリケーションサーバを再起動することで、状態を回復させるのではなく、異なるアプリケーションサーバに処理を移譲する。これにより、システム全体としての処理を継続させ、サービスの提供を復旧させる。
【0107】
本システムでは、図9に示すように、ストレージサーバ104のステータスDB部342に、AgentIDをキーとし、そのAgentIDと等しいIDを有するログ収集エージェント部322が記録されている。また、当該ログ収集エージェント部322に対応付けて、収集を完了した日時がLastCrawlTimeに記録されている。
【0108】
ここで、異なるアプリケーションサーバにて、ログ収集エージェント部322が起動したとする。ログ収集エージェント部322は、図11のS1109にて、新しいIDを作成し、S1116にて、ログサーバ103のステータスDBリクエスト処理部333に対して、作成したIDを送信し、登録作業を行う。この場合において、図9(c)に示す様に、新しいエンティティ(AgentID「CE209997・・・」)がストレージサーバ104のステータスDB903に登録される。
【0109】
ここで、AgentID「BE209997・・・」を有するエンティティのLastCrawlTime9032は、更新されずに古い値を保持したままとなる。バッチアプリケーションサーバ105のアーカイブアプリケーションは、ストレージサーバ104のステータスDB部342に記録されている全てのLastCrawlTimeのうち、最も古い時刻までのTimeStampを持つログを出力可能とする。図9(c)の場合、最も古い時刻は、「2011/01/03 01:00:00」であり、またこの値は更新されないため、永久にアーカイブアプリケーションは「2011/01/03 01:00:00」までのログしか出力できないことになる。
【0110】
そこで、本実施形態では、フェールオーバーの際に、異なるアプリケーションサーバに処理が委譲された場合においても、フェールオーバの前後でIDが引き継がれ、LastCrawlTimeが更新されるための、アプリケーションサーバのフローを以下に記述する。つまり、フェールオーバーの際に処理が委譲された場合にも、図9(c)に示すように新たなAgentIDが追加されることなく、図9(b)のように委譲元のAgentIDに対応するLastCrawlTimeが更新されるようにする。また、下記フローにおいて、アプリケーションサーバ1は、動作不能となりフェールオーバーする対象のサーバとし、アプリケーションサーバ2は、処理が移譲されるサーバとする。また、アプリケーションサーバ1と、アプリケーションサーバ2のログ収集エージェント部が有する設定ファイルに記載されるDir4015とFilenameRegEx4017の文字列は、同じものとする。
【0111】
なお、本処理フローは、本実施形態において、各アプリケーションサーバが備えるCPUが、間接記憶部に記憶されたプログラムを直接記憶部に読み出し、実行することで実現される。
【0112】
S1401では、アプリケーションサーバ1上のリクエスト処理部状態監視部3213は、アプリケーションサーバ1の動作継続不能を検知する。S1402では、アプリケーションサーバ1は、ログファイルを出力していたフォルダに存在する全てのファイルを、アプリケーションサーバ2上の同一フォルダパス上に存在するフォルダにコピーする。ここで、アプリケーションサーバ1に対応するIDファイルも同一フォルダ上に存在するため、IDファイルも同様にコピーされる。
【0113】
S1403では、アプリケーションサーバ2は、コピーの成否をアプリケーションサーバ1に通知する。S1404では、アプリケーションサーバ1は、アプリケーションサーバ1から通知されたコピーの成否を確認する。そして、コピーが成功していた場合には(S1404にてYES)、S1405に遷移する。また、コピーが失敗していた場合には(S1404にてNo)、S1407に遷移し、フェールオーバー失敗とする。
【0114】
S1405では、アプリケーションサーバ2は、ログ収集エージェント部322を起動する。ログ収集エージェント部322が、起動した後のフローは、図11にて示したフローと同じであるため、説明は割愛する。S1406では、アプリケーションサーバ2は、アプリケーション部321を起動する
以上説明したように、図11乃至図14に従って処理することにより、アプリケーションサーバとログサーバとが独立して構築され、複数のユーザから依頼を並列して処理するような大規模システムにおいて、ログを重複して記録することを防止することができる。更に、記録しているログのうち、ある期間のログを出力する際に、重複したログの出力を防止することが可能となる。また、フェールオーバーなどによって、異なるアプリケーションサーバに処理が委譲され、別のログ収集エージェント部が動作した場合にも、委譲元に対応するIDを用いることで、ログを漏れなく収集、管理することが出来る。
【0115】
<その他の実施形態>
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア(プログラム)を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ(またはCPUやMPU等)がプログラムを読み出して実行する処理である。

【特許請求の範囲】
【請求項1】
ユーザからの要求に応じてサービスを提供するアプリケーションサーバと、前記アプリケーションサーバが提供したサービスのログを蓄積するログサーバとを含むログ管理システムであって、
前記アプリケーションサーバは、
ユーザからの要求に応じて行った処理のログをファイルに出力するログファイル出力手段と、
前記ログファイル出力手段にてログが出力されたファイルのうち、収集対象となるファイルから前記ログを収集して前記ログサーバに送信する1以上のログデータ収集手段と、
前記1以上のログデータ収集手段を一意に特定するための識別子を生成し、当該識別子を前記ログサーバに提供する提供手段と
を有し、
前記ログサーバは、
前記アプリケーションサーバから送信されたログを受信し、記憶部に記憶する記憶手段を有し、
前記記憶手段は、受信したログに対応付けられた前記アプリケーションサーバから提供された識別子とすでに前記記憶部に記憶されているログに対応付けられた識別子とが一致し、かつ受信したログに含まれる当該ログを一意に特定するための他の情報とすでに前記記憶部に記憶されているログに含まれる当該ログを一意に特定するための他の情報とが一致している場合に当該受信したログを記憶させず、それ以外の場合に当該受信したログを記憶することを特徴とするログ管理システム。
【請求項2】
当該ログを一意に特定するための他の情報とは、収集対象となったログのファイルの名称、当該ファイルにおいてログが出力された行番号、およびログが出力された際のタイムスタンプのうち少なくとも1つの情報が含まれることを特徴とする請求項1に記載のログ管理システム。
【請求項3】
前記アプリケーションサーバが処理の継続が不能になった際に、他のアプリケーションサーバへフェールオーバーを行う場合、当該他のアプリケーションサーバは、自身が有するログデータ収集手段を動作させ、当該他のアプリケーションサーバが有する提供手段は、当該動作させたログデータ収集手段を一意に特定するための識別子を新たに生成し、当該識別子を前記ログサーバに提供することを特徴とする請求項1に記載のログ管理システム。
【請求項4】
前記ログデータ収集手段は、ログの収集状況の情報を更に有し、当該ログの収集状況の情報に従って、収集が終了していないログを収集することを特徴とする請求項1または2に記載のログ管理システム。
【請求項5】
前記ログデータ収集手段は、収集対象となるログのファイルが格納されているフォルダの位置、当該収集対象となるログのファイルの名称、収集する時間の間隔の情報を、設定ファイルとして保持することを特徴とする請求項1または2に記載のログ管理システム。
【請求項6】
前記提供手段は、前記設定ファイルにて指定される、収集対象となるログのファイルが格納されているフォルダに、生成した前記識別子を指定するデータを格納することを特徴とする請求項5に記載のログ管理システム。
【請求項7】
前記提供手段は、前記設定ファイルにて収集対象となるログのファイルが格納されているフォルダに前記識別子を指定するデータがすでに格納されている場合には、当該データにて指定された識別子を前記ログサーバに提供することを特徴とする請求項6に記載のログ管理システム。
【請求項8】
前記アプリケーションサーバは、処理の継続が不能になった際に、他のアプリケーションサーバへフェールオーバーを行う場合、前記ログデータ収集手段による収集対象となるログのファイルが格納されているフォルダに含まれているデータを、前記提供手段にて格納された識別子を指定するデータと共に、前記他のアプリケーションサーバの同じフォルダの位置にコピーさせるコピー手段をさらに有し、
前記他のアプリケーションサーバの提供手段は、当該コピーされたデータにて指定された識別子を前記ログサーバに提供することを特徴とする請求項7に記載のログ管理システム。
【請求項9】
前記ログの収集状況の情報は、前回のログを収集した時刻、ログのファイルにおける収集が終了した個所までの先頭からのデータサイズ、ログのファイルにおける収集が終了した行番号、を示す情報であることを特徴とする請求項4乃至8のいずれか一項に記載のログ管理システム。
【請求項10】
前記収集対象となるログのファイルの名称は、正規表現にて指定されることを特徴とする請求項5乃至9のいずれか一項に記載のログ管理システム。
【請求項11】
前記アプリケーションサーバは、前記ログデータ収集手段の識別子と、当該ログデータ収集手段がログの収集を最後に行った時刻とを対応付けた情報を、前記ログサーバに送信するステータス送信手段を更に有し、
前記記憶手段は更に、前記記憶部に、前記ステータス送信手段から受信した情報を記憶することを特徴とする請求項1乃至10のいずれか一項に記載のログ管理システム。
【請求項12】
前記ログ管理システムは、指定された期間における、前記記憶部に記憶されたログを出力する出力手段を更に含み、
前記出力手段は、前記記憶部に記憶された前記ログデータ収集手段がログの収集を最後に行った時刻が、前記指定された期間を経過している場合にログの出力を行うことを特徴とする請求項11に記載のログ管理システム。
【請求項13】
ユーザからの要求に応じてサービスを提供するアプリケーションサーバと、前記アプリケーションサーバが提供したサービスのログを蓄積するログサーバとを含むログ管理システムにおけるアプリケーションサーバであって、
ユーザからの要求に応じて行った処理のログをファイルに出力するログファイル出力手段と、
前記ログファイル出力手段にてログが出力されたファイルのうち、収集対象となるファイルから前記ログを収集して前記ログサーバに送信する1以上のログデータ収集手段と、
前記1以上のログデータ収集手段を一意に特定するための識別子を生成し、当該識別子を前記ログサーバに提供する提供手段と
を有し、
前記ログデータ収集手段は、当該ログデータ収集手段の識別子、およびログを一意に特定するための他の情報を当該ログのデータに含めることを特徴とするアプリケーションサーバ。
【請求項14】
他のアプリケーションサーバが処理の継続が不能になった際に、当該他のアプリケーションサーバからフェールオーバーの依頼を受けた場合、前記ログデータ収集手段を動作させ、前記提供手段は、当該動作させたログデータ収集手段を一意に特定するための識別子を新たに生成し、当該識別子を前記ログサーバに提供することを特徴とする請求項13に記載のアプリケーションサーバ。
【請求項15】
ユーザからの要求に応じてサービスを提供した際に実行した処理のログをログサーバに送信する1以上のログデータ収集手段と前記1以上のログデータ収集手段を一意に特定するための識別子を前記ログサーバに提供する提供手段とを有するアプリケーションサーバと、前記アプリケーションサーバが提供したサービスのログを蓄積する前記ログサーバとを含むログ管理システムにおけるログサーバであって、
アプリケーションサーバから送信されたログを受信し、記憶部に記憶する記憶手段を有し、
前記記憶手段は、受信したログに対応付けられた前記アプリケーションサーバから提供された識別子とすでに前記記憶部に記憶されているログに対応付けられた識別子とが一致し、かつ受信したログに含まれる当該ログを一意に特定するための他の情報とすでに前記記憶部に記憶されているログに含まれる当該ログを一意に特定するための他の情報とが一致している場合に当該受信したログを記憶させず、それ以外の場合に当該受信したログを記憶することを特徴とするログサーバ。
【請求項16】
ユーザからの要求に応じてサービスを提供するアプリケーションサーバと、前記アプリケーションサーバが提供したサービスのログを蓄積するログサーバとを含むログ管理システムにおけるログ管理方法であって、
前記アプリケーションサーバにおいて、
ログファイル出力手段が、ユーザからの要求に応じて行った処理のログをファイルに出力するログファイル出力工程と、
1以上のログデータ収集手段がそれぞれ、前記ログファイル出力手段にてログを出力されたファイルのうち、収集対象となるファイルから前記ログを収集して前記ログサーバに送信するログデータ収集工程と、
提供手段が、前記1以上のログデータ収集手段を一意に特定するための識別子を生成し、当該識別子を前記ログサーバに提供する提供工程と
を有し、
前記ログサーバにおいて、
記憶手段が、前記アプリケーションサーバから送信されたログを受信し、記憶部に記憶する記憶工程を有し、
前記記憶工程において、受信したログに対応付けられた前記アプリケーションサーバから提供された識別子とすでに前記記憶部に記憶されているログに対応付けられた識別子とが一致し、かつ受信したログに含まれる当該ログを一意に特定するための他の情報とすでに前記記憶部に記憶されているログに含まれる当該ログを一意に特定するための他の情報とが一致している場合に当該受信したログを記憶させず、それ以外の場合に当該受信したログを記憶することを特徴とするログ管理方法。
ことを特徴とするログ管理方法。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate