図2は、構成情報管理装置の一実施例の構成を図解した機能ブロック図である。図2において、構成情報管理装置10は、取得部1、生成部2、対応付け部3、及び検知部4を含む。
取得部1は、第1の装置についての構成情報と第1ログデータと、第2の装置についての構成情報と第2ログデータと、を取得する。
生成部2は、第1ログデータ及び第2ログデータに含まれる複数のメッセージを、メッセージ間の類似度に基づいて分類して、分類されたメッセージ間で相違する可変部分を含むメッセージパターンを生成する。
対応付け部3は、第1の装置の構成情報の値と第2の装置の対応する構成情報の値との異同と、第1ログデータにおけるメッセージパターンの可変部分に対応する値と第2ログデータにおけるメッセージパターンの可変部分に対応する値との異同と、が一致する場合、メッセージパターンを構成情報と対応付けて記録する。
また取得部1は、第3の装置についての構成情報と第3ログデータを取得する。
また生成部2は、第1ログデータ、第2ログデータ、及び第3ログデータに含まれる複数のメッセージを、メッセージ間の類似度に基づいて分類して、分類されたメッセージ間で相違する可変部分を含むメッセージパターンを生成する。
また対応付け部3は、第1の装置の構成情報の値と第2の装置の対応する構成情報の値とが異なり、第1の装置の構成情報の値と第3の装置の対応する構成情報の値とが一致する場合に、第1ログデータにおけるメッセージパターンの可変部分に対応する値と第2ログデータにおけるメッセージパターンの可変部分に対応する値とが異なり、且つ、第1ログデータにおけるメッセージパターンの可変部分に対応する値と第3ログデータにおけるメッセージパターンの可変部分に対応する値とが一致する場合、メッセージパターンを、構成情報と対応付けて記録する。
また、対応付け部3は、第1の装置の構成情報の値と第2の装置の対応する構成情報の値との異同と、第1ログデータにおけるメッセージパターンの可変部分に対応する値と第2ログデータにおけるメッセージパターンの可変部分に対応する値との異同とが一致する場合、可変部分を構成情報と対応付けて記録する。
また取得部1は、第4ログデータを取得する。
検知部4は、第4ログデータからメッセージパターンに合致するメッセージを抽出し、抽出したメッセージの可変部分の値に基いて、メッセージパターンに対応する構成情報の変更を検知する。
実施形態の構成情報管理装置は、パラメータの更新を、サーバの運用ログに出力されるメッセージから検知する。運用ログに出力されるメッセージから更新を検知するために、構成情報管理装置は、予めパラメータの値が出力されるログメッセージのパターンを記憶しておく。そして構成情報管理装置は、運用ログに出力されるメッセージの中から、記憶しておいたパターンに合致するメッセージを抽出し、抽出したメッセージからパラメータの値を特定する。
実施形態において、構成情報は複数のパラメータを含み、サーバから出力されるログは複数のメッセージを含む。以下の説明においては、各サーバにおいて構成情報の変更が発生した場合に、ログからの更新の検知を行いたいパラメータを対象パラメータと記す。
実施形態に係る構成情報管理装置が行う処理は、学習段階と検知段階の2つの段階に分けられる。学習段階は、パラメータの値が出力されるログメッセージのパターンを生成し記憶する段階である。検知段階は、学習段階で生成したパターンを用いて、運用ログから更新を検知する段階である。
学習段階では、構成情報管理装置は、サーバの構成情報とログを用いて、パラメータの値が出力されるメッセージのパターンを特定し、特定したメッセージのパターンとパラメータとを対応付けたパターン表を生成する。検知段階では、構成情報管理装置は、学習段階で生成したパターン表を用いて、運用ログからパターンに合致するメッセージを特定してパラメータの値を抽出することにより、構成情報の変更を検知する。
図3は、実施形態に係る構成情報管理装置の構成の一例を示す。図3において、構成情報管理装置は、取得部31、分類部32、パターン生成部33、対応付け部34、記憶部35、プログラム生成部36、及び適用部37を含む。このうち、学習段階に関連するものは、取得部31、分類部32、パターン生成部33、対応付け部34、及び記憶部35であり、構成情報21とログ22の組み合わせを入力として、パターン表24、対応表25の情報が出力される。検知段階に関連するものは、取得部31、記憶部35、プログラム生成部36、及び適用部37であり、運用ログ23、パターン表24、対応表25の情報を入力として、構成管理情報26の情報が出力される。
取得部31は、取得部1の一例である。分類部32及びパターン生成部33は、生成部2の一例である。対応付け部34は、対応付け部3の一例である。プログラム生成部36及び適用部37は、検知部4の一例である。
先ず学習段階に関連する構成について説明する。
取得部31は、複数のサーバの構成情報21とログ22の組み合わせを取得する。ここで取得される構成情報21には対象パラメータが含まれる。そして取得部31は、取得した複数のサーバの構成情報21とログ22の組み合わせを分類部32へ出力する。
ここで取得する構成情報21とログ22は、必ずしも最新のものでなくともよく、予め構成情報管理装置に格納されているものが使用されてもよい。ただし、構成情報21の値は、ログ22が出力された時点における値であるとする。尚、構成情報21とログ22に関しては所定のコンポーネント(例えばソフトウェア)に関するものとする。例えば、コンポーネント「mysqld」に関して、構成情報21が「/etc/mysql/my.cnf」、ログ22が「/var/log/mysql/error.log」であってもよい。
分類部32は、ログ22に出力されたメッセージ間の類似度に基いて、メッセージをタイプ毎にグループに分類する。そして分類部32は、分類されたグループと、そのグループに含まれるメッセージを、構成情報21とともにパターン生成部33へ出力する。
メッセージの分類において、例えば分類部32は先ず、ログ22に出力されているメッセージのうち、所定の2つのメッセージを選択し、選択したメッセージ間の類似度を算出する。このような類似度の算出を、分類部32は全てのログ22における全ての2つのメッセージの組み合わせで行う。そして分類部32は、メッセージ間の類似度が所定の閾値以上であるメッセージ同士を同一のグループに含まれるように分類する。
パターン生成部33は、分類部32により分類された各グループに含まれるメッセージ同士を比較して、メッセージの共通部分と可変部分を特定し、メッセージのパターンを生成する。そしてパターン生成部33は、生成したパターンを構成情報21とともに対応付け部34へ出力する。ここで、分類部32により分類されるグループは複数ある場合があり、その場合は、パターンはグループの数だけ生成されてもよい。
同一グループに含まれるメッセージ同士は、類似度が所定の閾値以上と判定されたものであるので、各メッセージ同士は類似するものである。従って、これらのメッセージのうちでは、共通して出現する部分(単語、フレーズ)が多くなるが、異なる部分も存在する。このような同じグループ内のメッセージ間で異なっているメッセージの一部を可変部分と記す。
生成されるパターンは、同一グループに含まれるメッセージの共通部分と、可変部分を置き換えた変数とで構成される。ここで、可変部分を置き換えた変数の名称は、複数のパターンの可変部分を一意に識別できる識別情報とする。
可変部分の特定において、例えばパターン生成部33は先ず、同一グループに含まれるメッセージのうち、所定の2つのメッセージを選択する。次にパターン生成部33は、選択したメッセージ間で単語毎に、その単語が一致するか否かを判定する。そして一致しないと判定した単語を、パターン生成部33は、可変部分と特定する。このような可変部分の特定処理を、パターン生成部33は、同一グループに含まれる全ての2つのメッセージの組み合わせにおいて行う。
対応付け部34は、パターンと、そのパターンのメッセージに値が出力されるパラメータの識別情報(以下、単にパラメータと記す)とを対応付けて、記憶部35のパターン表24に記録する。パターンとパラメータの対応関係は、パターンに合致するメッセージの可変部分に、対応するパラメータの値が出力される関係となる。
ここで、あるメッセージを含むログ22を出力したサーバに関するパラメータを、以下の説明では、そのメッセージに対応するパラメータと記す。すなわち、メッセージmに対応するパラメータとは、mを含むログ22を出力したサーバに関するパラメータである。
対応付けにおいては、入力された構成情報21のうちの対象パラメータのうち、一つずつ対象パラメータに着目して、以下で説明する、パターンと対象パラメータの対応付け処理を行う。また、パターンと対象パラメータの対応付け処理において、例えば対応付け部34は、パターン生成部33から入力された複数のパターンのうち、一つずつパターンに着目して、着目したパターンと対象パラメータを対応付けるか否かの判定を行う。
着目したパターンと対象パラメータを対応付けるか否かの判定において、対応付け部34は先ず、取得部31が取得したログ22に含まれるメッセージのうち、パターンに合致するメッセージに対応するパラメータの値を特定する。これは言い換えると対応付け部34は、パターンの生成基のグループに含まれる各メッセージに対応する対象パラメータの値を特定しているともいえる。ここで、パターンに合致するメッセージとは、可変部分以外の共通部分がパターンと一致するメッセージを指す。
次に対応付け部34は、着目したパターンに合致する2つのメッセージのすべての組み合わせにおいて、メッセージの比較を行う。2つのメッセージの比較において対応付け部34は、比較対象の2つのメッセージの可変部分の異同と、比較対象の2つのメッセージの各々に対応する対象パラメータの値の異同とが一致するか否かを判定する。そして、比較対象の2つのメッセージの可変部分の異同と、比較対象の2つのメッセージの各々に対応する対象パラメータの値の異同とが一致しないと判定した場合、対応付け部34は、対象パラメータと着目したパターンは対応しないと判定する。
すなわち対応付け部34は先ず、比較対象の2つのメッセージに対応する対象パラメータの値が異なる場合に、2つのメッセージの可変部分が一致するか否かを判定する。そして、比較対象の2つのメッセージに対応する対象パラメータの値が異なるすべての組み合わせにおいて、2つのメッセージの可変部分が一致すると判定した場合、対応付け部34は対象パラメータと着目したパターンは対応しないと判定する。
そして対応付け部34は、比較対象の2つのメッセージに対応する対象パラメータの値が一致する場合に、2つのメッセージの可変部分が異なるか否かを判定する。そして2つのメッセージに対応する対象パラメータの値が一致する何れかの組み合わせにおいて、2つのメッセージの可変部分が異なると判定した場合、対応付け部34は対象パラメータと着目したパターンは対応しないと判定する。
次に対応付け部34は、着目したパターンに合致する全てのメッセージに対応するパラメータの値が同じか否かを判定する。着目したパターンに合致する全てのメッセージに対応するパラメータの値が同じであると判定した場合、対応付け部34は、着目したパターンの出現の有無は対象パラメータに関連があると判定する。
最後に対応付け部34は、着目したパターンの出現の有無が対象パラメータに関連があると判定された場合、または、着目したパターンは対象パラメータとは対応しないと判定されなかった場合は、着目したパターンと対象パラメータを対応付けると判定する。
そして、着目したパターンと対象パラメータを対応付けると判定すると、着目したパターンと対象パラメータとを対応付けて、記憶部35のパターン表24に格納する。また対応付け部34は、パターンの可変部分の値に対するパラメータの値、または、パターンの出現の有無とパラメータの値との関係を対応表25に記録する。
このように、パターンと対象パラメータを対応付けるか否かの判定を行って、判定の結果に応じて、パターンと対象パラメータを対応付けてパターン表24に格納する処理を、対応付け部34は、パターン生成部33から入力されたすべてのパターンについて行う。
記憶部35は、パターン表24、対応表25、及び構成管理情報26を記憶する。
次に、学習段階の処理について、図4〜図14を参照して具体的に説明する。図4〜図14を参照しての学習段階の処理の説明においては、対象パラメータは、パラメータが「version」、「bind-address」、「innodb」の3つである例を示す。
図4A及び図4Bは、学習段階で取得部31が取得する構成情報21とログ22の組み合わせの一例を示す。図4A及び図4Bにおいては、サーバ「svr01」〜「svr06」の6つのサーバの構成情報21とログ22の組み合わせが示されている。ここでは説明のために、図4に示すログ22に含まれるメッセージのうち、図5に示すメッセージに着目して説明する。図5は、学習段階の処理の説明のために着目するメッセージを示す図である。図5に示すように、サーバ「svr01」〜「svr04」の4つのサーバのログ22に含まれるメッセージ「m1」〜「m8」に着目して、学習段階の処理を説明する。
分類部32は、構成情報21とログ22の組み合わせを取得部31から入力されると、ログ22のメッセージの「m1」〜「m8」のうち、所定の2つのメッセージを選択し、選択したメッセージ間の類似度を算出する。以下、メッセージの分類について、図5〜図7を参照して説明する。ただし、図5〜図7を参照して説明するメッセージの分類の方法は一例であり、種々の方法を用いてもよい。
類似度の算出において分類部32は先ず、選択したメッセージの組み合わせにおいて、単語毎のアラインメントをとる。すなわち分類部32は、選択したメッセージの単語毎に1対1での対応付けを行う。そして分類部32は、対応付けた単語同士が一致するか否かを判定する。
図6(A)は、メッセージ「m2」と「m6」の類似度の比較の様子を示している。図6(B)は、メッセージ「m2」と「m3」の類似度の比較の様子を示している。図6(A)及び図6(B)に示すように、メッセージの単語毎に対応付けが行われ、一致するか否かの比較が行われる。図6(A)においては、単語順が「2」の単語が異なっている。図6(B)においては、単語順が「1」〜「5」の単語が異なっている。
各単語が一致するか否かを判定したら分類部32は、以下の式により類似度を算出する。
類似度=(一致する単語の数)/((一致する単語の数)+(異なる単語の数))
図6(A)においては、一致する単語の数は「5」であり、異なる単語の数は「1」である。よって、「m2」と「m6」の類似度は、5/(5+1)≒0.83となる。図6(B)においては、一致する単語の数は「2」であり、異なる単語の数は「5」である。よって、「m2」と「m3」の類似度は、2/(2+5)≒0.29となる。
尚、メッセージ間の類似度の算出方法は上記の方法に限定されず、種々の方法が用いられてもよい。
全てのメッセージの組み合わせの類似度を算出すると、分類部32は、所定の閾値以上であるメッセージ同士が同一グループに含まれるように、メッセージを分類する。
図7は、「m1」〜「m8」の全てのメッセージ間の類似度を算出した結果をまとめた情報である。図7においては、各セルの値は、列項目と行項目のメッセージの組み合わせの類似度を示している。例えば、「m1」の行の「m3」列のセルの値は、「m1」と「m3」の類似度の値を示している。図7において、所定の閾値の値を「0.5」とすると、「m1」に対して、「m3」、「m5」、「m7」の類似度が閾値以上となっている。また、「m2」に対して、「m4」、「m6」、「m8」の類似度が閾値以上となっている。すると分類部32は類似度が閾値以上のメッセージ同士である、「m1」、「m3」、「m5」、「m7」を同一グループに分類し、また、「m2」、「m4」、「m6」、「m8」を同一グループに分類する。
次に、パターン生成部33は、分類部32により分類された各グループに含まれるメッセージ同士を比較して、メッセージの共通部分と可変部分を特定し、メッセージのパターンを生成する。
図8A及び図8Bは、同一グループに含まれるメッセージからパターンを生成する様子を説明する図である。図8Aは、メッセージ「m1」、「m3」、「m5」、「m7」からパターンが生成される様子を示している。図8Bは、メッセージ「m2」、「m4」、「m6」、「m8」からパターンが生成される様子を示している。
図8A及び図8Bにおいて、各メッセージ間では、共通する単語と、相違する単語が存在している。パターン生成部33は、ここで相違する単語をパターンの可変部分として、パターンを生成する。
図8Aにおいてパターン生成部33は、例えば「m1」と「m3」を選択する。そしてパターン生成部33は、「m1」と「m3」においては、「127.0.0.1」と「0.0.0.0」とが一致しないと判定し、この部分を可変部分と判定する。同様にパターン生成部33は、グループに含まれるメッセージのすべての組み合わせを選択して、選択したメッセージ間で一致しない部分を特定し、その部分を可変部分と判定する。そしてパターン生成部33は、グループの可変部分を所定の変数(図8Aにおいては「v1」)で置き換え、置き換えた変数と共通部分とを有するパターンを生成する。尚、可変部分は、選択したメッセージの組み合わせによっては、一致する場合もある。例えば、「m1」と「m5」が選択された場合は、可変部分も一致している。
同様にして、図8Bにおいてパターン生成部33は、例えば「m2」と「m6」を選択する。そして、パターン生成部33は、「5.5.31」と「5.5.29」とが一致しないと判定し、この部分を可変部分と判定する。そしてパターン生成部33は、可変部分を変数「v1」で置き換え、置き換えた変数と共通部分とを有するパターンを生成する。
図9は、図4で示される構成情報21とログ22が入力された場合に生成されるパターンの例を示す。図9に示すように、図4で示される構成情報21とログ22が入力された場合は、パターン「t1」〜「t6」が生成される。図9の各パターンにおいては、「v1」、「v2」で示した部分が可変部分である。尚、図9のパターン「t1」と「t3」のように、可変部分が存在しないパターンも生成される。また、「t2」、「t4」、「t5」のように、一つのパターンに複数の可変部分が含まれる場合もある。
次に、対応付け部34は、パターン生成部33が生成したパターンと、そのパターンに合致するメッセージに値が出力されるパラメータとを対応付ける。実施形態では、各パラメータに対応するパターンを特定するために関連表を生成して、対応付けを行う。
関連表の生成において先ず対応付け部34は、構成情報21とログ22とから、サーバ毎に、サーバのログ22に含まれる、パターンに合致するメッセージ(以下、単にパターンと記す場合がある)の可変部分の値と、そのサーバに関する対象パラメータの値とを取得する。そして対応付け部34は、すべてのサーバを対象として、サーバのログ22に含まれるパターンの可変部分の値と、そのサーバに関する対象パラメータの値とを対応付けて、パラメータ毎に図10(A)〜(C)で示す関連表を生成する。図10(A)〜(C)は、それぞれ、パラメータ「version」、「bind-address」、「innodb」に関する関連表の例である。尚、この3つのパラメータは、図4の構成情報21に含まれているパラメータである。
図10(A)に示す関連表において、行項目は、パターンと可変部分の識別情報の組み合わせで示される。尚、このパターンと可変部分の値は、図9の値に対応している。また、列項目は、パラメータ「version」の値で示される。
例えば「srv01」について考えると、図4Aに示すように、「srv01」のパラメータ「version」の値は「5.5.31」である。よって、「srv01」のログ22に含まれるメッセージのうち、各パターンに合致するメッセージの可変部分の値を、列項目「5.5.31」の列に格納する。「srv01」について、例えば、「t2-v1」、「t2-v2」の可変部分に対応する単語はそれぞれ、「127.0.0.1」、「3306」である。よって、(行項目「t2-v1」、列項目「5.5.31」)で示されるセルには「127.0.0.1」、(行項目「t2-v2」、列項目「5.5.31」)で示されるセルには「3306」が格納される。
また、「srv02」のパラメータ「version」の値は「5.5.31」である。よって、「srv02」のログ22に含まれるメッセージのうち、パターンに合致するメッセージの可変部分の値を、列項目「5.5.31」の列に格納する。「srv02」について、例えば「t2-v1」、「t2-v2」の可変部分に対応する単語はそれぞれ、「0.0.0.0」、「3306」である。よって、(行項目「t2-v1」、列項目「5.5.31」)で示されるセルには「0.0.0.0」、(行項目「t2-v2」、列項目「5.5.31」)で示されるセルには「3306」が格納される。ここで、(行項目「t2-v1」、列項目「5.5.31」)で示されるセルには、サーバ「srv01」の値「127.0.0.1」に追加して、サーバ「srv02」の値「0.0.0.0」が格納されている。
また、「srv03」のパラメータ「version」の値は「5.5.29」である。よって、「srv03」のログ22に含まれるメッセージのうち、パターンに合致するメッセージの可変部分の値を、列項目「5.5.29」の列に格納する。「srv03」について、例えば「t4-v1」、「t4-v2」の可変部分に対応する単語は、「5.5.29」、「3306」である。よって、(行項目「t4-v1」、列項目「5.5.29」)で示されるセルには「5.5.29」、(行項目「t4-v2」、列項目「5.5.29」)で示されるセルには「3306」が格納される。
同様にして、サーバ「srv04」〜「srv06」についても、各サーバが出力するログ22に含まれるメッセージのうち、パターンに合致するメッセージの可変部分の値を、そのサーバのパラメータの値に応じて、対応する列に格納する。
尚、可変部分を持たないパターンの行には、「○」が格納され、行項目で示されるパターンが、どのサーバのログ22にも現れない場合には、「×」が格納される。例えば、(行項目「t5-v1」、列項目「5.5.29」)、(行項目「t5-v2」、列項目「5.5.29」)で示されるセルには「×」が格納されている。これは、パラメータ「version」の値として「5.5.29」が設定されているサーバ、すなわち、「srv03」、「srv04」には、パターン「t5」が出現していないことを示している。
以上のように、図4に示す構成情報21とログ22の組み合わせが入力される例では、対応付け部34は、パラメータ「version」に関して、図10(A)に示す関連表を作成する。パラメータ「bind-address」、「innodb」についても、パラメータ「version」と同様にして、対応付け部34は、図10(B)、図10(C)に示す関連表を作成する。
次に、対応付け部34は、作成した関連表を用いて、パラメータ毎に、そのパラメータの値が出力される可変部分を特定する。パラメータの値が出力される可変部分を特定する処理を図10〜図13を参照して説明する。
パラメータの値が出力される可変部分の特定において、先ず対応付け部34は、図10の関連表を用いて、パラメータの値が異なった場合に、可変部分が一致するか否かを判定する。例えば図10(A)において、対応付け部34は、列項目「5.5.31」と「5.5.29」を比較したときに、行項目で示される可変部分の値が異なるか否かを判定する。例えば、行項目「t2-v2」の行においては、(行項目「t2-v2」、列項目「5.5.31」)のセルと(行項目「t2-v2」、列項目「5.5.29」)のセルの値はどちらも「3306」となっている。よって対応付け部34は、行項目「t2-v2」で示される可変部分は、列項目「5.5.31」と「5.5.29」の間で一致していると判定する。パラメータの値が異なった場合に、すべての組み合わせで可変部分が一致すると判定すると、対応付け部34は、一致した可変部分はパラメータとは対応しないと判定する。すなわち、図10(A)の「t2-v2」で示される可変部分はパラメータ「version」とは対応しないと判定する。
行項目「t2-v1」の行においては、(行項目「t2-v1」、列項目「5.5.31」)のセルには「127.0.0.1, 0.0.0.0」、(行項目「t2-v1」、列項目「5.5.29」)のセルには「127.0.0.1, 0.0.0.0」が格納されている。この場合、対応付け部34は、(行項目「t2-v1」、列項目「5.5.31」)の「127.0.0.1」と(行項目「t2-v1」、列項目「5.5.29」)の「0.0.0.0」の組み合わせにおいて、可変部分が異なっていると判定する。
また、可変部分を持たないパターン(関連表では「○」が格納されている例えば「t1」)についても対応付け部34は、対象パラメータとは対応しないと判定する。
同様にすべての行項目について判定を行い、対応付け部34は、図10(A)の関連表から、対応しないと判定した行項目にその旨の記録を行った図11(A)の関連表を生成する。パラメータ「version」についてと同様に、対応付け部34は、パラメータ「bind-address」、「innodb」についても、図10(B)、(C)から図11(B)、(C)を生成する。
次に、対応付け部34は、図11(A)〜(C)の関連表を用いて、パラメータの値が同じである場合に可変部分が異なるか否かを判定する。すなわち図11(A)〜(C)において、対応付け部34は、全てのセルを参照し、一つのセルに複数の異なる値が格納されているか否かを判定する。一つのセルに異なる値が格納されていると判定した場合、対応付け部34は判定したセルの行項目で示される可変部分は、対象パラメータとは対応しないと判定し、関連表に記録する。
例えば、図11(A)において、(行項目「t2-v1」、列項目「5.5.31」)で示されるセルには、「127.0.0.1」と「0.0.0.0」の値が格納されている。よって、対応付け部34は、一つのセルに異なる値が格納されていると判定し、行項目「t2-v1」で示される可変部分は、対象パラメータとは対応しないと判定する。
同様にすべてのセルについて判定を行い、対応付け部34は、図11(A)〜(C)の関連表から、対応しないと判定した行項目にその旨の記録を行った図12(A)〜(C)の関連表を生成する。
次に対応付け部34は、図12(A)〜(C)の関連表を用いて、パラメータの値が異なる場合に、パターンに合致するメッセージの出現が変化するか否かを判定する。すなわち対応付け部34は、同一の行において、異なる列を比較したときに、一方のセルに「×」のみが格納され、他方のセルに「×」以外の値が格納されているか否かを判定する。
例えば、図12(C)において、(行項目「t6-v1」、列項目「TRUE」)のセルには、「×」以外の値(「29」、「30」、「26」、「75」)が格納されており(「×」が格納されておらず)、(行項目「t6-v1」、列項目「FALSE」)のセルには、「×」が格納されている。よって、対応付け部34は、パラメータ「innodb」に関して、パラメータの値が異なる場合に、パターン「t6」に合致するメッセージの出現が変化すると判定する。そして、対応付け部34は判定したセルの行項目で示されるパターンの出現の有無は、対象パラメータに関連すると判定し、図12(A)〜(C)の関連表から、関連すると判定した行項目にその旨の記録を行った図13(A)〜(C)の関連表を生成する。図13(C)では、図12(C)と比較して、「t6-v1」が対象パラメータとは対応しないことを示す記録(「t6-v1」行全体の×)が消えている。これはすなわち、パラメータの値が同じである場合に値が異なることがある可変部分であっても、パラメータの値が異なる場合にメッセージの出現が変化する可変部分は、そのパラメータと対応しないとは判定されないということを意味する。
図10〜図13を参照して説明したようにして、対応付け部34は、パラメータ毎に、そのパラメータの値が出力される可変部分を特定する。すなわち、対応付け部34は、関連表において、対象パラメータと対応しないと判定されなかった行項目で示される可変部分を対象パラメータの値が出力される可変部分であると特定する。
図13(A)〜(C)に示されるように、パラメータ「version」に関しては「t4-v1」、パラメータ「bind-address」に関しては「t2-v1」、パラメータ「innodb」に関しては「t6」が、各々のパラメータに対応するパターンまたは可変部分である。
次に対応付け部34は、各パラメータとそのパラメータの値が出力される可変部分とを対応付けて、パターン表24に格納する。図14は、パターン表24の一例を示す。パターン表24は、ID51、パターン52、可変部分の位置53、パラメータに対応する位置54、対応表ID55、及びパラメータ56のデータ項目を含む。ID51はパターンとパラメータとの対応付けを管理するための管理番号である。尚、ID51は、パターン表24に含まれなくてもよい。パターン52は、パターン生成部33により生成されたパターンである。可変部分の位置53は、パターン52における可変部分の位置を、パターン52の文字列に含まれる単語の先頭からの位置で示している。パラメータに対応する位置54は、パターン52に含まれる可変部分のうち、パラメータの値が出力される可変部分を示している。対応表ID55は、可変部分の値に対するパラメータの値、または、パターンの出現の有無とパラメータの値との関係を示す対応表25の識別情報である。対応表25については後ほど説明する。パラメータ56は、パターン52と対応するパラメータである。尚、パターン表24の各エントリに格納される値は互いに対応付けられるものとする。
図13(A)で示されるように、パラメータ「version」に関しては、「t4-v1」で示される可変部分に値が出力されると特定される。この場合、対応付け部34は、ID51が「1」のエントリを生成し、そのエントリにおいて、パターン52に「t4」で示されるパターンを格納し、パラメータ56に「version」を格納する。次に対応付け部34は、可変部分の位置53に、「t4」の可変部分である、「t4-v1」と「t4-v2」の位置をパターンの文字列の先頭からの単語の位置で示した値を格納する。図14の例では、パターンの文字列の先頭からの単語の位置は、パターンの先頭の単語を「0」とし、以降昇順に番号を振った値で示される。次に対応付け部34は、パラメータに対応する位置54に、パターン「version」の値が出力される可変部分であると特定された「t4-v1」の位置を格納する。パラメータ「version」とパターンの出現の有無は関係ないので、対応付け部34は、対応表ID55に「−」を格納する。
パラメータ「innodb」に関しては、図13(C)で示されるように、「t6」で示されるパターンの出現の有無がパラメータ「innodb」と関連すると判定される。すると対応付け部34は、ID51が「3」のエントリを生成し、そのエントリにおいて、パターン52に「t6」で示されるパターンを格納し、パラメータ56に「innodb」を格納する。次に対応付け部34は、可変部分の位置53に、「t6」の可変部分である、「t6-v1」の位置をパターンの文字列の先頭からの単語の位置で示した値を格納する。次に対応付け部34は、対応表25を生成し、生成した対応表25に、記憶部35に記憶される複数の対応表25のうちで、生成した対応表25を一意に識別するための識別情報である対応表IDを振る。
図14(B)は、対応表25の一例を示す。図14(B)の対応表25には、対応表ID「5」が振られている。図14(B)の対応表25は、メッセージの出現の有無とパラメータの値とが対応付けて格納される。尚、対応表25の各エントリに格納される値は互いに対応付けられるものとする。対応付け部34は、図13(C)で示されるように、パターンに合致するメッセージが出現する場合には、パラメータ「innodb」の値が「TRUE」であることを対応付けて、対応表25に格納する。また対応付け部34は、パターンに合致するメッセージが出現しない場合には、パラメータの値が「FALSE」であることを対応付けて、対応表25に格納する。図14(B)では、メッセージの「○」はメッセージが出現することを示し、メッセージの「×」はメッセージが出現しないことを示す。
尚、図14(B)の対応表25は、メッセージの出現の有無とパラメータの値とが対応付けて格納される例を示したが、可変部分の値と、パラメータの値とが対応付けて格納されてもよい。
対応表25を生成すると、対応付け部34は、対応表ID55に、生成した対応表25の対応表IDを格納する。尚、メッセージの出現の有無とパラメータの値とが対応する場合には、対応付け部34はパラメータに対応する位置54に「−」を格納する。以上のようにして、対応付け部34は、パターン表24と対応表25を生成する。そして、対応付け部34は、生成したパターン表24と対応表25を記憶部35に格納する。
次に、検知段階に関連する構成について説明する。図3において、検知段階に関連するものは、取得部31、記憶部35、プログラム生成部36、及び適用部37であり、運用ログ23、パターン表24及び対応表25の情報を入力として、構成管理情報26の情報が出力される。
取得部31は、運用ログ23を取得して、適用部37へ出力する。
プログラム生成部36は、パターン表24及び対応表25を用いて、運用ログ23からパターンに合致するメッセージを抽出してパラメータの値の変更を検知する検知プログラムを生成する。そしてプログラム生成部36は、生成した検知プログラムを適用部37へ出力する。
適用部37は、運用ログ23を検知プログラムに適用し、パラメータの値の変更を検知する。パラメータの変更を検知すると適用部37は、パラメータの変更後の内容を構成管理情報26に反映する。
構成管理情報26には、各サーバの最新の構成情報の値が格納されて管理される。
次に、検知段階の処理について、図15〜図17を参照して具体的に説明する。ここでは、図14(A)のパターン表24、及び図14(B)の対応表25を用いて、パラメータ「version」とパラメータ「innodb」の変更を検知する処理を説明する。
プログラム生成部36は、記憶部35に記憶されたパターン表24及び対応表25を取得する。ここでは、図14(A)のパターン表24及び図14(B)の対応表25を取得する。そしてプログラム生成部36は、パラメータ「version」とパラメータ「innodb」の変更を検知する検知プログラムを生成する。図15は、パラメータ「version」の検知プログラムの作成を説明する図である。図16は、パラメータ「innodb」の検知プログラムの作成を説明する図である。
先ず、図15を参照してパラメータ「version」の変更を検知するプログラムの生成について説明する。プログラム生成部36は、図14(A)のパターン表24のうち、パラメータ56が「version」である行を特定して、特定した行を読み込む。図15(A)は、プログラム生成部36が読み込んだパラメータ56が「version」の行を示している。そしてプログラム生成部36は、読み込んだ行の情報を用いて、図15(B)に示す検知プログラムを生成する。図15(B)は、パラメータ「version」の検知プログラムの一例である。
図15(B)の検知プログラムは、例えばスクリプト言語(ここではperl)を用いて作成されている。尚、図15(B)、図16(C)の「#」以降の数字は行番号を表すものであり、実際の処理とは関係ない。検知プログラムでは、先ず1行目において、運用ログ23からメッセージを読み込み、読み込んだメッセージがパターン52の文字列に合致するか否かを判定する処理が行われる。尚、1行目において「$str」には、運用ログ23から読み込んだメッセージが格納されるものとする。そして、読み込んだメッセージがパターンの文字列に合致すると判定した場合、合致すると判定したメッセージを抽出する処理が行われる。次に、2行目において、抽出したメッセージを単語(空白で区切られた文字列の単位)に分解し、可変部分の位置53で示される位置の単語を抽出する処理が行われる。ここで抽出した単語が、運用ログ23にメッセージが出力された時点のパラメータの値である。そして、3行目において、抽出した単語の値を構成管理情報26のパラメータ「version」の値として反映する処理が行われる。
尚、構成管理情報26に反映する処理においては、抽出した単語の値と、構成管理情報26に既に格納されていたパラメータの値との比較が行われ、比較の結果が異なっていれば、パラメータの値が更新されたと判定される。そして、パラメータの値が更新されたと判定された場合に、抽出した値が、構成管理情報26のパラメータ「version」の値に反映される。
次に、図16を参照してパラメータ「innodb」の変更を検知するプログラムの生成について説明する。先ずプログラム生成部36は、図14(A)のパターン表24のうち、パラメータ56の値が「innodb」である行を特定して、特定した行を読み込む。図16(A)は、プログラム生成部36が読み込んだパラメータ56の値が「innodb」の行を示している。そしてプログラム生成部36は、読み込んだ行の対応表ID55に値が格納されているか否かを判定する。対応表ID55に値が格納されていると判定した場合、プログラム生成部36は、対応表ID55で識別される図16(B)の対応表25を読み込む。そしてプログラム生成部36は、読み込んだ行と対応表25の情報を用いて、図16(C)に示す検知プログラムを生成する。ここで、パラメータ「innodb」の値は、図16(B)に示されるように、メッセージの有無に関連している。
図16(C)の検知プログラムでは、先ず1行目において、運用ログ23の読み込み前に前処理として、パターン52に合致するメッセージの出現の有無の判定に用いる判定フラグの値を「0」で初期化する処理が行われる。そして、3行目において、運用ログ23からメッセージを読み込み、読み込んだメッセージがパターン52の文字列に合致するか否かを判定する処理が行われる。次に読み込んだメッセージがパターンの文字列に合致すると判定した場合、4行目において、図16(B)に示される、メッセージが出現する場合に対応するパラメータの値(「TRUE」)を、現在のパラメータの値であると判定する処理が行われる。ここで現在のパラメータの値とは正確には、運用ログ23にメッセージが出力された時点のパラメータの値である。そして、メッセージが出現した場合に対応するパラメータの値(「TRUE」)を構成管理情報26に反映する処理が行われる。その後、5行目において、判定フラグの値を「1」に設定する処理が行われる。すべのログ22の読み込と、読み込んだメッセージがパターンの文字列に合致するか否かを判定する処理が終了すると、8行目において後処理として、判定フラグの値が「0」か否かを判定する処理が行われる。そして判定フラグの値が「0」であると判定すると、9行目において、図16(B)に示される、メッセージが出現しない場合に対応するパラメータの値(「FALSE」)を、現在のパラメータの値であると判定する処理が行われる。そして、メッセージが出現しない場合に対応するパラメータの値(「FALSE」)を、構成管理情報26に反映する処理が行われる。
以上のようにしてプログラム生成部36は、パラメータ「version」とパラメータ「innodb」の変更を検知する検知プログラムを生成する。同様に、プログラム生成部36は、パラメータ「bind-address」の変更を検知する検知プログラムを生成する。次に、適用部37は、運用ログ23を検知プログラムに適用する。すなわち、適用部37は、運用ログ23を入力として検知プログラムを実行する。
図17は、運用ログを検知プログラムに適用する様子を説明する図である。図17(A)は、サーバ「srv04」の運用ログ23である「mysqld」ログ22の一例を示す。運用ログ23の適用前のサーバ「srv04」の「mysqld」の構成管理情報26が17(B)であるとすると、図17(A)で示される運用ログ23を、図15(B)と図16(C)の検知プログラムに適用した場合、図17(C)のように構成管理情報26が更新される。
図18は、学習段階の処理を図解したフローチャートである。図18において、先ず取得部31は、構成情報21とログ22とを取得する(S101)。
次に分類部32は、ログ22に出力されたメッセージ間の類似度に基いて、メッセージを複数のグループに分類する(S102)。そして、パターン生成部33は、分類部32により分類された各グループに含まれるメッセージ同士を比較して、メッセージの共通部分と可変部分を特定し、メッセージのパターンを生成する(S103)。
次に、対応付け部34は、対象パラメータのうちの一つを処理対象パラメータとして選択する(S104)。
次に、対応付け部34は、処理対象パラメータの値が異なる場合に、可変部分が一致するパターンを、処理対象パラメータとは対応しないと判定する(S105)。
次に、対応付け部34は、処理対象パラメータの値が一致する場合に、可変部分が異なるパターンを、処理対象パラメータとは対応しないと判定する(S106)。
次に、対応付け部34は、処理対象パラメータの値が異なる場合に、パターンの出現が変化する場合、パターンの出現の有無が処理対象パラメータに関連すると判定する(S107)
次に、対応付け部34は、S103で生成したパターンのうち、S105、S106において処理対象パラメータと対応しないと判定しなかったパターンとそのパターンの可変部分を、処理対象パラメータと対応付けて、パターン表24に格納する(S108)。
次に、対応付け部34は、S103で生成したパターンのうち、パターンの出現の有無が処理対象パラメータに関連すると判定したパターンを、処理対象パラメータと対応付けて、パターン表24に格納する(S109)。ここで対応付けたパターンを含むログ22を出力したサーバの処理対象パラメータの値を、パターンが出現した場合の値として対応表25に記録し、また、それ以外のサーバの処理対象パラメータの値を、パターンが出現しない場合の値として、対応表25に記録する。
そして、対応付け部34は、S104において、対象パラメータのすべてのパラメータを選択したか否かを判定する(S110)。対象パラメータのすべてのパラメータを選択していないと判定すると(S110でNo)、対応付け部34は、処理をS104に遷移させ、未選択のパラメータを選択する。S104で対象パラメータのすべてのパラメータを選択されたと判定されると(S110でYes)、処理は終了する。
図19は、図18のS105における、処理対象パラメータの値が異なる場合に、可変部分が一致するパターンを、処理対象パラメータとは対応しないと判定する処理の詳細を図解したフローチャートである。
図19において対応付け部34は先ず、図18のS103で生成したパターンのうちの一つを処理対象パターンとして選択する(S201)。
次に、対応付け部34は、処理対象パラメータの値が異なる2つのサーバの組み合わせにおいて、2つのサーバの各々のログ22から、処理対象パターンに合致するメッセージを抽出する(S202)。
そして対応付け部34は、抽出した2つのメッセージの間で、処理対象パターンの可変部分に対応する値が一致するか否かを判定する(S203)。
メッセージ間で、処理対象パターンの可変部分に対応する値が一致しないと判定すると(S203でNo)、対応付け部34は、以下の処理を行う。すなわち対応付け部34は、S202で、処理対象パラメータの値が異なる2つのサーバの全ての組み合わせにおいてメッセージを抽出する処理を行ったか否かを判定する(S204)。処理対象パラメータの値が異なる2つのサーバのいずれかの組み合わせにおいて、メッセージを抽出する処理を行っていないと判定すると(S204でNo)、対応付け部34は、処理をS202に遷移させ、未処理の組み合わせでS202の処理を行う。
一方、処理対象パラメータの値が異なる2つのサーバの全ての組み合わせにおいてメッセージを抽出する処理を、S202で行ったと判定すると(S204でYes)、対応付け部34は、処理をS206に遷移させる。
一方、S203において、メッセージ間で処理対象パターンの可変部分に対応する値が一致すると判定すると(S203でYes)、対応付け部34は、処理対象パターンは、処理対象パラメータと対応しないと判定する(S205)。
次に対応付け部34は、S201において、S103で生成したすべてのパターンを処理対象パターンとして選択したか否かを判定する(S206)。S103で生成した何れかのパターンを処理対象パターンとして選択していないと判定すると(S206でNo)、対応付け部34は、処理をS201に遷移させ、未選択のパターンを選択する。S103で生成したすべてのパターンが処理対象パターンとして選択されたと判定されると(S206でYes)、処理は終了する。
尚、S202において、いずれか一方または両方のサーバからメッセージが抽出できなかった場合も、S203において対応付け部34は、処理対象パターンの可変部分に対応する値が一致しないと判定する。
図20は、図18のS106における、処理対象パラメータの値が一致する場合に、可変部分が異なるパターンを、処理対象パラメータとは対応しないと判定する処理の詳細を図解したフローチャートである。
図20において対応付け部34は先ず、S103で生成したパターンのうちの一つを処理対象パターンとして選択する(S301)。
次に対応付け部34は、処理対象パラメータの値が同じである全てのサーバのログ22から、処理対象パターンに合致するメッセージを抽出する(S302)。
そして対応付け部34は、抽出した任意のメッセージの間で、処理対象パターンの可変部分に対応する値が異なるか否かを判定する(S303)。メッセージ間で、処理対象パターンの可変部分に対応する値が一致すると判定すると(S303でNo)、対応付け部34は、処理をS305に遷移させる。
一方S303において、メッセージ間で、処理対象パターンの可変部分に対応する値が異なると判定すると(S303でYes)、対応付け部34は、処理対象パターンは処理対象パラメータと対応しないと判定する(S304)。
次に対応付け部34は、S301において、S103で生成したすべてのパターンを処理対象パターンとして選択したか否かを判定する(S305)。S103で生成した何れかのパターンを処理対象パターンとして選択していないと判定すると(S305でNo)、対応付け部34は、処理をS301に遷移させ、未選択のパターンを選択する。S103で生成したすべてのパターンが処理対象パターンとして選択されたと判定されると(S305でYes)、処理は終了する。
図21は、図18のS107における、処理対象パラメータの値が異なり、且つパターンの出現が変化する場合、パターンの出現の有無が処理対象パラメータに関連すると判定する処理の詳細を図解したフローチャートである。
図21において対応付け部34は先ず、S103で生成したパターンのうちの一つを処理対象パターンとして選択する(S401)。
次に、対応付け部34は、処理対象パターンに合致するメッセージを含むログ22を出力した全てのサーバにおいて、処理対象パラメータの値が一致するか否かを判定する(S402)。処理対象パターンを含むログ22を出力したいずれかのサーバ間で、処理対象パラメータの値が一致しないと判定した場合(S402でNo)、対応付け部34は、処理をS404へ遷移させる。
一方、処理対象パターンを含むログ22を出力した全てのサーバにおいて、処理対象パラメータの値が一致すると判定した場合(S402でYes)、対応付け部34は、処理対象パターンの出現の有無は処理対象パラメータに関連すると判定する(S403)。
次に、対応付け部34は、S401において、S103で生成したすべてのパターンを処理対象パターンとして選択したか否かを判定する(S404)。S103で生成したすべてのパターンを処理対象パターンとして選択していないと判定すると(S404でNo)、対応付け部34は、処理をS401に遷移させ、未選択のパターンを選択する。S103で生成したすべてのパターンが処理対象パターンとして選択されたと判定されると(S404でYes)、処理は終了する。
図22は、検知段階の処理を図解したフローチャートである。
図22においてプログラム生成部36は先ず、記憶部35に記憶されたパターン表24及び対応表25を取得して、パラメータの更新を検知する検知プログラムを生成する(S501)。次に、適用部37は、検知プログラムを実行することにより、前処理として、パターンに合致するメッセージの出現の有無の判定に用いる判定フラグの値を例えば「0」で初期化する(S502)。
次に適用部37は、運用ログ23のメッセージのうちの1つを読み込む(S503)。そして適用部37は、読み込んだメッセージが、パターンに合致するか否かを判定する(S504)。読み込んだメッセージがパターンに合致しないと判定した場合(S504でYes)、処理はS506へ遷移する。
一方S504において、読み込んだメッセージがパターンに合致すると判定した場合(S504でNo)、適用部37は、パターンに合致すると判定したメッセージに基づいて、構成管理情報26のパラメータの値を更新する(S505)。さらに適用部37は、S502で初期化した判定フラグの値を例えば「1」に更新する。構成管理情報26のパラメータの値の更新においては、適用部37は、更新後のパラメータの値と、構成管理情報26に格納されていた更新前のパラメータの値との比較を行う。そして、比較の結果が異なる場合、適用部37は、パラメータの値が更新されたと判定し、その結果、パラメータの値の更新を検知する。
次に、適用部37は、ログ22に含まれるすべてのメッセージをS503において読み込み済みか否かを判定する(S506)。ログ22に含まれる何れかのメッセージをS503において読み込み済みでないと判定した場合(S506でNo)、適用部37は、処理をS503へ遷移させる。
一方、運用ログ23に含まれるすべてのメッセージをS503において読み込み済みであると判定した場合(S506でYes)、適用部37は、後処理としてパターンに合致するメッセージの出現の有無に対応するパラメータの更新処理を行う(S507)。具体的には、適用部37は、パラメータがメッセージの出現の有無に対応する場合、判定フラグの値が「0」か否かを判定する。判定フラグの値が「0」であると判定すると、適用部37は、対応表25に基づいて、構成管理情報26のパラメータの値を更新する。そして処理は終了する。
次に、構成情報管理装置20のハードウェア構成について説明する。図23は、構成情報管理装置20のハードウェア構成の一例を示す。
図23において、構成情報管理装置20は、CPU(Central Processing Unit)501、メモリ502、記憶装置503、読取装置504、及び通信インターフェース505を含む。CPU501、メモリ502、記憶装置503、読取装置504、及び通信インターフェース505はバスを介して接続される。
構成情報管理装置20のCPU501は、メモリ502を利用して上述のフローチャートの手順を記述したプログラムを実行することにより、分類部32、パターン生成部33、対応付け部34、プログラム生成部36、及び適用部37の一部または全部の機能を提供する。
メモリ502は、例えば半導体メモリであり、RAM(Random Access Memory)領域およびROM(Read Only Memory)領域を含んで構成される。記憶装置503は、例えばハードディスクである。なお、記憶装置503は、フラッシュメモリ等の半導体メモリであってもよい。また、記憶装置503は、外部記録装置であってもよい。記憶装置503は記憶部35の一部または全部の機能を提供する。
読取装置504は、CPU501の指示に従って着脱可能記憶媒体550にアクセスする。着脱可能記憶媒体550は、たとえば、半導体デバイス(USBメモリ等)、磁気的作用により情報が入出力される媒体(磁気ディスク等)、光学的作用により情報が入出力される媒体(CD−ROM、DVD等)などにより実現される。尚、読取装置504は構成情報管理装置20に含まれなくてもよい。
通信インターフェース505は、CPU501の指示に従ってネットワークを介してデータを送受信する。通信インターフェース505は取得部31の一部または全部の機能を提供する。
実施形態のプログラムは、例えば、下記の形態で構成情報管理装置20に提供される。
(1)記憶装置503に予めインストールされている。
(2)着脱可能記憶媒体550により提供される。
(3)プログラムサーバ(図示せず)から通信インターフェース505を介して提供される。
さらに、実施形態の構成情報管理装置20の一部は、ハードウェアで実現してもよい。或いは、実施形態の構成情報管理装置20は、ソフトウェアおよびハードウェアの組み合わせで実現してもよい。
構成情報を取得するためには、構成情報の書かれたファイルの中の記述パターンより、構成情報のパラメータの位置を特定することも考えられる。しかしながら、このようなパラメータの位置を特定するスクリプトは、ソフトウェアやOS(Operating System)に応じて作成する必要があり煩雑である。それに対して、実施形態においては、構成情報管理装置は、複数のサーバのログと構成情報の組み合わせから、パラメータと、そのパラメータが出力されるメッセージのパターンとを対応付けて記録する。これにより、構成情報の更新を検知するプログラムの生成を容易にする。また実施形態においては、構成情報管理装置は、運用ログに出力されるメッセージの中から、記憶しておいたパターンに合致するメッセージを抽出し、抽出したメッセージからパラメータの値を特定する。このため、実施形態では、稼働中のシステムのログから、構成情報管理装置に負荷をかけずに自動的に構成情報の変更の検知が可能となる。