以下、本実施の形態を図面を参照して説明する。
[第1の実施の形態]
第1の実施の形態を説明する。
図1は、第1の実施の形態の制御装置の例を説明する図である。
第1の実施の形態の制御装置10は、情報処理システム20で発生した障害の分析に用いられる。制御装置10は、クライアント装置でもよいしサーバ装置でもよい。制御装置10を、コンピュータ、情報処理装置、分析装置、機械学習装置などと言うこともできる。制御装置10と情報処理システム20とがネットワークで接続されていてもよい。
情報処理システム20は、コンピュータ仮想化技術を利用してアプリケーションを実行する監視対象システムである。情報処理システム20は、処理ノード21,22,23(第1、第2および第3の処理ノード)を含む複数の処理ノードを有する。
各処理ノードは、割り当てられたリソースを用いてアプリケーションを実行することができる。リソースには、プロセッサの演算能力、メモリの記憶領域、通信帯域などのハードウェアリソースが含まれ得る。各処理ノードは、物理マシンであることもあるし、仮想マシンやコンテナなどの仮想処理ノードであることもある。2以上の処理ノードを、仮想化ソフトウェアを用いて階層的に配置することが可能である。例えば、ある処理ノードがハイパーバイザを実行することで、その処理ノードの上に仮想マシンを配置することができる。また、ある処理ノードがコンテナエンジンを実行することで、その処理ノードの上にコンテナを配置することができる。物理マシンの上に1以上の仮想マシンを配置し、各仮想マシンの上に1以上のコンテナを配置することもある。
情報処理システム20では、アプリケーション24,25(第1および第2のアプリケーション)を含む複数のアプリケーションそれぞれが、何れかの処理ノードで実行される。アプリケーションを、アプリケーションソフトウェアと言うこともできる。各アプリケーションは、単一のプログラムまたは2以上のプログラムの集合によって実装され得る。各アプリケーションは、単一のプロセスまたは2以上のプロセスの集合として動作する。上記のプログラムを、アプリケーションプログラムやユーザプログラムと言うこともできる。上記のプロセスを、ユーザプロセスと言うこともできる。アプリケーションの例として、Webサーバ、業務ロジックサーバ、データベースサーバなどが挙げられる。
複数のアプリケーションは、いわゆるマイクロサービスアーキテクチャに基づいて実装されたものであってもよい。マイクロサービスアーキテクチャでは、機能が細分化された複数のアプリケーションが実装され、それら複数のアプリケーションが複数の処理ノードに分散して配置される。それら複数のアプリケーションが相互に通信して連携することで、Webサービスなどの一連のサービスがユーザに対して提供される。
一例として、処理ノード21がアプリケーション24を実行している。また、処理ノード23がアプリケーション25を実行している。処理ノード23は処理ノード22の上に存在する。ここで、処理ノード22の上に処理ノード23があるとは、両者の間に階層的な親子関係があればよい。処理ノード22が処理ノード23を直接制御しているという直接的な親子関係であってもよいし、処理ノード22と処理ノード23の間に更に他の処理ノードの層が存在するという間接的な親子関係であってもよい。物理マシンに近い方が下位の階層であり、アプリケーションに近い方が上位の階層である。
処理ノード21は、処理ノード22の上にあってもよいし、処理ノード22の上になくてもよい。よって、処理ノード21と処理ノード23は、同一の物理マシンに配置されていることもあるし、異なる物理マシンに配置されていることもある。例えば、処理ノード21,23は、物理マシンまたは仮想マシンの1つ上の階層に位置するコンテナである。また、例えば、処理ノード22は、物理マシンまたは仮想マシンである。
制御装置10は、記憶部11および処理部12を有する。記憶部11は、RAM(Random Access Memory)などの揮発性半導体メモリでもよいし、HDD(Hard Disk Drive)やフラッシュメモリなどの不揮発性ストレージでもよい。処理部12は、例えば、CPU(Central Processing Unit)、GPU(Graphics Processing Unit)、DSP(Digital Signal Processor)などのプロセッサである。ただし、処理部12は、ASIC(Application Specific Integrated Circuit)やFPGA(Field Programmable Gate Array)などの特定用途の電子回路を含んでもよい。プロセッサは、RAMなどのメモリ(記憶部11でもよい)に記憶されたプログラムを実行する。複数のプロセッサの集合を「マルチプロセッサ」または単に「プロセッサ」と言うこともある。
記憶部11は、障害情報13,14(第1および第2の障害情報)と教師ラベル15とを記憶する。障害情報13は、過去にアプリケーション24で発生した障害を示す。障害情報14は、過去に処理ノード22で発生した障害を示す。教師ラベル15は、障害情報13と障害情報14との間の関連の有無を示す。例えば、教師ラベル15は、アプリケーション24の障害の原因が、処理ノード22の障害であるか否かを示すフラグである。
障害情報13は、例えば、障害が発生したアプリケーション24を識別する情報と、障害内容を示すエラーメッセージ(第1のエラーメッセージ)とを含む。障害情報13は、アプリケーション24を実行する処理ノード21の管理ソフトウェア(例えば、コンテナライブラリ)によって生成されてもよい。また、障害情報13は、処理ノード21の管理ソフトウェアが出力するログから制御装置10が生成したものでもよい。同様に、障害情報14は、例えば、障害が発生した処理ノード22を識別する情報と、障害内容を示すエラーメッセージ(第2のエラーメッセージ)とを含む。障害情報14は、処理ノード22の管理ソフトウェア(例えば、物理マシンのホストOSまたは仮想マシンのゲストOS)によって生成されてもよい。また、障害情報14は、処理ノード22の管理ソフトウェアが出力するログから制御装置10が生成したものでもよい。
アプリケーション24の障害としては、例えば、他のアプリケーションとのデータ通信の失敗、データ処理のタイムアウトなどが挙げられる。処理ノード22の障害としては、例えば、メモリやHDDや通信インタフェースなどのハードウェアへのアクセス失敗、通信プロセスなどの管理用プロセスの異常停止などが挙げられる。
教師ラベル15は、アプリケーション24の障害に対するシステム管理者の原因分析結果を反映している。教師ラベル15は、システム管理者によって作成されてもよい。また、教師ラベル15は、システム管理者によって作成された障害対応記録から制御装置10が生成したものでもよい。例えば、アプリケーション24の障害の原因が処理ノード22の障害であると障害対応の際に結論付けられた場合、教師ラベル15は「関連あり」を示す。一方、アプリケーション24の障害の原因が処理ノード22の障害以外にあると障害対応の際に結論付けられた場合、教師ラベル15は「関連なし」を示す。
処理部12は、障害情報13,14および教師ラベル15を用いて訓練データを生成し、生成した訓練データを用いて機械学習によりモデル17を生成する。訓練データの生成では、処理部12は、障害情報13,14に基づいて、評価値16a,16b,16c(第1、第2および第3の評価値)を含む特徴情報16を生成する。そして、処理部12は、特徴情報16と教師ラベル15とを対応付けた訓練データを生成する。特徴情報16は説明変数に相当し、教師ラベル15は目的変数に相当する。
評価値16aは、処理ノード間の親子関係を示す指標である。評価値16aは、障害が発生したアプリケーション24を実行する処理ノード21と、障害が発生した処理ノード22との間の配置の階層関係を示す。例えば、評価値16aは、コンテナと物理マシンまたは仮想マシンとの間の階層関係を示す。評価値16aは、処理ノード22の上に処理ノード21が存在するか否か示すものでもよい。また、評価値16aは、処理ノード21の階層と処理ノード22の階層との間の距離(階層差)を示すものでもよい。
評価値16bは、アプリケーション間の依存関係を示す指標である。評価値16bは、障害が発生した処理ノード22の上に配置された処理ノード23で実行されるアプリケーション25と、障害が発生したアプリケーション24との間の依存関係を示す。依存関係として、例えば、アプリケーション24とアプリケーション25との間の通信関係を用いることができる。評価値16bは、アプリケーション24とアプリケーション25とが直接または間接的にデータ通信を行うか否かを示すものでもよい。また、評価値16bは、複数のアプリケーションの間の通信関係を示すサービスメッシュグラフにおいて、アプリケーション24とアプリケーション25との間の距離を示すものでもよい。
評価値16cは、障害情報13に含まれるエラーメッセージと障害情報14に含まれるエラーメッセージとの間の類似度を示す。類似度の指標として、例えば、Bag of Wordsのコサイン類似度が用いられる。ただし、編集距離(レーベンシュタイン距離)などの他の指標を用いることもできる。また、類似度を算出するにあたり、各エラーメッセージから、数値などノイズとなり得る所定の種類の文字列をフィルタにより除去する、特徴的なキーワードのみを抽出する、といった前処理を行うようにしてもよい。
訓練データの1つのレコードは、障害情報のペア毎に生成される。処理部12は、障害情報13,14のペアと同様の方法で、異なる障害情報のペアから訓練データのレコードを生成する。訓練データが生成されると、処理部12は、その訓練データを用いて機械学習によりモデル17を生成する。モデル17は、2つの障害情報についての特徴情報に対応する入力データから、当該2つの障害情報の関連性の有無を推定するものである。モデル17は、2つの障害の間に関連があるか否か判定するものでもよく、一方の障害の原因が他方の障害にあるか否か判定するものでもよい。また、モデル17は、その確信度を出力するものでもよい。
モデル17は、機械学習によってその値が決定されるパラメータを含む。モデル17は、例えば、ロジスティック回帰分析によって生成される回帰モデルである。ただし、モデル17が、サポートベクタマシン(SVM:Support Vector Machine)、ランダムフォレスト、ニューラルネットワークなどの他の種類のモデルであってもよい。
第1の実施の形態の制御装置10によれば、過去の障害を示す障害情報13,14から、アプリケーションの障害と仮想環境としてのインフラストラクチャに含まれる処理ノードの障害との間の関連の有無を判定するモデル17が生成される。生成されたモデル17を利用することで、アプリケーションの障害の原因が特定の処理ノードの障害である可能性を評価することができる。よって、システム管理者による障害対応を支援することができ、システム管理者の作業時間を短縮することが可能となる。
また、モデル17の入力となる特徴情報16には、障害が発生したアプリケーションを実行する処理ノードと、同時期に障害が発生した処理ノードとの間の階層関係を示す評価値16aが含まれる。このため、障害が下位の階層から上位の階層に伝播する態様を表現することができる。また、特徴情報16には、障害が発生したアプリケーションと、障害が発生した処理ノードの上の階層で実行されているアプリケーションとの間の依存関係を示す評価値16bが含まれる。このため、通信エラーなどによりアプリケーション間で障害が伝播する態様を表現することができる。また、特徴情報16には、エラーメッセージの類似性を示す評価値16cが含まれる。このため、障害の伝播によりアプリケーションと処理ノードとで同じ種類の障害が発生する態様を表現することができる。以上により、2つの障害の間の関連性を精度よく判定することが可能となる。
[第2の実施の形態]
次に、第2の実施の形態を説明する。
図2は、第2の実施の形態の情報処理システムの例を示す図である。
第2の実施の形態の情報処理システムは、クライアント端末31、管理サーバ100および監視対象システム200を含む。クライアント端末31、管理サーバ100および監視対象システム200は、ネットワーク30に接続されている。ネットワーク30は、LAN(Local Area Network)を含んでもよく、インターネットなどの広域ネットワークを含んでもよい。管理サーバ100は、第1の実施の形態の制御装置10に対応する。監視対象システム200は、第1の実施の形態の情報処理システム20に対応する。
クライアント端末31は、監視対象システム200を管理するシステム管理者が使用するクライアントコンピュータである。監視対象システム200に障害が発生すると、クライアント端末31は、管理サーバ100から障害情報を受信して表示する。同時期に2以上の障害が発生している場合、管理サーバ100から受信する障害情報には、ある障害の根本原因が他の障害である可能性を示す情報が含まれることがある。システム管理者は、クライアント端末31に表示された障害情報を参考にして、障害原因の特定を含む障害対応作業を行う。クライアント端末31は、システム管理者から障害対応情報の入力を受け付け、管理サーバ100に障害対応情報を送信する。
管理サーバ100は、監視対象システム200を監視するサーバコンピュータである。管理サーバ100は、監視対象システム200に含まれる構成要素の配置を示す構成情報を収集する。また、管理サーバ100は、監視対象システム200で実行されるアプリケーション間の論理関係を示すサービス情報を収集する。また、管理サーバ100は、監視対象システム200で発生した障害を示す障害情報を収集する。管理サーバ100は、障害を検出すると、クライアント端末31に障害情報を送信する。また、管理サーバ100は、クライアント端末31から障害対応情報を受信して保存する。
同時期に2以上の障害が発生している場合、管理サーバ100は、ある障害の根本原因が他の障害である可能性を評価し、評価結果を障害情報に含めてクライアント端末31に送信する。2つの障害の関連性の評価には、機械学習によって生成された原因判定モデルが使用される。原因判定モデルは、2つの障害の情報から、その2つの障害が関連している確率を示す確信度を算出する回帰モデルである。管理サーバ100は、過去に収集した構成情報、サービス情報および障害情報から訓練データを生成し、この訓練データを用いて原因判定モデルを生成する。また、管理サーバ100は、クライアント端末31からのフィードバックに基づいて、判定精度が上がるように原因判定モデルを更新する。
監視対象システム200は、コンピュータ仮想化技術を利用してアプリケーションを実行する情報処理システムである。監視対象システム200は、サービス事業者が所有するオンプレミスシステム(自社システム)であってもよいし、クラウド事業者が所有してサービス事業者に有料で使用させるクラウドシステムであってもよい。
監視対象システム200は、物理マシン201,202を含む複数の物理マシンと、スイッチ203を含む1以上の通信装置とを含む。物理マシン201,202は、スイッチ203に接続されている。物理マシン201,202は、仮想化ソフトウェアを用いて複数の仮想処理ノードを形成するサーバコンピュータである。仮想処理ノードには、ハイパーバイザを用いて形成される狭義の仮想マシンと、コンテナエンジンを用いて形成されるコンテナとが含まれる。仮想マシンは、ゲストOSを実行する独立性の高い仮想処理ノードであるのに対し、コンテナは、ゲストOSを実行しない軽量の仮想処理ノードである。
監視対象システム200では、マイクロサービスアーキテクチャに基づいて実装されたアプリケーションが実行される。Webサービスなどのサービスを実現するための機能が細分化されて複数のアプリケーションとして実装され、異なるアプリケーションが異なる仮想処理ノードで実行される。アプリケーションには、例えば、Webサーバ、業務ロジックサーバ、データベースサーバなどが含まれる。複数のアプリケーションが相互に通信して連携し、一連のサービスを実現する。第2の実施の形態では、後述するように、アプリケーションがコンテナで実行されるようにする。これにより、負荷の変動に応じたスケールアウト(サーバ台数の増加)やスケールイン(サーバ台数の減少)が容易となる。また、新しい機能をもつアプリケーションの追加も容易となる。
図3は、管理サーバのハードウェア例を示すブロック図である。
管理サーバ100は、CPU101、RAM102、HDD103、画像インタフェース104、入力インタフェース105、媒体リーダ106および通信インタフェース107を有する。管理サーバ100が有するこれらのユニットは、バスに接続されている。CPU101は、第1の実施の形態の処理部12に対応する。RAM102またはHDD103は、第1の実施の形態の記憶部11に対応する。クライアント端末31や物理マシン201,202も、管理サーバ100と同様のハードウェアを用いて実現できる。
CPU101は、プログラムの命令を実行するプロセッサである。CPU101は、HDD103に記憶されたプログラムやデータの少なくとも一部をRAM102にロードし、プログラムを実行する。CPU101は複数のプロセッサコアを備えてもよく、管理サーバ100は複数のプロセッサを備えてもよい。複数のプロセッサの集合を「マルチプロセッサ」または単に「プロセッサ」と言うことがある。
RAM102は、CPU101が実行するプログラムやCPU101が演算に使用するデータを一時的に記憶する揮発性半導体メモリである。管理サーバ100は、RAM以外の種類のメモリを備えてもよく、複数のメモリを備えてもよい。
HDD103は、OSやミドルウェアやアプリケーションソフトウェアなどのソフトウェアのプログラム、および、データを記憶する不揮発性ストレージである。管理サーバ100は、フラッシュメモリやSSD(Solid State Drive)など他の種類のストレージを備えてもよく、複数のストレージを備えてもよい。
画像インタフェース104は、CPU101からの命令に従って、管理サーバ100に接続された表示装置111に画像を出力する。表示装置111として、CRT(Cathode Ray Tube)ディスプレイ、液晶ディスプレイ(LCD:Liquid Crystal Display)、有機EL(OEL:Organic Electro-Luminescence)ディスプレイ、プロジェクタなど、任意の種類の表示装置を使用することができる。管理サーバ100に、プリンタなど表示装置111以外の出力デバイスが接続されてもよい。
入力インタフェース105は、管理サーバ100に接続された入力デバイス112から入力信号を受け付ける。入力デバイス112として、マウス、タッチパネル、タッチパッド、キーボードなど、任意の種類の入力デバイスを使用することができる。管理サーバ100に複数種類の入力デバイスが接続されてもよい。
媒体リーダ106は、記録媒体113に記録されたプログラムやデータを読み取る読み取り装置である。記録媒体113として、フレキシブルディスク(FD:Flexible Disk)やHDDなどの磁気ディスク、CD(Compact Disc)やDVD(Digital Versatile Disc)などの光ディスク、半導体メモリなど、任意の種類の記録媒体を使用することができる。媒体リーダ106は、例えば、記録媒体113から読み取ったプログラムやデータを、RAM102やHDD103などの他の記録媒体にコピーする。読み取られたプログラムは、例えば、CPU101によって実行される。なお、記録媒体113は可搬型記録媒体であってもよく、プログラムやデータの配布に用いられることがある。また、記録媒体113やHDD103を、コンピュータ読み取り可能な記録媒体と言うことがある。
通信インタフェース107は、ネットワーク30に接続され、ネットワーク30を介してクライアント端末31や物理マシン201,202と通信する。通信インタフェース107は、スイッチやルータなどの有線通信装置に接続される有線通信インタフェースである。ただし、通信インタフェース107が、基地局やアクセスポイントなどの無線通信装置に接続される無線通信インタフェースであってもよい。
次に、監視対象システム200の仮想環境について説明する。
図4は、仮想化インフラストラクチャの階層例を示す図である。
監視対象システム200は、コンピュータ仮想化技術として、ハイパーバイザ型仮想化とコンテナ型仮想化を併用する。ハイパーバイザ型仮想化では、仮想化ソフトウェアであるハイパーバイザを用いて、ゲストOSを含む仮想マシンを形成する。コンテナ型仮想化では、仮想化ソフトウェアであるコンテナエンジンを用いて、ゲストOSを含まないコンテナを形成する。物理マシン、仮想マシンおよびコンテナは何れも、アプリケーションからコンピュータとして認識され得る処理ノードである。ただし、仮想マシンおよびコンテナは、物理マシンそのものではない仮想処理ノードである。
第2の実施の形態では、コンテナがアプリケーションを実行する。監視対象システム200は、物理マシンの上にコンテナを配置する2階層の仮想環境と、物理マシンの上に仮想マシンを配置し仮想マシンの上にコンテナを配置する3階層の仮想環境とを併用する。2階層の仮想環境では、物理マシンの上で1以上のコンテナが動作し、各コンテナの上で1以上のアプリケーションが動作する。3階層の仮想環境では、物理マシンの上で1以上の仮想マシンが動作し、各仮想マシンの上で1以上のコンテナが動作し、各コンテナの上で1以上のアプリケーションが動作する。1台の物理マシンの中に、2階層の仮想環境と3階層の仮想環境とを混在させることも可能である。
2階層の仮想環境では、物理マシンがホストOS241およびコンテナエンジン244aを実行する。ホストOS241は、物理マシンのハードウェアリソースを管理し、物理マシン上でのプロセスの実行を制御する。ハードウェアリソースには、CPUの演算能力、RAMの記憶領域、HDDの記憶領域、通信インタフェースの通信帯域などが含まれる。メモリ空間がカーネル空間とユーザ空間とに分けて管理される。ホストOS241は、コンテナから見てベースOSと言われることもある。
ホストOS241は、物理マシンの稼働状況を示すログを生成する。ホストOS241が生成するログは、物理マシンの障害を示すことがある。物理マシンの障害には、ハードウェアリソースのアクセス異常や、重要な管理用プロセスの異常停止が含まれる。物理マシンは、ホスト名、IP(Internet Protocol)アドレス、MAC(Medium Access Control)アドレスなどの識別子をもつ。ホストOS241は、物理マシンの識別子を知っている。
コンテナエンジン244aは、物理マシンの直上に1以上のコンテナを形成する仮想化ソフトウェアである。コンテナエンジン244aは、物理マシンが有するハードウェアリソースの一部をコンテナに割り当てる。コンテナエンジン244aは、ホストOS241が管理するユーザ空間の一部を仮想ユーザ空間としてコンテナに提供する。コンテナエンジン244aは、物理マシン上で動作するコンテナを把握している。
また、2階層の仮想環境では、コンテナがコンテナライブラリ245aおよびサイドカープロキシ246aを実行する。コンテナライブラリ245aは、コンテナに割り当てられたハードウェアリソースを用いて、コンテナ上でのプロセスの実行を制御する。コンテナライブラリ245aは、コンテナエンジン244aから割り当てられた仮想ユーザ空間を使用する。コンテナライブラリ245aは、OSそのものではないものの、アプリケーションに対して限定的なOS機能をAPI(Application Programming Interface)として提供する。アプリケーションからOSのように見えることがあるため、コンテナライブラリ245aをコンテナOSと言うことがある。
コンテナライブラリ245aは、コンテナの稼働状況を示すログを生成する。コンテナライブラリ245aが生成するログには、コンテナが実行するアプリケーションの障害を示すことがある。アプリケーションの障害には、他のアプリケーションとの通信失敗や、アプリケーションのプロセスの異常停止が含まれる。コンテナは、ホスト名やアドレスなどの識別子をもつ。コンテナライブラリ245aは、コンテナの識別子を知っている。
サイドカープロキシ246aは、プロキシサーバのソフトウェアである。サイドカープロキシ246aは、コンテナで実行されるアプリケーションが他のアプリケーション(特に、他のコンテナ上のアプリケーション)と通信するとき、アプリケーション層において通信を中継する。これにより、サイドカープロキシ246aは、アプリケーション間で行われるメッセージ通信を把握することができる。コンテナライブラリ245aまたはサイドカープロキシ246aは、コンテナ上で動作するアプリケーションを把握している。
また、2階層の仮想環境では、上記のコンテナの上にサービスノード247aが配置される。サービスノード247aは、あるサービスを実現するために細分化されて実装された1つのアプリケーションである。サービスノード247aは、コンテナライブラリ245aの制御のもとで実行される。サービスノード247aは、例えば、Webサーバ、業務ロジックサーバ、データベースサーバなどのサーバアプリケーションである。サービスノード247aは、単一のユーザプログラムまたは2以上のユーザプログラムの集合によって実装される。また、サービスノード247aは、単一のプロセスまたは2以上のプロセスの集合として実行される。サービスノード247aは、サーバ名やURL(Uniform Resource Locator)などの識別子をもつ。
3階層の仮想環境では、物理マシンがハイパーバイザ242を実行する。ハイパーバイザ242は、物理マシンの直上に1以上の仮想マシンを形成する仮想化ソフトウェアである。ハイパーバイザ242は、物理マシンが有するハードウェアリソースの一部を仮想マシンに割り当てる。ハイパーバイザ242は、物理マシン上で動作する仮想マシンを把握している。なお、3階層の仮想環境でも、物理マシンは管理用OSを実行している。
また、3階層の仮想環境では、仮想マシンがゲストOS243およびコンテナエンジン244bを実行する。ゲストOS243は、仮想マシンに割り当てられたハードウェアリソースを管理し、仮想マシン上でのプロセスの実行を制御する。ゲストOS243は、コンテナから見てベースOSと言われることもある。ゲストOS243は、仮想マシンの稼働状況を示すログを生成する。ゲストOS243が生成するログは、仮想マシンの障害を示すことがある。仮想マシンの障害には、割り当てられたハードウェアリソースのアクセス異常や、重要な管理用プロセスの異常停止が含まれる。仮想マシンは、ホスト名やアドレスなどの識別子をもつ。ゲストOS243は、仮想マシンの識別子を知っている。
コンテナエンジン244bは、仮想マシンの直上に1以上のコンテナを形成する仮想化ソフトウェアである。コンテナエンジン244bは、仮想マシンに割り当てられたハードウェアリソースの一部を更にコンテナに割り当てる。コンテナエンジン244bは、ゲストOS243が管理するユーザ空間の一部を仮想ユーザ空間としてコンテナに提供する。コンテナエンジン244bは、仮想マシン上で動作するコンテナを把握している。
また、3階層の仮想環境では、コンテナがコンテナライブラリ245bおよびサイドカープロキシ246bを実行する。コンテナライブラリ245bの機能はコンテナライブラリ245aと同様である。サイドカープロキシ246bの機能は、サイドカープロキシ246aと同様である。また、3階層の仮想環境では、上記のコンテナの上にサービスノード247bが配置される。サービスノード247bは、1つのアプリケーションである。サービスノード247bは、サービスノード247aと通信して連携することがある。
ここで、サービスノード247a,247bなどのアプリケーションの機能に生じた障害を、アプリケーション障害または略して「アプリ障害」と言うことがある。また、物理マシン、仮想マシン、コンテナなどの処理ノードの機能に生じた障害を、インフラストラクチャ障害または略して「インフラ障害」と言うことがある。第2の実施の形態では、インフラ障害として主に、物理マシンの障害と仮想マシンの障害を想定する。
図5は、システム構成グラフの例を示す図である。
第2の実施の形態の説明では、一例として、図5に示すような処理ノードおよびサービスノードの配置を使用する。監視対象システム200は、処理ノードとして、物理マシン201,202、仮想マシン211,212およびコンテナ221,222,223,224,225,226を含む。また、監視対象システム200は、サービスノード231,232,233,234,235,236を含む。これらの処理ノードおよびサービスノードのトポロジは、スイッチ203をルートとする木構造になっている。
物理マシン201(M1)の直上には、仮想マシン211(VM1)およびコンテナ221,222(C1,C2)が配置されている。仮想マシン211の直上には、コンテナ223,224(C3,C4)が配置されている。物理マシン202(M2)の直上には、仮想マシン212(VM2)およびコンテナ226(C6)が配置されている。仮想マシン212の直上には、コンテナ225(C5)が配置されている。
コンテナ221は、サービスノード231(AP1)を実行する。コンテナ222は、サービスノード232(AP2)を実行する。コンテナ223は、サービスノード233(AP3)を実行する。コンテナ224は、サービスノード234(AP4)を実行する。コンテナ225は、サービスノード235(AP5)を実行する。コンテナ226は、サービスノード236(AP6)を実行する。
図6は、サービスメッシュグラフの例を示す図である。
サービスノード231,232,233,234,235,236は、相互に通信することで、連携して1つのサービスを実現する。サービスノード間の通信には、例えば、REST(Representational State Transfer)などの軽量な通信APIが使用される。前述のサイドカープロキシ246a,246bに相当するサイドカープロキシを用いることで、サービスノード間のメッセージ通信の状況を把握することが可能である。
サービスノードのペアの中には、直接通信することがあるペアもあるし、直接通信することがないペアもある。直接通信することがある2つのサービスノードの間にエッジを記述すると、図6に示すようなサービスメッシュグラフを生成することができる。サービスメッシュグラフは、サービスノードを示す節点とサービスノード間の通信を示す節点間のエッジとを含む無向グラフである。第2の実施の形態の説明では、一例として、図6に示すサービスメッシュグラフを使用する。
サービスノード231(AP1)は、サービスノード233と通信する。サービスノード232(AP2)は、サービスノード233,234,236と通信する。サービスノード233(AP3)は、サービスノード231,232,234と通信する。サービスノード234(AP4)は、サービスノード232,233と通信する。サービスノード235(AP5)は、サービスノード236と通信する。サービスノード236(AP6)は、サービスノード232,235と通信する。上記以外のサービスノードのペアは、直接には通信しない。ただし、このサービスメッシュグラフは連結グラフであるため、任意の2つのサービスノードを結ぶパスが存在する。よって、全てのサービスノードが連携している。
次に、原因判定モデルの生成について説明する。
図7は、原因判定モデルの生成例を示す図である。
管理サーバ100は、原因判定モデル151を生成する。原因判定モデル151は、ロジスティック回帰分析によって生成される回帰モデルである。原因判定モデル151は、1つのアプリ障害と1つのインフラ障害との間の関係を示す特徴ベクトルを、説明変数として使用する。また、原因判定モデル151は、当該1つのアプリ障害の原因が当該1つのインフラ障害である確率を示す確信度を、目的変数として使用する。
よって、原因判定モデル151は、監視対象システム200で同時期に発生したアプリ障害とインフラ障害について、アプリ障害の根本原因がインフラ障害であるか否か判定するものである。ある処理ノードにおける通信プロセスの異常終了が、あるサービスノードのメッセージ通信の失敗を引き起こすなど、インフラ障害がサービスノードに伝播することがある。その場合、システム管理者は、アプリ障害への対応として、その原因となっているインフラ障害を解消すればよい。このため、原因判定モデル151を使用することで、システム管理者に対して有用な情報を提供することができる。
原因判定モデル151を生成するにあたり、管理サーバ100は、過去に発生したアプリ障害とインフラ障害のペア毎に、特徴ベクトル141と教師ラベル142とを対応付けたレコードを生成して訓練データに追加する。特徴ベクトル141は、評価値v1,v2,v3,v4を含む4次元ベクトルである。評価値v1は、親子距離143を表す。評価値v2は、サービス距離144を表す。評価値v3は、テキスト類似度145を表す。評価値v4は、時刻差146を表す。教師ラベル142は、着目するアプリ障害の原因が、着目するインフラ障害であるか否かを示すフラグである。障害原因であるか否かは、過去にシステム管理者が行った障害対応作業の結果として把握される。インフラ障害がアプリ障害の原因でない場合、教師ラベル142が「0」となる。インフラ障害がアプリ障害の原因である場合、教師ラベル142が「1」となる。
親子距離143は、アプリ障害とインフラ障害との間の処理ノードの階層関係を示す。具体的には、親子距離143は、アプリ障害が発生したサービスノードを実行するコンテナ、すなわち、アプリ障害を検出したコンテナと、インフラ障害を検出した物理マシンまたは仮想マシンとの間の階層関係を示す。上記のコンテナが上記の物理マシンまたは仮想マシンの上方に配置されている場合、すなわち、親子関係が存在する場合、当該コンテナと当該物理マシンまたは仮想マシンとの間の階層差が、親子距離143となる。一方、上記のコンテナが上記の物理マシンまたは仮想マシンの上方に配置されていない場合、すなわち、親子関係が存在しない場合、親子距離143は「0」とみなされる。
例えば、図5において、サービスノード233でアプリ障害が発生し、仮想マシン211でインフラ障害が発生した場合、親子距離143は「1」となる。サービスノード233でアプリ障害が発生し、物理マシン201でインフラ障害が発生した場合、親子距離143は「2」となる。サービスノード233でアプリ障害が発生し、物理マシン202でインフラ障害が発生した場合、親子距離143は「0」となる。親子距離143が小さいほど(ただし「0」を除く)、インフラ障害がアプリ障害の原因である可能性が高い。なお、親子距離143は、例えば、スイッチ203をルートとする木構造において各処理ノードの深さを算出し、2つの処理ノードの深さの差を求めることで算出できる。
サービス距離144は、アプリ障害とインフラ障害に関係するサービスノード間の通信関係を示す。具体的には、サービス距離144は、アプリ障害が発生したサービスノードと、インフラ障害を検出した物理マシンまたは仮想マシンを基盤として実行されている他のサービスノードとの間の通信関係を示す。アプリ障害が発生したサービスノードと上記の他のサービスノードとの間に、サービスメッシュグラフ上のパスが存在する場合、当該パスの長さ(距離)がサービス距離144となる。上記の他のサービスノードが2以上ある場合、2以上の他のサービスノードそれぞれに対して算出される距離のうちの最小値がサービス距離144となる。一方、何れの他のサービスノードとの間にもパスが存在しない場合、サービス距離144は「0」とみなされる。
例えば、図5において、サービスノード233でアプリ障害が発生し、仮想マシン211でインフラ障害が発生したとする。この場合、インフラ障害がある仮想マシン211の上方で実行されているサービスノードは、サービスノード233,234である。すると、図6のサービスメッシュグラフにおいて、{AP3}と{AP3,AP4}の間の最小距離は「0」である。このため、サービス距離144は「0」となる。
また、例えば、図5において、サービスノード233でアプリ障害が発生し、物理マシン202でインフラ障害が発生したとする。この場合、インフラ障害がある物理マシン202の上方で実行されているサービスノードは、サービスノード235,236である。すると、図6のサービスメッシュグラフにおいて、{AP3}と{AP5,AP6}の間の最小距離は「2」である。このため、サービス距離144は「2」となる。サービス距離144が小さいほど(ただし「0」を除く)、インフラ障害がアプリ障害の原因である可能性が高い。なお、サービス距離144は、例えば、サービスメッシュグラフに対して、ダイクストラ法などの最短経路探索アルゴリズムを実行することで算出できる。
テキスト類似度145は、アプリ障害とインフラ障害との間のエラーメッセージの類似度を示す。アプリ障害のエラーメッセージとインフラ障害のエラーメッセージとの間に共通単語が多いほど、テキスト類似度145が大きくなる。テキスト類似度145が大きいほど、インフラ障害がアプリ障害の原因である可能性が高い。
テキスト類似度145として、第2の実施の形態では、Bug of Wordsのコサイン類似度を使用する。Bug of Wordsの生成では、管理サーバ100は、エラーメッセージ毎に文字列を単語に分割し、同一単語の出現数をカウントする。管理サーバ100は、エラーメッセージ毎に、各単語の出現数を列挙したベクトルをBug of Wordsとして生成する。管理サーバ100は、2つのエラーメッセージに対応する2つのベクトルの間でコサイン類似度を算出する。コサイン類似度は、0以上1以下の実数である。コサイン類似度が1に近いほど2つのエラーメッセージの類似度が高いことを意味し、コサイン類似度が0に近いほど2つのエラーメッセージの類似度が低いことを意味する。
ただし、コサイン類似度は、テキスト類似度145の一例である。テキスト類似度145の指標として、分散表現を使用するものや、編集距離(レーベンシュタイン距離)を使用するものなど、他の指標も考えられる。また、エラーメッセージからホスト名やアドレスなどの識別子を除去するなど、前処理を行うようにしてもよい。
時刻差146は、アプリ障害の発生とインフラ障害の発生の間の遅延を示す。アプリ障害の発生時刻がインフラ障害の発生時刻以後である場合、時刻差146は、アプリ障害の発生時刻からインフラ障害の発生時刻を引いた差となる。第2の実施の形態では、時刻差146の単位として時間(hour)を使用する。一方、アプリ障害の発生時刻がインフラ障害の発生時刻より前である場合、時刻差146は「0」とみなされる。例えば、アプリ障害の発生時刻が2020年4月1日16時0分であり、インフラ障害の発生時刻が2020年4月1日15時0分である場合、時刻差146は「1」となる。時刻差146が小さいほど(ただし「0」を除く)、インフラ障害がアプリ障害の原因である可能性が高い。
特徴ベクトル141が、親子距離143を示す評価値v1を含むことで、下位の階層の処理ノードの障害が上位の階層の処理ノードに影響を与えるという垂直方向の障害伝播を評価することができる。また、特徴ベクトル141が、サービス距離144を示す評価値v2を含むことで、あるサービスノードの障害が別のサービスノードに影響を与えるという水平方向の障害伝播を評価することができる。また、特徴ベクトル141が、テキスト類似度145を示す評価値v3を含むことで、障害内容の類似性を評価することができる。また、特徴ベクトル141が、時刻差146を示す評価値v4を含むことで、アプリ障害とインフラ障害の発生の同時性を評価することができる。
一方で、特徴ベクトル141は、ホスト名やアドレスなどの識別子に関する評価値を含まない。これは、処理ノードやサービスノードの識別子を使用すると、処理ノードの構成が変化した場合に原因判定モデル151の判定精度が低下し、原因判定モデル151を再生成せざるを得なくなる可能性があるためである。
監視対象システム200では、仮想マシンの追加、移動、削除により、物理マシンと仮想マシンとの対応関係が変化し得る。また、監視対象システム200では、コンテナの追加、移動、削除により、物理マシンまたは仮想マシンとコンテナとの対応関係が変化し得る。この点、原因判定モデル151の入力に識別子を使用すると、構成変更によって原因判定モデル151の有用性が低下するおそれがある。これに対して、原因判定モデル151の入力に識別子を使用しないことで、仮想マシンやコンテナの配置変更があっても、原因判定モデル151を引き続き使用することができる。
管理サーバ100は、上記のような特徴ベクトル141および教師ラベル142を含む訓練データを用いて、原因判定モデル151を生成する。原因判定モデル151は、例えば、数式(1)に示すようなロジスティック関数として表現される。数式(1)のロジスティック関数は、評価値v1’,v2’,v3,v4’から確信度Pを算出する。ここで算出される確信度Pは、0より大きく1より小さい実数である。確信度Pが1に近いほど、インフラ障害がアプリ障害の原因である可能性が高く、確信度Pが0に近いほど、インフラ障害がアプリ障害の原因である可能性が低い。
評価値v1’,v2’,v4’は、後述するように、評価値v1,v2,v4から変換されるものである。また、このロジスティック関数は、パラメータα,β1,β2,β3,β4を含む。パラメータα,β1,β2,β3,β4の値は、訓練データを用いて機械学習を通じて決定される。パラメータαは定数である。パラメータβ1は評価値v1’の重み係数である。パラメータβ2は評価値v2’の重み係数である。パラメータβ3は評価値v3の重み係数である。パラメータβ4は評価値v4’の重み係数である。
評価値v1’は、評価値v1から数式(2)のように変換される。v1=0の場合はv1’=0となり、それ以外の場合はv1が大きいほどv1’が小さくなる。評価値v1’は、0以上1以下の実数である。評価値v2’は、評価値v2から数式(3)のように変換される。v2=0の場合はv2’=0となり、それ以外の場合はv2が大きいほどv2’が小さくなる。評価値v2’は、0以上1以下の実数である。評価値v4’は、評価値v4から数式(4)のように変換される。v4=0の場合はv4’=0となり、それ以外の場合はv4が大きいほどv4’が小さくなる。評価値v4’は、0以上の実数である。
管理サーバ100は、このようにして生成した原因判定モデル151を使用して、同時期に発生したアプリ障害とインフラ障害との間の関連性を評価する。あるアプリ障害が発生したときに、その直近に2以上のインフラ障害が発生していることがある。その場合、管理サーバ100は、当該アプリ障害と当該2以上のインフラ障害それぞれとの間で、原因判定モデル151を用いて確信度を算出する。管理サーバ100は、2以上のインフラ障害を確信度の高い順にソートしてシステム管理者に提示する。
図8は、システム管理画面の例を示す図である。
システム管理画面152は、管理サーバ100からクライアント端末31に送信され、クライアント端末31のディスプレイに表示される。システム管理画面152は、あるアプリケーションに障害が発生したことを示すメッセージを含む。また、システム管理画面152は、アプリ障害と同時期に、物理マシンや仮想マシンなどの処理ノードに障害が発生していることを示すメッセージを含む。また、システム管理画面152は、インフラ障害毎に、アプリ障害の原因である可能性を示す確信度の数値を含む。インフラ障害のメッセージは、確信度の降順にソートされている。
例えば、システム管理画面152は、サービスノード233(AP3)のアプリ障害を報告する。また、システム管理画面152は、仮想マシン211(VM1)のインフラ障害と、そのインフラ障害がアプリ障害の原因である可能性が90%である旨を報告する。また、システム管理画面152は、物理マシン202(M2)のインフラ障害と、そのインフラ障害がアプリ障害の原因である可能性が40%である旨を報告する。これにより、システム管理者は、アプリ障害の原因分析と障害解消作業を効率的に行うことができる。
次に、管理サーバ100の機能について説明する。
図9は、管理サーバの機能例を示すブロック図である。
管理サーバ100は、障害情報記憶部121、構成情報記憶部122、サービス情報記憶部123およびモデル記憶部124を有する。これらの記憶部は、例えば、RAM102またはHDD103の記憶領域を用いて実現される。また、管理サーバ100は、障害監視部125、構成監視部126、サービス監視部127、学習部128および原因判定部129を有する。これらの処理部は、例えば、プログラムを用いて実現される。
障害情報記憶部121は、監視対象システム200で発生した障害を示す障害情報を記憶する。また、障害情報記憶部121は、障害に対するシステム管理者の障害対応を示す障害対応情報を記憶する。構成情報記憶部122は、物理マシン、仮想マシンおよびコンテナの配置を示す構成情報を記憶する。サービス情報記憶部123は、複数のサービスノードの間の通信関係を示すサービスメッシュグラフの情報を記憶する。また、サービス情報記憶部123は、コンテナへのサービスノードの配置を示す情報を記憶する。モデル記憶部124は、管理サーバ100が生成した原因判定モデル151を記憶する。
障害監視部125は、監視対象システム200の障害を監視する。障害監視部125は、監視対象システム200から障害に関する情報を収集し、障害情報を障害情報記憶部121に保存する。障害に関する情報は、物理マシンのホストOS、仮想マシンのゲストOS、コンテナのコンテナライブラリなどから収集することができる。監視方法として、物理マシン、仮想マシンおよびコンテナなどの各処理ノードが、障害を検出したときに、管理サーバ100に対して障害を通知するようにしてもよい。また、障害監視部125が定期的に各処理ノードからエラーログを収集するようにしてもよい。また、障害監視部125が定期的に各処理ノードから各種ログを収集し、ログを分析して障害の有無を判定し、障害を検出したときにログから障害情報を抽出するようにしてもよい。
構成監視部126は、監視対象システム200の仮想環境の構成を監視する。障害監視部125は、物理マシン、仮想マシンおよびコンテナの配置が変更されたことを検出すると、変更後の配置を示す構成情報を構成情報記憶部122に保存する。物理マシンと仮想マシンとの間の関係は、物理マシンで実行されているハイパーバイザから収集することができる。物理マシンまたは仮想マシンとコンテナとの間の関係は、物理マシンまたは仮想マシンで実行されているコンテナエンジンから収集することができる。
サービス監視部127は、監視対象システム200に配置された複数のサービスノード(アプリケーション)を監視する。サービス監視部127は、複数のサービスノードの間の通信関係が変化したことを検出すると、変更後の通信関係を示す情報をサービス情報記憶部123に保存する。サービスノード間の通信関係は、コンテナで実行されているサイドカープロキシから収集することができる。また、サービス監視部127は、コンテナへのサービスノードの配置が変更されたことを検出すると、変更後の配置を示す情報をサービス情報記憶部123に保存する。サービスノードの配置は、コンテナで実行されているコンテナライブラリまたはサイドカープロキシから収集することができる。
学習部128は、障害情報記憶部121、構成情報記憶部122およびサービス情報記憶部123に記憶された情報から訓練データを生成し、ロジスティック回帰分析により原因判定モデル151を生成する。学習部128は、原因判定モデル151をモデル記憶部124に保存する。また、学習部128は、原因判定部129による障害原因の予測に対応する障害対応情報がシステム管理者から提供されると、予測と正解との間の誤差に基づいて、判定精度が上がるように原因判定モデル151を更新する。
原因判定部129は、新たなアプリ障害が検出されると、障害情報記憶部121に記憶された障害情報に基づいて、システム管理画面152を生成してクライアント端末31に送信する。このとき、原因判定部129は、障害情報記憶部121、構成情報記憶部122およびサービス情報記憶部123に記憶された情報から特徴ベクトルを生成し、モデル記憶部124に記憶された原因判定モデル151に入力する。これにより、原因判定部129は、アプリ障害と同時期に発生しているインフラ障害それぞれの確信度を算出し、算出した確信度をシステム管理画面152に含めて送信する。
その後、原因判定部129は、クライアント端末31から障害対応情報を受信して障害情報記憶部121に保存する。障害対応情報には、確信度を算出したアプリ障害とインフラ障害のペアに対して、障害原因であったか否かを示す正解の教師ラベルが含まれる。原因判定部129は、学習部128に原因判定モデル151を更新させる。
図10は、障害テーブルの例を示す図である。
障害テーブル131は、障害情報記憶部121に記憶される。障害テーブル131は、障害ID、時刻、検出ノード、障害種別、メッセージ、対応フラグおよび原因IDの項目をそれぞれ含む複数のレコードを記憶する。障害IDとして、障害を識別する識別子が登録される。時刻として、障害が発生した時刻または障害が認識された時刻が登録される。検出ノードとして、障害を検出した処理ノードの識別子が登録される。障害を検出する処理ノードは、物理マシン、仮想マシンまたはコンテナである。
障害種別として、アプリ障害であるかインフラ障害であるかの区分が登録される。コンテナで検出されたサービスノード(アプリケーション)の障害は、アプリ障害である。物理マシンまたは仮想マシンで検出された障害は、インフラ障害である。メッセージとして、ログに含まれるエラーメッセージのテキストが登録される。対応フラグとして、システム管理者の障害対応作業によって障害が既に解消しているか未解消であるかを示すフラグが登録される。障害対応作業によって、障害原因が別の障害であるとシステム管理者が結論付けた場合、原因IDとして原因の障害の障害IDが登録される。対応フラグおよび原因IDは、障害対応情報に基づいて追記される情報である。
図11は、構成テーブルの例を示す図である。
構成テーブル132は、構成情報記憶部122に記憶される。構成テーブル132は、時刻、親ノード、子ノードおよび距離の項目をそれぞれ含む複数のレコードを記憶する。時刻として、構成変更が検出された時刻が登録される。親ノードとして、下位(物理マシンに近い方)にある処理ノードの識別子が登録される。子ノードとして、親ノードの上位(アプリケーションに近い方)にある処理ノードの識別子が登録される。
親ノードおよび子ノードはそれぞれ、物理マシン、仮想マシンまたはコンテナである。子ノードは、親ノードで実行されていることもある。また、親ノードで別の処理ノードが実行され、その処理ノードで子ノードが実行されていることもある。距離として、親ノードと子ノードとの間の親子距離が登録される。距離は、垂直方向の階層の差である。物理マシンで仮想マシンが実行され、仮想マシンでコンテナが実行されている場合、物理マシンと仮想マシンの間の距離は「1」であり、仮想マシンとコンテナの間の距離は「1」である。また、物理マシンとコンテナの間の距離は「2」である。一方の処理ノードの上に他方の処理ノードがあるという親子関係が存在しないペア、すなわち、距離が「0」のペアは、構成テーブル132に登録しなくてもよい。
図12は、サービス距離テーブルとサービス配置テーブルの例を示す図である。
サービス距離テーブル133は、サービス情報記憶部123に記憶される。サービス距離テーブル133は、時刻、始点ノード、終点ノードおよび距離の項目をそれぞれ含む複数のレコードを記憶する。時刻として、サービスメッシュグラフの変更が検出された時刻が登録される。サービスメッシュグラフは、コンテナの追加や削除、アプリケーションプログラムの更新などによって変化することがある。
始点ノードとして、直接通信する2つのサービスノードのうちの一方の識別子が登録される。終点ノードとして、直接通信する2つのサービスノードのうちの他方の識別子が登録される。サービスメッシュグラフは無向グラフであるため、始点ノードと終点ノードを入れ替えたものを別レコードとして登録しなくてもよい。距離として、サービスメッシュグラフにおける始点ノードと終点ノードとの間のパスのホップ数が登録される。
サービス配置テーブル134は、サービス情報記憶部123に記憶される。サービス配置テーブル134は、時刻、サービスノードおよびコンテナの項目をそれぞれ含む複数のレコードを記憶する。時刻として、サービスノードの配置変更が検出された時刻が登録される。サービスノードとして、配置されるサービスノードの識別子が登録される。コンテナとして、サービスノードを配置したコンテナの識別子が登録される。サービスノードの配置は、コンテナの追加や削除などによって変化することがある。
図13は、訓練データテーブルの例を示す図である。
訓練データテーブル135は、学習部128によって生成される。訓練データテーブル135が、モデル記憶部124に保存されてもよい。訓練データテーブル135は、アプリ障害、インフラ障害、評価値v1,v2,v3,v4、評価値v1’,v2’,v4’および教師ラベルの項目をそれぞれ含む複数のレコードを記憶する。
アプリ障害として、障害種別がアプリ障害である障害の障害IDが登録される。インフラ障害として、障害種別がインフラ障害である障害の障害IDが登録される。評価値v1として、アプリ障害とインフラ障害のペアに対して算出された親子距離が登録される。評価値v2として、上記のペアに対して算出されたサービス距離が登録される。評価値v3として、上記のペアに対して算出されたテキスト類似度が登録される。評価値v4として、上記のペアに対して算出された時刻差が登録される。評価値v1’,v2’,v4’として、評価値v1,v2,v4から変換された補正値が登録される。教師ラベルとして、インフラ障害がアプリ障害の原因か否かを示すフラグが登録される。
次に、管理サーバ100の処理手順について説明する。
図14は、モデル生成の手順例を示すフローチャートである。
(S10)学習部128は、障害テーブル131から、複数のアプリ障害の障害情報と複数のインフラ障害の障害情報とを分けて抽出する。
(S11)学習部128は、アプリ障害とインフラ障害の組を1つ選択する。なお、ステップS10において、m個のアプリ障害の障害情報とn個のインフラ障害の障害情報とが抽出された場合、アプリ障害とインフラ障害の組の候補はm×n個存在する。
(S12)学習部128は、アプリ障害を検出した検出ノードとインフラ障害を検出した検出ノードとを特定する。学習部128は、構成テーブル132から、2つの検出ノードの間の親子距離を検索して評価値v1とする。なお、2つの検出ノードの間の親子距離が構成テーブル132に登録されていない場合はv1=0とする。また、構成テーブル132を参照するにあたり、障害時刻の直前の情報を使用する。
(S13)学習部128は、構成テーブル132を参照して、インフラ障害を検出した検出ノードと親子関係にあるコンテナを検索する。学習部128は、サービス配置テーブル134を参照して、検索したコンテナで実行されるサービスノードを検索する。なお、サービス配置テーブル134を参照するにあたり、障害時刻の直前の情報を使用する。
(S14)学習部128は、サービス距離テーブル133から、アプリ障害が発生しているサービスノードとステップS13で検索されたサービスノードそれぞれとの間のサービス距離を検索する。学習部128は、検索されたサービス距離のうちの最小のサービス距離を評価値v2とする。なお、異なるサービスノードの間のサービス距離がサービス距離テーブル133に登録されていない場合、当該異なるサービスノードは非連結である。ステップS13で検索されたサービスノードの全てが、アプリ障害が発生しているサービスノードと非連結である場合、v2=0とする。また、サービス距離テーブル133を参照するにあたり、障害時刻の直前の情報を使用する。
(S15)学習部128は、アプリ障害の障害情報およびインフラ障害の障害情報それぞれからエラーメッセージを抽出する。学習部128は、抽出した2つのエラーメッセージの間でテキスト類似度を算出して評価値v3とする。例えば、学習部128は、エラーメッセージ毎にテキストを単語に分割してBug of Wordsのベクトルを算出し、2つのベクトルの間でコサイン類似度を算出して評価値v3とする。
(S16)学習部128は、アプリ障害の障害情報およびインフラ障害の障害情報それぞれから障害時刻を抽出する。学習部128は、抽出した2つの障害時刻の間の時刻差を算出して評価値v4とする。時刻差の単位は、例えば、時間(hour)とする。なお、インフラ障害の方がアプリ障害より遅い場合、v4=0とする。
(S17)学習部128は、ステップS12で算出した評価値v1を、数式(2)に従って評価値v1’に変換する。また、学習部128は、ステップS14で算出した評価値v2を、数式(3)に従って評価値v2’に変換する。また、学習部128は、ステップS16で算出した評価値v4を、数式(4)に従って評価値v4’に変換する。学習部128は、評価値v1’,v2’,v3,v4’を含む特徴ベクトルを生成する。
(S18)学習部128は、アプリ障害の障害情報に含まれる原因IDに基づいて、着目するインフラ障害がアプリ障害の原因であるか判断する。インフラ障害がアプリ障害の原因でない場合、教師ラベルを「0」に決定する。インフラ障害がアプリ障害の原因である場合、教師ラベルを「1」に決定する。
(S19)学習部128は、ステップS17で生成した特徴ベクトルとステップS18で決定した教師ラベルとを対応付けて、訓練データに追加する。
(S20)学習部128は、ステップS11において、全てのアプリ障害とインフラ障害の組を選択したか判断する。全ての組を選択した場合はステップS21に進み、未選択の組がある場合はステップS11に戻る。
(S21)学習部128は、ステップS10~S20を通じて生成された訓練データを用いて、ロジスティック回帰分析により原因判定モデル151を生成する。ここでは、数式(1)に含まれるパラメータα,β1,β2,β3,β4が決定される。学習部128は、生成した原因判定モデル151をモデル記憶部124に保存する。
図15は、障害原因判定の手順例を示すフローチャートである。
(S30)原因判定部129は、新たなアプリ障害が発生したことを検出する。すると、原因判定部129は、障害テーブル131から、当該新たなアプリ障害の障害情報と未解消のインフラ障害の障害情報とを抽出する。
(S31)原因判定部129は、インフラ障害を1つ選択する。
(S32)原因判定部129は、前述のステップS12と同様にして、アプリ障害の検出ノードとインフラ障害の検出ノードの間の親子距離を示す評価値v1を算出する。
(S33)原因判定部129は、前述のステップS13と同様にして、インフラ障害を検出した処理ノードの上位階層で実行されているサービスノードを検索する。
(S34)原因判定部129は、前述のステップS14と同様にして、サービスノード間のサービス距離を示す評価値v2を算出する。
(S35)原因判定部129は、前述のステップS15と同様にして、アプリ障害とインフラ障害の間のエラーメッセージの類似度を示す評価値v3を算出する。
(S36)原因判定部129は、前述のステップS16と同様にして、アプリ障害とインフラ障害の間の時刻差を示す評価値v4を算出する。
(S37)原因判定部129は、前述のステップS17と同様にして、評価値v1,v2,v4を評価値v1’,v2’,v4’に変換し、評価値v1’,v2’,v3,v4’を含む特徴ベクトルを生成する。
(S38)原因判定部129は、ステップS37で生成した特徴ベクトルを原因判定モデル151に入力し、確信度を算出する。
(S39)原因判定部129は、ステップS31において、全てのインフラ障害を選択したか判断する。全てのインフラ障害を選択した場合はステップS40に進み、未選択のインフラ障害がある場合はステップS31に戻る。
(S40)原因判定部129は、未解消のインフラ障害を確信度の降順にソートする。
(S41)原因判定部129は、アプリ障害の情報と、確信度の降順に並べた未解消のインフラ障害の情報と、各インフラ障害の確信度とを含むシステム管理画面152を生成し、システム管理画面152をクライアント端末31に送信する。
図16は、モデル更新の手順例を示すフローチャートである。
このモデル更新は、図15の障害原因判定の後に実行される。
(S50)原因判定部129は、クライアント端末31から障害対応情報を受信する。障害対応情報は、アプリ障害の障害IDと、インフラ障害の障害IDと、そのインフラ障害がアプリ障害の原因であったか否かを示す教師ラベルとを含む。教師ラベルは、障害対応作業を通じてシステム管理者により判断された結果である。そのインフラ障害がアプリ障害の原因でない場合は教師ラベルが「0」となる。そのインフラ障害がアプリ障害の原因である場合は教師ラベルが「1」となる。原因判定部129は、受信した障害対応情報に基づいて、障害テーブル131を更新する。
(S51)学習部128は、前述のステップS37で生成された特徴ベクトルが保存されている場合、その特徴ベクトルを取得する。一方、学習部128は、特徴ベクトルが保存されていない場合、ステップS32~S37と同様にして特徴ベクトルを再生成する。
(S52)学習部128は、前述のステップS38で算出された確信度が保存されている場合、その確信度を取得する。一方、学習部128は、確信度が保存されていない場合、ステップS38と同様にして確信度を再算出する。
(S53)学習部128は、原因判定モデル151、特徴ベクトル、確信度および教師ラベルを用いて、オンライン学習により原因判定モデル151を更新する。オンライン学習には、確率的勾配降下法などの勾配法を用いることができる。例えば、学習部128は、確信度と教師ラベルの間の誤差を算出し、パラメータα,β1,β2,β3,β4の値をそれぞれ微少量だけ変化させたときの誤差の変化量から、パラメータα,β1,β2,β3,β4に対する誤差の勾配を算出する。学習部128は、誤差の勾配に所定の学習率を乗じた分だけパラメータα,β1,β2,β3,β4の値を変化させる。ただし、オンライン学習を行う代わりに、今回の特徴ベクトルと教師ラベルの組を訓練データに追加して、前述のステップS21の機械学習を再実行してもよい。
第2の実施の形態の情報処理システムによれば、アプリ障害とインフラ障害とが同時期に発生している場合に、インフラ障害がアプリ障害の根本原因である可能性が評価され、その確信度がシステム管理者に対して提示される。複数のインフラ障害が発生している場合、確信度の高い順にそれら複数のインフラ障害が提示される。これにより、システム管理者の障害対応作業の負担が軽減され、障害解消までの所要時間を短縮できる。特に、物理マシン、仮想マシンおよびコンテナが階層的に配置された複雑な仮想環境において、細分化された多数のアプリケーションが多数のコンテナによって分散して実行されていても、インフラ障害が原因で引き起こされるアプリ障害の原因分析を効率化できる。
また、アプリ障害とインフラ障害の関連性の評価には、機械学習によって過去の障害情報から生成された原因判定モデルが使用される。原因判定モデルの説明変数には、処理ノードの階層関係を示す評価値が含まれる。よって、下位の階層の処理ノードで発生した障害が上位の階層の処理ノードに影響を与えるという垂直方向の障害伝播の可能性を考慮することができる。また、特徴ベクトルには、アプリケーション間の通信関係を示す評価値が含まれる。よって、あるアプリケーションの障害が別のアプリケーションに影響を与えるという水平方向の障害伝播の可能性を考慮することができる。
また、特徴ベクトルには、エラーメッセージの類似度を示す評価値が含まれる。よって、障害内容の類似性を考慮することができる。また、特徴ベクトルには、アプリ障害とインフラ障害の時刻差を示す評価値が含まれる。よって、遅延時間の側面から障害伝播の可能性を評価することができる。このように、上記の4つの観点を総合的に利用することで、原因判定モデルの判定精度を向上させることができる。また、原因判定モデルの入力には、物理マシン、仮想マシン、コンテナおよびアプリケーションの識別子は使用されない。このため、仮想環境の構成変更が行われても、生成した原因判定モデルの判定精度が低下しづらく、原因判定モデルの有用性を維持することができる。