(57)【特許請求の範囲】
【請求項１】
仮想環境において実行されたアプリケーションプログラムにおける潜在的エラー状態を予測するコンピュータ実行方法であって、１つまたは複数のプロセッサ上で、
前記１つまたは複数のプロセッサ上で、仮想レイヤを介して、前記アプリケーションプログラムを実行するステップを含み、
前記１つまたは複数のプロセッサは、
前記アプリケーションプログラムにより使用されるリソースへの要求を監視するために、１つまたは複数のリソースアプリケーションプログラミングインタフェース（ＡＰＩ）を抽象化し、
前記アプリケーションプログラムによって開始されたリソースアクセスイベントを前記リソースＡＰＩを通じてログに記録し、
前記ログに記録されたリソースアクセスイベントからリソースアクセスパターンを確立し、
前記アプリケーションプログラムによる前記確立されたリソースアクセスパターンからの逸脱を検出し、
前記１つまたは複数のプロセッサにより、前記検出された逸脱に基づき潜在的エラー状態についてアラートを発生するように構成された、
コンピュータ実行方法。
【請求項２】
前記アプリケーションプログラムによりデータを追加、修正、または削除するための前記リソースＡＰＩへのコールで指定されたパラメータ値からのデータをログに記録するステップをさらに含む、請求項１に記載のコンピュータ実行方法。
【請求項３】
前記１つまたは複数のプロセッサは、アプリケーションの障害が発生した後に前記アプリケーションプログラムのアプリケーション状態を復元することを目的としてデータを追加、修正、または削除するために対応するリソースアクセスイベントを再現する前記リソースＡＰＩへのコールで指定されたパラメータ値からの前記ログに記録されているデータを使用するようにさらに構成されている、請求項２に記載のコンピュータ実行方法。
【請求項４】
前記リソースアクセスパターンは、ベイジアン学習技術を利用して前記ログに記録されているリソースアクセスイベントから確立される、請求項１に記載のコンピュータ実行方法。
【請求項５】
前記リソースアクセスパターンは、前記リソースアクセスイベントの間の相対的出現確率を示すマルコフ連鎖または確率の木として格納される、請求項４に記載のコンピュータ実行方法。
【請求項６】
前記確立されたリソースアクセスパターンからの前記逸脱を検出するステップは、前記リソースアクセスパターンのベイジアン解析結果に基づき指定された閾値確率より低い出現確率を有するリソースアクセスイベントのシーケンスを検出するステップを含む、請求項４に記載のコンピュータ実行方法。
【請求項７】
前記リソースアクセスパターンのベイジアン解析結果に基づき閾値確率より低い出現確率を有するリソースアクセスイベントのシーケンスは、エラー状態の発生時刻との時間的な近さに基づき、前記アプリケーションプログラムの検出された前記エラー状態と相関することを特徴とする、請求項４に記載のコンピュータ実行方法。
【請求項８】
コンピュータに、
前記コンピュータ上の仮想アプリケーション環境で実行された仮想レイヤにおいてアプリケーションプログラムを実行し、
前記仮想アプリケーション環境で実行される前記アプリケーションプログラムによるリソースへの要求を監視するために、１つまたは複数のリソースアプリケーションプログラミングインタフェース（ＡＰＩ）を抽象化し、
前記リソースＡＰＩを通じて、前記アプリケーションプログラムによって開始されたリソースアクセスイベントをリソースアクセスログに記録し、
コンピュータパターン認識技術を使用して前記ログに記録されたリソースアクセスイベントからリソースアクセスパターンを確立し、
前記アプリケーションプログラムによる前記確立されたリソースアクセスパターンからの逸脱を検出し、
前記検出された逸脱に基づき潜在的エラー状態について前記アプリケーションプログラムのユーザーまたは管理者にアラートを発させる、
コンピュータプログラム。
【請求項９】
前記コンピュータにさらに、
前記アプリケーションプログラム内のエラー状態を検出し、
前記エラー状態の発生時刻を判定し、
前記エラー状態の前記発生時刻への時間的な近さに基づき前記リソースアクセスログ内の前記ログに記録されたリソースアクセスイベントのうちの１つまたは複数の相関を求め、
前記１つまたは複数の相関するリソースアクセスイベントを前記アプリケーションプログラムのユーザーまたは管理者に表示させる、
請求項８に記載のコンピュータプログラム。
【請求項１０】
前記１つまたは複数の相関するリソースアクセスイベントは、前記確立されたリソースアクセスパターンのベイジアン解析結果に基づき閾値確率より低い出現確率を有するリソースアクセスイベントのシーケンスを含む、請求項９に記載のコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータ実行方法に関し、より詳細には、アプリケーションプログラムにおける潜在的エラー状態を予測するためのコンピュータ実行方法に関する。
【背景技術】
【０００２】
コンピュータシステム上で実行されるソフトウェアアプリケーションは、コードにバグがある、ユーザーが誤りを犯した、不正なデータを入力した、リソースが利用不可能である、または同様の事態、などのさまざまな理由から障害を発生する可能性がある。このようなアプリケーションの障害が生じると、結果として、データの喪失およびアプリケーション中断時間が生じ、アプリケーションおよびデータの復旧に関係するコストと時間が大きな負担になる可能性がある。通常の環境内で、または共通のインストールから実行しているアプリケーションは、同じ入力、条件、および／または環境を与えられた場合に同じ障害に遭遇することが予想されうる。このような事態は、アプリケーションが仮想化されたアプリケーション環境で実行されている場合でもありうる。
【０００３】
アプリケーション仮想化技術を使用することで、コンピュータによって実行されるソフトウェアアプリケーションをハードウェア、オペレーティングシステム（「ＯＳ」）、およびコンピュータのローカル構成から分離することができる。アプリケーション仮想化技術は、アプリケーションをローカルのコンピュータ上にインストールし、構成し、維持する作業を不要にすることができる。その代わりに、仮想アプリケーション環境が、コンピュータ上で実行され、中央に置かれた１つの仮想アプリケーションサーバー上で維持される仮想化されたアプリケーションパッケージからネットワーク上でアプリケーションコンポーネントをストリーミングすることができる。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
本明細書でなされている開示は、以上の考慮事項および他の考慮事項に関して提示される。
【０００５】
本明細書では、アプリケーションの障害を予測し、診断し、障害から復旧するためにアプリケーションプログラムの正常なオペレーションをエラー状態と区別する技術について説明する。アプリケーションプログラムが仮想アプリケーション環境内で実行されている場合、仮想化レイヤまたは仮想アプリケーション環境は、データファイルからの読み込み、レジストリキーへの書き込み、および同様の作業などの、アプリケーションがリソースに対して行う要求を認識し、制御することができる。本明細書で説明されている技術を利用することで、仮想化レイヤは、リソースへのアクセスをログに記録し、時間の経過とともに、リソース使用の共通パターンを確立することができる。このようなリソースアクセスパターンが確立された後、仮想化レイヤは、アプリケーションプログラムによるリソース使用を監視し続けて、パターンが変化したときに警告またはアラートを発することができる。この予防的警告は、アプリケーションプログラムのユーザーまたは管理者に、診断または是正処置を素早く講じる機会を与え、それにより、中断時間およびデータ喪失を低減し、また回避することさえ可能である。
【０００６】
アプリケーションプログラムが典型的には、ポップアップダイアログや、アプリケーションログまたはシステムイベントログに記録されたイベントのように、ユーザーまたは管理者にエラーを表示する手段を有することは理解されるであろう。しかし、これらのエラーメッセージの質および有用性は、アプリケーション毎に劇的に異なりうる。エラーの発生源を特定できる高品質のエラーメッセージを提供するには、著しい投資を必要とし、すべてのソフトウェアベンダーがこの投資を行えるわけではない。本明細書で説明されているリソースへのアクセスおよび確立されている共通パターンのログを利用してどのリソースがアクセスされていたか、またはエラー状態の発生直前にパターンがどのように変化したかの相関を求めることにより、ユーザーおよび／または管理者は、アプリケーションの障害をより素早く診断し、復旧処置を実施し、アプリケーション中断時間を短縮することができる。
【０００７】
それに加えて、仮想化レイヤは、アプリケーションプログラムによるすべてのリソース使用を認識しているので、これは、リソースの追加、修正、または削除を時間の経過とともに生じるこれらのリソースの修正において使用されるデータとともにログに記録することができる。アプリケーションプログラムに障害が生じた場合、アプリケーションプログラムの第２のインスタンスは、即時開始され、リソース修正およびデータのログが再現され、それにより、アプリケーションの状態をそのアプリケーションの第１のインスタンスの障害が発生した直前の時点に復元することができる。アプリケーションインスタンス間のこのような高速フェイルオーバーによって中断時間をさらに制限することができる。
【課題を解決するための手段】
【０００８】
いくつかの実施形態によれば、仮想アプリケーション環境で実行されているアプリケーションプログラムによるリソースへのアクセスは、監視され、リソースアクセスイベントがリソースアクセスログに記録される。リソースアクセスパターンは、コンピュータパターン認識技術を利用してログに記録されているリソースアクセスイベントから確立される。アプリケーションプログラムによるその後のリソースへのアクセスが確立されたパターンから逸脱している場合、アプリケーションプログラムのユーザーおよび／または管理者は、検出された逸脱に基づき潜在的エラー状態の通知を受ける。
【０００９】
さらに、確立されたリソースアクセスパターンから逸脱するリソースアクセスイベントのシーケンスとエラー状態との相関をエラー状態の発生時刻との時間的な近さに基づき決定し、エラーに関する診断情報をユーザーおよび／または管理者に提供することができる。最後に、リソースアクセスログに記録されたデータの追加、修正、または削除に関するリソースアクセスイベントは、アプリケーションの障害およびアプリケーションのその後の再起動の際に再現され、アプリケーションプログラムのアプリケーション状態が再確立されることができる。
【００１０】
上述の本発明対象は、コンピュータ制御装置、コンピュータプロセス、コンピューティングシステム、またはコンピュータ可読媒体などの製造品として実装されうることは理解されるであろう。これらおよび他のさまざまな特徴は、以下の詳細な説明を読み、関連する図面を精査することで明らかになる。
【００１１】
この「課題を解決するための手段」では、以下の「発明を実施するための形態」でさらに説明される簡素化された形式の概念の選択を導入する。この「課題を解決するための手段」は、請求されている主題の鍵となる特徴または本質的特徴を明示することを意図しておらず、またこの「課題を解決するための手段」は、請求されている発明対象の範囲を制限するために使用されることも意図していない。さらに、請求されている発明対象は、本開示の任意の部分において明記されているどれか、またはすべての不利点を解決する実装に限定されることはない。
【図面の簡単な説明】
【００１２】
【図１】本明細書で提示されている実施形態によって提供される例示的な一オペレーティング環境およびいくつかのソフトウェアコンポーネントの態様を示すブロック図である。
【図２】本明細書で説明されている実施形態による、アプリケーションの障害を予測し、診断し、障害から復旧するためにアプリケーションプログラムの正常なオペレーションをエラー状態と区別する方法を示す流れ図である。
【図３】本明細書で説明されている実施形態による、アプリケーションの障害を予測し、診断し、障害から復旧するためにアプリケーションプログラムの正常なオペレーションをエラー状態と区別する方法を示す流れ図である。
【図４】本明細書で説明されている実施形態による、アプリケーションの障害を予測し、診断し、障害から復旧するためにアプリケーションプログラムの正常なオペレーションとエラー状態とを区別する方法を示す流れ図である。
【図５】本明細書で提示されている実施形態のいくつかの態様を実行することができるコンピューティングシステムのための例示的なコンピュータのハードウェアおよびソフトウェアのアーキテクチャを示すブロック図である。
【発明を実施するための形態】
【００１３】
以下の詳細な説明は、アプリケーションの障害を予測し、診断し、および／または障害から復旧するためにリソースアクセスのパターンに基づきアプリケーションプログラムの正常なオペレーションをエラー状態と区別するための技術を対象とする。本明細書で説明されている発明対象は、コンピュータシステム上のオペレーティングシステムおよびアプリケーションプログラムの実行と併せて実行されるプログラムモジュールの一般コンテキストにおいて提示されているが、当業者であれば、他の実装を他のタイプのプログラムモジュールと組み合わせて実行することも可能であることを理解するであろう。一般に、プログラムモジュールは、特定のタスクを実行するか、または特定の抽象データ型を実装するルーチン、プログラム、コンポーネント、データ構造、および他の種類の構造を含む。さらに、当業者であれば、本明細書で説明されている発明対象は、ハンドヘルドデバイス、マルチプロセッサシステム、マイクロプロセッサベースのまたはプログラム可能な家電製品、ミニコンピュータ、メインフレームコンピュータ、および同様のものを含む、他のコンピュータシステム構成を使用して実施できることを理解するであろう。
【００１４】
以下の詳細な説明では、説明の一部をなす、特定の実施形態または例を図解で示す、添付図面を参照する。添付図面中、類似の番号は複数の図を通して類似の要素を表している。
【００１５】
図１は、本明細書で提示されている実施形態による、アプリケーションの障害を予測し、診断し、障害から復旧するためにアプリケーションプログラムの正常なオペレーションをエラー状態と区別するための複数のソフトウェアコンポーネントを含む例示的なオペレーティング環境１００を示している。環境１００は、コンピュータ１０２を含む。コンピュータ１０２は、サーバーコンピュータ、デスクトップワークステーション、ラップトップ、またはノートブックなどのパーソナルコンピュータ（「ＰＣ」）、携帯情報端末（ＰＤＡ）、ワイヤレス電話機、セットトップボックス、ゲーム機、またはアプリケーションプログラムを実行することができる他の任意のコンピューティングデバイスとすることができる。
【００１６】
ソフトウェアアプリケーションプログラム１０４は、コンピュータ１０２上で実行される。いくつかの実施形態によれば、アプリケーションプログラム１０４は、仮想アプリケーション環境１０６内で実行されうる。仮想アプリケーション環境１０６では、コンピュータ１０２が、コンピュータにこれまでにインストールされていないアプリケーションプログラムを起動し、実行することを許すことができる。その代わりに仮想アプリケーション環境１０６が、アプリケーションプログラム１０４のコンポーネントを仮想アプリケーションサーバー１１２からネットワーク１１０経由でアプリケーションプログラム１０４のコンポーネントをリアルタイムまたはほぼリアルタイムでストリーミング実行することができる。仮想アプリケーション環境１０６および仮想アプリケーションサーバー１１２は、ワシントン州レドモンド所在のＭＩＣＲＯＳＯＦＴ  Ｃｏｒｐｏｒａｔｉｏｎ社のＭＩＣＲＯＳＯＦＴ（登録商標）ＡＰＰ−Ｖ技術、フロリダ州フォートローダーデール所在のＣＩＴＲＩＸ  ＳＹＳＴＥＭＳ  Ｉｎｃ．社のＣＩＴＲＩＸ  ＸＥＮＡＰＰ（商標）技術、または他のアプリケーションストリーミングおよび仮想化プラットフォームまたは技術に基づくものとしてよい。ネットワーク１１０は、ＬＡＮ、ワイドエリアネットワーク（「ＷＡＮ」）、インターネット、またはコンピュータ１０２を仮想アプリケーションサーバー１１２に接続する他のネットワーキングトポロジーとすることができる。
【００１７】
アプリケーションプログラム１０４のソフトウェアコンポーネントは、仮想アプリケーションサーバー１１２によってアクセス可能な記憶装置上に配置される仮想化されたアプリケーションパッケージ１１４内に格納することができる。いくつかの実施形態によれば、仮想化されたアプリケーションパッケージ１１４は、アプリケーションプログラムの構造情報さらにはアプリケーションの個別のコンポーネントファイルおよび他の要素を含むデータの多数のブロックからなる。仮想化されたアプリケーションパッケージ１１４は、実行時にアプリケーションプログラム１０４によって利用されるローカルリソースおよびリモートリソースの場所および構成に関するメタデータをさらに格納することができる。仮想化されたアプリケーションパッケージ１１４は、管理サーバー上でアプリケーションの標準のインストールを実行し、例えばローカルファイルシステム、レジストリ、および他のものに加えられた変更を記録することによってアプリケーションプログラム１０４の管理者が作成することができる。次いで、仮想化されたアプリケーションパッケージ１１４内のブロックを仮想アプリケーション環境１０６へストリーミング実行し、これにより、アプリケーションプログラム１０４をコンピュータ１０２上で実行することができる。
【００１８】
仮想アプリケーション環境１０６は、「アプリケーションサンドボックス」と称される独立した仮想実行時環境を作成し、仮想アプリケーションサーバー１１２からストリーミングされるそれぞれのアプリケーションプログラム１０４を実行することができる。アプリケーションサンドボックスでは、アプリケーションプログラム１０４のコンポーネントをシステムの残り部分から隔離して実行することができる。仮想アプリケーション環境１０６は、実行時にアプリケーションプログラム１０４によって使用されるローカルリソース１１８Ａおよびリモートソース１１８Ｂ（本明細書では一般的にリソース１１８と称する）へのアクセスを抽象化する仮想化レイヤ１１６をさらに備えることができる。リソース１１８は、システムメモリ、ローカルプロセッサの時間または処理スレッド、ファイルシステム内に格納されているファイル、レジストリデータベース内に格納されているデータ、アプリケーションサービス、プレゼンテーションサービス、データベースサービス、およびコンピュータ１０２によってローカルで利用できる、またはネットワーク１１０経由でリモートから利用できる同様のものを含みうる。
【００１９】
アプリケーションプログラム１０４は、オペレーティングシステム１２２に実装されているリソースアプリケーションプログラミングインターフェース（リソース「ＡＰＩｓ」）１２０またはコンピュータ１０２上にインストールされている他の標準ソフトウェアライブラリを通じてローカルおよびリモートのリソース１１８にアクセスすることができる。いくつかの実施形態によれば、仮想化レイヤ１１６では、仮想アプリケーション環境１０６内で実行されているアプリケーションプログラム１０４によるローカルおよびリモートのリソース１１８へのアクセス要求を監視し、制御するためにリソースＡＰＩｓ１２０を抽象化している。それに加えて、仮想化レイヤ１１６は、リソースアクセスログ１２４にアプリケーションプログラム１０４によるリソース１１８へのアクセスを記録することができる。リソースアクセスログ１２４は、ローカルファイルシステム内のログファイル、リモートデータベースサーバー上の多数のデータベーステーブル、これら２つの組み合わせ、またはコンピュータ１０２によってアクセス可能な他のデータ記憶システムを含むことができる。
【００２０】
リソースアクセスログ１２４は、リソースアクセスイベント１２６のログを含みうる。リソースアクセスイベント１２６は、仮想アプリケーション環境１０６において実行されているアプリケーションプログラム１０４によって行われるリソースＡＰＩｓ１２０へのコールの詳細を含みうる。リソースアクセスイベント１２６のそれぞれは、リソースアクセスが実行された日時を示すタイムスタンプ、呼び出された個別のリソースＡＰＩｓ１２０の識別子、およびアクセスされているローカルまたはリモートのリソース１１８のリソースタイプ、場所、または他の態様を示す多数のパラメータ値を含みうる。リソースアクセスイベント１２６は、ログファイル内にエントリとして、データベーステーブル内に行として、ディクショナリ内にオブジェクトとして、または当技術分野で知られている他のデータ構造またはフォーマットで格納されうる。
【００２１】
一実施形態において、リソースアクセスログ１２４は、リソースアクセスパターン１２８をさらに含む。リソースアクセスパターン１２８は、定期的に実行されるアプリケーションプログラム１０４によるリソースアクセスのパターンを含むものとしてよい。例えば、アプリケーションプログラム１０４は、時刻Ｔ１において特定のレジストリキーを読み込み、次いで、時刻Ｔ１＋２４０ｍ秒においてリモートファイルシステム上に配置されている特定のファイルに書き出すことができる。さらに、レジストリキーを読み込み、ファイルに書き出すパターンは、例えば、特定のイベントまたは条件に応答して、定期的に、または特定の時刻に複数回発生しうる。リソースアクセスパターン１２８は、特定のＡＰＩｓコールとＡＰＩｓコールとの間で、特定のリソースに対するＡＰＩｓコールとＡＰＩｓコールとの間で、または例えば、割り当てられているメモリの量や、起動されたスレッドの数などの、リソースの特定の量に対するＡＰＩｓコールとＡＰＩｓコールとの間で確立されうる。
【００２２】
リソースアクセスパターン１２８は、パターン認識技術を使用してある期間にわたって収集されたリソースアクセスイベント１２６から確立されうる。例えば、イベントタイプの部分集合が重要であると判定され、ベイズ学習技術を使用することで、収集期間内においてこれらのタイプのリソースアクセスイベント１２６にわたってリソースアクセスパターン１２８を確立することができる。生成されるリソースアクセスパターン１２８は、例えばリソースアクセスイベントの間の相対的出現確率を示すマルコフ連鎖または確率の木として格納されうる。
【００２３】
一実施形態によれば、リソースアクセスパターン１２８は、アプリケーションプログラム１０４の実行と並行して実行するバックグラウンドプロセスにおいてリソースアクセスイベント１２６のログからコンピュータ上にほぼリアルタイムで生成されうる。別の実施形態では、仮想アプリケーション環境１０６内でアプリケーションプログラム１０４を実行する多数のコンピュータ１０２上で仮想化レイヤ１１６によってログに記録されたリソースアクセスイベント１２６は、中央のロケーションに集約することができる。集約されたイベントデータは、例えば、コンピュータ依存リソース経路を取り除くことによってジェネリック化され、リソースアクセスパターン１２８は、集約され、ジェネリック化されたイベントデータから確立されうる。次いで、生成されたリソースアクセスパターン１２８を、図２に関して以下でさらに詳しく説明されるように、アプリケーションの障害を予測する際にパターンを使用するためにアプリケーションプログラム１０４を実行するコンピュータ１０２のそれぞれに送ることができる。
【００２４】
さらなる実施形態では、リソースアクセスログ１２４は、リソース書き出しデータ１３０をさらに含む。リソース書き出しデータ１３０は、レジストリ値書き出しまたはＩ／Ｏバッファ書き出しなどのデータを追加、修正、または削除する、リソースＡＰＩｓ１２０へのアプリケーションプログラム１０４によるコールのログを含むものとしてよい。リソース書き出しデータ１３０は、書き出されるデータを含むようにポインタまたは構造型のパラメータからの「ディープコピー」を含むことができる。それに加えて、任意のファイル名、キー名、アドレス、または他のロケーションパラメータを、実行中のアプリケーションプログラム１０４の現在のコンテキストを使用してジェネリック化することができる。リソース書き出しデータ１３０およびリソースアクセスイベント１２６は、単一のログファイル内に統合されるか、またはリソースアクセスログ１２４内の他の構造に統合されうる。リソース書き出しデータ１３０を使用することで、図４に関して以下でさらに詳しく説明されるように、アプリケーションの障害から復旧する際にアプリケーションプログラム１０４のアプリケーション状態を復元することができる。
【００２５】
次に図２〜４を参照して、本明細書で提示されている実施形態に関する追加の詳細が示される。図２〜４に関して説明されている論理的なオペレーションは、（１）コンピュータシステム上で実行される一連のコンピュータ実装活動またはプログラムモジュールとして、および／または（２）コンピューティングシステム内の相互接続された機械論理回路または回路モジュールとして実装されることは理解されるであろう。この実装は、コンピューティングシステムの性能および他の要件に応じて選択できるものである。したがって、本明細書において説明されている論理的なオペレーションは、演算、構造的デバイス、活動、またはモジュールとさまざまに称される。これらの演算、構造的デバイス、活動、およびモジュールは、ソフトウェア、ファームウェア、専用デジタル論理回路、およびこれらの任意の組み合わせで実装されうる。図に示され、本明細書で説明されているものより、実行されうるオペレーションの数を増減できることも理解されるであろう。これらのオペレーションは、説明されているのと異なる順序で実行することもできる。
【００２６】
図２は、本明細書で説明されている実施形態による、リソースアクセスの確立されたパターンからの逸脱に基づきアプリケーションプログラム１０４における潜在的エラー状態を予測するためのルーチン２００を例示している。ルーチン２００は、コンピュータ１０２上の仮想アプリケーション環境１０６において実行される仮想化レイヤ１１６および／またはコンピュータ上で、または集中型アプリケーションサーバー上で実行される他のモジュールの組み合わせによって実行されうる。ルーチン２００は、他のコンピューティングデバイス上で実行している他のモジュールもしくはコンポーネントによって、またはモジュール、コンポーネント、およびコンピューティングデバイスの任意の組み合わせによって実行することもできる。
【００２７】
ルーチン２００は、オペレーション２０２から始まり、そこで、仮想化レイヤ１１６が仮想アプリケーション環境１０６において実行しているアプリケーションプログラム１０４によるローカルおよびリモートのリソース１１８へのアクセスを監視し、へのこれらのアクセスをリソースアクセスログ１２４にログとして記録する。図１に関して上で説明されているように、仮想化レイヤ１１６は、リソースＡＰＩｓ１２０へのアプリケーションプログラム１０４によるコールの詳細を、リソースアクセスが実行された日時を示すタイムスタンプ、呼び出された個別のリソースＡＰＩｓ１２０の識別子、およびアクセスされているローカルもしくはリモートのリソース１１８のリソースタイプ、ロケーション、または他の態様を示す多数のパラメータ値を含むリソースアクセスイベント１２６としてログに記録することができる。
【００２８】
オペレーション２０２から、ルーチン２００はオペレーション２０４に進み、そこで、リソースアクセスパターン１２８を確立する。ある期間にわたって、著しい数のリソースアクセスイベント１２６が仮想化レイヤ１１６によってリソースアクセスログ１２４にログとして記録されうることは理解されるであろう。図１に関して上で説明されているように、仮想化レイヤ１１６またはある種の他のモジュールもしくはプロセスは、ログに記録されているリソースアクセスイベント１２６を使用して、リソースアクセスパターン１２８を確立することができる。例えば、仮想化レイヤ１１６は、ベイジアンネットワークなどのパターン認識技術を使用して、２つまたはそれ以上のリソースアクセスイベントの間の相対的出現確率を確立することができる。次いで、確立されたリソースアクセスパターン１２８をマルコフ連鎖または確率の木としてリソースアクセスログ１２４に格納することができる。
【００２９】
リソースアクセスパターン１２８は、仮想化レイヤ１１６によってコンピュータ１０２上にほぼリアルタイムで生成されうる。あるいは、ログに記録されているリソースアクセスイベント１２６を中央ロケーションで多数のコンピュータ１０２から集約し、ジェネリック化して使用することで、複数のコンピュータにまたがって仮想アプリケーション１０６内で実行しているアプリケーションプログラム１０４の複数のインスタンス上でリソースアクセスパターン１２８を確立することができる。次いで、本明細書で説明されている方法で、集約されたリソースアクセスイベント１２６から確立されたジェネリックなリソースアクセスパターン１２８を使用して、アプリケーションプログラム１０４を実行している任意のコンピュータ１０２上のエラー状態を予測することができる。
【００３０】
ルーチン２００は、オペレーション２０４からオペレーション２０６に進み、そこで、仮想化レイヤ１１６が仮想アプリケーション環境１０６内で実行しているアプリケーションプログラム１０４による確立されたリソースアクセスパターン１２８からの逸脱を検出する。例えば、仮想化レイヤ１１６は、リソースアクセスパターン１２８のベイジアン解析結果に基づき指定された閾値より低い出現確率を有するリソースＡＰＩｓコールのシーケンスを検出することができる。同様に、仮想化レイヤ１１６は、リソースアクセスパターン１２８において確立されているような、知られているエラー状態を伴う出現の確率が高いリソースＡＰＩｓコールのシーケンスを検出することができる。一実施形態において、このリソースＡＰＩｓコールのシーケンスの確率が特定の閾値以下にならない場合、仮想化レイヤ１１６は、リソースアクセスパターン１２８が上で説明されているバックグラウンドプロセスで新しい確率に更新されうるように対応するリソースアクセスイベント１２６をログに記録する。この方法で、リソースアクセスパターン１２８は、仮想アプリケーション環境１０６内でアプリケーションプログラム１０４の実行中に連続的に更新されうる。
【００３１】
アプリケーションプログラム１０４による確立されたリソースアクセスパターン１２８からの逸脱が検出された場合、ルーチン２００はオペレーション２０６からオペレーション２０８に進み、そこで、仮想化レイヤ１１６がこのパターンにおける逸脱に関するアラートを発する。アラートは、アプリケーションプログラム１０４のユーザーまたは管理者に向けることができる。アラートは、電子メール、テキストメッセージ、またはシステムメッセージキューを介して送信されるか、またはシステムレベルイベントとして発生するか、またはアプリケーションもしくはシステムイベントログに記録されるか、または他の何らかの形でコンピュータ１０２によってアクセス可能なメッセージングシステムを介して管理者に送信されうる。この予防的アラートは、管理者に診断または是正処置を素早く講じる機会を与えることができ、それにより、潜在的な保留エラー状態が生じた時点において中断時間およびデータ喪失を低減し、またおそらく回避することが可能である。オペレーション２０８から、ルーチンは終了する。
【００３２】
図３は、本明細書で説明されている実施形態による、エラーの診断を行えるようにリソースアクセスイベント１２６とアプリケーションプログラム１０４における既知のエラー状態との相関を求めるためのルーチン３００を例示している。ルーチン３００は、コンピュータ１０２上の仮想アプリケーション環境１０６において実行される仮想化レイヤ１１６および／またはコンピュータ上で、あるいは集中型アプリケーションサーバー上で実行される他のモジュールの組み合わせによって実行されうる。ルーチン３００は、他のコンピューティングデバイス上で実行している他のモジュールもしくはコンポーネントによって、またはモジュール、コンポーネント、およびコンピューティングデバイスの任意の組み合わせによって実行することもできる。
【００３３】
ルーチン３００は、オペレーション３０２から始まり、オペレーション２０２に関して上で説明されている方法で、仮想化レイヤ１１６が仮想アプリケーション環境１０６において実行しているアプリケーションプログラム１０４によるローカルおよびリモートのリソース１１８へのアクセスを監視し、リソースアクセスログ１２４にこれらのアクセスをログとして記録する。次いで、ルーチン３００はオペレーション３０４に進み、アプリケーションプログラム１０４におけるエラー状態を検出する。例えば、ポップアップエラーダイアログ、アプリケーションもしくはシステムイベントログに記録されたイベント、または同様のものなどの、従来の手段を通じてアプリケーションのユーザーまたは管理者がアプリケーションプログラム１０４内のエラー状態を検出することができる。
【００３４】
オペレーション３０４から、ルーチン３００はオペレーション３０６に進み、そこで、リソースアクセスログ１２４内のリソースアクセスイベント１２６と検出されたエラー状態との相関を求める。管理者側でエラー状態の発生時刻を提示するか、またはエラー状態の発生時刻をリソースアクセスイベント１２６でログに記録されているリソースＡＰＩｓ  １２０への特定のコールから識別することができる。次いで、仮想化レイヤ１１６または他のモジュールは、エラー状態の発生時刻に時間的に近い範囲内にあるリソースアクセスログ１２４内のリソースアクセスイベント１２６の部分集合を識別することができる。例えば、エラー状態に至る１０秒の時間枠内で発生したすべてのリソースアクセスイベント１２６は、このエラー状態と相関させることができる。
【００３５】
一実施形態では、確立されたリソースアクセスパターン１２８から逸脱するエラー状態に時間的に近い範囲内のリソースアクセスイベント１２６でログに記録されたリソースＡＰＩｓコールのシーケンスのみとエラー状態との相関が求められる。例えば、仮想化レイヤ１１６または他のモジュールは、リソースアクセスログ１２４内のリソースアクセスパターン１２８のベイジアン解析結果に基づき特定の閾値より低い出現確率を有するエラー状態の発生の１０秒以内にリソースアクセスイベント１２６でログに記録されたリソースＡＰＩｓコールのシーケンスを識別することができる。リソースアクセスパターン１２８における逸脱とエラー状態との相関に対する確率の指定された閾値は、オペレーション２０６に関して上で説明されているリソースアクセスパターンにおける逸脱に基づきエラー状態を予測することに対する確率の閾値より高い場合があることは理解されるであろう。
【００３６】
次いで、ルーチン３００は、オペレーション３０６からオペレーション３０８に進み、そこで、エラー状態と相関するリソースアクセスイベント１２６がアプリケーションプログラム１０４のユーザーまたは管理者に対して示される。相関するリソースアクセスイベント１２６は、ユーザーインターフェースダイアログを通じて、または電子メール、テキストメッセージ、システムメッセージキュー、もしくは同様のものを介して送信されるレポートで示されうる。特定のエラー状態と時間的に相関するリソースアクセスログ１２４からリソースアクセスイベント１２６を与えることで、ユーザーまたは管理者はエラー状態の原因を素早く診断し、適切な復旧処置を実施して中断時間を短縮し、データ喪失を低減することができる。オペレーション３０８から、ルーチン３００は終了する。
【００３７】
図４は、本明細書で説明されている実施形態による、アプリケーションプログラム１０４内のエラー状態から復旧するためのルーチン４００を例示している。ルーチン４００は、コンピュータ１０２上の仮想アプリケーション環境１０６において実行される仮想化レイヤ１１６および／またはコンピュータ上で、もしくは集中型アプリケーションサーバー上で実行される他のモジュールの組み合わせによって実行されうる。ルーチン４００は、他のコンピューティングデバイス上で実行している他のモジュールもしくはコンポーネントによって、またはモジュール、コンポーネント、およびコンピューティングデバイスの任意の組み合わせによって実行することもできる。
【００３８】
ルーチン４００は、オペレーション４０２から始まり、オペレーション２０２に関して上で説明されている方法で、仮想化レイヤ１１６が仮想アプリケーション環境１０６において実行しているアプリケーションプログラム１０４によるローカルおよびリモートのリソース１１８へのアクセスを監視し、リソースアクセスログ１２４にこれらのアクセスをログとして記録する。それに加えて、仮想化レイヤ１１６は、図１に関して上で説明されているように、データを追加、修正、または削除するリソースＡＰＩｓ１２０へのアプリケーションプログラム１１０によるコールに対するリソース書き出しデータ１３０をログに記録する。リソース書き出しデータ１３０は、ＡＰＩｓコールで指定されたポインタまたは構造型のパラメータからのディープコピーを含むことができ、このデータは、実行中のアプリケーションプログラム１０４の現在のコンテキストを使用してリソース書き出しデータ１３０におけるファイル名、キー名、アドレス、または他のロケーションパラメータをジェネリック化してさらに処理されうる。
【００３９】
オペレーション４０２から、ルーチン４００はオペレーション４０４に進み、そこで、アプリケーションプログラム１０４はエラー状態のため障害を発生する。例えば、アプリケーションプログラム１０４は、コードにバグがある、ユーザーが誤りを犯した、不正なデータを入力した、リソースが利用不可能である、コンピュータ１０２のハードウェアに障害が生じた、または同様の事態により障害を発生することがある。アプリケーションプログラム１０４が障害を発生した際、ルーチン４００は、オペレーション４０６に移動し、そこで、アプリケーションプログラム１０４が再起動される。アプリケーションプログラム１０４は、コンピュータ１０２上で実行している仮想化レイヤ１１６または別のモジュールによって自動的に再起動されるか、または、同じコンピュータもしくは類似の構成を用いた別のコンピュータシステム上でシステム管理者によって手動で再起動されうる。
【００４０】
ルーチン４００はオペレーション４０６からオペレーション４０８に進み、そこで、アプリケーションプログラム１０４が再起動されたコンピュータ１０２上で仮想アプリケーション環境１０６において実行中の仮想レイヤ１１６が、アプリケーション状態を障害が発生する前の時点まで復元するためにリソースアクセスログ１２４内に記録されているいくつかのリソースアクセスイベント１２６を再現する。例えば、仮想化レイヤ１１６は、システムメモリアドレス、Ｉ／Ｏバッファ、キャッシュされたファイル、または同様のものなどの揮発性のもしくはキャッシュされた格納ロケーションに書き出すリソースＡＰＩｓ１２０へのコールに対応するすべてのリソースアクセスイベント１２６を再現することができる。
【００４１】
さらなる実施形態では、仮想化レイヤ１１６は、アプリケーションの障害が生じる前に仮想化レイヤおよび／またはアプリケーションプログラム１０４によってアプリケーション状態の最後のスナップショット、つまり「チェックポイント」が取られ、格納された以降に生じたデータの書き出しに対応するすべてのリソースアクセスイベント１２６を再現することができる。仮想化レイヤ１１６は、リソースアクセスログ１２４内のリソース書き出しデータ１３０を利用して、選択されたリソースアクセスイベント１２６を再現し、アプリケーション状態を復元する際に適切なデータを確実に書き出せるようにすることができる。アプリケーション状態を復元する書き出しを再現するために対応するリソース書き出しデータ１３０とともにデータを追加、修正、または削除するリソースアクセスイベント１２６をログに記録することで、アプリケーションの障害からの復旧を高速化することができ、したがってアプリケーションの中断時間を短縮できる。オペレーション４０８から、ルーチン４００は終了する。
【００４２】
本開示は、仮想化されたアプリケーション環境１０６を背景として説明されているが、アプリケーションプログラムの正常なオペレーションをエラー状態と区別してアプリケーションの障害を予測し、診断し、障害から復旧するための本明細書で取りあげられている方法は、ローカルおよびリモートのリソース１１８へのアプリケーションプログラム１０４によるアクセスを監視することができる他のアプリケーション環境で実施することができる。例えば、仮想アプリケーション環境１０６の外部のローカルで実行されるアプリケーションプログラム１０４によるローカルおよびリモートのリソース１１８に対する要求を監視するために当技術分野で知られている方法を使用してオペレーティングシステム１２２によって実行されるリソースＡＰＩｓ１２０をフックする仮想化レイヤ１１６に類似するモジュールを実装することができる。モジュールは、リソースへのアクセスをログに記録し、アプリケーションプログラム１０４によるリソース使用の共通のパターンを確立することができる。このようなリソースアクセスパターンが確立された後、モジュールは、本明細書で説明されている方法で、アプリケーションプログラム１０４によるリソース使用を監視し続けて、パターンが変化したときに警告またはアラートを発することができる。
【００４３】
図５は、本明細書で提示されている方法で、アプリケーションの障害を予測し、診断し、障害から復旧するためにアプリケーションプログラムの正常なオペレーションをエラー状態と区別するために本明細書で説明されているソフトウェアコンポーネントを実行することができるコンピュータ５００のための例示的なコンピュータアーキテクチャを示している。図５に示されているコンピュータアーキテクチャは、従来のサーバーコンピュータ、デスクトップコンピュータ、ラップトップ、ノートブック、ＰＤＡ、ワイヤレス電話機、または他のコンピューティングデバイスを例示しており、これを使用して、コンピュータ１０２または他のコンピューティングデバイス上で実行されるものとして説明されている本明細書で取りあげたソフトウェアコンポーネントの態様を実行することができる。
【００４４】
図５に示されているコンピュータアーキテクチャは、１つまたは複数の中央演算処理装置（「ＣＰＵ」）５０２を備える。ＣＰＵ５０２は、コンピュータ５００を動作させるために必要な算術演算および論理演算を実行する標準的なプロセッサとすることができる。ＣＰＵ５０２は、一方の離散的な物理的状態から次の離散的な物理的状態へ、これらの状態を区別し、これらの状態を変更するスイッチング要素を操作することで遷移させることによって必要なオペレーションを実行する。スイッチング要素は、一般的に、フリップフロップなどの、２つの２値状態のうちの１つを維持する電子回路、および論理ゲートなどの、１つまたは複数の他のスイッチング要素の状態の論理的な組み合わせに基づき出力状態を与える電子回路を一般的に含みうる。これらの基本的なスイッチング要素を組み合わせることで、レジスタ、加算器／減算器、算術論理演算ユニット、浮動小数点演算ユニット、および他の論理要素を含む、より複雑な論理回路を形成することができる。
【００４５】
コンピュータアーキテクチャは、ランダムアクセスメモリ（「ＲＡＭ」）５１４およびリードオンリーメモリ（「ＲＯＭ」）５１６を含む、システムメモリ５０８と、メモリをＣＰＵ５０２に結合するシステムバス５０４とをさらに備える。起動時などにコンピュータ内の要素間の情報伝送を助ける基本ルーチンを含む基本入出力システムは、ＲＯＭ  ５１６に格納される。コンピュータ５００は、本明細書でより詳しく説明されている、オペレーティングシステム１２２、アプリケーションプログラム、および他のプログラムモジュールを格納するための大容量記憶装置５１０も備える。
【００４６】
大容量記憶デバイス５１０は、システムバス５０４に接続されている大容量記憶装置コントローラ（図示せず）を通じてＣＰＵ  ５０２に接続されている。大容量記憶装置５１０は、コンピュータ５００用の不揮発性記憶装置を構成する。コンピュータ５００は、格納されている情報を反映するようにデバイスの物理的状態を変換することによって大容量記憶装置５１０に情報を格納することができる。物理的状態の特定の変換は、この説明の異なる実装におけるさまざまな要因に依存しうる。このような要因のいくつかの例として、限定はしないが、大容量記憶装置を実装するために使用される技術、大容量記憶装置が一次または二次記憶装置として特徴付けられるかどうか、および同様の要因が挙げられる。
【００４７】
例えば、コンピュータ５００は、大容量記憶装置コントローラに、磁気ディスクドライブ内の特定のロケーションの磁気特性、光学式記憶装置内の特定のロケーションの反射もしくは屈折特性、または半導体記憶装置内の特定のコンデンサ、トランジスタ、または他のディスクリートコンポーネントの電気的特性を変える命令を発行することによって大容量記憶装置５１０に情報を格納することができる。本発明の説明の範囲および精神から逸脱することなく、物理的媒体の他の変換が可能である。コンピュータ５００は、大容量記憶装置内の１つまたは複数のロケーションの物理的状態または特性を検出することによって大容量記憶装置５１０から情報をさらに読み取ることができる。
【００４８】
上で簡単に述べたように、コンピュータ５００の大容量記憶装置５１０およびＲＡＭ  ５１４に、コンピュータのオペレーションを制御するのに適しているオペレーティングシステム５１８を含む、多数のプログラムモジュールおよびデータファイルを格納することができる。大容量記憶装置５１０およびＲＡＭ５１４には、１つまたは複数のプログラムモジュールを格納することもできる。特に、大容量記憶装置５１０およびＲＡＭ５１４には、図１に関して上で詳細に説明されている、仮想化レイヤ１１６を格納することができる。大容量記憶装置５１０およびＲＡＭ５１４には、他のタイプのプログラムモジュールまたはデータを格納することもできる。
【００４９】
上で説明されている大容量記憶装置５１０に加えて、コンピュータ５００は、プログラムモジュール、データ構造体、または他のデータなどの情報を格納し、取り出すために他のコンピュータ可読媒体にアクセスすることができる。当業者であれば、コンピュータ可読媒体は、コンピュータ可読記憶媒体および通信媒体を含む、コンピュータ５００によってアクセス可能な利用可能な任意の媒体とすることができることは理解されるであろう。通信媒体は、一時的信号を含む。コンピュータ可読記憶媒体は、コンピュータ可読命令、データ構造体、プログラムモジュール、または他のデータなどの情報を格納するための方法もしくは技術で実装される揮発性および不揮発性、取り外し可能および取り外し不可能媒体を含む。例えば、コンピュータ可読記憶媒体として、限定はしないが、ＲＡＭ、ＲＯＭ、ＥＰＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリまたは他の半導体メモリ技術、ＣＤ−ＲＯＭ、デジタル多用途ディスク（ＤＶＤ）、ＨＤ−ＤＶＤ、ＢＬＵ−ＲＡＹ（登録商標）、または他の光学式記憶装置、磁気カセット、磁気テープ、磁気ディスク記憶装置もしくは他の磁気記憶装置、または所望の情報を格納するために使用することができ、しかもコンピュータ５００によってアクセス可能な他の媒体が挙げられる。
【００５０】
コンピュータ可読記憶媒体は、コンピュータ５００にロードしたときに、コンピュータシステムを汎用コンピューティングシステムから本明細書で説明されている実施形態を実行することができる専用コンピュータに変換することができるコンピュータ実行可能命令により符号化されうる。コンピュータ実行可能命令は、媒体内の特定のロケーションの電気的、光学的、磁気的、または他の物理的特性を変化させることによってコンピュータ可読記憶媒体上に符号化されうる。これらのコンピュータ実行可能命令は、上で説明されているように、状態間でＣＰＵ５０２がどのように遷移するかを指定することによってコンピュータ５００を変換する。一実施形態によれば、コンピュータ５００は、コンピュータによって実行されたときに、図２〜４に関して上で説明されている、アプリケーションの障害を予測し、診断し、障害から復旧するためにアプリケーションプログラムの正常なオペレーションをエラー状態と区別するルーチン２００、３００、および／または４００を実行するコンピュータ実行可能命令を格納するコンピュータ可読記憶媒体にアクセスすることができる。
【００５１】
さまざまな実施形態により、コンピュータ５００は、ＬＡＮ、ＷＡＮ、インターネット、または当技術分野で知られているトポロジーのネットワークなどの、ネットワーク１１０を通じてリモートのコンピューティングデバイスおよびコンピュータシステムへの論理的接続を使用しネットワーク接続環境において動作することができる。コンピュータ５００は、システムバス５０４に接続されているネットワークインターフェースユニット５０６を通じてネットワーク１１０に接続することができる。ネットワークインターフェースユニット５０６は、他の種類のネットワークおよびリモートコンピュータシステムに接続するために使用することもできることは理解されるであろう。
【００５２】
コンピュータ５００は、キーボード、マウス、タッチパッド、タッチスクリーン、電子スタイラス、または他のタイプの入力デバイスを含む、多数の入力デバイスから入力を受け取り、処理するための入出力コントローラ５１２を備えることもできる。同様に、入出力コントローラ５１２は、コンピュータモニタ、フラットパネルディスプレイ、デジタルプロジェクター、プリンター、プロッター、または他のタイプの出力デバイスへの出力を行うことができる。コンピュータ５００は、図５に示されているコンポーネントのすべてを含むわけではないか、または図５に明示的に示されていない他のコンポーネントを含むか、または図５に示されているものと完全に異なるアーキテクチャを使用することができることは理解されるであろう。
【００５３】
前記の説明に基づき、アプリケーションの障害を予測し、診断し、障害から復旧するためにアプリケーションプログラムの正常なオペレーションをエラー状態と区別する技術が本明細書に提示されていることは理解されるであろう。本明細書に提示されている発明対象は、コンピュータの構造的特徴、方法論的活動、およびコンピュータ可読記憶媒体に特有の用語を用いて説明されているが、付属の請求項で定められている発明は、本明細書で説明されている特定の特徴、活動、または媒体に必ずしも制限されないことは理解されるであろう。むしろ、特定の特徴、活動、および媒体は、請求項を実施する形態の例として開示されている。
【００５４】
上で説明されている発明対象は、例示のみによって提示されており、制限として解釈すべきでない。例示され、説明されている実施形態および用途の例に従うことなく、また以下の請求項において述べられている、本発明の精神および範囲から逸脱することなく、本明細書で説明されている発明対象にさまざまな修正および変更を加えることができる。
【符号の説明】
【００５５】
１００  オペレーティング環境
１０２、５００  コンピュータ
１０４  アプリケーションプログラム
１０６  仮想アプリケーション環境
１１０  ネットワーク
１１２  仮想アプリケーションサーバー
１１４  アプリケーションパッケージ
１１６  仮想レイヤ
１１８Ａ  ローカルのリソース
１１８Ｂ  リモートのリソース
１２０  リソースＡＰＩｓ
１２２  オペレーティングシステム
１２４  リソースアクセスログ
１２６  リソースアクセスイベント
１２８  リソースアクセスパターン
１３０  リソース書き出しデータ
２００、３００、４００  ルーチン
５０２  中央演算処理装置
５０４  システムバス
５０６  ネットワークインターフェースユニット
５０８  システムメモリ
５１０  大容量記憶装置
５１２  入出力コントローラ
５１４  ランダムアクセスメモリ
５１６  リードオンリーメモリ
【図１】
0005925803.tif 000002
【図２】
0005925803.tif 000003
【図３】
0005925803.tif 000004
【図４】
0005925803.tif 000005
【図５】
0005925803.tif 000006