(57)【特許請求の範囲】
【請求項１】
ソフトウェアスタック上で動作する業務アプリケーションで発生した障害の原因を解析することを支援する障害原因解析支援装置であって、
前記業務アプリケーションが出力するトレース情報に基づいて、前記業務アプリケーションを起動したリクエストを特定して抽出するリクエスト抽出手段と、
前記トレース情報に基づいて、前記業務アプリケーションを動作させていたソフトウェアのコンポーネントを抽出するコンポーネント抽出手段と、
前記業務アプリケーションを動作させていたソフトウェアのコンポーネントが依存するコンポーネントを抽出して前記コンポーネント抽出手段へと抽出したリストを出力する依存関係解決手段と、を有し、
前記コンポーネント抽出手段は、前記抽出したリストに記載されたコンポーネントをコンポーネント群から抽出し、抽出コンポーネント群として出力することを特徴とする、障害原因解析支援装置。
【請求項２】
前記ソフトウェアスタックから、あらかじめ定義された所定の情報を採取するソフトウェアスタック情報採取手段を、さらに有することを特徴とする、請求項１記載の障害原因解析支援装置。
【請求項３】
前記ソフトウェアスタックから採取する前記所定の情報は、スタックを生成したソフトウェアの設定と、当該ソフトウェアが依存する他のソフトウェアの情報と、を含むことを特徴とする、請求項２記載の障害原因解析支援装置。
【請求項４】
ソフトウェアスタック上で動作する業務アプリケーションで発生した障害の原因を解析することを支援する障害原因解析支援方法であって、
前記業務アプリケーションが出力するトレース情報に基づいて、前記業務アプリケーションを起動したリクエストを特定して抽出するリクエスト抽出工程と、
前記トレース情報に基づいて、前記業務アプリケーションを動作させていたソフトウェアのコンポーネントを抽出するコンポーネント抽出工程と、
前記業務アプリケーションを動作させていたソフトウェアのコンポーネントが依存するコンポーネントを抽出して前記コンポーネント抽出工程へと抽出したリストを出力する依存関係解決工程と、を含み、
前記コンポーネント抽出工程は、前記抽出したリストに記載されたコンポーネントをコンポーネント群から抽出し、抽出コンポーネント群として出力することを特徴とする、障害原因解析支援方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、障害原因解析支援装置、方法に関し、特に、他のソフトウェアの基盤上で動作する業務アプリケーションに障害が発生した場合の原因解析を支援する技術に関する。
【背景技術】
【０００２】
近年、ソフトウェアは膨大化、複雑化しており、障害発生時に障害箇所を特定することが困難になってきている。そこで、障害が関連するソフトウェア要素のみを抽出して再構築し、障害を再現させるという手法が定着してきている。
【０００３】
従来のソフトウェアトラブル対応方法の一例が、特許文献１、特許文献２に記載されている。図７に示すように、この従来のソフトウェアトラブル対応方法は、開発元(701)と、利用者(702)と、情報採取プログラム(703)と、環境情報(704)と、実行データ情報(705)とから構成されている。
【０００４】
このような構成を有する従来のソフトウェアトラブル対応方法はつぎのように動作する。
すなわち、利用者(702)側で発生したソフトウェアの開発元(701)から情報採取プログラム(703)を入手し、利用者側でその情報採取プログラム(703)を動作させ、その情報採取プログラム(703)から得られた環境情報(704)、実行データ情報(705)から開発元でエラー原因を特定する。
【０００５】
しかし、これらの方法は該当するソフトウェアのデータのみ採取され、自身のソフトウェアが単独で動作している分には何も問題がなく、該当するソフトウェアとその周辺のソフトウェアとの関連により問題が発生するケースでは問題の原因特定が困難となってしまう。
【０００６】
また、特許文献３には既存のコンポーネント群から、コンポーネントを抽出してあらたな環境を容易に構築できる方法が記載されている。しかし、この方法では、既存システムで発生した環境で起きた事象を再現させることは困難である。
【０００７】
また、特許文献４には、例えば段落００１３ないし００１７を参照すると、制御プログラムを構成する関数群の各関数に識別コードを付与し、関数を呼び出して実行された履歴がその識別コードで記憶され、制御プログラムの実行における各関数の実行履歴を特定できるとする旨、記載がある。
【特許文献１】特開２００５−２３４９８７号公報
【特許文献２】特開２００３−２５６２４２号公報
【特許文献３】特開２００６−０３１４２４号公報
【特許文献４】特開２００１−０９２６９１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００８】
従来の技術はいずれも、障害の発生した環境を開発元で確認するための情報を十分に収集することができていないというのが実情である。しかしながら、障害が発生した原因を開発元で適切に解析するためには、障害の発生した環境の情報を十分に収集することが必要である。
【０００９】
そこで本発明は、上記実情に鑑みて、実際に発生した障害と同様の動作を開発元で確認できる環境の構築を容易にすることを目的とする。
【課題を解決するための手段】
【００１０】
上記目的を達成するために本発明は、以下の構成を備えることを特徴とする。
【００１１】
本発明に係る障害原因解析支援装置は、ソフトウェアスタック上で動作する業務アプリケーションで発生した障害の原因を解析することを支援する障害原因解析支援装置であって、前記業務アプリケーションが出力するトレース情報に基づいて、前記業務アプリケーションを起動したリクエストを特定して抽出するリクエスト抽出手段と、前記トレース情報に基づいて、前記業務アプリケーションを動作させていたソフトウェアのコンポーネントを抽出するコンポーネント抽出手段と、前記業務アプリケーションを動作させていたソフトウェアのコンポーネントが依存するコンポーネントを抽出して前記コンポーネント抽出手段へと抽出したリストを出力する依存関係解決手段と、を有し、前記コンポーネント抽出手段は、前記抽出したリストに記載されたコンポーネントをコンポーネント群から抽出し、抽出コンポーネント群として出力することを特徴とする。
【００１２】
本発明に係る障害原因解析支援方法は、ソフトウェアスタック上で動作する業務アプリケーションで発生した障害の原因を解析することを支援する障害原因解析支援方法であって、前記業務アプリケーションが出力するトレース情報に基づいて、前記業務アプリケーションを起動したリクエストを特定して抽出するリクエスト抽出工程と、前記トレース情報に基づいて、前記業務アプリケーションを動作させていたソフトウェアのコンポーネントを抽出するコンポーネント抽出工程と、前記業務アプリケーションを動作させていたソフトウェアのコンポーネントが依存するコンポーネントを抽出して前記コンポーネント抽出工程へと抽出したリストを出力する依存関係解決工程と、を含み、前記コンポーネント抽出工程は、前記抽出したリストに記載されたコンポーネントをコンポーネント群から抽出し、抽出コンポーネント群として出力することを特徴とする。
【発明の効果】
【００１４】
本発明によれば、実際に発生した障害と同様の動作を開発元で確認できる環境の構築を容易にすることが可能となる。
【発明を実施するための最良の形態】
【００１５】
（第１の実施形態）
あるシステムを構築する場合、複数のソフトウェアを基盤としてシステムを構築することが一般的になっている。通常、それら複数のソフトウェアを積み重ねたソフトウェアスタックを基盤として、システム要件に合わせた業務アプリケーションプログラムが実装される。
【００１６】
ここで、業務アプリケーションプログラム自身に全く問題が無い場合であっても、基盤となるソフトウェアスタックに含まれるソフトウェアの利用方法の間違いや、そのソフトウェア自身が抱える問題によって業務アプリケーションプログラムの動作に支障を与える場合がある。
【００１７】
また、この障害の原因となったソフトウェア（以下、本明細書では、「該当ソフトウェア」と呼ぶ）と、業務アプリケーションプログラムはそれぞれ開発元が異なるため、該当ソフトウェアの開発元は、その該当ソフトウェア自身が出力するトレース等を採取して問題が発生した原因の特定を行う。
【００１８】
しかし、この該当ソフトウェア自身も幾つかのソフトウェアスタック上に成り立っていることが多く、また、この該当ソフトウェア自身とは関係は無いものの、この該当ソフトウェアと並行した関係になるソフトウェアとそのソフトウェアスタックを共有しているケースも少なくない。このような状況で、該当ソフトウェア自身のトレースや設定を用いて、該当ソフトウェアがもつ問題を特定できない場合、その原因は動作する業務アプリケーションプログラムと設定の組み合わせや、並行するソフトウェアが与えるソフトウェアスタックの共有部分への影響によるところが大きい。
【００１９】
このような問題の調査に必要となる情報を得るためには、業務アプリケーションプログラムが各ソフトウェアに対してどのような操作を行うのか、並行するソフトウェアがどのような設定で共有するソフトウェアスタックに影響を及ぼすのかを知る必要がある。
【００２０】
これら該当ソフトウェアの周辺で動作しているプログラムの情報を得ることは非常に困難であることが多い。例えば、非常に大規模な業務アプリケーションプログラムである場合、または、システムが長期の保守・運用フェーズに入り、業務アプリケーションプログラムの詳細を把握している要員がいなくなった場合、業務アプリケーションプログラムの構成を正確に理解することが難しく、業務アプリケーションプログラムの開発元から該当ソフトウェアの開発元に十分な情報を与えることができない。
【００２１】
また、業務アプリケーションプログラムが大規模である場合や、セキュリティ上の問題から、業務アプリケーションプログラムのプログラムコードを該当ソフトウェアの開発元に提出することが難しいケースもある。
【００２２】
さらに、並行して動作する、ソフトウェアスタックを共有しているソフトウェアの開発元と該当するソフトウェアの開発元が、異なる企業などのため、共有するソフトウェアスタックに対してどのような処理を実施しているかの詳細を入手できないケースもある。
【００２３】
これらの理由から、該当ソフトウェアの開発元は発生した事象から原因となり得る操作・設定を推測し、実際にその操作や設定によってシステム上で発生した問題と同様の事象が発生するのかどうかを究明している。
【００２４】
しかしながら、従来の技術はいずれも、障害の発生した環境を開発元で確認するための情報を十分に収集することができていないというのが実情である。本実施形態は、このような実情を次のような構成を特徴とすることによって解決している。
【００２５】
すなわち、本実施形態は、複数の異なるベンダ、または、部門（以下開発元）によって開発されたソフトウェアスタックにより構築されたシステムにおいて、システム上で動作する業務アプリケーションプログラムは複数のコンポーネントから構成され、各コンポーネントがソフトウェアスタック内の各ソフトウェアを利用して処理を実行している。この業務アプリケーションプログラムが出力するトレース情報を基に、障害の原因となったソフトウェア（以下該当ソフトウェア）の動作を再現できる、必要最低限のコンポーネントや、障害が発生した際に業務アプリケーションプログラムを起動したリクエストや、ソフトウェアスタック用の設定情報や構成情報（以下ソフトウェアスタック情報）を、システム中から採取する。
【００２６】
本実施形態によると、システム上で動作した業務アプリケーションプログラムのトレース情報を用いて、問題が発生した処理を実現しているうちの最小限のコンポーネントを抽出することで、問題が発生した該当ソフトウェアの開発元に、業務アプリケーションプログラムと同じ操作をその該当ソフトウェアや、ソフトウェアスタック内の他のソフトウェアに対して行うコンポーネント群を容易に提供することができる。
【００２７】
また、システム上で動作するソフトウェアスタック内の各ソフトウェア用の設定や構成情報をそれぞれ抽出することで、発生した問題を再現しようとする該当ソフトウェアの開発元でシステムと同等の構成を容易に構築することができる。換言すれば、本実施形態により、システムで発生した問題を再現させることのできる擬似システム（再現プログラム）を、該当ソフトウェアの開発元で再現可能になり、発生した問題の原因を容易に特定することが可能になる。
【００２８】
本発明の第１の実施形態の構成を図面を参照しながら具体的に説明する。本実施形態は、既存システムが生成するトレース情報を基に開発元で障害を再現するために必要な情報を抽出するための構成である。
【００２９】
図１を参照すると、本発明の第１の実施形態は、動作コンポーネント抽出手段(101)と、該当トレース指定手段(107)と、メタ情報採取手段(108)と、ソフトウェアスタック定義入力手段(109)と、解析の対象となる対象システム(110)と、抽出リクエスト(116)と、抽出コンポーネント(117)を複数持つ抽出コンポーネント群(118)と、ソフトウェアスタック情報(119)を複数持つソフトウェアスタック情報群(120)と、上記各手段からの出力結果を開発元へ送付するための送付手段(130)と、を有する構成である。
【００３０】
動作コンポーネント抽出手段(101)は、抽出トレース情報(102)と、リクエスト抽出手段(103)と、依存関係解決手段(104)と、抽出コンポーネントリスト(105)と、コンポーネント抽出手段(106)と、を含む。
【００３１】
対象システム(110)は、トレース情報(111)を複数格納したトレース情報群(112)と、コンポーネント(113)を格納したコンポーネント群(114)と、ソフトウェアスタック(115)と、を含む。
【００３２】
図２を参照すると、トレース情報(111)の一例が示されている。図２によると、トレース情報群(112)は対象システム(110)で動作した業務アプリケーションプログラムのトレース情報(111)の記録としては、トレースが出力された時刻と、一連のトレース情報を識別するトレースIDと、トレース情報を出力したコンポーネントの名前と、動作情報と、が記録される。抽出トレース情報(102)は、指定されたトレースIDの情報のみが記録される。
【００３３】
図３を参照すると、ソフトウェアスタック定義入力手段(109)により入力されるソフトウェアスタック定義の一例が示されている。図３によると、ソフトウェアスタック定義には、採取すべき情報と、そのソフトウェアが依存しているソフトウェアと、が記載される。
【００３４】
これらの手段はそれぞれ概略次のように動作する。
動作コンポーネント抽出手段(101)は、トレース情報群(112)から、該当トレース指定手段(107)により指定されたトレースIDが一致するトレース情報(111)を特定し、抽出トレース情報(102)を取得する。図２を参照すると、トレースIDとしてTRACEID_1が指定された場合、TRACEID_1に関連する情報のみを抽出トレース情報(102)として扱う。
【００３５】
リクエスト抽出手段(103)は、抽出トレース情報(102)からトレースが開始されるためのリクエストを特定し抽出リクエスト(116)を出力する。依存関係解決手段(104)は抽出トレース情報(102)から動作したコンポーネント（図２ではComponent1〜7）と、そこで抽出されたコンポーネントが依存しているコンポーネントを特定し、抽出コンポーネントリスト(105)に記載する。コンポーネント抽出手段(106)は、抽出コンポーネントリスト(105)に記載されたコンポーネント(113)をコンポーネント群(114)から抽出し、抽出コンポーネント群(118)として出力する。
【００３６】
動作コンポーネント抽出手段(101)は、該当トレース指定手段(107)により特定されたトレースの開始から終了までの時刻に動作していた他のトレース情報を特定し、前記同様、そのトレース情報から抽出リクエスト(116)と抽出コンポーネント群(118)を出力する。
【００３７】
ソフトウェアスタック情報採取手段(108)はあらかじめソフトウェアスタック定義入力手段(109)によって入力された、それぞれのソフトウェアに対して採取すべき情報と、そのソフトウェアが依存しているソフトウェアの記録したソフトウェアスタック定義（図３）に従い、ソフトウェアスタック(115)内の各ソフトウェアに関するソフトウェアスタック情報(119)を採取し、ソフトウェアスタック情報群(120)として出力する。
【００３８】
次に、図１及び図２及び図３及び図4のフローチャートを参照して本発明の第１の実施形態の動作について詳細に説明する。
【００３９】
まず、動作コンポーネント抽出手段(101)は、該当トレース指定手段(107)により指定されたトレースIDを取得する(ステップＳ１０１)。次に、トレース情報群(112)からトレースIDと一致するトレース情報(111)を特定し、抽出トレース情報(102)を取得する(ステップＳ１０２)。
【００４０】
図２を参照すると、抽出トレース情報(102)には複数のコンポーネントが出力した情報が、各行に記録されている（以下この一つ一つの情報をトレースエントリと呼ぶ）。リクエスト抽出手段(103)は抽出トレース情報(102)からトレースが開始されるきっかけとなったリクエストを抽出し、抽出リクエスト(116)として出力する(ステップＳ１０３)。
【００４１】
次に、抽出トレース情報(102)に含まれるトレースエントリを順次処理し(ステップＳ１０４〜１０９)、依存関係解決手段(104)によりトレースエントリを出力しているコンポーネントを抽出コンポーネントリスト(105)に追加する（ステップＳ１０７）。また、依存関係解決手段(104)は、そのトレースエントリを出力したコンポーネントのプログラムコードを解析し、そのコンポーネントが依存する全てのコンポーネントを特定し、抽出コンポーネントリスト(104)に追加する(ステップＳ１０８)。
【００４２】
トレースエントリを全て処理し終えると、コンポーネント抽出手段(106)は抽出コンポーネントリスト(105)に登録された全てのコンポーネントをコンポーネント群(114)から抽出し、抽出コンポーネント群(118)として出力する(ステップＳ１１０)。ここで出力された抽出コンポーネント群(118)と抽出リクエスト(116)を障害に直接関連しているコンポーネント情報として出力する。
【００４３】
次に、動作コンポーネント抽出手段(101)は、該当トレース指定手段(107)により指定されたトレースIDと一致する抽出トレース情報(102)の開始時刻、終了時刻を取得し、トレース情報群(112)に登録されている全てのトレース情報(111)について、その実行時間が、前記開始時刻と終了時刻内と重なるトレース情報を抽出トレース情報(102)として抽出し、前記ステップと同様にして抽出リクエスト(116)と、抽出コンポーネント群(118)の抽出を行い、障害発生時に並行動作していた、障害に関連するコンポーネント情報として出力する。
【００４４】
また、ソフトウェアスタック情報採取手段(108)はソフトウェアスタック定義入力手段(109)より入力された、ソフトウェア毎に採取すべき情報と、そのソフトウェアが依存するソフトウェアの一覧が記載されているソフトウェアスタック定義（図３）に従って、ソフトウェアスタック(115)から情報を採取し、採取した情報と、ソフトウェアスタック定義に記載された依存するソフトウェアの情報とを合わせ、ソフトウェアスタック情報群(120)として出力する。
【００４５】
出力された抽出リクエスト(116)と、抽出コンポーネント(118)と、ソフトウェアスタック情報群(120)と、を送付手段(130)により該当ソフトウェアの開発元に提供し、開発元で原因解析・問題の修正を行う。
【００４６】
次に、本発明の第１の実施形態の効果について説明する。
本発明の第１の実施形態では、トレース情報を基にそのトレースを出力したコンポーネントと、そのコンポーネントが依存しているコンポーネントとを自動的に抽出するように構成されているため、コンポーネントの内容を把握することなく、事象の再現のために必要なコンポーネントとそれらを起動させるリクエストを抽出できる。
【００４７】
また、本発明の第１の実施形態では、さらに、コンポーネントを動作させていたソフトウェアスタックを構成する、各ソフトウェアの設定ファイル等のメタ情報を同時に採取するように構成されているため、抽出されたコンポーネントを動作させるために必要なソフトウェアスタックの構成を他のサーバ環境でも再構築することができる。
【００４８】
その結果、次のような効果を奏する。第１の効果は、該当ソフトウェアの開発元での障害原因の特定が容易になることにある。その理由は、障害が発生した実際のシステムから得たトレース情報を元に、そのトレースに関連するプログラムのみを抽出し、さらにそのシステムを構成する上で必要なソフトウェアスタックの情報を採取することで、開発元であっても容易に障害が発生した状況を再現できるためである。
【００４９】
そして、第２の効果は、該当ソフトウェアの開発元で障害原因の修正を行った後、開発元、または、システムを管理する側でその障害原因が本当に取り除かれているかの評価を容易に行えることにある。その理由は、第１の効果の理由と同様、障害が発生したシステムと同等の環境・動作を容易に再現できるためである。
【００５０】
なお、上記第１の実施形態の各構成要素は、ソフトウェア、ハードウェア、又は、ソフトウェア及びハードウェアの組み合わせ、のいずれかによって実現することができる。ハードウェアとしては一般的な情報処理装置を利用することができる。そのような情報処理装置を用いて、上述した各構成要素の機能を実現させるプログラムも、本発明の一実施の形態である。
【００５１】
（第２の実施形態）
次に、本発明の第２の実施形態の構成について図面を参照して詳細に説明する。なお、第１の実施形態と同等の作用をする部分については説明を省略する。
【００５２】
図５を参照すると、システムが本発明に十分なトレース情報を採取できない場合、既存プログラムに対して自動的にトレース情報を採取するトレース採取装置(221)を用いて、必要なトレース情報の採取を行い、監視装置(207)を用いてトレース情報を監視し障害発生を検知すると、必要な情報を自動的に採取する再現プログラム抽出装置(222)の構成である。
【００５３】
トレース採取装置(221)は、例えばJava（登録商標）におけるバイトコード変換手法を利用して、既存プログラムに修正を加えることなく必要なトレース情報を採取するコードを埋め込むことで、既存システムに対しても本発明を適用することができる。
【００５４】
（第３の実施形態）
次に、本発明の第３の実施形態の構成について図面を参照して詳細に説明する。なお、第１の実施形態と同等の作用をする部分については説明を省略する。
【００５５】
図６を参照すると、ソフトウェアの開発元に提供する出力情報の中に、個人情報等の機密事項が含まれる場合、情報変換手段(321)によって機密情報を変換することで、異なる開発元に対しても情報を提供できるようにするための構成である。
【００５６】
以上、本発明の好適な実施の形態について説明したが、本発明はこれに限定されるものではなく、要旨を逸脱しない範囲内で種々の変形実施が可能である。また、上記実施形態で説明した各構成は、互いに組み合わせることが可能である。
【図面の簡単な説明】
【００５７】
【図１】本発明の第１の実施形態の構成を示すブロック図である。
【図２】本発明の第１の実施形態における業務アプリケーションプログラムのトレース情報を説明するための図である。
【図３】本発明の第１の実施形態におけるソフトウェアスタック定義を説明するための図である。
【図４】本発明の第１の実施形態における動作コンポーネント抽出手段の動作を示す流れ図である。
【図５】本発明の第２の実施形態の構成を示すブロック図である。
【図６】本発明の第３の実施形態の構成を示すブロック図である。
【図７】従来のソフトウェアトラブル対応方法を示すブロック図である。
【符号の説明】
【００５８】
１０１    動作コンポーネント抽出手段
１０２    抽出トレース情報
１０３    リクエスト抽出手段
１０４    依存関係解決手段
１０５    抽出コンポーネントリスト
１０６    コンポーネント抽出手段
１０７    該当トレース指定手段
１０８    ソフトウェアスタック情報採取手段
１０９    ソフトウェアスタック定義入力手段
１１０    対象システム
１１１    トレース情報
１１２    トレース情報群
１１３    コンポーネント
１１４    トレース情報群
１１５    ソフトウェアスタック
１１６    抽出リクエスト
１１７    抽出コンポーネント
１１８    抽出コンポーネント群
１１９    ソフトウェアスタック情報
１２０    ソフトウェアスタック情報群
１３０    送付手段
【図１】
0004911074.tif 000002
【図２】
0004911074.tif 000003
【図３】
0004911074.tif 000004
【図４】
0004911074.tif 000005
【図５】
0004911074.tif 000006
【図６】
0004911074.tif 000007
【図７】
0004911074.tif 000008