(58)【調査した分野】(Int.Cl.,DB名)
クライアントが出力したログの履歴と、前記ログから検出されたプログラムの不正動作に関する不正動作情報と、クライアントで実行されるプログラムに挿入されたログ出力処理に関するログ生成情報とを用いて、クライアントから要求されたプログラムにおけるログ出力箇所を動的に制御するログ出力制御装置であって、
前記不正動作情報は、不正動作が検出されたログの識別情報を含み、
前記ログ生成情報は、プログラムにおけるログ出力処理が挿入された場所と、挿入されたログ出力処理に対応するログの識別情報とを含み、
前記不正動作情報と前記ログ生成情報とに基づいて、クライアントから要求されたプログラムにおいて不正動作が検出されたログの出力箇所を特定し、前記特定した箇所にログ出力処理を挿入する
ログ出力制御装置。
クライアントが出力したログの履歴と、前記ログから検出されたプログラムの不正動作に関する不正動作情報と、クライアントで実行されるプログラムに挿入されたログ出力処理に関するログ生成情報とを用いて、クライアントから要求されたプログラムにおけるログ出力箇所を動的に制御するログ出力制御方法であって、
前記不正動作情報は、不正動作が検出されたログの識別情報を含み、
前記ログ生成情報は、プログラムにおけるログ出力処理が挿入された場所と、挿入されたログ出力処理に対応するログの識別情報とを含み、
前記不正動作情報と前記ログ生成情報とに基づいて、クライアントから要求されたプログラムにおいて不正動作が検出されたログの出力箇所を特定し、前記特定した箇所にログ出力処理を挿入する
ログ出力制御方法。
【背景技術】
【0002】
近年、ポータル製品ではAjax(Asynchronous JavaScript(登録商標) + XML)、HTML5、CSS3(Cascading Style Sheets, level 3)やJavaScriptライブラリの普及により、サーバサイドで提供していた機能をクライアントサイドにシフトさせ、クライアントで高度な機能を実現することが主流になっている。これにより、実行されるクライアントに合わせた処理を実施することができるため、きめ細かい描画提供等を実現することが出来るようになった。また、サーバ側の処理をクライアントに移すことで、利用ユーザが増加した場合でもクライアント側に負荷を分散させることができる。このようにクライアント側に処理が移ることでメリットを享受できる一方で、いくつかの問題も顕在化している。
【0003】
スマートフォンやタブレットの普及により、PC(Personal Computer)環境だけでなく、モバイルデバイス環境を視野に入れた開発が必要になり、クライアントサイドスクリプトを提供するシステムはプラットフォーム拡大の対応が急務となっている。加えて、ブラウザは多様化する一方であるが、それぞれのブラウザの振る舞いの違いなどを吸収したクライアントの開発/テスト環境は十分整備されていない。OSS(Open Source Software)で提供されるライブラリを用いることで、ブラウザの差異を一部吸収することは可能ではあるが、ライブラリの利用で100%補填できるものではないため、開発者にはブラウザごとの振る舞いに合わせたコーディングといった豊富な知識が求められる。クライアント側に期待される処理が複雑化してきているため、障害発生時にクライアント環境のデバッグ情報をどこまで詳細に取得できるかが、障害解析時の要となる。
【0004】
このようなクライアントの障害解析を容易にするため、クライアントではサーバに障害分析用ログを送信することが行われている。サーバ側に送信することでデバッグ情報の収集が可能であるが、ユーザ数が増大するに従って、サーバに送信されるログの量が爆発的に増加する。大規模システムでは全てのクライアントから一様にログ送信を行った場合、サーバやネットワークが高負荷になるため、自システムだけでなく他システムへの影響を与えることになる。そのため、クラウド上での大規模システムでの運用が難しくなるといった課題がある。
【0005】
例えば特許文献1には、端末情報を利用して、障害が発生した端末のログのみを収集することにより、ログの記録量が膨大になることを回避するシステムが記載されている。
【発明を実施するための形態】
【0014】
本発明は、
図1に示すように、クライアントが出力したログの履歴と、前記ログから検出されたプログラムの不正動作に関する不正動作情報と、クライアントで実行されるプログラムに挿入されたログ出力処理に関するログ生成情報とを用いて、クライアントから要求されたプログラムにおけるログ出力箇所を動的に制御するログ出力制御装置に関する。
【0015】
(第1の実施形態)
図2は、本発明の第1の実施形態の構成図である。
【0016】
第1の実施形態は、ログ出力制御装置100と、スクリプト実行装置200とを備える。本実施形態では、ログ出力制御装置100はポータルサーバであり、スクリプト実行装置はWebブラウザおよびスクリプト実行エンジン等を備えるクライアントである。これらはインターネット等のネットワークにより接続される。
【0017】
以下、本発明の主要な部分であるサーバ側のログ出力制御装置100を中心に説明する。
【0018】
ログ出力制御装置は100は、データ送受信部110、データ解析部120、ログ処理部130、記憶管理部140を備える。
【0019】
データ送受信部110は、リクエスト受信部111、ログ受信部112、レスポンス送信部113を含む。
【0020】
データ解析部120は、ログ解析部121、不正動作解析部122を含む。ログ解析部121では、記録されたログメッセージからログIDを割出し、イベント履歴に登録する。不正動作解析部122は、イベント履歴に登録されたメッセージ内にエラー(error)が設定されていた場合に不正情報を検出する。
【0021】
ログ処理部130は、
図1のログ出力制御部に主に対応するものであり、ログ出力箇所決定部131、ログ出力処理埋め込み部132を含む。ログ出力箇所決定部131は、不正動作情報と過去のログ出力に関するログ生成情報を基に、クライアントサイドに供給するスクリプトにおけるログの出力箇所を決定する。ログ出力処理埋め込み部132は、実際にログ出力処理を埋め込むためのものである。
【0022】
記憶管理部140には、ログ生成情報141、不正動作情報142、イベント履歴情報143が記憶される。ログ生成情報141は、スクリプトに挿入されたログ出力処理に関する情報であり、
図3に例示するように、ログID、挿入場所(スクリプトのファイル名やID、行数)、リクエストURLを含む情報である。不正動作情報は、ログに基づいて検出されたスクリプトの不正動作に関する情報であり、
図4に例示するように、不正動作が検出されたログのログIDと不正動作内容を含む情報である。イベント履歴は、クライアントから受信したログに関する情報であり、
図5に例示するように、ログIDと出力ログメッセージを含む。
【0023】
次に本実施形態の動作について説明する。
【0024】
図6は本システムの構成要素と各操作処理の流れを図示したものである。
【0025】
まず、スクリプトファイルに障害解析用のログ出力処理を埋め込む処理について、
図7のフローチャート参照して説明する。
【0026】
クライアント(スクリプト実行装置200)のWebブラウザは、ポータルサーバ(ログ出力制御装置100)にJavaScriptのソースを含むサーバリソースの取得用のHTTPリクエストを送信する(a1)。
【0027】
ポータルサーバはHTTPリクエストを受信する(a2)と、クライアントに送信するスクリプト言語の判定を行い(a3)、JavaScript用のログ出力処理挿入処理(a4)を実行する。
【0028】
ここで、(a4)のログ出力処理挿入処理の詳細を
図8を参照して説明する。
【0029】
ログ出力処理挿入処理では、まずログ生成情報(B1)、不正動作情報(B2)を読み込み、不正動作情報があれば、不正動作情報のログIDから、同一のログIDのログ生成情報を検索し、JavaScriptの何行目に埋め込まれたログ出力処理の実行結果であるかを特定し、スクリプトにおける障害発生場所を発見する(b1)。
【0030】
次に実際にリクエスト対象のスクリプトファイルを読み込み、ログ出力処理の埋め込み箇所を決定する(b2)。先ほど特定した障害検出箇所を中心にログ出力箇所を増やす。このとき、イベント履歴情報[ログID](B3)を用いて、スクリプトの関数が実行済かどうかを判断する。イベント履歴情報に実行実績はあるが、不正動作情報を参照すると障害が発生していない関数では、ログ出力処理を少なめに減らす設定する。ログ出力処理の挿入箇所を決めると、処理内容に応じてログメッセージ[関数名 start/end/error/変数やシグネチャなどの付加情報]を作成し、ログ出力処理を挿入する(b4−b7)。ログ出力処理の挿入が終わるとサーバへのログ送信処理を挿入する(b8)。このとき、ログ生成情報テーブルにもログ生成情報(B1)の記録を行う。
【0031】
そして、ログ出力処理を埋め込んだスクリプトをクライアントに送信する(
図7:a5)。
【0032】
次に、イベント履歴書き込み処理について
図9を用いて説明する。
【0033】
ポータルサーバからスクリプト(JavaScript)を含むレスポンスデータを受信する(c1)と、クライアントのブラウザは、HTMLとJavaScriptスクリプトの解析、実行を行う(c2)。ブラウザでは更新のあったJavaScriptのみ再読み込みを行い、その他のJavaScriptファイルについてはキャッシュを利用する。再読み込みを行うと、もとの定義済の関数は新たなログ出力処理が記載された関数によって上書きされる。実行したスクリプトにログ送信処理が記載されている(c3)場合、ポータルサーバに対してログの送信を行う(c5)。
【0034】
ポータルサーバは、ログを受信する(c6)と、受信したログを解析し(c7)、解析結果をイベント履歴情報(C2)に書き込む(C8)。
【0035】
次に、不正情報書き込み処理について
図10を用いて説明する。
【0036】
不正情報の検出には不正動作解析部122を用いる。不正動作解析部122は、イベント履歴を読み込み(d1)、イベントがあれば(d2)、期待した結果、すなわち正しい結果かどうかを判断する(d3)。この判断処理では、イベントと正常な結果とを対応付けた判断基準データを予め格納しておき、不正動作解析部122が、この判断基準データを参照して判断してもよい。また、管理者が判断を行い、不正動作解析部122がこの管理者による判断結果の入力を受け付けてもよい。
【0037】
期待した結果、すなわち正しい結果でない場合、そのログのログIDと不正動作内容を不正動作情報[ログID]として記録する(d4)。ログ出力処理が挿入されたスクリプトの例を
図11に示す。
【0038】
本実施形態による効果について説明する。
【0039】
第一の効果は、障害時に必要なデバッグログの情報量を落とさずにログ出力変更できることにある。その理由はログ出力箇所決定部131とログ出力処理埋め込み部132によってログ出力箇所を決定し、ログ出力処理を埋め込むことができるからである。第二の効果は、プログラムの実行実績に合わせてログ出力個所が変更できることにある。その理由はログ生成情報141と不正動作情報142を用いることで、不具合発生箇所に対して、ログ出力箇所決定部131とログ出力処理埋め込み部132によってログ出力処理を埋め込むことができるからである。
【0040】
(第2の実施形態)
ポータル製品ではユーザ毎に管理者や一般ユーザのロールが割り当てられ、各ロールの権限(役割)によって操作範囲や操作の特性が異なる。例えば管理者ロールに割り当てられたユーザは管理系の操作を実施し、一般ユーザロールに割り当てられたユーザは参照系の操作が中心になる。ログ出力箇所の分析時にリクエストを送信したユーザのロール情報を用いることで、出力箇所決定時の絞り込み精度を上げることができる。
【0041】
図12は、本発明の第2の実施形態の構成図である。
【0042】
本実施の形態は、
図6におけるリクエスト受信部111による処理の後にユーザ識別部123による処理を追加したものである。ユーザ識別部123は、あらかじめ定義されたユーザ識別ルール情報を用いてユーザ識別を行う。ユーザ識別ルール情報144は記憶部管理部140に格納される。ユーザ識別部123はインターフェースに従い、メソッドを実行し、ユーザ識別を行う。ユーザ識別ルールは
図13に例示するようにユーザの識別を行うためのルールがJava言語で記述される。ルール記述用インターフェースをimplementsしたコードのclassファイルを登録すると、サーバ側では登録されたclassファイルを実行し、ユーザID、ユーザに割り当てられたロール、リクエストが送信された端末のIPなどユーザを分類するための情報を取得する。ユーザが識別されるとログ出力箇所決定部131は、決定する内容をユーザ識別情報を用いて判断する。イベント履歴情報にはユーザ識別情報(ロール情報やユーザIDなど、ルールにのっとった識別情報)を追加で保存する。イベント履歴から、識別されたユーザ情報を基にユーザの操作の傾向を判断できる。なお、不正動作情報にユーザ識別情報が付加されてもよい。また、ログ生成情報にユーザ識別情報が付加されてもよい。
【0043】
ログ出力箇所決定部131は、ユーザ識別情報に応じて、前記クライアントから要求されたプログラムにログ出力処理を挿入することを決定してもよい。またログ出力箇所決定部131は、ユーザ識別情報に応じて、前記クライアントから要求されたプログラムのログ出力処理の挿入範囲を変更してもよい。
【0044】
ユーザ識別が行われた場合とユーザ識別が行われない場合のログ出力処理の挿入結果例を
図14に示す。ユーザ識別が行われない場合、エラーが発生すると管理者、一般ユーザともにJavaScript内にログ出力処理が埋め込まれる。一方、本実施形態では、ログ出力箇所決定部131は、イベント履歴、不正動作情報、ログ生成情報から管理者のみエラーが出ていることを判断し、リクエストが管理者からの場合に限ってJavaScriptにログ出力処理を埋め込む。また、管理者による実行範囲や一般ユーザによる実行範囲等の情報を予め登録しておき、埋め込む対象を管理者操作に絞ることで、ログの出力箇所も絞り込むことができる。
【0045】
第2の実施形態の効果は不正動作情報からのみ決定するログ出力箇所よりも効率的にログ出力箇所を決定できることにある。その理由はユーザ識別部123により識別されたユーザ情報を利用することで、ユーザ特性に合わせた操作範囲に限定してログ出力処理を埋め込むことができるからである。
【0046】
(第3の実施形態)
連続した操作を含む処理の場合、特定の処理シーケンスからの場合のみ操作が失敗するといったケースがある。ログイン後の操作(サーバへの送信リクエスト)のパターンに着目することで、ログ出力箇所の分析時に出力箇所決定時の絞り込み精度を上げることができる。第3の実施形態は、操作A→操作B→操作Cのときは特にエラーが発生しないが、操作A’→操作B’→操作Cのときに操作Cでエラーが出る場合、操作Cまでのリクエストをリストとして保持することで、操作A’→操作B’→操作Cの流れの場合のみ操作Cにログ出力処理を埋め込み、エラーが発生しないケースでの不要なログ出力をなくす。
【0047】
図15は、本発明の第3の実施形態の構成図である。
【0048】
本実施の形態は、
図6におけるリクエスト受信部111による処理の後にリクエストパターン解析部124による処理を追加したものである。
【0049】
本実施形態ではクライアントから受信したリクエストのリストが記憶部管理部140に蓄積記憶される。
【0050】
リクエストパターン解析部124は、受信したリクエストのリストと不正動作情報142から、不正動作が発生したときのリクエストの受信順序のパターンを解析し、リクエストのパターンと不正動作情報との紐付けを行い、対応関係をリクエストパターン情報145に記憶する。例えば、リクエストA→リクエストB→リクエストCといった順序でリクエストがサーバに送信された場合に障害が発生すると解析した場合、これらのリクエストのパターンと不正動作情報の紐付けを行う。
【0051】
ログ出力箇所決定部131は、受信したリクエストのパターンに基づいてログ出力処理の挿入箇所を判断する。ログ出力箇所決定部131は、リクエストパターン情報145に登録されているパターン(例えばリクエストA→リクエストB→リクエストC)と同じパターンのリクエストがあって、不正動作があった場合には、スクリプトのリクエストCに対応する箇所にログ出力処理を挿入する。
【0052】
第2の実施形態と同様に第3の実施形態でもリクエストパターンに応じて、ログ出力処理を埋め込む場合と埋め込まない場合の制御を行う。特定のパターンに限定してログ出力処理の埋め込みを行うことで不要なログ出力をさけることができ、サーバ側の負荷を減らすことができる。
【0053】
第3の実施形態の効果は、不正情報からのみ決定するログ出力箇所よりも効率的にログ出力箇所を決定できることにある。その理由はリクエスト受信パターン解析部により検出されたパターンを利用することで、クライアントの作業の流れに合わせた操作範囲に限定してログ出力処理を埋め込むことができるからである。
【0054】
上述した本発明の実施形態に係る装置は、本装置のCPU(Central Processing Unit)が記憶部に格納された動作プログラム等を読み出して実行することにより実現されてもよく、また、ハードウェアで構成されてもよい。上述した実施の形態の一部の機能のみをコンピュータプログラムにより実現することもできる。
【0055】
また、発明は、ポータル製品への適用、クラウド領域やモバイルスマートフォン領域で提供されるリッチクライアントシステムへの適用が可能である。
【0056】
上記の実施形態の一部又は全部は、以下の付記のようにも記載されうるが、以下には限られない。
【0057】
(付記1)
クライアントが出力したログの履歴と、前記ログから検出されたプログラムの不正動作に関する不正動作情報と、クライアントで実行されるプログラムに挿入されたログ出力処理に関するログ生成情報とを用いて、クライアントから要求されたプログラムにおけるログ出力箇所を動的に制御する
ログ出力制御装置。
【0058】
(付記2)
前記不正動作情報は、不正動作が検出されたログの識別情報を含み、
前記ログ生成情報は、プログラムにおけるログ出力処理が挿入された場所と、挿入されたログ出力処理に対応するログの識別情報とを含み、
前記不正動作情報と前記ログ生成情報とに基づいて、クライアントから要求されたプログラムにおいて不正動作が検出されたログの出力箇所を特定し、前記特定した箇所にログ出力処理を挿入する
付記1に記載のログ出力制御装置。
【0059】
(付記3)
クライアントのユーザ識別情報を取得し、
クライアントのユーザ識別情報を用いて、クライアントから要求されたプログラムのログ出力処理の挿入処理を制御する
付記1又は2に記載のログ出力制御装置。
【0060】
(付記4)
前記ログ出力処理の挿入処理の制御では、ユーザ識別情報に応じて、前記クライアントから要求されたプログラムにログ出力処理を挿入することを決定する
付記3に記載のログ出力制御装置。
【0061】
(付記5)
前記ログ出力処理の挿入処理の制御では、ユーザ識別情報に応じて、前記クライアントから要求されたプログラムのログ出力処理の挿入範囲を変更する
付記3又は付記4に記載のログ出力制御装置。
【0062】
(付記6)
クライアントから受信したリクエストのパターンに基づいて、クライアントから要求されたプログラムのログ出力処理の挿入処理を制御する
付記1から付記5のいずれかに記載のログ出力制御装置。
【0063】
(付記7)
クライアントが出力したログの履歴と、前記ログから検出されたプログラムの不正動作に関する不正動作情報と、クライアントで実行されるプログラムに挿入されたログ出力処理に関するログ生成情報とを用いて、クライアントから要求されたプログラムにおけるログ出力箇所を動的に制御する
ログ出力制御方法。
【0064】
(付記8)
前記不正動作情報は、不正動作が検出されたログの識別情報を含み、
前記ログ生成情報は、プログラムにおけるログ出力処理が挿入された場所と、挿入されたログ出力処理に対応するログの識別情報とを含み、
前記不正動作情報と前記ログ生成情報とに基づいて、クライアントから要求されたプログラムにおいて不正動作が検出されたログの出力箇所を特定し、前記特定した箇所にログ出力処理を挿入する
付記7に記載のログ出力制御方法。
【0065】
(付記9)
クライアントのユーザ識別情報を取得し、
クライアントのユーザ識別情報を用いて、クライアントから要求されたプログラムのログ出力処理の挿入処理を制御する
付記7又は8に記載のログ出力制御方法。
【0066】
(付記10)
前記ログ出力処理の挿入処理の制御では、ユーザ識別情報に応じて、前記クライアントから要求されたプログラムにログ出力処理を挿入することを決定する
付記9に記載のログ出力制御方法。
【0067】
(付記11)
前記ログ出力処理の挿入処理の制御では、ユーザ識別情報に応じて、前記クライアントから要求されたプログラムのログ出力処理の挿入範囲を変更する
付記9又は付記10に記載のログ出力制御方法。
【0068】
(付記12)
クライアントから受信したリクエストのパターンに基づいて、クライアントから要求されたプログラムのログ出力処理の挿入処理を制御する
付記7から付記11のいずれかに記載のログ出力制御方法。
【0069】
(付記13)
コンピュータに、
クライアントが出力したログの履歴と、前記ログから検出されたプログラムの不正動作に関する不正動作情報と、クライアントで実行されるプログラムに挿入されたログ出力処理に関するログ生成情報とを用いて、クライアントから要求されたプログラムにおけるログ出力箇所を動的に制御する処理
を実行させるプログラム。
【0070】
(付記14)
前記不正動作情報は、不正動作が検出されたログの識別情報を含み、
前記ログ生成情報は、プログラムにおけるログ出力処理が挿入された場所と、挿入されたログ出力処理に対応するログの識別情報とを含み、
前記コンピュータに、前記不正動作情報と前記ログ生成情報とに基づいて、クライアントから要求されたプログラムにおいて不正動作が検出されたログの出力箇所を特定し、前記特定した箇所にログ出力処理を挿入する処理を実行させる付記13に記載のプログラム。
【0071】
(付記15)
前記コンピュータに、
クライアントのユーザ識別情報を取得する処理、
クライアントのユーザ識別情報を用いて、クライアントから要求されたプログラムのログ出力処理の挿入処理を制御する処理
を実行させる付記13又は付記14に記載のプログラム。
【0072】
(付記16)
前記ログ出力処理の挿入処理の制御では、ユーザ識別情報に応じて、前記クライアントから要求されたプログラムにログ出力処理を挿入することを決定する
付記15に記載のプログラム。
【0073】
(付記17)
前記ログ出力処理の挿入処理の制御処理では、ユーザ識別情報に応じて、前記クライアントから要求されたプログラムのログ出力処理の挿入範囲を変更する
付記15又は付記16に記載のプログラム。
【0074】
(付記18)
前記コンピュータに、
クライアントから受信したリクエストのパターンに基づいて、クライアントから要求されたプログラムのログ出力処理の挿入処理を制御する処理を実行させる付記13から付記17のいずれかに記載のプログラム。
【0075】
以上、好ましい実施の形態をあげて本発明を説明したが、本発明は必ずしも上記実施の形態に限定されるものではなく、その技術的思想の範囲内において様々に変形し実施することが出来る。
この出願は、2013年3月26日に出願された日本出願特願2013−63593を基礎とする優先権を主張し、その開示の全てをここに取り込む。