(57)【特許請求の範囲】
【請求項１】
ウェブアプリケーションの稼働情報を記録する稼働ログ収集方法であって、
ウェブアプリケーションを読み込む際にイベント発生を検知し前記イベントを取得する
イベント取得手段をブラウザに組込むプログラム初期化手順と、
前記イベント取得手段によって前記イベントを取得した時に、取得したイベントの記録
の要否を判定し、記録が必要と判断されたイベントのログを記録する稼働ログ記録手順と
、
前記稼働ログ記録手順によって記録されたイベントのログを外部に出力する稼働ログ出
力手順と、
を含み、
前記稼働ログ記録手順は、該稼働ログ記録手順によって記録されたログに関するイベントと異なるイベント、データ更新の有無を判定しデータ更新の有るイベント、及び、前記イベントを契機としたスクリプト実行の有無を判定しスクリプト実行の有るイベントのログを記録することを特徴とする稼働ログ収集方法。
【請求項２】
前記プログラム初期化手順は、
取得対象となる前記イベントの種類が保持された取得対象イベントリストに基づいて、
前記取得対象イベントリストに保持された前記イベントの種類を取得対象とし、
さらに、
前記稼働ログ記録手順において記録されたイベントの種類を稼働情報として記録する稼
働情報生成手順と、
前記稼働情報生成手順によって記録された稼働情報を
外部に出力する稼働情報出力手順と、
前記稼働情報出力手順から出力された１以上の前記稼働情報に基づいて、前記取得対象
イベントリストを生成する取得対象イベントリスト設定手順と、
を含むことを特徴とする請求項１に記載の稼働ログ収集方法。
【請求項３】
請求項２に記載の稼働ログ収集方法であって、
前記取得対象イベントリスト設定手順は、
１以上の前記稼働情報の中に少なくとも１つ含まれるイベントの種類を含むリストを前
記取得対象イベントリストの初期値とし、
前記稼働情報出力手順から出力された１以上の前記稼働情報に基づいて、前記取得対象
のイベントの種類を拡充することを特徴とする稼働ログ収集方法。
【請求項４】
ウェブアプリケーションの稼働ログを記録する稼働ログ収集装置であって、
ウェブアプリケーションを読み込む際にイベント発生を検知し前記イベントを取得する
イベント取得手段をブラウザに組込むプログラム初期化部と、
前記イベント取得手段によって前記イベントを取得した時に、取得したイベントの記録
の要否を判定し、記録が必要と判定されたイベントのログを記録する稼働ログ記録部と、
前記稼働ログ記録部において記憶されたイベントのログを外部に出力する稼働ログ出力
部と、を備え、
前記稼働ログ記録部は、該稼働ログ記録手順によって記録されたログに関するイベントと異なるイベント、データ更新の有無を判定しデータ更新の有るイベント、及び、前記イベントを契機としたスクリプト実行の有無を判定しスクリプト実行の有るイベントのログを記録することを特徴とする稼働ログ収集装置。
【請求項５】
請求項４に記載の稼働ログ収集装置であって、
前記プログラム初期化部は、
取得対象となる前記イベントの種類を保持する取得対象イベントリストに基づいて前記
取得対象イベントリストに保持された前記イベントの種類を取得対象とし、
さらに、前記稼働ログ記録部において記録されたイベントの種類を稼働情報として記録
する稼働情報生成部と、
前記稼働情報生成部で記録された前記稼働情報を外部に出力する稼働情報出力部と、
を備えることを特徴とする稼働ログ収集装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ウェブアプリケーションの稼働ログ収集方法および装置に係わり、特に稼働ログ収集量を削減するための方法および装置に関するものである。
【背景技術】
【０００２】
近年、金融や小売業など様々な業種でウェブアプリケーションによるオンラインサービスが普及している。オンラインサービスを実施する企業は年々増加傾向にあり、ウェブアプリケーションは企業活動にとって欠かせないものとなった。オンラインサービスを実施する理由のひとつに、広範囲に新規顧客を獲得できるということがある。どの企業も時間や場所に捕らわれずサービスすることができ、ユーザにも選択の幅が広がっている。
【０００３】
このような背景においては、サービス品質が重要となる。例えば、ウェブアプリの応答時間が遅い、サービスメニューが見つけにくいというように、サービス品質が低い場合、ユーザは別のオンラインサービスへと移動してしまい、ビジネスの機会を喪失してしまうこととなる。よって、企業はサービス品質の維持、向上を行う必要がある。サービス品質の維持、向上には、サービス品質をモニタリングする施策と、サービス品質が低い場合すぐに高めるための施策が必要となる。
本発明は、サービス品質をモニタリングする施策に係わる。
【０００４】
サービス品質をモニタリングする施策には、ウェブアプリを提供するウェブアプリサーバのアクセスログを収集して分析する方法や、クライアントのウェブアプリ稼働ログを収集して分析する方法などがある。本発明は、後者の方法のなかでも特に、クライアントのウェブアプリ稼働ログを収集し、サービス提供者側でクライアントの画面を再生し、ユーザがどのような操作をしたか、また、アプリケーションがどのように応答したかを分析する、稼働ログ収集再生装置に係わる。
【０００５】
稼働ログ収集再生装置は、画面の再生に必要となる操作ログ収集において、クライアントに操作記録スクリプトを配置し、アプリケーション操作のイベントメッセージを取得して稼働ログを生成、収集する。このとき、単純に全てのイベントの稼働ログを収集してしまうと、ログ量が増大し、分析を行うサービス提供者の記録媒体を圧迫するという問題が生じてしまう。
【０００６】
そこで収集するログの量を削減する従来技術として、分析を行う者が対象となるシステムにログ収集ポリシを設定し、収集するログのイベントの種類をカスタマイズできる技術(例えば特許文献１)が提案されている。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００９-２５９７７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
特許文献１に記載の従来技術は、クライアントのウェブブラウザ上で起きる様々な種類のイベントを、ログとして記録するか否かを判断するフラグを立てている。この技術をクライアント画面の再生に用いる場合、以下の問題が発生する。クライアント画面を再生するためには、何らかの形で画面が変更されるユーザの操作やアプリケーションの応答に関わるイベントは全て収集しなければならない。ここで、クライアント画面を再生するために収集が必要なイベントは全数十〜数百種の中の一部である。しかし、クライアント画面を再生するために必要なイベントの種類は、アプリケーションごとに異なる。そのため、分析を行う者は、全数十〜数百種のイベントのうちどのイベントを収集しなければならないかを正確に把握することが難しい。その結果、分析を行う者は、アプリケーションの実装から必要ないと判断できるイベント以外のイベントは、全て収集すると判断するしかなくなり、ログ量の削減効果は見込めない。また、一般にウェブブラウザで発生したイベントの取得のために、イベントの発生を検知し、記録するプログラム（イベントハンドラ）を接続するが、これを全てのイベントの発生に対して動作させるとクライアントの負荷が増加し、ユーザの操作を妨げる場合がある。
【０００９】
よって、クライアント画面の再生に必要なイベントの種類を自動的に判断すること、及び、画面の再生に必要十分な量のログを取得・収集する手段の確立が課題となる。画面の再生において必要十分な量とは、何らかの形で画面が変更されるユーザの操作やアプリケーションの応答に関わるイベントを記録した場合の量のことである。
【課題を解決するための手段】
【００１０】
ウェブブラウザがアプリケーションを開始するときにユーザ操作やアプリケーション応答に係わるイベントを取得するイベントハンドラを接続する。イベントハンドラがイベントの発生を検知したとき、過去に記録したことがないイベントであった場合はログとして記録する。その他のイベントであった場合、スクリプトの実行があった場合か、データが変更されていた場合はログとして記録する。
また、上記におけるイベントハンドラの接続において、あらかじめ必要となるイベントの種類をポリシとして登録しておき、そのイベントに対してのみイベントの発生検知や記録を実施する。さらに、分析の対象となるアプリケーションで過去に記録したイベントの種類の一覧を稼働情報として取得し、ポリシの初期値とする。
【発明の効果】
【００１１】
本発明によれば、収集ログ量を削減しつつ、クライアントの操作を再生する上で必要十分な量のログの取得・収集が可能となる。また、ユーザは、ログ記録要否の判断のログ収集ポリシを、少ない手間で正確に設定できる。
【図面の簡単な説明】
【００１２】
【図１】本発明が対象とするウェブシステムに関する基本的な構成を示すブロック図である。
【図２】本発明の第１の実施形態の稼働ログ収集装置の構成機能の一例を示すブロック図である。
【図３】図２のプログラム初期化部の処理の一例を表すフローチャートである。
【図４】図２の稼働ログ記録部の処理の一例を表すフローチャートである。
【図５】図２の稼働ログ記録部において、稼働ログを生成するために利用されるイベントログの一例である。
【図６】図２の稼働ログ記録部によって生成された稼働ログの一例である。
【図７】図２の稼働ログ読出部における、稼働ログをウェブサーバへ送信するために稼働ログを読み出す処理の一例を表すフローチャートである。
【図８】本発明の第２の実施形態の稼働ログ収集装置の構成機能の一例を示すブロック図である。
【図９】図８の稼働ログ収集コードを生成するための、ログ収集ポリシのテーブル構成の一例を表した図である。
【図１０】図８の稼働ログ収集コード設定プログラムにおける、ログ収集ポリシを設定する処理の一例を表したフローチャートである。
【図１１】図８のスクリプト選択挿入プログラムにおける、アプリケーションコードに稼働ログ収集コードを挿入する処理の一例を表したフローチャートである。
【図１２】図９のログ収集ポリシを設定するためのユーザーインタフェースの一例を表した図である。
【図１３】図８の稼働ログ記録/稼働情報記録部の処理の一例を表したフローチャートの一例である。
【図１４】図８のアプリ稼働情報生成部から生成されるアプリ稼働情報のテーブル構成の一例を表した図である。
【図１５】図８のアプリ稼働情報生成部において、稼働情報を更新する処理の一例を表したフローチャートである。
【図１６】図８のアプリ稼働情報読出部において、アプリ稼働情報をウェブサーバへ送信するためにアプリ稼働情報を読み出す処理の一例を表したフローチャートである。
【発明を実施するための形態】
【００１３】
以下、本発明の実施形態について図１〜図１６を順に参照して説明する。
【００１４】
≪第１の実施形態≫
図１は、本発明が対象とするウェブアプリケーションを実行するシステムのハードウェア構成と、ソフトウェア構成の例を示すシステム構成図である。
【００１５】
ハードウェアは、クライアント装置１００、ウェブサーバ装置１２０、これらの装置を接続するネットワーク１１０から構成される。なお、各装置のハードウェアは同一のハードウェアで実現されても、複数台で構成されてもよい。また、１台のウェブサーバ装置に対して、接続するクライアント装置は複数台でもよい。
【００１６】
クライアント装置１００、ウェブサーバ装置１２０は、すべてプロセッサ（１０４、１２４）、メモリ（１０６、１２６）、入力装置（１０２、１２２）、出力装置（１０１、１２１）、ネットワークインタフェース（１０３、１２３）、記憶装置(１０５、１２５)をもち、相互に接続されている。ただし、一部の装置ではこれらの構成要素の一部が欠けてもよい。また、記憶装置１０５はメモリ１０６に含まれていてもよいし、記憶装置１２５はメモリ１２６に含まれていてもよい。
【００１７】
入力装置１０２には、キーボードやマウスなどが接続され、プログラムの実行や停止の指示を行うのに利用される。出力装置１０１にはモニタやプリンタなどが接続され、プログラムの実行結果を表示するのに利用される。プロセッサ１０４は、メモリ１０６からプログラムを読み込んで処理を実行する。ネットワークインタフェース１０３は、クライアント装置１００と外部の装置とを接続するために利用される装置であり、ネットワーク１１０を介してウェブサーバ装置１２０と、ウェブページのリクエストや、レスポンスなどの送受信を行う。
【００１８】
クライアント装置１００のメモリ１０６には、ブラウザプログラム２３３が格納されている。また、ブラウザプログラム２３３の中には、スクリプトエンジンプログラム２３４が格納されている。これらのプログラムは、お互いに包含関係にあっても、独立していてもよい。これらのプログラムは、プロセッサ１０４に読み込まれて実行される。
【００１９】
ブラウザプログラム２３３は、ウェブページをリクエストしたり、リクエストしたウェブページのレスポンスを受信し、レスポンスを解釈して表示画面を生成する機能などを持つ。スクリプトエンジンプログラム２３４は、ウェブページのレスポンスに含まれるスクリプトコードを解釈してスクリプトコードに書かれている処理をプロセッサ１０４で実行する機能を持つ。
【００２０】
ウェブサーバ装置１２０のメモリ１２６には、ウェブサーバプログラム２０３が格納されている。また、ウェブサーバプログラム２０３の中には、アプリケーションコード２０２が含まれている。これらのプログラムおよびコードは、お互いに包含関係にあっても、独立していてもよい。これらのプログラムおよびコードは、プロセッサ１２４に読み込まれて実行される。
【００２１】
ウェブサーバプログラム２０３は、クライアント装置１００などの外部の装置からのリクエストに応じてウェブページのレスポンスを返信する機能を持つ。アプリケーションコード２０２はクライアント装置１００のブラウザプログラム２３３で実行されるコードであり、ウェブサーバプログラム２０３が返信するレスポンスの中に含まれる。
【００２２】
記憶装置１０５にはクライアント装置１００とウェブサーバ装置１２０の間で送受信される稼働ログなどが保管されている。
【００２３】
出力装置１２１、入力装置１２２、プロセッサ１２４、ネットワークインタフェース１２３は、記憶装置１２５は、クライアント装置１００にある同名の装置と同じ機能を持つ。
【００２４】
図２は、イベントログからクライアントの操作を再生する上で必要十分な量のログを選択送信するためのソフトウェア構成を示した構成図である。
【００２５】
ウェブサーバ装置１２０のメモリ１２６には、ウェブサーバプログラム２０３、アプリケーションコード２０２の他に、スクリプト挿入プログラム２００が格納されている。また、スクリプト挿入プログラム２００の中には、稼働ログ収集コード２０１が含まれている。これらのプログラムおよびコードは、お互いに包含関係にあっても、独立していてもよい。
【００２６】
スクリプト挿入プログラム２００は、ウェブサーバプログラム２０３からアプリケーションコード２０２を含むレスポンスを受信して、アプリケーションコード２０２に対して稼働ログ収集コード２０１を挿入した後、ウェブアプリ送信部２１０を介してクライアントへレスポンスを返信する機能を持つ。稼働ログ収集コード２０１は、クライアント装置１００上でイベントのログを記録したり、記録したログをウェブサーバ装置１２０に送信する機能を持つ。
【００２７】
ウェブサーバ装置１２０のネットワークインタフェース１２３は、稼働ログ受信部２１１、ウェブアプリ送信部２１０から構成される。
【００２８】
稼働ログ受信部２１１はクライアント装置１００の稼働ログ送信部２２１からネットワーク１１０を介して稼働ログ２５０を受信し、記憶装置１２５へと保管する機能を持つ。ウェブアプリ送信部２１０はスクリプト挿入プログラム２００からウェブアプリのレスポンスを受信し、ネットワーク１１０を介してクライアント装置１００のウェブアプリ受信部２２０へと送信する機能を持つ。
【００２９】
クライアント装置１００のメモリ１０６には、ウェブページのレスポンス受信後、ブラウザプログラム２３３、スクリプトエンジンプログラム２３４の他、稼働ログ収集コード２０１が格納されている。稼働ログ収集コード２０１は、プログラム初期化部２３０、稼働ログ記録部２３１、稼働ログ読出部２３２によって構成されており、それぞれ図１のプロセッサ１０４で実行される。なお、これらのプログラムは同等の役割を持つ複数のプログラムによって構成されてもよい。
【００３０】
プログラム初期化部２３０は、ブラウザプログラム２３３上で発生するイベントを取得してイベントログを生成する処理と、イベントドリブンのスクリプトの実行を取得する処理をスクリプトエンジンプログラム２３４に付与する機能を持つ。ここでいうイベントとは、例えばマウスのクリックやウェブページ上での値の入力といった、アプリケーション実行上の出来事である。この機能は、ブラウザプログラム２３３により、ウェブサーバプログラム２０３からのレスポンスに含まれるコンテンツが表示される直前に一度だけ実行される。
【００３１】
稼働ログ記録部２３１は、ブラウザプログラム２３３上で発生したイベントのうち、データ更新の有無を判定しデータ更新の有るイベント、またはスクリプト実行の有無を判定しスクリプト実行の有るイベントのログのみを稼働ログ２５０として、時系列順に記憶装置１０５へと記録する機能を持つ。なお、稼働ログ収集コード２０１はスクリプトエンジンプログラム２３４によって実行可能なスクリプトコードとして実現されており、ブラウザプログラム２３３でイベントが発生するごとに実行される。
【００３２】
稼働ログ読出部２３２は、記録装置１０５に格納されている稼働ログ２５０を全て読み出し、稼働ログ送信部２２１へと渡す機能を持つ。送信された稼働ログ２５０はウェブサーバ装置１２０上の記憶装置１２５に記録される。
【００３３】
クライアント装置１００のネットワークインタフェース１０３は、稼働ログ送信部２２１、ウェブアプリ受信部２２０から構成される。
【００３４】
稼働ログ送信部２２１は稼働ログ読出部２３２から稼働ログ２５０を受信し、ネットワーク１１０を介してウェブサーバ装置１２０の稼働ログ受信部２１１へと送信する機能を持つ。ウェブアプリ受信部２２０はウェブサーバ装置１２０のウェブアプリ送信部２１０からネットワーク１１０を介してウェブアプリのレスポンスを受信し、ブラウザプログラム２３３へと渡す機能を持つ。
【００３５】
図３はプログラム初期化部２３０の処理フローを示した図である。
【００３６】
プログラム初期化部２３０では、ステップS３００、S３０１、S３０４、S３０５のとおり、稼働ログ収集コードに記載のDOM（Ｄｏｃｕｍｅｎｔ  Ｏｂｊｅｃｔ  Ｍｏｄｅｌ）要素全てに対して、また、稼働ログ収集コードに記載のイベント全てに対して、ステップS３０２、S３０３を繰り返す。
【００３７】
ステップS３０２ではDOM要素のイベントに対してID５０１、時刻５０２、イベント５０３、対象５０４、データ５０５を記録するイベントハンドラを付与する。イベントハンドラの付与は、例えばDOMオブジェクトが持つ、イベントハンドラを付与する関数により実現できる。
【００３８】
ステップS３０３では、DOM要素のイベントに対するスクリプト付与関数をオーバーライドする。スクリプト付与関数のオーバーライドは、例えばDOMオブジェクトが持つ、アタッチイベント関数やアッドイベントリスナー関数を同名の関数で上書きすることにより実現できる。これにより、アプリケーションがイベントドリブンのスクリプト動作を定義する際に、定義した動作が実行されると何らかのメッセージを発生させる処理を追加することが可能となり、その後のアプリケーション動作において、イベントが発生した際に、イベントドリブンのスクリプト実行があったかどうかを判断することが可能となる。
【００３９】
図４は稼働ログ記録部２３１の処理フローを示した図である。
【００４０】
まず、ステップS４００において、発生したイベントを取得してイベントログのレコードを生成する。そして、ステップS４０１において、取得したイベントが画面遷移イベントかどうかを判別する。なお、画面遷移イベントとは、当該イベントが発生することで、ウェブサーバプログラム２０３へのリクエスト送信やウェブサーバプログラム２０３からのレスポンス受信が発生するイベントを表す。ここで、判別するイベントは、画面遷移イベントでなくてもよく、マウス操作イベントやキー操作イベントといったいずれかの
イベントであればよい。このとき、画面遷移イベントで判別すると、メモリ１０６に格納されているイベントログのレコードが、ページ遷移により解放されて失われることを防ぐことができる。また、ステップＳ４１０への分岐は画面遷移イベントの取得ではなく、稼働ログの記録を開始してから、一定時間経過するごとに分岐してもよい。
【００４１】
発生したイベントが画面遷移イベントであった場合、ステップS４１０において稼働ログ送信部２２１を呼び出し、本処理を終える。
【００４２】
発生したイベントが画面遷移イベントではなかった場合、ステップS４０２において、取得したイベントと同名のイベントを持つレコードが稼働ログ２５０に存在するかどうかを判別する。この判別により、画面の再生において必要となる、各々のイベントが最初に発生した時刻をレコードとして残すことができる。取得したイベントと同名のイベント名５０３を持つレコードが稼働ログ２５０に存在しない場合、ステップS４０６において稼働ログ２５０にレコードを作成した後、本処理を終える。
【００４３】
取得したイベントと同名のイベントを持つレコードが稼働ログ２５０に存在した場合、ステップS４０３において、当該同名のイベントを持つレコードの中で直近のレコードを取得する。
【００４４】
次にステップS４０４において、取得したレコードのデータ５０５とステップS４００で生成したレコードのデータ５０５が等しいか判別する。このとき、データが等しいかどうかの判別は、値が少しでも異なれば等しくないと判別してもよいし、一定以上差が発生すると等しくないと判別してもよい。実施例では、mouseover,mousemove,mouseoutイベントのデータとして、イベント発生時のマウス座標をx座標,ｙ座標の形式で記録している。これらのイベントについては座標あるいはy座標が10以上異なる場合を等しくないと判別する。また、focus,cookie,userdataイベントのデータは少しでも異なれば等しくないと判別する。この判別により、画面の再生において必要となる、データの変更があった時刻をレコードとして残すことができる。取得したレコードのデータ５０５とステップS４００で生成したレコードのデータ５０５が等しくない場合は、ステップS４０６において稼働ログにレコードを作成した後、本処理を終える。
【００４５】
取得したレコードのデータ５０５とステップS４００で生成したレコードのデータ５０５が等しい場合は、ステップS４０５において、取得したイベントドリブンのスクリプト実行があったかどうかを判別する。イベントドリブンのスクリプト実行有無の判断は、図３のステップＳ３０３において、あらかじめ定義しておいたメッセージを取得することで実現できる。この判別により、画面の再生において必要となる、スクリプト動作の契機となるイベント発生があった時刻をレコードとして残すことができる。取得したイベントドリブンのスクリプト実行が無かった場合、ステップS４２０において、ステップS４００で生成したレコードを削除し、本処理を終える。
【００４６】
取得したイベントドリブンのスクリプト実行があった場合、ステップS４０６において稼働ログ２５０にレコードを作成する。
以上のように、ステップＳ４０２、Ｓ４０４、Ｓ４０５の判別をすることで、Ｓ４２０において画面の再生において必要ないレコードを消去することができる。画面の再生において必要ないレコードとは、既に記録した種類のイベントであり、かつデータの変更もなく、かつスクリプト動作の契機となっていないイベントの発生により、作成されるレコードのことである。既に稼働ログに記録した種類のイベントであるかをＳ４０２で、さらに、既に稼働ログに記録した種類のイベントのうち、データの変更がないイベントであることをＳ４０４で、さらに、既に稼働ログに記録した種類のイベントかつデータの変更がないイベントのうち、スクリプト動作の契機となっていないイベントであることをＳ４０５で判定している。これにより、ウェブサーバ装置に送信するためにクライアント装置で記憶するログ量を削減しつつも、ウェブサーバ装置はクライアントの操作を再生することができる。
【００４７】
図５は、稼働ログ記録部２３１によって一時的に生成されるイベントログの一例を示した図である。イベントログはイベントが発生するごとにレコード５１１〜５２６に示すようなレコードとして生成される。各レコード５１１〜５２６はＩＤ５０１、時刻５０２、イベント５０３、対象５０４、データ５０５をカラムとして持つ。
【００４８】
ＩＤ５０１はイベントログの各レコードを一意に識別するものである。図中では３桁の整数値を用いているが、一意に識別可能であれば文字列や記号でもよい。
【００４９】
時刻５０２はイベントが発生した時刻を表したものである。図中ではhh:mm:ssの表現形式を用いているが、時刻が正しく判別できるのであれば、他の表現形式でもよい。
【００５０】
イベント名５０３は発生したイベントの名称を表したものである。イベント名が正しく判別できるのであれば他の表現形式でもよい。図４の説明で同名のイベントと説明しているが、図５において、例えば、５１２、５１５、５１６、５１７、５１８、５２１、５２２、５２３、５２４、５２５は同名のイベントである。
【００５１】
対象５０４は、イベントが発生した対象を表したものである。図中では、ウェブページのDOMやデータを例として挙げているが、他の対象を記録してもよいし、対象が正しく判別できるのであれば、他の表現形式でもよい。
【００５２】
データ５０５は、イベントに付随する入出力データを表したものである。図中では、イベントが発生した座標やイベントによって変更されたデータを例として挙げているが、他の入出力データを記録してもよいし、データが正しく判別できるのであれば他の表現形式でもよい。
【００５３】
図６は、図４のフローにより、イベントログからクライアントの操作を再生する上で必要十分な量のログを選択した後に生成される稼働ログ２５０の一例を示した図である。
【００５４】
図６中のID５０１、時刻５０２、イベント名５０３、対象５０４、データ５０５は、図５中の同番号と同様の事柄を示している。図の例は、図５に示した５１１〜５２６のレコードから、図４のフローにより、５１１、５１２、５１３、５１４、５１５、５１９、５２３、５２４、５２６のレコードが選択された例である。これにより収集ログ量が削減されていることがわかる。
【００５５】
図５の５１１は、図４のＳ４０２において同名のイベントを持つレコードfocusが図６の稼働ログ２５０に存在しないと判断され、記録される。図５の５１２は、図４のＳ４０２において同名のイベントを持つレコードmouseoverが図６の稼働ログ２５０に存在しないと判断され、記録される。図５の５１３は、図４のＳ４０２において同名のイベントを持つレコードcookieが図６の稼働ログ２５０に存在しないと判断され、記録される。図５の５１４は、図４のＳ４０２において同名のイベントを持つレコードuserdataが図６の稼働ログ２５０に存在しないと判断され、記録される。図５の５１５は、図４のＳ４０２において同名のイベントを持つレコードが図６の稼働ログ２５０に存在しないと判断され、記録される。
【００５６】
図５の５１６〜５１８は、図５のＳ４０２において同名のイベントmousemoveを持つレコードが図６の稼働ログ２５０の５１５に存在すると判断され、Ｓ４０４において５１５と等しいデータを持つと判断され、Ｓ４０５においてイベントドリブンのスクリプト実行はないと判断され、消去される。
【００５７】
図５の５１９は、図５のＳ４０２において同名のイベントcookieを持つレコードが図６の稼働ログ２５０の５１３に存在すると判断され、Ｓ４０４において５１３とデータが等しくないと判断され、記録される。図５の５２０は、図５のＳ４０２において同名のイベントuserdataを持つレコードが図６の稼働ログ２５０の５１４に存在すると判断され、Ｓ４０４において５１４と等しいデータを持つと判断され、Ｓ４０５においてイベントドリブンのスクリプト実行はないと判断され、消去される。図５の５２１、５２２は、図５のＳ４０２において同名のイベントmousemoveを持つレコードが図６の稼働ログ２５０の５１５に存在すると判断され、Ｓ４０４において５１５と等しいデータを持つと判断され、Ｓ４０５においてイベントドリブンのスクリプト実行はないと判断され、消去される。
【００５８】
図５の５２３は、図５のＳ４０２において同名のイベントmousemoveを持つレコードが図６の稼働ログ２５０の５１５に存在すると判断され、Ｓ４０４において５１５と等しいデータを持つと判断され、Ｓ４０５においてイベントドリブンのスクリプト実行はあると判断され、記録される。この例は、時刻12:30:08にmousemoveイベントドリブンのスクリプト実行があった場合を想定した。
【００５９】
図５の５２４は、図４のＳ４０２において同名のイベントを持つレコードmouseoutが図６の稼働ログ２５０に存在しないと判断され、記録される。図５の５２５は、図５のＳ４０２において同名のイベントmouseoverを持つレコードが図６の稼働ログ２５０の５１２に存在すると判断され、Ｓ４０４において５１２と等しいデータを持つと判断され、Ｓ４０５においてイベントドリブンのスクリプト実行はないと判断され、消去される。
【００６０】
図５の５２６は、図４のＳ４０２において同名のイベントを持つレコードmouseoutが図６の稼働ログ２５０に存在しないと判断され、記録される。
【００６１】
図７は稼働ログ読出部２３２の処理フローを示した図である。
【００６２】
まず、ステップS７００において、稼働ログ２５０の全レコードを取得する。次に、ステップS７０１において、稼働ログ送信部２２１を介して、取得したレコードをウェブサーバ装置１２０へ送信する。最後に、ステップS７０２において稼働ログ２５０の全レコードを削除する。
【００６３】
以上が本発明の第１の実施例の処理の一例である。
【００６４】
イベントを取得した時に取得したイベントの記録の要否を判定し、必要なイベントのみを稼働ログとして記録することで、ログ量の削減が可能となる。
【００６５】
≪第２の実施形態≫
図８は、ログを収集するためのポリシを設定した上で、イベントログからクライアントの操作を再生する上で必要十分な量のログを選択送信するためのソフトウェア構成を示した構成図である。
【００６６】
図１と同名の構成要素は、図１に記載の機能と同様の機能を持つ。
【００６７】
ウェブサーバ装置１２０のメモリ１２６には、ウェブサーバプログラム２０３、アプリケーションコード２０２、操作ログ収集コード２０１の他に、操作ログ収集コード設定プログラム８００、スクリプト選択挿入プログラム８０１が格納されている。
【００６８】
操作ログ収集コード設定プログラム８００は、記憶装置１２５に格納されているログ収集ポリシ８５０をもとに、ポリシ設定画面を生成して図１の出力装置１２１で表示し、図１の入力装置１２２の設定入力を受け付けて、ログ収集ポリシ８５０を更新する機能を持つ。
【００６９】
スクリプト選択挿入プログラム８０１は、ウェブサーバプログラム２０３からウェブアプリのレスポンスを受信して、レスポンスからDOM要素の情報を生成する機能およびログ収集ポリシ８５０で収集対象と記載している、DOM要素とイベントの組全てに対するイベントハンドラを生成した後に、ウェブアプリのレスポンスへ挿入し、ウェブアプリ送信部２１０を介してクライアント装置１００へ送信する機能を持つ。
【００７０】
ウェブサーバ装置１２０のネットワークインタフェース１２３は、ウェブアプリ送信部２１０、稼働ログ受信部２１１の他にアプリ稼働情報受信部８１０から構成される。
【００７１】
アプリ稼働情報受信部８１０は、クライアント装置１００のアプリ稼働情報送信部８２０からネットワーク１１０を介してアプリ稼働情報８４０を受信し、記憶装置１２５へと保管する機能を持つ。
【００７２】
クライアント装置１００のメモリ１０６には、ウェブページのレスポンス受信後、ブラウザプログラム２３３、スクリプトエンジンプログラム２３４、稼働ログ収集コード２０１が格納されている。
【００７３】
稼働ログ収集コード２０１は、プログラム初期化部２３０、稼働ログ読出部２３２の他、アプリ稼働情報生成部８３０、稼働ログ/稼働情報記録部８３１、アプリ稼働情報読出部８３２によって構成されており、それぞれ図１のプロセッサ１０４で実行される。なお、これらのプログラムは同等の役割を持つ複数のプログラムによって構成されてもよい。
【００７４】
アプリ稼働情報生成部８３０は、ブラウザプログラム２３３上で発生したイベントのうち、データ更新が有ると判定されたイベント、またはイベントドリブンのスクリプト実行があると判定されたイベントについて、判定結果をアプリ稼働情報８４０として記録する機能を持つ。
【００７５】
稼働ログ/稼働情報記録部８３１はブラウザプログラム２３３上で発生したイベントのうち、データ更新の有無を判定しデータ更新が有るイベント、またはイベントドリブンのスクリプト実行の有無を判定しスクリプト実行があるイベントのログを稼働ログ２５０として、時系列順に記憶装置１０５へと記録する機能およびデータ更新が有る、またはイベントドリブンのスクリプト実行が有ると判定した場合にアプリ稼働情報生成部８３０を呼び出す機能を持つ。
【００７６】
アプリ稼働情報読出部８３２は、記録装置１０５に格納されているアプリ稼働情報８４０を読み出し、アプリ稼働情報送信部８２０へと渡す機能を持つ。アプリ稼働情報送信部８２０により送信されたアプリ稼働情報８４０はウェブサーバ装置１２０上の記憶装置１２５に記録される。
【００７７】
クライアント装置１００のネットワークインタフェース１０３は、ウェブアプリ受信部２２０、稼働ログ送信部２２１の他に、アプリ稼働情報送信部８２０から構成される。
【００７８】
アプリ稼働情報送信部８２０は、アプリ稼働情報読出部８３２からアプリ稼働情報８４０を受信し、ネットワーク１１０を介してウェブサーバ装置１２０のアプリ稼働情報受信部８１０へと送信する機能を持つ。
【００７９】
図９は、稼働ログ収集コード設定プログラム８００によって更新されるログ収集ポリシ８５０の一例を示した図である。
【００８０】
ログ収集ポリシ８５０はポリシを表すレコード９１１〜９１８の集合であり、各レコード９１１〜９１８はページid９０１、イベント名９０２、対象９０３、収集フラグ９０４をカラムとして持つ。
【００８１】
ページid９０１は稼働ログ収集対象となるウェブページを一意に識別するものである。図中では３桁の整数値を用いているが、一意に識別可能であれば文字列や記号でもよい。この値は、例えばウェブページのURLのハッシュ値を用いて実現できる。
【００８２】
イベント名９０２は収集対象となるイベントの名称である。イベント名が正しく判別できるのであれば他の表現形式でもよい。
【００８３】
対象９０３はイベントが発生する対象を表したものである。図中では、ウェブページのDOMやデータを例として挙げているが、イベントが発生する他の対象としてもよいし、対象が正しく判別できるのであれば、他の表現形式でもよい。
【００８４】
収集フラグ９０４は、スクリプト選択挿入プログラム８０１がイベントハンドラを付与するDOM要素とイベントの組を選択する際に用いられる真偽値である。図中では、”ｔｒｕｅ”または”ｆａｌｓｅ”の値を例示しているが、真偽値が判定できれば他の表現形式であってもよい。
【００８５】
図１０は、稼働ログ収集コード設定プログラム８００の処理フローを示した図である。
【００８６】
稼働ログ収集コード設定プログラム８００では、まずステップS１０００、S１００３のとおり、アプリ稼働情報８４０の全てのレコードに対して、ステップS１００１、S１００２を繰り返す。
【００８７】
ステップS１００１では、アプリ稼働情報８４０のレコードを1行読み込む。ステップS１００２では、ページid９０１へページid１４０１の値を、イベント名９０２へイベント名１４０２の値を、対象９０３へ対象１４０３の値を、収集フラグ９０４へ稼働フラグ１４０４の値をそれぞれ格納したレコードを追加する。次に、S１００４において、ログ収集ポリシ８５０に格納されているレコードをもとに、ポリシ設定画面１１００を生成し、出力装置１２１で出力する。最後に、入力装置１２２の設定入力を受け付け、ログ収集ポリシ８５０の収集フラグ９０４の値を更新する。アプリ稼働情報８４０を用いてポリシ設定画面１１００を生成することにより、ユーザは、クライアント装置で稼働しているアプリケーションの中から、クライアント操作を再生するために収集するログ収集ポリシを設定することができる。
【００８８】
図１１は、スクリプト選択挿入プログラム８０１の処理フローを示した図である。
【００８９】
まず、ステップS１１０１においてウェブサーバプログラム２０３からアプリケーションのレスポンスを受け取りDOM要素の情報を生成する。この処理は、例えばDOMオブジェクトが持つノード取得関数により実現することができる。そして、生成された全てのDOM要素に対して、ステップS１１０２、S１１０７のとおり以下の処理を繰り返す。
【００９０】
まず、ステップS１１０３においてログ収集ポリシ８５０からDOM要素と等しい対象９０３を持つレコードを抽出する。次に抽出した全てのレコードに対しステップS１１０４、S１１０６のとおりステップS１１０５の処理を繰り返す。ステップS１１０５では、イベント名９０２のイベントに対してID５０１、時刻５０２、イベント５０３、対象５０４、データ５０５を記録するイベントハンドラを生成する。対象５０４を記録する処理は、例えばイベントが持つターゲットパス取得関数を用いれば実現できる。データ５０５を記録する処理は、例えばイベントが持つプロパティを参照すれば実現できる。最後に、ステップS１１０８において、生成したイベントハンドラをアプリケーションのレスポンスに挿入し、ウェブアプリ送信部２１０を介してクライアント装置１００へと送信する。 
これにより、ログ収集ポリシで指定されたイベントのログをクライアント装置が収集する。  図１２はポリシ設定画面１２００であり、ログ収集ポリシ８５０を設定するユーザーインタフェースを示す図である。
【００９１】
ポリシ設定画面１２００はポリシ設定を行うための各ユーザーインタフェースを集約したウィンドウである。レコード１２２１〜レコード１２２８までの各レコードはログ収集ポリシの各レコードと同様である。イベント１２１１はイベント名９０２を、対象１２１２は対象９０３を示している。また、過去発生１２１３は、イベント名１２１１で表されるイベントが、対象１２１２で表される対象に対して発生し、当該イベントが図１３のステップS１３０６で稼働ログとして保存されたかどうかを示す真偽値である。例えば、レコード１２２４は、過去に”ｍｏｕｓｅｏｖｅｒ”というイベントが”ＢＵＴＴＯＮ［１］”を対象に発生し、稼働ログとして記録されたことを示している。収集設定１２１４は、本画面における設定以降に設定される収集フラグ９０４の値を示している。例えば、レコード１２２４では収集設定１２１４は“○”の値を示しており、本設定終了後は収集フラグ９０４が“ｔｒｕｅ”となることを示している。なお、ここでは過去発生１２１３、収集設定１２１４の表現形式として“○”、“×”を用いているが、真偽値が判定できれば他の表現形式でも良い。
【００９２】
確認表示１２０４は、収集設定１２１４の値がユーザの入力により変更される場合に、変更実施の確認を求める文字列である。ユーザは、本文字列が提示された後、実際に変更を行う場合は確定ボタン１２０１を、変更を行わない場合はキャンセルボタン１２０２を押下すればよい。なお、確認表示１２０４、確定ボタン１２０１、キャンセルボタン１２０２は、ユーザに確認を求め承諾を得る機能があれば他の表現形式でもよい。また、確認を求める機能が不要な場合は、確認表示１２０４、確定ボタン１２０１、キャンセルボタン１２０２がなくてもよい。
【００９３】
ユーザがログ収集ポリシ８５０の設定を終える場合、クローズボタン１２３０、あるいは終了ボタン１２０３を押下すればよい。クローズボタン１２３０、終了ボタン１２０３は同様の機能を有するのであれば、他の形式でも良い。
【００９４】
図１３は稼働ログ/稼働情報記録部の処理フローを示した図である。
【００９５】
まず、ステップS１３００において、発生したイベントを取得してイベントログのレコードを生成する。そして、ステップS１３０１において、取得したイベントが画面遷移イベントかどうかを調べる。発生したイベントが画面遷移イベントであった場合、ステップS１３１０において稼働ログ送信部２２１を、ステップS１３１１において稼働情報送信部８２０を呼び出し、本処理を終える。
【００９６】
発生したイベントが画面遷移イベントではなかった場合、ステップS１３０２において、取得したイベントと同名のイベントを持つレコードが稼働ログ２５０に存在するかどうかを判別する。取得したイベントと同名のイベントを持つレコードが存在しない場合、ステップS１３０６において、生成したレコードを引数にアプリ稼働情報生成部８３０を呼び出し、本処理を終える。
【００９７】
取得したイベントと同名のイベントを持つレコードが存在した場合、ステップS１３０３において、当該の中で直近のレコードを取得する。
【００９８】
次にステップS１３０４において、取得したレコードのデータ５０５とステップS１３００で生成したレコードのデータ５０５が等しいか判別する。等しくない場合は、ステップS１３０６において、生成したレコードを引数にアプリ稼働情報生成部８３０を呼び出し、本処理を終える。
【００９９】
等しい場合は、ステップS１３０５において、取得したイベントドリブンのスクリプト実行があったかどうかを判別する。イベントドリブンのスクリプト実行があった場合は、ステップS１３０６において、生成したレコードを引数にアプリ稼働情報生成部８３０を呼び出し、本処理を終える。
【０１００】
イベントドリブンのスクリプト実行が無かった場合、ステップS１３２０で生成したレコードを削除する。以上のように、ステップＳ１３０２、Ｓ１３０４、Ｓ１３０５の判別をすることで、Ｓ１３２０においてクライアント操作の再生において必要ないレコードを消去することができる。既に稼働ログに記録した種類のイベントであるかをＳ１３０２で、さらに、既に記録した種類のイベントのうち、データの変更がないイベントであることをＳ１３０４で、さらに、既に稼働ログに記録した種類のイベントかつデータの変更がないイベントのうち、スクリプト動作の契機となっていないイベントであることをＳ１３０５で判定している。  これにより、ウェブサーバ装置に送信するためにクライアント装置で記憶するログ量を削減しつつも、ウェブサーバ装置はクライアントの操作を再生することができる。
【０１０１】
図１４は、アプリ稼働情報生成部８３０により生成される、アプリ稼働情報８４０の一例を示した図である。
【０１０２】
アプリ稼働情報８４０はデータ更新の有無、またはイベントドリブンのスクリプト実行の有無を表すレコード１４１１〜１４１４の集合であり、各レコード１４１１〜１４１４はページid１４０１、イベント名１４０２、対象１４０３、稼働フラグ１４０４をカラムとして持つ。
【０１０３】
ページid１４０１はアプリ稼働情報を記録したウェブページを一意に識別するためのもので、ログ収集ポリシ８５０のページid９０３と同様にして作成される。図中では３桁の整数値を用いているが、一意に識別可能であれば文字列や記号でもよい。
【０１０４】
イベント名１４０２は発生したイベントの名称を表したものであり、稼働ログ２５０を生成する際にイベント名５０３と同様に生成される。イベント名が正しく判別できるのであれば他の表現形式でもよい。
【０１０５】
対象１４０３はイベントが発生した対象を表したものであり、稼働ログ２５０を生成する際に対象５０４と同様に生成される。図中では、ウェブページのDOMやデータを例として挙げているが、他の対象を記録してもよいし、対象が正しく判別できるのであれば、他の表現形式でもよい。
【０１０６】
稼働フラグ１４０４は稼働ログ収集コード設定プログラム８００が、ポリシ設定画面１２００を生成するために用いられる真偽値であり、当該レコードにおけるデータ更新の有無、またはイベントドリブンのスクリプト実行の有無を表している。図中では、”ｔｒｕｅ”または”ｆａｌｓｅ”の値を例示しているが、真偽値が判定できれば他の表現形式であってもよい。
【０１０７】
図１５は、アプリ稼働情報生成部８３０における稼働情報更新の処理フローを示した図である。
【０１０８】
ステップS１５００では、S１３００で生成したレコードと同名のイベントを持つレコードがアプリ稼働情報８４０に存在するかどうかを判定する。存在する場合は、本処理を終了する。
【０１０９】
存在しない場合は、ステップS１５０１において、id１４０１へURLのハッシュ値を、イベント名１４０２へイベント名５０３の値を、対象１４０３へ対象５０４の値を稼働フラグ１４０４へtrueをそれぞれ格納したレコードを追加する。  図１６は、アプリ稼働情報出力部８３２の処理フローを示した図である。
【０１１０】
まず、ステップS１６００において、アプリ稼働情報８４０の全レコードを取得する。次に、ステップS１６０１において、アプリ稼働情報送信部８２０を介して、取得したレコードをウェブサーバ装置１２０へ送信する。これにより、
ウェブサーバ装置１２０は、クライアント装置で稼働しているアプリケーションを知ることができる。従って、ユーザは、クライアント装置で稼働しているアプリケーションの中から、クライアント操作を再生するために収集するログ収集ポリシを設定することができる。最後に、ステップS１６０２において、アプリ稼働情報８４０の全レコードを削除する。
【０１１１】
以上が本発明の第２の実施例の処理の一例である。
このようにして、従来困難であった、クライアントの操作を再生する上で必要十分な量のログの取得・収集が可能となる。
【０１１２】
イベントを取得した時に取得したイベントの記録の要否を判定し、必要なイベントのみを稼働ログとして記録することで、ログ量の削減が可能となる。さらに、取得するイベントを設定する手段を提供し、稼働情報から得られた要否判断結果を設定者（ユーザ）に提供することで、少ない手間で正確な設定を実施できる。
【符号の説明】
【０１１３】
１００  クライアント装置
１２０  ウェブサーバ装置
１０１、１２１  出力装置
１０２、１２２  入力装置
１０３、１２３  ネットワークインタフェース
１０４、１２４  プロセッサ
１０５、１２５  記憶装置
１０６、１２６  メモリ
１１０  ネットワーク
２００  スクリプト挿入プログラム
２０１  稼働ログ収集コード
２０２  アプリケーションコード
２０３  ウェブサーバプログラム
２１０  ウェブアプリ送信部
２１１  稼働ログ受信部
２２０  ウェブアプリ受信部
２２１  稼働ログ送信部
２３０  プログラム初期化部
２３１  稼働ログ記録部
２３２  稼働ログ出力部
２３３  ブラウザプログラム
２３４  スクリプトエンジンプログラム
２３５  稼働ログ収集コード
２４０  イベントログ
２５０  稼働ログ
８００  稼働ログ収集コード設定プログラム
８０１  スクリプト選択挿入プログラム
８１０  アプリ稼働情報受信部
８２０  アプリ稼働情報送信部
８３０  アプリ稼働情報生成部
８３１  稼働ログ記録部
８３２  アプリ稼働情報出力部
８４０  アプリ稼働情報
８５０  ログ収集ポリシ
１２００  ログ収集ポリシ設定ウィンドウ
１２０１  確定ボタン
１２０２  キャンセルボタン
１２０３  終了ボタン
１２０４  確認表示
１２３０  クローズボタン
【図１】
0005560180.tif 000002
【図２】
0005560180.tif 000003
【図３】
0005560180.tif 000004
【図４】
0005560180.tif 000005
【図５】
0005560180.tif 000006
【図６】
0005560180.tif 000007
【図７】
0005560180.tif 000008
【図８】
0005560180.tif 000009
【図９】
0005560180.tif 000010
【図１０】
0005560180.tif 000011
【図１１】
0005560180.tif 000012
【図１２】
0005560180.tif 000013
【図１３】
0005560180.tif 000014
【図１４】
0005560180.tif 000015
【図１５】
0005560180.tif 000016
【図１６】
0005560180.tif 000017