一実施例について、図面を参照して説明する。なお、以降に説明する実施例は請求の範囲にかかる発明を限定するものではなく、また実施例の中で説明されている諸要素及びその組み合わせの全てが発明の解決手段に必須であるとは限らない。
なお、以降の説明においては、「aaaテーブル」の表現にて各種情報を説明することがあるが、各種情報は、テーブル以外のデータ構造で表現されていてもよい。データ構造に依存しないことを示すために「aaaテーブル」を「aaa情報」と呼ぶことができる。
また、以降の説明においては、「インターフェース部」は、1以上のインターフェースデバイス、具体的には、ユーザインターフェース部と、通信インターフェース部とのうちの少なくとも1つを含んでよい。ユーザインターフェース部は、1以上のI/Oデバイス(例えば入力デバイス(例えばキーボード及びポインティングデバイス)と出力デバイス(例えば表示デバイス))と表示用計算機とのうちの少なくとも1つのI/Oデバイスを含んでよい。通信インターフェース部は、1以上の通信インターフェースデバイスを含んでよい。1以上の通信インターフェースデバイスは、1以上の同種の通信インターフェースデバイス(例えば1以上のNIC(Network Interface Card))であってもよいし2以上の異種の通信インターフェースデバイス(例えばNICとHBA(Host Bus Adapter))であってもよい。
また、以降の説明においては、「記憶部」は、1以上のメモリを含む。記憶部に関して少なくとも1つのメモリは、揮発性メモリでよい。記憶部は、主に、プロセッサ部による処理の際に使用される。
また、以降の説明においては、「プロセッサ部」は、1以上のプロセッサを含む。少なくとも1つのプロセッサは、典型的には、CPU(Central Processing Unit)のようなマイクロプロセッサである。1以上のプロセッサの各々は、シングルコアでもよいしマルチコアでもよい。プロセッサは、処理の一部または全部を行うハードウェア回路を含んでもよい。プロセッサ部は、処理の一部又は全部を行うハードウェア回路(例えばFPGA(Field-Programmable Gate Array)又はASIC(Application Specific Integrated Circuit))を含んでもよい。
また、以降の説明においては、「管理システム」は、運用支援システムの一例であり、一以上の計算機で構成されてよい。具体的には、例えば、管理計算機が表示デバイスを有していて管理計算機が自分の表示デバイスに情報を表示する場合、管理計算機が管理システムでよい。また、例えば、管理計算機(例えばサーバ)が表示用情報を遠隔の表示用計算機(例えばクライアント)に送信し表示用計算機がその情報を表示する場合(管理計算機が表示用計算機に情報を表示する場合)、管理計算機と表示用計算機とのうちの少なくとも管理計算機を含んだシステムが管理システムでよい。管理システムは、インターフェース部、記憶部、及びそれらが接続されたプロセッサ部を有してよい。管理システムにおける計算機が「表示用情報を表示する」ことは、計算機が有する表示デバイスに表示用情報を表示することであってもよいし、計算機が表示用計算機に表示用情報を送信することであってもよい(後者の場合は表示用計算機によって表示用情報が表示される)。
また、以降の説明においては、「kkk部」(インターフェース部、記憶部及びプロセッサ部を除く)の表現にて機能を説明することがあるが、機能は、1以上のコンピュータプログラムがプロセッサ部によって実行されることで実現されてもよいし、1以上のハードウェア回路(例えばFPGA又はASIC)によって実現されてもよい。プログラムがプロセッサ部によって実行されることで機能が実現される場合、定められた処理が、適宜に記憶部及び/又はインターフェース部を用いながら行われるため、機能はプロセッサ部の少なくとも一部とされてもよい。機能を主語として説明された処理は、プロセッサ部あるいはそのプロセッサ部を有する装置が行う処理としてもよい。プログラムは、プログラムソースからインストールされてもよい。プログラムソースは、例えば、プログラム配布計算機又は計算機が読み取り可能な記録媒体(例えば非一時的な記録媒体)であってもよい。各機能の説明は一例であり、複数の機能が1つの機能にまとめられたり、1つの機能が複数の機能に分割されたりしてもよい。
また、以降の説明においては、「手順」は、1以上の手順文で構成されており、システム異常に対する対策内容(例えば、オペレータが運用管理者にエスカレーションを行う)と、その対策内容を実施すると判断するための条件(例えば、イベントを発行したホスト名や、イベントが発行された時間帯)とを含む。「手順文」は、手順における自然文である。「手順書」は、複数の手順を記載したドキュメントである。手順書は、例えば電子ファイルの形式で保存されていてもよい。
また、以降の説明においては、「フローチャート」は、手順の変換後の構造体に関し、機械が読み込める(理解できる)形式である代表的な論理表現例として、説明を簡略化するために用いる。本発明においては、手順の変換後の構造体の形式は、人間が記述でき、かつ、論理構造を表現できる形式であればよく、フローチャート以外の表現形式(木構造表現や、論理式表現、表構造表現や、If Thenのルール表現など)であってもよい。
また、以降の説明においては、運用対象は、対象システム(計算機システム)であるが、本発明においては、計算機システム以外の対象、例えば、アプリケーション、サービス又は装置であってよい。
(1−1)本実施例の概要
図1は、本実施例の概要を示す。
管理システムは、管理サーバ100と、管理クライアント200を含むシステムである。
管理サーバ100は、ルール管理部120を含む。ルール管理部120は、フローテーブル1508を参照することができる。フローテーブル1508は、フローチャートに関する情報を保持する。
管理クライアント200は、コンピュータプログラム(例えばアプリケーションプログラム)の一例であるフローエディタ220を実行する。フローエディタ220は、フローエディタ画面60を表示する。フローエディタ画面60は、管理サーバ100におけるフローエディタ(図示せず)により管理クライアント200に表示された画面である。フローエディタ画面60は、本実施例ではGUI(Graphical User Interface)であるが、GUIに限らないでもよい。
図1を用いて、本実施例の概要を説明する。
まず、管理サーバ100において、ルール管理部120は、手順分析処理1201を実行する。手順分析処理1201は、手順書1501を読み込む処理、及び、その手順書1501における手順間の関係性を特定する処理を含む。手順書1501は、運用対象の運用に関する複数の手順を含む。手順間の関係性を特定する処理は、類似の表現を持つ手順のグルーピングである類似関係抽出処理、及び、他の手順の構成要素として利用される手順を特定する処理である包含関係推定処理を含む。ルール管理部120は、手順分析処理1201により得られた手順間関係の情報を保持する。
その後、運用管理者は、例えば管理クライアント200上のフローエディタ220に、手順に対応するフローチャートを記述(入力)する。本実施例においては、フローエディタ画面60が、手順一覧221、手順表示222、及びフロー入力223といった表示領域を有する。手順一覧221には、手順の一覧が表示される。運用管理者は、手順一覧221から手順を選択してフローチャートの入力を開始する。手順一覧221における手順の順序は、例えば、運用管理者が行うフローチャート入力作業の負担を最小とすることができる順序、具体的には、抽象手順が含む単語の少ない順序である。「抽象手順」とは、手順書1501における手順が抽象化されたものを意味する。抽象手順内の「単語」は、抽象手順の構成要素であり、例えば、抽象手順における後述の条件節又は対策内容の表現である。
運用管理者が手順一覧221から手順を選択すると、選択した手順の内容(詳細)が手順表示222に表示される。運用管理者は、その内容に対応するフローチャートをフロー入力223に入力する。なお、選択された手順が、入力済みのフローチャートに対応する手順に類似している場合(例えば後述の類似度がしきい値以上の場合)、ルール管理部120は、その入力済みのフローチャート(又は、当該フローチャートにおけるパラメータに、選択された手順から特定されたパラメータ値が代入されたフローチャート)を、推定フローチャートとしてフローエディタ220に提供し、フローエディタ220が、その推定フローチャートをフロー入力223に表示する。
従って、過去に入力したフローチャートが無い場合、ルール管理部120は、フローチャートを推定するために必要な情報が無いため、推定フローチャートを表示できない。そのため、運用管理者は、選択した手順を元に、フローエディタ220に対して、フローチャートを入力し、保存指示を出す。フローエディタ220は、保存指示を受けると、手順(又は手順ID)とフローチャートを管理サーバ100に送信する。管理サーバ100のルール管理部120が、そのフローチャートと手順を受信し、その手順を関連付けたフローチャートに関する情報をフローテーブル1508に登録する。ルール管理部120は、手順間の関係性の情報を元に、受信した手順と類似する手順(例えば、受信した手順それ自体を構成要素として利用する手順)に関して、その類似する手順に対応するフローチャートの一部または全部を、受信したフローチャートを元に推定する。
次に、運用管理者が、フローエディタ画面60にて、先に選択した手順(以降、この段落において第1の手順)に類似する別の手順(以降、この段落において第2の手順)を選択したとする。この場合、既に、先に保存したフローチャート(第1の手順に対応したフローチャート)を元に、第2の手順に対応したフローチャートの一部または全部が推定されている可能性がある。もしも、その推定されたフローチャートがある場合には、その推定フローチャートが、フローエディタ220及びルール管理部120により、その推定フローチャートに対応する第2の手順の全部又は一部と対応付けて表示される(例えば、第2の手順の全部又は一部である手順文が運用管理者により選択されると、その手順文に対応する推定フローチャートが強調表示される)。運用管理者は、推定フローチャートの編集(例えば、論理表現の修正又は追記)を行うことで、フローエディタ220に対して、第2の手順に対応するフローチャートを入力し(完成させ)、保存指示を出す。
上記を繰り返すことで(すなわち、手順の選択の受け付けとフローチャートの入力(編集)の受け付けとのセットを繰り返すことで)、管理サーバ100(ルール管理部120)は、手順とフローチャートの対応を学習し、フローチャートの推定精度を向上させることができる。
後述するが、ルール管理部120は、次の処理を行うことができる。例えば、ルール管理部120は、手順書1501を構成する複数の手順について、それらの手順に含まれる条件節や対策内容について、同種の条件種類や対策内容(動作種類)毎に、パラメータ(パラメータ項目)に置き換えた上で、複数の抽象手順を得る。各抽象手順は、類似関係にある1以上の手順から抽出された共通パタンである。ルール管理部120は、複数の抽象手順について、階層的クラスタリングを実施し、抽象手順間の類似関係を特定する。そして、ルール管理部120は、特定した類似関係と、各抽象手順に含まれる条件節の種類(条件種類)の包含関係に基づき、抽象手順間の包含関係を推定する。任意の手順に対応する論理表現が与えられた場合(例えば運用管理者から入力された場合)、ルール管理部120は、手順と抽象手順の関係、抽象手順間の包含関係に基づき、与えられた手順に関係する他の手順に対応する論理表現を推定する。また、ルール管理部120は、他の手順のうち、推定済みの部分と、それ以外の部分とを区別して表示する。
以下、本実施例を詳細に説明する。
(1−2)システム全体構成
図2は、実施例に係るシステム全体構成を示す。
管理サーバ100、管理クライアント200、及び対象システム300が、例えばLAN(Local Area Network)のようなネットワーク400に接続されている。
管理サーバ100は、手順書1501とフローチャート121を管理するルール管理部120と、対象システム300の構成を管理する構成管理部130と、対象システム300を監視するシステム監視部140とを含む。なお、ルール管理部120、構成管理部130、システム監視部140はそれぞれ独立の計算機に配置されていてもよく、構成を限定するものではない。
構成管理部130は、設定ファイル131や、構成情報170を管理する。設定ファイル131は、例えばアプリケーションやサービスのコンフィグレーションファイルであってもよいし、管理サーバ100の構成やアプリケーションのコンフィグレーションファイルを自動的に生成するサーバ自動構成ツールの定義ファイルであってもよいし、VM(Virtual Machine)やコンテナの構成を定義する定義ファイルであってもよい。また、構成情報170は、例えば、管理サーバ100の構成を示すサーバ構成情報を含む。
システム監視部140は、対象システム300を監視し(例えば、対象システム300から種々の情報を収集し)、監視結果に関する情報を含む監視情報160を更新する。監視情報160は、例えば、対象システム300が発行したイベントを含んだイベント情報、対象システム300の各要素に関する性能を示す情報を含んだ性能情報、及び、対象システム300に関するログを含んだログ情報を含む。
管理クライアント200は、インターフェース部、記憶部及びプロセッサ部を含んだ計算機であり、例えば、ディスプレイ、キーボード及びポインタデバイスを有し、フローエディタ220のようなアプリケーションを実行する。なお、フローエディタ220が、管理クライアント200に代えて管理サーバ100で実行され、管理クライアント200のWebブラウザが、フローエディタ220からのフローエディタ画面60を表示してもよい。なお、管理クライアント200は複数台存在してもよい。また、管理クライアント200は、管理サーバ100と一体として形成してもよい(例えば、管理サーバ100及び管理クライアント200の両方を含んだスタンドアロンマシンが管理システムの一例であってもよい)。
対象システム300は、運用対象の一例であって、運用管理者やオペレータの監視対象システム(運用管理対象としての計算機システム)である。例えば、対象システム300は、サーバ、ストレージ及びネットワークといった物理システムリソース、及び、VM、コンテナ、アプリケーション及びサービスといった論理システムリソースを含む。
図3は、管理サーバ100のハードウェア構成を示す。
管理サーバ100は、メモリ110と、記憶装置150と、プロセッサ180と、I/F(通信インターフェースデバイス)190とを含む。I/F190は、ネットワーク400に接続される。プロセッサ180が、I/F190、メモリ110及び記憶装置150に接続される。I/F190が、インターフェース部の一例である。メモリ110及び記憶装置150のうちの少なくともメモリ110が、記憶部の一例である。記憶装置150に格納されている情報のうちの少なくとも一部が、記憶装置150に代えて又は加えて、管理サーバ100と通信可能に接続された外部の記憶装置(図示せず)に格納されてもよい。記憶装置150それ自体が、その外部の記憶装置であってもよい。プロセッサ180が、プロセッサ部の一例である。
メモリ110には、プロセッサ180で実行され、種々の処理を行うプログラムが配置される。具体的には、例えば、メモリ110には、監視表示部1102、ルール管理部120、構成管理部130及びシステム監視部140が配置される。ルール管理部120は、手順分析処理1201、フロー記憶処理1202、及び、フロー推定処理1203を実行する。ルール管理部120は、フローエディタ画面60を表示し、フローエディタ画面60経由で、フローチャートの表示、及び、フローチャートの編集を行う。構成管理部130は、構成収集処理1301を実行する。システム監視部140は、監視収集処理1401及びアラート処理1402を実行する。
監視表示部1102は、システム監視部140で収集した種々の情報を管理クライアント200に表示する。
構成収集処理1301は、対象システム300を構成する各システムリソースから当該システムリソースの構成情報を収集する処理である。
監視収集処理1401は、対象システム300を構成する各システムリソースからイベント情報、各種のログ、及び性能情報を収集する処理である。
アラート処理1402は、事前に設定されたしきい値や、異常ログ情報(例えば、異常ログに該当する条件を示す情報)を元に、各種のログや性能情報からイベント情報を生成する処理である。例えば、アラート処理1402は、或るログが異常ログ情報が示す条件に該当すれば、当該或るログに関してイベント情報を生成する処理を含む。また、例えば、アラート処理1402は、性能情報が示す性能値(メトリック値)がしきい値を超えている場合、当該性能値に関わるリソースについてイベント情報を生成する処理を含む。このように、イベント情報は、システム監視部140に生成されてもよいし、対象システム300から受信されてもよい。
記憶装置150は、例えば、HDD(Hard Disk Drive)又はSSD(Solid State Drive)のような補助記憶装置であってもよいし、NAS(Network Attached Storage)のような外部記憶装置であってもよい。記憶装置150は、種々の情報を記憶する。具体的には、例えば、記憶装置150は、手順書1501、手順テーブル1502、変換順序テーブル1503、抽象手順テーブル1504、抽象手順関係テーブル1505、抽象手順パタンテーブル1506、抽象手順同一部テーブル1507、フローテーブル1508、手順フロー対応テーブル1509、条件種類テーブル1510、動作テーブル1511、監視情報160及び構成情報170を記憶する。監視情報160は、例えば、イベント毎のイベント情報を格納するイベントテーブル1601を含む。構成情報170は、例えば、物理サーバ名、及び、仮想マシンと物理サーバとの対応関係などを示す情報を格納するサーバ構成テーブル1701を含む。
(1−3)各種テーブルの内容
図4は、手順書1501を示す。
手順書1501は、複数の手順を記述したドキュメントである。手順書1501は、手順毎にエントリを有するテーブルである(手順書1501のデータ形式は、テーブル以外のデータ形式でもよい)。各エントリは、手順15011及び手順ID15010といった情報を格納する。以降、1つの手順を例に取る(図4の説明において「対象手順」と呼ぶ)。
手順ID15010は、対象手順のIDを示す。手順15011は、対象手順それ自体であり、例えば「ホストAAAで、12:00〜12:30の間に、xxxのメッセージのイベントが発生した場合は、エスカレーションを行わない」という自然文である。手順15011は、対策内容と条件とを含む。対策内容は、例えば「エスカレーションを行う」「エスカレーションを行わない」である。条件は、例えば、サーバ名(例えば物理サーバ名)、時間帯(例えば、開始時刻及び終了時刻)、メッセージの内容といった条件である。
図5は、手順テーブル1502を示す。
手順テーブル1502は、手順書1501を構成する各手順の詳細に関する情報を格納する。具体的には、例えば、手順テーブル1502は、手順における単語毎にエントリを有する。各エントリは、手順ID15020、手順文ID15021、単語15022、条件種類ID15023、動作ID15024、抽象手順ID15025及び抽象手順文ID15026といった情報を格納する。以降、手順における1つの単語を例に取る(図5の説明において「対象単語」と呼ぶ)。なお、手順における「単語」は、手順の構成要素であり、1以上の文字の集合である文字列(例えば、単語、句、節)である。
手順ID15020は、対象単語を含む手順のIDを示す。手順文ID15021は、対象単語を含む手順文のIDを示す。単語15022は、対象単語を示す。条件種類ID15023は、対象単語が条件節に該当する場合、その条件の種類のIDを示す。動作ID15024は、対象単語が対策内容に該当する場合、その対策内容(動作)のIDを示す。抽象手順ID15025は、対象単語を含む手順を抽象化したものである抽象手順のIDを示す。抽象手順文ID15026は、対象単語を含む手順文を抽象化したものである抽象手順文のIDを示す。
対象単語が条件に該当する場合には、ルール管理部120は、条件種類ID15023として有効な値を格納し、動作ID15024として無効な値(例えば“−”)を格納する。対象単語が対策内容に該当する場合には、ルール管理部120は、動作ID15110として有効な値を格納し、条件種類ID15023として無効な値を格納する。対象単語が条件及び対策内容のどちらでもない場合には、ルール管理部120は、条件種類ID15023及び動作ID15024としてそれぞれ無効な値を格納する。
ルール管理部120は、同一クラスタ内の複数の手順における単語(例えば文字列)の共通パタンを抽出し、その複数の手順の各々について、抽出した共通パタンを含んだ抽象手順を格納する。対象単語が前述の共通パタンに含まれる場合には、ルール管理部120は、その共通パタンを含んだ抽象手順のIDを抽象手順ID15025として格納し、その共通パタンを含んだ抽象手順文のIDを抽象手順文ID15026として格納する。対象単語が共通パタンに含まれない場合は、ルール管理部120は、抽象手順ID15025及び抽象手順文ID15026としてそれぞれ無効な値(例えば“−”)を格納する。
図6は、変換順序テーブル1503を示す。
変換順序テーブル1503は、フローエディタ画面60の手続一覧221での手順の順序、すなわち、ユーザに提示する適切な手順変換順序を管理するテーブルである。変換順序テーブル15030は、例えば、手順分析処理1201において生成又は修正される。
変換順序テーブル1503は、手順毎にエントリを有する。各エントリは、変換順番15030及び手順ID15031といった情報を格納する。以降、1つの手順を例に取る(図6の説明において「対象手順」と呼ぶ)。
手順ID15031は、対象手順のIDを示す。変換順番15030は、対象手順をフローチャートに変換する順番を示す。
なお、2以上の手順の変換順番15030が、同じであることもあり得る。フローエディタ画面60の手続一覧221において、変換順番15030が同じ2以上の手順にそれぞれ対応した2以上の行が連続して並んでもよい。変換順番15030が同じ2以上の手順の表示形式として、他の形式が採用されてもよい。
図7は、イベントテーブル1601を示す。
イベントテーブル1601は、例えば、イベント毎にエントリを有する。各エントリは、イベントID16010(イベントのID)、イベント情報とを格納する。イベント情報が、イベントID16010を含んでもよい。イベント情報は、サーバ名16011(イベントを発行したサーバの名称)、時刻16012(イベントが発生した時刻)、重要度16013(例えば、「エラー」や「通知」といったイベント重要度)、及び、メッセージ16014といった情報を含む。
図8は、条件種類テーブル1510を示す。
条件種類テーブル1510は、条件種類に関する情報を保持するテーブルである。具体的には、例えば、条件種類テーブル1510は、条件種類毎にエントリを有する。各エントリは、条件種類ID15100、条件種類15101、条件値15102、取得元テーブル15103、取得元カラム15104、推定フラグ15105及びフローID15106といった情報を格納する。以降、1つの条件種類を例に取る(図8の説明において「対象条件種類」と呼ぶ)。
条件種類ID15100は、対象条件種類のIDを示す。条件種類15101は、対象条件種類を識別する固定文字列を示す。条件値15102は、対象条件種類に該当する条件(例えば条件節)の表現例を示す。取得元テーブル15103は、対象条件種類に対応した条件値表現が格納されているテーブルの名称を示す。取得元カラム15104は、対象条件種類に対応した条件値15102としての表現が格納されているカラム(又は情報要素)の名称を示す。推定フラグ15105は、対象条件種類に対応した条件値15102が推定値か否かを示す。推定フラグ15105“Yes”は、条件値15102が推定値であることを意味する。フローID15106は、対象条件種類に対応した条件値15102としての表現に対応する論理表現を含んだフローチャートのIDである。
ルール管理部120は、取得元テーブル15103及び取得元カラム15104として有効な値が格納されている場合、条件値15102として、値が格納されていないことを示す無効な値(例えば“−”)を格納してもよい。
また、ルール管理120は、構成情報170及び監視情報160から、対象条件種類に関し、類似の表現をもつ情報を条件値として特定し、その特定された条件値を、推定値としてもよい。その場合には、ルール管理部120は、対象条件種類に対応した推定フラグ15105を“Yes”とする。
図9は、動作テーブル1511を示す。
動作テーブル1511は、手順に含まれる具体的な対策内容の表現例を動作種類と対応付けて管理するテーブルである。具体的には、例えば、動作テーブル1511は、動作毎にエントリを有する。各エントリが、動作ID15110、動作種類15111、動作表現15112及びフローID15113といった情報を保持する。以降、1つの動作を例に取る(図9の説明において「対象動作」と呼ぶ)。
動作ID15110は、対象動作(対策内容)のIDを示す。動作種類15111は、対象動作(対策内容)を識別する固定文字列を示す。動作表現15112は、対象動作(対策内容)の表現例を示す。フローID15113は、対象動作(対策内容)に対応した動作表現15112に対応する論理表現を含んだフローチャートのIDを示す。
図10は、抽象手順テーブル1504を示す。
抽象手順テーブル1504は、抽象手順に関する情報を保持するテーブルである。具体的には、例えば、抽象手順テーブル1504は、抽象手順における単語毎にエントリを有する。各エントリは、抽象手順ID15040、抽象手順文ID15041、単語15042、条件種類ID15043及び動作ID15044といった情報を格納する。以降、抽象手順における1つの単語を例に取る(図10の説明において「対象単語」と呼ぶ)。
抽象手順ID15040は、対象単語を含む抽象手順のIDを示す。抽象手順文ID15041は、対象単語を含む抽象手順文のIDを示す。単語15042は、対象単語を示す。条件種類ID15043は、対象単語が条件節に該当する場合、その条件の種類のIDを示す。動作ID15044は、対象単語が対策内容に該当する場合、その対策内容(動作)のIDを示す。
対象単語が条件に該当する場合には、ルール管理部120は、条件種類ID15043として有効な値を格納し、動作ID15044として無効な値(例えば“−”)を格納する。対象単語が対策内容に該当する場合には、ルール管理部120は、動作ID15044として有効な値を格納し、条件種類ID15043として無効な値を格納する。対象単語が条件及び対策内容のどちらでもない場合には、ルール管理部120は、条件種類ID15043及び動作ID15044としてそれぞれ無効な値を格納する。
図11は、抽象手順関係テーブル1505を示す。
抽出手順関係テーブル1505は、抽象手順間の包含関係を示す情報を保持するテーブルである。具体的には、例えば、抽出手順関係テーブル1505は、抽出手順毎にエントリを有する。各エントリは、抽象手順ID15050、子抽象手順ID15051及び親抽象手順ID15052といった情報を格納する。以降、1つの抽象手順を例に取る(図11の説明において「対象抽象手順」と呼ぶ)。
抽象手順ID15050は、対象抽象手順のIDを示す。
子抽象手順ID15051は、対象抽象手順の子抽象手順のID、すなわち、対象抽象手順を包含するより大きい抽象手順(典型的には、対象抽象手順が有する全ての条件節を含んだ抽象手順)のIDを示す。なお、対象抽象手順の子抽象手順を包含する更なる子抽象手順が1つ以上存在することもあり得る。以降、対象抽象手順を包含する全ての抽象手順の各々を「下位抽象手順」と呼び、対象抽象手順に直帰の下位抽象手順を特に「子抽象手順」と呼ぶことがある。
親抽象手順ID15052は、対象抽象手順の親抽象手順のID、すなわち、対象抽象手順に包含されるより小さい抽象手順(典型的には、対象抽象手順が有する全ての条件節の一部の条件節を全ての条件節として含んだ抽象手順)のIDを示す。なお、対象抽象手順の親抽象手順に包含される更なる親抽象手順が1つ以上存在することもあり得る。以降、対象抽象手順に包含される全ての抽象手順の各々を「上位抽象手順」と呼び、対象抽象手順に直帰の上位抽象手順を特に「親抽象手順」と呼ぶことがある。
図12は、抽象手順パタンテーブル1506を示す。
抽象手順パタンテーブル1506は、包含関係にある抽象手順間で共通する部分であるフレーズを保持するテーブルである。具体的には、例えば、抽象手順パタンテーブル1506は、フレーズ毎にエントリを有する。各エントリが、フレーズID15060及びフレーズ15061といった情報を格納する。以降、1つのフレーズを例に取る(図12の説明において「対象フレーズ」と呼ぶ)。
フレーズID15060は、対象フレーズのIDを示す。フレーズ15061は、対象フレーズ(文字列パタン)それ自体を示す。
図13は、抽象手順同一部テーブル1507を示す。
抽象手順同一部テーブル1507は、フレーズが出現する箇所を示す情報を保持するテーブルである。具体的には、例えば、抽象手順同一部テーブル1507は、フレーズ毎に、エントリを有する。各エントリは、抽象手順ID15070、抽象手順文ID15071、開始位置15072、終了位置15073及びフレーズID15074といった情報を格納する。以降、1つのフレーズを例に取る(図13の説明において「対象フレーズ」と呼ぶ)。
抽象手順ID15070は、対象フレーズを含んだ抽象手順のIDを示す。抽象手順文ID15071は、対象フレーズを含んだ抽象手順文のIDを示す。開始位置15072は、対象フレーズの開始位置(例えば、対象フレーズの先頭文字と対象フレーズを含んだ抽象手順の先頭文字との間に存在する文字の数)を示す。終了位置15073は、対象フレーズの終了位置(例えば、対象フレーズの末尾文字と対象フレーズを含んだ抽象手順の先頭文字との間に存在する文字の数)を示す。フレーズID15074は、対象フレーズのIDを示す。
図14は、フローテーブル1508を示す。
フローテーブル1508は、手順に対応する論理表現(本実施例ではフローチャート)を保持するテーブルである。論理表現の一部は、推定された論理表現でもよい。具体的には、例えば、フローテーブル1508は、フローチャート毎にエントリを有する。各エントリは、フローID15080及び論理表現15081といった情報を保持する。以降、1つのフローチャートを例に取る(図14の説明において「対象フローチャート」と呼ぶ)。
フローID15080は、対象フローチャートのIDを示す。論理表現15081は、対象フローチャートとしての論理表現を示す。
論理表現15081は、例えば、図14に例示のように「SERVER_NAME_COND_1 == AAA and [フローID = 2]」のようなプログラム表現であってもよいし、フローチャート形式でもよい。上記の例では、“SERVER_NAME_COND_1”は条件種類15101であり、“AAA”は、条件値15102である。
また、“[フローID = 2]”は、フローID15080“2”である論理表現に置き換えることを意味する。このように、論理表現15081は、入れ子構造であってもよい。これによって、複数のフローチャートを単一のフローチャートとして管理することができる。
図15は、手順フロー対応テーブル1509を示す。
手順フロー対応テーブル1509は、手順、抽象手順、フレーズ及びフローチャートの対応関係を示す情報を保持するテーブルである。具体的には、例えば、手順フロー対応テーブル1509は、フレーズ毎にエントリを有する。各エントリは、手順ID15090、手順文ID15091、抽象手順ID15092、抽象手順文ID15093、開始位置15094、終了位置15095、フレーズID15096、フローID15097及び代表フラグ15098といった情報を格納する。以降、1つのフレーズを例に取る(図15の説明において「対象フレーズ」と呼ぶ)。なお、本実施例では、フレーズが、最小単位でよく、フレーズは、1つの単語であってもよい。
手順ID15090は、対象フレーズを含む対象手順にてのIDを示す。手順文ID15091は、対象フレーズを含む手順文のIDを示す。抽象手順ID15092は、対象フレーズを含む抽象手順のIDを示す。抽象手順文ID15093は、対象フレーズを含む抽象手順文のIDを示す。開始位置15094は、手順における対象フレーズの開始位置を示す。終了位置15095は、手順における対象フレーズの終了位置を示す。フレーズID15096は、対象フレーズのIDである。フローID15097は、対象フレーズに対応したフローチャート部分を含むフローチャートのIDである。代表フラグ15098は、そのフローチャートが代表フローチャートであるか否かを示す。
手順フロー対応テーブル1509は、以下のタイミング、例えば、フローエディタ220を通して運用管理者がフローチャートを保存したタイミング、及び、フロー記憶処理1202及びフロー推定処理1203の少なくとも1つにおいてフローチャートが推定されたタイミングで更新される。
代表フラグ15098は、ある抽象手順に対応するフローチャートが複数パタン存在する場合に、抽象手順に対応するフローチャートを一意に特定するためのフラグである。これは、抽象手順が、文面が類似している手順集合から抽出されており、この手順集合には異なる意図の手順が含まれている可能性があることに起因する。例えば、「ServerAとServerBでXXXが発生した場合」と「ServerAかServerBでXXXが発生した場合」の手順は「ServerA」と「ServerB」を条件節として含むが、それらの手順の論理的な構造はand、orと全く異なる。しかしながら、自然言語としての類似性は高く同一の手順集合にまとめられる可能性があり、このとき、各手順に対応して入力されるフローチャートには、ばらつきが発生する可能性がある。
これに対し、本実施例においては、手順集合内の各手順に対応するフローチャートの内、多数のフローチャートに含まれる論理構造であるフローチャートを代表フローチャートとする例を示す(フロー分解処理S8000)。すなわち、複数の候補がある場合には、代表フローチャートが推定フローチャートとして表示されることになる。
なお、上記は代表フローチャートを求める方法を限定するものではない。また、仮に抽象手順に対応するフローチャートが複数パタン発生している場合には、その検出を契機としてフローチャートのパタン毎に手順集合を分割し、抽象手順や、抽象手順間の類似関係を再計算するなどをしてもよい。
手順フロー対応テーブル1509について複数の更新タイミングがある。例えば、以下(1)〜(6)のように値が格納され得る。以降に示すように、本実施例では、「フローチャート」は、手順全体又は抽象手順について存在することもあれば、手順又は抽象手順の一部分(例えば、手順文又は抽象手順文の全部又は一部(例えば、フレーズ))について存在することもある。以降の説明では、フローチャートの構成要素を「ノード」と呼ぶことがある。ノードが、フローチャートそれ自体であることもある。つまり、ノードは、フローチャートの全部又は一部である。
(1)指定された手順ID15090に対応する手順全体のフローチャートを指すフローID15097が格納される。
(2)指定された手順ID15090及び手順文ID15091に対応する手順文のフローチャートを指すフローID15097が格納される。
(3)指定された手順ID15090、手順文ID15091、開始位置15094及び終了位置に対応する手順文部分のフローチャートを指すフローID15097が格納される。
(4)指定された抽象手順ID15092に対応する抽象手順全体のフローチャートを指すフローID15097が格納される。
(5)指定された抽象手順ID15092及び抽象手順文ID15093に対応する抽象手順文のフローチャートを指すフローID15097が格納される。
(6)指定された抽象手順ID15092、抽象手順文ID15093、開始位置15094、終了位置15095及びフレーズID15096に対応する抽象手順文部分(フレーズ)に対応するフローチャートを指すフローID15097が格納される。
(1−4)本実施例で行われる処理の詳細
図17は、手順分析処理1201を示す。手順分析処理1201は、各手順をフローチャートに変換する前の事前処理として実行される。ルール管理部120が、手順分析処理において、手順書1501に含まれる手順の関係性を特定する。
まず、ルール管理部120は、入力として受信した手順書を読み込む(例えばメモリ110に格納する)(S1000)。
次に、ルール管理部120は、その手順書に含まれる手順を抽出し、各手順に対して形態素解析を施す(S1010)。結果として、各手順が、単語に分解される。例えば、ルール管理部120は、各手順から、特定の品詞(例えば、名詞又は動詞)に該当する単語のみを抽出してもよいし、1以上の手順の少なくとも1つについて、複数の単語を意味のある単位にまとめて一つの単語とみなしてもよい。S1020以降のステップにおいては、S1010で抽出された各手順について、S1010で得られた単語列(1以上の単語)が、「手順」として扱われる。
次に、ルール管理部120は、S1020で手順一般化処理(図18)を実施する(S1020)。ルール管理部120は、手順一般化処理において、手順に含まれる条件節の条件表現や、対策内容の動作を示す単語列を特定する。S1030以降のステップでは、S1020で特定した単語を、対応する条件種類15101や動作種類15111に置き換えた単語を、「手順」として扱う。なお、以降の説明においては、条件種類15101や動作種類15111と、S1010で切り出した単語を区別せずに、「単語」と言及する。
次に、ルール管理部120は、類似関係抽出処理(図19)を実施する(S1030)。ルール管理部120は、類似関係抽出処理において、類似である手順集合を特定し、手順集合に共通の単語列パタンを抽象手順として記憶する。従って、抽象手順は、手順集合に属する1以上の手順に共通である。また、抽象手順は、単語列パタンであるため、抽象手順文は、抽象手順としての単語列パタンの一部又は全部である。
次に、ルール管理部120は、包含関係推定処理(図20)を実施する(S1040)。ルール管理部120は、類似関係抽出処理において、S1030で生成した抽象手順間の包含関係を推定する。
最後に、ルール管理部120は、手順変換順序決定処理(図23)を実施する(S1050)。ルール管理部120は、手順変換順序決定処理において、手順間の類似関係、包含関係を元に手順の順序付けをする。
図18は、手順一般化処理(S1020)を示す。
ルール管理部120は、各手順における各単語(例えば、条件節に該当する単語、及び、対策内容に該当する単語)について、S2020〜S2090を行う。以降、1つの手順における1つの単語を例に取る(S2020〜S2090の説明において、「対象手順」及び「対象単語」と呼ぶ)。なお、「対象単語」は、最小単語(最小単位としての単語)であってもよいし、最小単語の組合せ(2以上の最小単語の集合)であってもよい。具体的には、例えば、「対象単語」は、N−Gram(Nは1以上の整数)でよい。
ルール管理部120は、対象単語が対策内容に該当する単語であれば、対象単語に類似する動作表現15112があるか否かを判断する(S2020)。対象単語のような文字列の類似度(類似性)は、例えば、文字列のレーベンシュタイン距離を計算するなどの方法により特定することができる。対象単語との類似度が一定値以上の動作表現15112が少なくとも1つあれば、S2020の判断結果は真となる。
S2020の判断結果が真の場合には(S2020:Yes)、ルール管理部120は、類似する動作表現15112(例えば、最も類似度が高い動作表現15112)を選択し、選択した動作表現15112に対応した動作ID15110を、動作ID15024として、手順テーブル1502の該当エントリ(対象単語を示す単語15022が登録されるエントリ)に登録する(S2030)。S2030で、該当エントリに、対象手順の手順ID15020、対象単語を含む手順文の手順文ID15021、及び、対象単語を示す単語15023も登録されてよい。
S2020の判断結果が偽の場合には(S2020:No)、ルール管理部120は、対象単語が条件節に該当する単語であれば、対象単語に類似する条件値15102があるか否かを判断する(S2040)。
S2040の判断結果が偽の場合には(S2040:No)、ルール管理部120は、格子柄情報170又は監視情報160(具体的には、取得元テーブル15103及び取得元カラム15104が指す情報)から、対象単語に類似する値(表現)があるか否かを判断する(S2050)。
S2040又はS2050の判断結果が真の場合には(S2040:Yes、又は、S2050:Yes)、ルール管理部120は、対象単語に類似する値(例えば、条件値15102又は表現)に対応する条件種類の条件種類IDを、条件種類ID15023として、手順テーブル1502の該当エントリに登録する(S2060)。S2060で、該当エントリに、対象手順の手順ID15020、対象単語を含む手順文の手順文ID15021、及び、対象単語を示す単語15023も登録されてよい。
S2050の判断結果が偽の場合には(S2050:No)、対象単語が該当する条件節の条件種類が、未知の条件種類(条件種類テーブル1510に無い条件種類)である可能性がある。そこで、ルール管理部120は、対象単語に類似する値(表現)が構成情報170又は監視情報160にあるか否かを判断する(S2070)。
S2070の判断結果が真の場合には(S2070:Yes)、ルール管理部120は、その類似する値に対応する条件種類と、その条件種類の条件種類IDとを生成し、生成した条件種類を示す条件種類15101、生成した条件種類IDを示す条件種類ID15100、当該類似する値を示す条件値15102、当該値の取得元を示す取得元テーブル15103及び取得元カラム15104、及び、推定フラグ15015“Yes”を、条件種類テーブル1510に登録する(S2080)。また、ルール管理部120は、登録した条件種類ID15100を、条件種類ID15023として手順テーブル1502の該当エントリに登録する(S2090)。S2090で、該当エントリに、対象手順の手順ID15020、対象単語を含む手順文の手順文ID15021、及び、対象単語を示す単語15023も登録されてよい。
図19は、類似関係抽出処理(S1030)を示す。ルール管理部120は、類似関係抽出処理において、クラスタリングなどの方法で類似の手順をまとめ、その類似の関係にある1以上の手順である手順集合から、共通する単語列パタンを抽象手順として抽出する。
ルール管理部120は、各手順について、S3010〜S3030を行う。以降、1つの手順を例に取る(S3010〜S3030の説明において、「対象手順」と呼ぶ)。
ルール管理部120は、対象手順に対応した1以上の単語15022がそれぞれ示す1以上の単語で構成された単語列を生成する(S3010)。このとき、ルール管理部120は、その単語列を構成する1以上の単語の各々について、その単語に対応する条件種類ID15023又は動作ID15024として有効な値がある場合には、その単語を、そのIDに対応する条件種類15101又は動作種類15111が示す情報(単語)で置き換える(S3020)。その上で、ルール管理部120は、単語列をベクトル化する(S3030)。ベクトル化の方法としては、例えば、TF−IDFといった公知の方法を用いることができる。
以上、S3010〜S3030によって、条件値15102が異なる手順を同一の手順として扱うことができる。具体的には、例えば、同一の内容である手順であったとしても、構成が異なる(例えばサーバ名などが異なる)と、異なる表現の手順となるが、S3010〜S3030によれば、そのような構成の異なる手順を同一の手順として認識することが可能となる。
次に、ルール管理部120は、各手順(単語列)をクラスタリングする。クラスタリングの方法としては、公知の方法(例えば、k平均法、又は、凝集型のクラスタリング)を用いることができる。
次に、ルール管理部120は、各クラスタについて、S3060〜S3100を行う。結果として、複数の手順の共通パタンである抽象手順が求められる。以降、1つのクラスタを例に取る(S3060〜S3100の説明において、「対象クラスタ」と呼ぶ)。
ルール管理部120は、対象クラスタに所属する全ての手順である手順集合を取得する(S3060)。
ルール管理部120は、その取得した手順集合から、共通した単語列パタンを抽出する(S3070)。具体的には、例えば、ルール管理部120は、その手順集合について、1以上の手順ペアを生成する。そして、ルール管理部120は、その1以上の手順ペアの各々について、単語の単位でレーベンシュタイン距離を求め、レーベンシュタイン距離が任意のしきい値以上である単語で構成された単語列パタンを抽出する。なお、単語列パタンは、1全手順ペアについて、任意の頻度以上で見られる単語を含んでもよい。また、単語列パタンは、例えば任意の0個以上の単語が手順集合から取り除かれたものであってもよい。S3070で抽出された単語列パタンが、抽象手順である。
ルール管理部120は、S3070で抽出した抽象手順(単語列パタン)に関する情報を、抽象手順テーブル1504に登録する(S3080)。具体的には、例えば、ルール管理部120は、抽象手順ID15040と抽象手順文ID15041を重複の無いように生成し、その抽象手順ID15040と抽象手順文ID15041を、抽象手順テーブル1504に登録する。また、ルール管理部120は、抽象手順に含まれる単語がいずれかの条件種類15101を含む場合には、その条件種類15101に対応する条件種類ID15100を、抽象手順テーブル1504に条件種類ID15043として登録する。同様に、ルール管理部120は、抽象手順に含まれる単語がいずれかの動作種類15111を含む場合には、当その動作種類15111に対応する動作ID15110を、抽象手順テーブル1504に動作ID15044として登録する。S3080では、抽象手順に含まれる単語が単語15042として登録されてよい。
その後、ルール管理部120は、S3060で取得した手順集合を構成する手順毎に、S3100を行う。以降、1つの手順を例に取る(S3100の説明において、「対象手順」と呼ぶ)。
ルール管理部120は、対象手順に対応する抽象手順に関する情報を手順テーブル1502に登録する(S3100)。具体的には、例えば、ルール管理部120は、S3070で抽出した抽象手順(単語列パタン)内の単語に対応する単語を対象クラスタから特定する。これには、例えば正規表現のパターンマッチなどの方法を用いることができる。そして、ルール管理部120は、手順テーブル1502における該当エントリ(特定した単語を示す単語15022を含んだエントリ)に、その抽象手順のIDを示す抽象手順ID15025と、特定した単語に対応する単語を含む抽象手順文のIDを示す抽象手順文15026とを登録する。
図20は、包含関係推定処理(S1040)を示す。
ルール管理部120は、抽象手順テーブル1504から全ての抽象手順(単語列パタン)を取得する(S4000)。このとき、ルール管理部120は、それらの抽象手順を構成する1以上の単語の各々について、その単語に対応する条件種類ID15043又は動作ID15044として有効な値がある場合には、その単語を、そのIDに対応した条件種類15101又は動作種類15111が示す情報(単語)で置き換える。
ルール管理部120は、S4000で取得した抽象手順(単語列パタン)を、S3030と同様にベクトル表現に変換し、凝集型のクラスタリングを実施する(S4010)。凝集型クラスタリングを実施すると、類似性の高い抽象手順から、順次、クラスタにまとめられていく。これにより、最終的には生成されたクラスタは、樹形図と呼ばれる2分木として表現することができる。
図16は、樹形図の一例、具体的には、抽象手順A〜Eを凝集型クラスタリングによってまとめた例を示す。クラスタ1は、抽象手順AとBをまとめたクラスタである。クラスタ2は、対象手順CとDをまとめたクラスタである。クラスタ3は、クラスタ2とクラスタ1をまとめたクラスタである。クラスタ4は、クラスタ3と抽象手順Eをまとめたクラスタである。
樹形図では、クラスタの構成要素がどの程度類似しているかを「類似度」と呼ぶ。類似度は、0以上1以下である。樹形図は、リーフの位置を類似度“1”、ルートの位置を類似度“0”として描画する。そして、樹形図は、クラスタの構成要素の類似度に相当する高さで、ノードの結合点を描画する。今後、説明を簡略化するために、結合点の左右の部分木を、クラスタの左右の木と呼ぶ。また、結合点の高さで示される左右のノードの類似度を、その部分木が示すクラスタの類似度と呼ぶ。
図16に示すように、凝集型クラスタリングでは、複数のクラスタが階層的に構成されることとなるが、より小さいクラスタに所属する抽象手順同士では単語列の過不足がより少なく、より類似である可能性が高くなる。
この特徴を利用し、ルール管理部120は、S4010で生成したクラスタリングについて、類似度が高い順にクラスタを選択し、クラスタに含まれる抽象手順同士を比較して順次包含関係を推定していく。ルール管理部120は、各クラスタについて、S4030〜S4090を行う。以降、1つのクラスタを例に取る(S4030〜S4090の説明において、「対象クラスタ」と呼ぶ)。
ルール管理部120は、対象クラスタにおける左右の木から、それぞれ1つの抽象手順を選択し、選択した抽象手順のペアである抽象手順ペアを生成する(S4030)。対象クラスタに関し、抽象手順ペア毎に、S4050〜S4090が行われる。以降、1つの抽象手順ペアを例に取る(S4050〜S4090の説明において、「対象抽象手順ペア」と呼ぶ)。なお、クラスタの類似度が任意のしきい値以下の場合は、クラスタにおける左右の木に含まれる抽象手順が類似していない可能性が高いため、ループを終了させるなどの処理が採用されてもよい。
ルール管理部120は、対象抽象手順ペアについて、包含関係チェック処理を実施する(S4050)。包含関係チェック処理では、対象抽象手順ペアが包含の関係であるか否かがチェック(推定)される。
もしも、チェック結果が偽である場合には(S4060:No)、ルール管理部120は、S4070以降の処理をせずに次の抽象手順ペアを選択する。
一方、チェック結果が真である場合には(S4060:Yes)、ルール管理部120は、対象抽象手順ペアについて、S4070〜S4090を行う。
すなわち、ルール管理部120は、対象抽象手順ペアに関する情報が抽象手順関係テーブル1505に未登録か否かを判断する(S4070)。
S4070の判断結果が真の場合(S4070:Yes)、ルール管理部120は、対象抽象手順ペアに関する情報を抽象手順関係テーブル1505に登録する(S4080)。
具体的には、ルール管理部120は、包含関係チェック処理の結果より、対象抽象手順ペアの親子関係を特定する。対象手順ペア内の親の抽象手順について、ルール管理部120は、当該親の抽象手順のIDを抽象手順ID15050として含むエントリがあれば、そのエントリに、対象抽象手順ペア内の子の抽象手順のIDを子抽象手順ID15051として登録する。また、対象抽象手順ペア内の子の抽象手順について、ルール管理部120は、当該子の抽象手順のIDを抽象手順ID15050として含むエントリがあれば、そのエントリに、対象抽象手順ペア内の親の抽象手順IDを親抽象手順ID15052として登録する。なお、もしも、対応するエントリがない場合には、ルール管理部120は、新規にエントリを抽象手順関係テーブル1505に生成する。なお、S4080において、ルール管理部120は、対象抽象手順ペア内の子抽象手順のIDが、いずれかの既存の抽象手順を含む子抽象手順の子抽象手順ID15051として登録済であれば、対象抽象手順ペア内の子抽象手順のIDを子抽象手順ID15051として登録しないでよい。同様に、ルール管理部120は、対象抽象手順ペア内の親抽象手順のIDが、いずれかの既存の抽象手順に含まれる親抽象手順の親抽象手順ID15052として登録済であれば、対象抽象手順ペア内の親抽象手順のIDを親抽象手順ID15052として登録しないでよい。
ルール管理部120は、対象抽象手順ペアについて、同一部特定処理を実施する(S4090)。
図21は、包含関係チェック処理(S4050)を示す。包含関係チェック処理は、入力である対象抽象手順ペアを構成する2つの抽象手順が包含関係であるか否かを判断する処理である。
ルール管理部120は、対象抽象手順ペアを構成する抽象手順毎に、その抽象手順に含まれる条件種類の数を集計する(S5000)。対象抽象手順ペアを構成する抽象手順の関係が、包含関係にあるならば、それらの対象手順間の類似度が高く、含まれている条件種類と条件種類の数とが包含関係にあると考えられる。そこで、ルール管理部120では、S5000で各抽象手順について集計した条件種類及びそれの数を基に、対象抽象手順ペアが包含関係を有するか否か(対象抽象手順ペアを構成する2つの抽象手順が包含関係にあるか否か)を判断する(S5010)。例えば、第1の抽象手順が、第2の抽象手順が含む条件種類の全てを含んでいれば、対象抽象手順ペアは包含関係を有する。一方、第1の抽象手順が、第2の抽象手順含む少なくとも1つの条件種類を含んでいなければ、対象抽象手順ペアは包含関係を有しない。ルール管理部120は、S5010の判断結果(真(Yes)又は偽(No))を、チェック結果とし、そのチェック結果を戻り値として返却する。
図22は、同一部特定処理(S4090)を示す。同一部特定処理は、包含関係にあると推定された対象抽象手順ペアから共通の単語列パタンを特定する処理である。
ルール管理部120は、対象抽象手順ペアに関して、抽象手順文の対応関係を特定する(S6000)。具体的には、例えば、ルール管理部120は、レーベンシュタイン距離や、TF−IDFといった方法で、抽象手順文をベクトル表現に置き換え、ベクトルの距離が一定のしきい値以下の抽象手順文ペアを求めてもよいし、抽象手順文の出現順番が一致するように制限を加えてもよい。
その後、ルール管理部120は、抽象手順文の数が少ない方の抽象手順を選択する(S6010)。そして、ルール管理部120は、選択した抽象手順内の抽象手順文毎に、S6030〜S6050を行う。以降、1つの抽象手順文を例に取る(S6030〜S6050の説明において、「対象抽象手順文」と呼ぶ)。
ルール管理部120は、対象抽象手順文に対応する抽象手順文が、S6000で特定されているか否かを判断する(S6030)。
もしも、S6030の判断結果が真の場合には(S6030:No)、ルール管理部120は、対象抽象手順文と、対象抽象手順文に対応する抽象手順文とを比較し、それらの抽象手順文に共通する部分(フレーズ)があるか否かを判断する(S6040)。ここでは、例えば、ルール管理部120は、片方の抽象手順文に含まれる単語列について、N−Gramで単語列を切り出し、もう片方の抽象手順分に含まれるか否かを判断してよい。また、例えば、フレーズは、単純一致の部分でもよいし、両抽象手順に含まれるような正規表現としての部分でもよい。
もしも、S6040の判断結果が真の場合には(S6040:Yes)、ルール管理部120は、抽出手順パタンテーブル1506及び抽象手順同一部テーブル1507を更新する(S6050)。具体的には、例えば、ルール管理部120は、フレーズID15060を重複ないように生成し、そのフレーズID15060と、フレーズ15061とを抽出手順パタンテーブル1506に登録する。また、ルール管理部120は、対象抽象手順文について、S6040で抽出したフレーズが出現する位置(開始位置15072及び終了位置15073)と、そのフレーズのフレーズID15074(生成したフレーズID15060と同じID)を、抽象手順同一部テーブル1507に登録する。
図23は、手順変換順序決定処理(S1050)を示す。手順変換順序決定処理は、類似関係抽出処理と包含関係推定処理で抽出した手順間の関係を元に、手順をフローチャートに変換する推奨順序を決定する処理である。
ルール管理部120は、抽象手順関係テーブル1506を参照し、包含関係にあり未選択の抽象手順のうち、最も先祖にあたる抽象手順(例えば、最も単語(条件節)の少ない抽象手順)を選択する(S7000)。
ルール管理部120は、S7000で選択した抽象手順の上位抽象手順のうち未選択の上位抽象順があるか否かを判断する(S7010)。もしも、S7010の判断結果が真の場合には(S7010:Yes)、ルール管理部120は、未選択の上位抽象手順のうち、1つの上位抽象手順を選択し(S7020)、S7010の判断を行う。
もしも、S7010の判断結果が偽の場合には(S7010:No)、ルール管理部120は、当該の抽象手順(S7000で選択した抽象手順)を選択する(S7030)。
次に、ルール管理部120は、S7030で選択した抽象手順の抽象手順ID15025に対応した全ての手順を、手順テーブル1502から選択する(S7040)。
その後、ルール管理部120は、S7030で選択した抽象手順に対応する各手順の変換順番15030が、S7030で選択した抽象手順の親抽象手順に対応する各手順の変換順番の連番(次の順番)になるように、変換順番15030を生成し、その変換順番15030と、S7040で選択した手順の手順ID15031とを手順変換順序テーブル1503に登録する(S7050)。
以上、S7000〜S7050が、全ての抽象手順に対して繰り返される(S7060)。結果として、同一の包含関係に属する各抽象手順について、その抽象手順に対応する各手順の変換順番が、その抽象手順の親抽象手順に対応する各手順の変換順番の次の順番とされる。具体的には、例えば、第1の抽象手順が第2の抽象手順の親抽象手順であり、第1の抽象手順に対応する各手順の変換順番がX(Xは自然数)の場合、第2の抽象手順に対応する各手順の変換順番はX+1である。
図24は、手順フローチャート変換の全体シーケンスを示す。
管理クライアント200のフローエディタ220が、運用管理者からの手順フローチャート変換操作を受け、その操作に従う手順一覧要求を管理サーバ100に送信する。管理サーバ100のルール管理部120が、その手順一覧要求を受信する。ルール管理部120が、その要求に応答して、変換順番15030と手順15011との組(更に手順ID15010を含んでもよい)の一覧を、管理クライアント200に送信する。管理クライアント200のフローエディタ220は、変換順番15030通りに並んだ手順の一覧をフローエディタ画面60の手順一覧221に表示する。
フローエディタ220は、運用管理者から、手順一覧221からの手順の選択を受け、選択された手順の手順ID(手順IDに代えて又は加えて手順それ自体でもよい)を管理サーバ100に送信する。管理サーバ100のルール管理部120は、選択された手順の手順IDを受信することを含むフロー推定処理1203を実施し、選択された手順の全部又は一部の推定フローチャートと、選択された手順のうち推定された箇所(手順文又はフレーズ)とのうちの少なくとも1つを管理クライアント200に送信する。管理クライアント200のフローエディタ220は、受信した情報を元に、手順表示222とフロー入力223に、手順と推定フローチャートを表示する。なお、フローエディタ220は、手順文、フレーズ又は単語といった手順箇所を、マウスなどの入力デバイスによって指定された場合、指定された手順箇所に対応する推定フローチャート箇所(例えば、ノード全体、又は、ノード内の文字列における該当箇所)を、ルール管理部120に問合せて特定することにより(或いは、手順フロー対応テーブル1509を参照することにより)、強調表示することもできる。
フローエディタ220が、運用管理者から、手順表示222に対して、手順全体、手順文又はフレーズの選択と、選択箇所に対応するフローチャートの入力とを受ける。このとき、前述のとおり、フローエディタ220は、選択箇所に対応する推定フロー箇所を強調表示させてから、当該フローチャートの修正を受けてもよい。フローエディタ220は、入力されたフローチャートと、手順対応関係(手順全体、手順文及びフレーズのうちの少なくとも2つの関係)とを保持する。フローエディタ220は、運用管理者からフローチャートの保存指示を受けると、入力されたフローチャート、及び、保持した手順対応関係を、管理サーバ100に送信する。管理サーバ100のルール管理部120は、そのフローチャート及び対応関係を保存するためのフロー記憶処理1202を実施し、完了通知を、フローエディタ220に通知する。
なお、手順一覧221には、手順以外が表示されてもよい。例えば、推定フローが表示されてもよいし、手順のうち推定されている箇所の割合(カバレッジ)などが表示されてもよい。また、保存指示は、運用管理者が明示的に行う必要は必ずしもない。例えば、フローチャートの入力と同時に明示の保存指示無しにフロー記憶処理1202が実施されてもよい。このとき、上記の通りに手順一覧221の表示が更新されてもよい。
図25は、フロー記憶処理1202を示す。フロー記憶処理1202は、受信したフローチャートを記憶する処理である。
フローテーブル1508では、図14に示す通り、論理表現15081から別のフローID15080を参照することがあり得る。例えば、手順文に対応するフローチャートから、フレーズに対応するフローチャートを参照することがあり得る。そのため、ルール管理部120は、まず、フロー分解処理を実施する(S8000)。それにより、受信した手順箇所をより細粒度の単位である抽象手順やフレーズなどに分解し、それらの単位に対応するフローチャートを得ることができる。フローチャート毎に、S8010〜S8050が行われる。以降、1つのフローチャートを例に取る(S8010〜S8050の説明で「対象フローチャート」と呼ぶ)。
ルール管理部120は、対象フローチャートに関する情報が手順フロー対応テーブル1509に登録済みか否かを判断する(S8010)。具体的には、例えば、ルール管理部120は、対象フローチャートに対応するID(例えば、手順ID、手順文、抽象手順ID、抽象手順文ID、開始位置及び終了位置の部分集合)が手順フロー対応テーブル1509に登録済みか否かを判断する。
もしも、S8010の判断結果が偽の場合には(S8010:No)、ルール管理部120は、対象フローチャートに対応するIDを手順フロー対応テーブル1509に登録する(S8020)。この時、そのIDに対応付けられる代表フラグ15098は“Yes”とされる。
一方で、もしも、S8010の判断結果が真の場合には(S8010:Yes)、ルール管理部120は、対象フローチャートと既存のIDに対応したフローチャートとの差分を無くしたフローチャートを代表フローチャートとして生成する。具体的には、ルール管理部120は、S8030〜S8050を行う。
すなわち、ルール管理部120は、手順フロー対応テーブル1509から、対象フローチャートに対応するIDに合致し、かつ代表フラグ15098“No”であるフローチャート群(1以上のフローチャート)を取得する(S8030)。
そして、ルール管理部120は、S8030で取得したフローチャート群と、対象フローチャートとを比較し、代表フローチャートを生成する(S8040)。具体的には、例えば、ルール管理部120は、フローチャート群のうちの過半数(所定割合の一例)のフローチャートに存在する条件種類や動作種類を選択する。そして、ルール管理部120は、選択した条件種類や動作種類を示すノード間の論理的な接続関係が、上記過半数のフローチャートに存在する場合に、その論理的な接続関係で、対象フローチャート内の条件種類や動作種類を示すノードをつなぐ。結果として、複数のグラフの形として代表フローチャートが生成される。
その後、ルール管理部120は、S8040で生成した代表フローチャートに関する情報を、手順フロー対応テーブル1509に登録する(S8050)。この時、そのフローチャートについて、代表フラグ15098は“Yes”とされる。
ルール管理部120は、S8000〜S8050の後(受信したフローチャートを登録した後)、手順一般化処理(S1020)で推定した条件節について、受信したフローチャートを元に確定させる。
具体的には、まず、ルール管理部120は、受信したフローチャートから、条件表現を記載した条件節のノードを抽出する(S8060)。
そして、ルール管理部120は、抽出したノードに含まれる条件種類に対応したエントリ(条件種類テーブル1510のエントリ、例えば、条件値15102や、取得元テーブル15103及び取得元カラム15104が指すテーブル部分に含まれる条件値表現の情報)を元に、S8060で抽出したノードに対応した条件節に対応する手順箇所を特定する(S8070)。例えば、ルール管理部120は、上記の条件表現に類似する単語を手順から探索すればよい。なお、S8060で抽出したノードに対応した条件節に関する情報を含んだエントリが、条件種類テーブル1510に無い場合には、ルール管理部120は、そのようなエントリを条件種類テーブル1510に追加する。
もしも、S8070で特定したエントリ(条件種類テーブル1510のエントリ)における推定フラグ15105が“Yes”の場合には、ルール管理部120は、その推定フラグ15105を“No”に変更し、条件値15102として、S8070で特定した手順箇所の表現を登録する(S8080)。
図26は、フロー分解処理(S8000)を示す。
ルール管理部120は、フローチャートと手順対応関係とを受信する(S1500)。ルール管理部120は、手順対応関係が手順文を含むか否かを判断する(S1510)。S1510の判断結果が偽の場合には(S1510:No)、ルール管理部120は、手順テーブル1511を参照し、手順に含まれる全手順文のIDを抽出する(S1520)。
手順対応関係から特定される手順文毎に、S1530〜S1560が行われる。以降、1つの手順文を例に取る(S1530〜S1560の説明で「対象手順文」と呼ぶ)。
ルール管理部120は、手順テーブル1511を参照し、対象手順文に対応する抽象手順文を特定する(S1530)。そして、ルール管理部120は、受信したフローチャートのうちの、特定した抽象手順文に含まれる条件種類や動作種類に対応したフローチャート部分(フローチャート中のノード)を、特定する(S1540)。その際、ルール管理部120は、特定された抽象手順文に対応しない条件節や動作のノードを、受信したフローチャートから除去する。これにより、部分的なフローチャートが作成される。
次に、ルール管理部120は、抽象手順パタンテーブル1506と抽象手順同一部テーブル1507を参照し、抽象手順文に含まれる全フレーズを特定する(S1550)。特定されたフレーズ毎に、S1560が行われる。以降、1つのフレーズを例に取る(S1560の説明で「対象フレーズ」と呼ぶ)。
ルール管理部120は、S1540と同様に、受信したフローチャートから、対象フレーズに対応するフローチャートを特定する(S1560)。
S1530〜S1560を実施後、ルール管理部120は、S1540と同様に、受信したフローチャートから、抽象手順全体に対応するフローチャートを特定する(S1570)。
ルール管理部120は、手順、手順文、抽象手順、抽象手順文、フレーズの対応関係に相当するように、特定したフローチャートの対応関係を特定し、フローチャートの重複を除去する(S1580)。そして、ルール管理部120は、特定したフローチャート、フローチャートと手順箇所との対応関係、及び、フローチャート間の重複排除結果を返却する。
図27は、フロー推定処理1203を示す。
ルール管理部120は、選択された手順の手順IDを受信し(S9000)、まず、手順フロー対応テーブル1509を参照し、受信した手順IDに対応するフローID15097を特定する(S9010)。その後、ルール管理部120は、フローテーブル1508を参照し、特定したフローID15097に対応する論理表現15081(図27の説明において、以降、代表例であるフローチャートと記載)を特定する(S9020)。
次に、ルール管理部120は、特定したフローチャートにフローIDが含まれているか否かを判断する(S9030)。
もしも、S9030の判断結果が真の場合には(S9030:Yes)、ルール管理部120は、含まれているフローIDに対応するフローチャートをフローテーブル1508から抽出し(S9040)、抽出したフローチャートをS9020で特定したフローチャートにマージすることで1つのフローチャートを生成する(S9050)。
一方で、もしも、S9030の判断結果が偽の場合には(S9030:No)、ルール管理部120は、当該フローチャート(S9050で生成されたフローチャート、又は、S9020で特定されたフローチャート)を返却する。
以降、図28〜図32を参照して、フローエディタ画面60の遷移の一例を説明する。なお、以降の説明では、手順ID“M”(Mは自然数)の手順を、「手順M」と呼ぶ。抽象手順ID“N”(Nは自然数)の抽象手順を、「抽象手順N」と呼ぶ。フローID“P”(Pは自然数)のフローチャートを「フローチャートP」と呼ぶ。また、フローエディタ画面60の表示制御は、フローエディタ220とルール管理部120とのうちの少なくとも1つにより行われる(具体的には、例えば、フローエディタ220からの要求に応答してルール管理部120から受けた情報を基にフローエディタ220により行われる)。以下、説明を簡単にするために、フローエディタ画面60の表示制御は、ルール管理部120によりフローエディタ220を通じて行われるとする。なお、当該表示制御は、フローエディタ220が、管理サーバ100が管理する各種テーブルを参照することにより行ってもよい。
図28に例示の手順1及び2があるとする。ルール管理部120が、手順1及び2について、S1010〜S1030を経て、抽象手順1及び2を得る。具体的には、例えば、下記の通りである。
・手順1における「HostA」が、抽象手順1において条件種類“SERVER_NAME_COND_1”に抽象化されている。「HostA」が、サーバ名に該当する(取得元カラム15104“サーバ名”にある)と判断され、故に、条件種類15101“SERVER_NAME_COND_1”が推定されたためである。
・手順1における「「XXXがエラーです」の」が、抽象手順1において条件種類“MSG_COND_1”に抽象化されている。手順1における「「XXXがエラーです」の」が、メッセージに該当する(取得元カラム15104“メッセージ”にある)と判断され、得湯に、条件種類15101“MSG_COND_1”が推定されたためである。
・手順1における「エスカレーションしない」が、抽象手順1において動作種類“NO_ESCALATION”に抽象化されている。手順1における「エスカレーションしない」が、動作表現15112“エスカレーションしない”に該当したためである。
また、図28に示すように、ルール管理部120が、抽象手順1及び2について、S1010〜S1030を経て、抽象手順1及び2が包含関係にあることを特定する。具体的には、抽象手順2が、抽象手順1の親抽象手順である。抽象手順2の方が抽象手順1よりも条件(条件ノード)が少ないためである。
また、図28に示すように、条件種類15101“SERVER_NAME_COND_1”にフローチャート2が関連付けられており、条件種類15101“MSG_COND_1”にフローチャート1が関連付けられている。フローチャート2及び1のいずれも、条件節の論理表現である。
図28の例によれば、図29に示すように、手順一覧221には、手順2の変換順番が、手順1の変換順番よりも先である。具体的には、手順2の順番(変換順番)は“1”であり、手順1の順番は“2”である。抽象手順2は、抽象手順1の親抽象手順であるためである。
まず、図29に示すように、運用管理者が順番“1”の手順2を選択したとする。この場合、図29及び図30に示すように、ルール管理部120が、手順2を手順表示222に表示し、選択された手順2に対応した推定されたフローチャート1及びフローチャート4をフロー入力223に表示する(なお、図30に例示のフローチャート4の論理表現は、後述の手動追加後の論理表現である)。フローチャート1の表示を例に取ると、次の通りである。すなわち、ルール管理部120が、選択された手順2に対応した抽象手順2を特定する。ルール管理部120が、抽象手順テーブル1504から、抽象手順2に対応した条件種類ID15043を特定する。ルール管理部120が、条件管理テーブル1510から、特定した条件種類ID15043に対応したフローID15106を特定する。ルール管理部120が、フローテーブル1508から、特定したフローID15106に対応した論理表現15081を特定し、特定した論理表現15081を表すフローチャート1(ノード)をフロー入力223に表示する。その際、ルール管理部120は、論理表現15081における[variable](パラメータ)に、手順2から特定されたパラメータ値“YYYでアラート”を代入する。これにより、「MESSAGE=YYYでアラート」という表現をもったノード(フローチャート)がフロー入力223に表示される。
その後、図30に示すように、運用管理者が、手順2における非抽象化部分“17:00−18:00の間”を抽象化した表現“17:00<=TIME and TIME<=18:00”をフロー入力223に入力し、保存指示を出した(例えば「保存」ボタン10をクリックした)とする。その表現に対応した条件種類が条件種類テーブル1510に無いため、ルール管理部120が、その表現に対応した条件種類15101“TIME_COND_1”及び条件値を含んだエントリを条件種類テーブル1510に追加する。また、ルール管理部120が、その表現に対応したフローチャート3(論理表現)をフローテーブル1508に追加する。また、ルール管理部120が、動作種類に対応したフローチャート4(論理表現)を更新する。また、ルール管理部120は、類似関係抽出処理、包含関係推定処理及び手順変換順序決定処理を行って、フローエディタ画面上の手順一覧(手順の並び順)を更新してもよい。
次に、図31に示すように、運用管理者が順番“2”の手順1を選択したとする。この場合、図31に示すように、ルール管理部120が、手順1を手順表示222に表示し、抽象手順1の親抽象手順2に対応した推定されたフローチャート1、3及び4をフロー入力223に表示する。その際、ルール管理部120は、フローチャート1における[variable]に、手順1から特定されたパラメータ値“XXXがエラーです” (フローチャート1に対応した条件種類に対応するパラメータ値)を代入する。また、ルール管理部120は、フローチャート3における[variable]に、手順1から特定されたパラメータ値“12:00”及び“12:30”(フローチャート3に対応した条件種類に対応するパラメータ値)を代入する。
更に、図32に示すように、ルール管理部120が、抽象手順1に対応した条件種類のうち抽象手順2に包含されていない条件種類“SERVER_NAME_COND_1”に対応するフローチャート2をフロー入力223に表示する。その際、ルール管理部120は、フローチャート2(論理表現)における[variable]に、手順1から特定されたパラメータ値“HostA”(条件種類“SERVER_NAME_COND_1”に対応したパラメータ値)を代入する。
図32に示すように、運用管理者は、手動でノード間を接続する(例えばノード間を矢印で結ぶ)ことにより、手順1に対応したフローチャートを完成させる。
図31及び図32によれば、運用管理者は、抽象手順2の子抽象手順1に対応した手順1について(登録済みフローチャートに対応した手順2の次の順番とされている手順1について)、実質的に、手動でフローチャートを追加又は編集する必要が無い。運用管理者は、手順1についてのフローチャートが推定されたフローチャート(図32に示すフローチャート)で正しいと判断した場合に、保存指示を出す。この場合、ルール管理部120が、動作種類に対応した新たなフローチャート5(フローID“2”を含んだ新たな論理表現)をフローテーブル1508に追加する。
以上、一実施例を説明したが、これは本発明の説明のための例示であって、本発明の範囲をこの実施例にのみ限定する趣旨ではない。本発明は、他の種々の形態でも実施することが可能である。
例えば、形態素解析に代えてディープラーニングのような他の手法が採用されてもよい。
また、例えば、ルール管理部120は、対象システム300の構成を示す構成情報170内の値と、第1抽象手順(第1手順に対応した抽象手順)及び第2抽象手順(第2手順に対応した抽象手順)のうちの少なくとも1つに含まれる単語が類似の場合には、構成情報170内の当該値を元に、その単語についての条件種類を推定してもよい。
また、例えば、ルール管理部120は、対象システム300の監視結果を示す監視情報160内の値と、第1抽象手順(第1手順に対応した抽象手順)及び第2抽象手順(第2手順に対応した抽象手順)のうちの少なくとも1つに含まれる単語が類似の場合には、監視情報160内の当該値を元に、その単語についての条件種類を推定してもよい。
また、例えば、フローエディタ220(又はルール管理部120)は、手順一覧221において、第1抽象手順に包含される第2抽象手順に対応した第2手順の順番が、第1抽象手順に対応した第1手順の順番よりも先としてよい。更に、例えば、フローエディタ220(又はルール管理部120)は、手順書1501(複数の手順)のうちの第3手順に対応した第3抽象手順にも第2抽象手順が包含されており、且つ、第1抽象手順及び第3抽象手順が包含関係にない場合、手順一覧221において、第1手順及び第3手順のうち、第1抽象手順及び第3抽象手順のうち条件種類の数が少ない方の抽象手順に対応した手順の方の順番を先としてよい。このような順番に沿って手順をフローチャートに変換していくと、運用管理者による入力作業負担が軽減されることが期待される。