(57)【要約】【課題】作業手順の作成時にファイルの編集操作を再利用できるようにする。【解決手段】情報処理装置２の記憶部２ａは、管理対象装置１に対して実施された作業における少なくとも１つの操作のログ５と、編集ソフトウェア１ａを用いて編集されたファイル４の、編集前後の差分を示す差分情報２ａとを取得する。演算部２ｂは、ログ５から、ファイル４の編集に用いられた編集ソフトウェア１ａの起動操作を示す第１のログを抽出する。そして演算部２ｂは、第１のログを、差分情報に示された差分をファイル４に反映させる操作を示す第２のログに置き換える。【選択図】図１
2016018227.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータが、
管理対象装置に対して実施された作業における少なくとも１つの操作のログと、編集ソフトウェアを用いて編集されたファイルの、編集前後の差分を示す差分情報とを取得し、
前記ログから、前記ファイルの編集に用いられた前記編集ソフトウェアの起動操作を示す第１のログを抽出し、
前記第１のログを、前記差分情報に示された差分を前記ファイルに反映させる操作を示す第２のログに置き換える、
作業ログ編集方法。
【請求項２】
前記管理対象装置が、
前記編集ソフトウェアの実行を検出し、
前記編集ソフトウェアを利用した前記ファイルの編集における編集前後で差分を示す前記差分情報を生成する、
ことを特徴とする請求項１記載の作業ログ編集方法。
【請求項３】
前記編集ソフトウェアの実行の検出では、入力装置による入力の有無を監視し、起動されたソフトウェアの実行中に前記入力装置からの入力がある場合、該ソフトウェアを前記編集ソフトウェアとして検出する、
ことを特徴とする請求項２記載の作業ログ編集方法。
【請求項４】
前記編集ソフトウェアの実行の検出では、前記編集ソフトウェアを実行しているプロセスに文字列が入力された後、該プロセスから該文字列がエコーバックとして出力された場合に、前記入力装置からの入力が行われたと判断する、
ことを特徴とする請求項３記載の作業ログ編集方法。
【請求項５】
前記差分情報の生成では、編集前の前記ファイルをコピーしてコピーファイルを作成し、編集後の前記ファイルと前記コピーファイルとを比較することで、前記差分情報を生成する、
ことを特徴とする請求項２乃至４のいずれかに記載の作業ログ編集方法。
【請求項６】
前記コピーファイルの作成では、前記ファイルへの最初の書き込みを検知したときに、書き込みの実行前に前記コピーファイルを作成する、
ことを特徴とする請求項５記載の作業ログ編集方法。
【請求項７】
前記第１のログの前記第２のログへの置き換えでは、前記編集ソフトウェアの起動命令を、差分の反映処理の実行命令に置き換え、前記編集ソフトウェアの実行に使用される第１の入力ファイルの指定を、差分の反映処理の実行に使用される第２の入力ファイルの指定に置き換える、
ことを特徴とする請求項１乃至６のいずれかに記載の作業ログ編集方法。
【請求項８】
前記第１のログの前記第２のログへの置き換えでは、前記編集ソフトウェアを実行する第１の装置に期待される状態を示す事前条件のノードと、前記編集ソフトウェアの起動操作のノードと、前記編集ソフトウェアを実行した前記第１の装置に期待される状態を示す事後条件のノードとを接続した第１のグラフを、差分の反映処理を実行する第２の装置に期待される状態を示す事前条件のノードと、差分の反映処理の実行操作のノードと、差分の反映処理を実行した前記第２の装置に期待される状態を示す事後条件のノードとを接続した第２のグラフに置き換える、
ことを特徴とする請求項１乃至７のいずれかに記載の作業ログ編集方法。
【請求項９】
管理対象装置に対して実施された作業における少なくとも１つの操作のログと、編集ソフトウェアを用いて編集されたファイルの、編集前後の差分を示す差分情報とを記憶する記憶部と、
前記ログから、前記ファイルの編集に用いられた前記編集ソフトウェアの起動操作を示す第１のログを抽出し、前記第１のログを、前記差分情報に示された差分を前記ファイルに反映させる操作を示す第２のログに置き換える演算部と、
を有する情報処理装置。
【請求項１０】
コンピュータに、
管理対象装置に対して実施された作業における少なくとも１つの操作のログと、編集ソフトウェアを用いて編集されたファイルの、編集前後の差分を示す差分情報とを取得し、
前記ログから、前記ファイルの編集に用いられた前記編集ソフトウェアの起動操作を示す第１のログを抽出し、
前記第１のログを、前記差分情報に示された差分を前記ファイルに反映させる操作を示す第２のログに置き換える、
処理を実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、作業ログ編集方法、情報処理装置、およびプログラムに関する。
【背景技術】
【０００２】
ＩＣＴ（Information and Communication Technology）システムなどのシステムの運用管理では、ＯＳ（Operating System）やミドルウェアのインストール、バージョンアップなどにより、システムの構成を変更することがある。システムの構成を変更する場合、例えばシステムの起動・停止、システムの設定値変更、ソフトウェア更新などの作業が行われる。このとき、作業が発生するたびに、作業手順を管理者が一から考えていたのでは、作業効率が悪く、間違いも起こりやすい。
【０００３】
そこで、既にある作業手順を流用して、操作対象のシステムに合わせた作業手順を作成することが考えられている。例えば運用者が行った操作内容を取得し、この操作内容を基に、運用業務の実施時における運用対象システムに対する操作の手順と、操作の内容を案内するガイドフローを作成する技術が考えられている。またログＤＢからログを収集するログ収集と、オペレーション登録ＤＢからオペレーション設定情報を収集するオペレーション設定情報収集と、収集したログ及びオペレーション設定情報の分析と、リモートオペレーションの最適化処理を行う技術が考えられている。さらに、システムの構成変更内容に応じた構成変更の作業手順が示された手順情報の集合に基づいて、変更対象のシステムに合わせた固有情報が設定された手順情報を出力する技術もある。これにより、システムの構成変更作業の効率化を促進させることができる。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１３−１９０９０１号公報
【特許文献２】特開２００７−３２８５２６号公報
【特許文献３】国際公開第２０１２／１２４０１８号
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかし、運用業務において実施された操作に、エディタのようなアプリケーションソフトウェアを用いたファイルの編集操作が含まれる場合、編集操作の内容を取得することができない。そのため編集操作を自動で再現することができず、既にある作業手順を流用して新たな作業手順を作成する際に、ファイルの編集操作を再利用した作業手順を作成することができない。
【０００６】
１つの側面では、本件は、作業手順の作成時にファイルの編集操作を再利用できるようにすることを目的とする。
【課題を解決するための手段】
【０００７】
１つの案では、コンピュータが、管理対象装置に対して実施された作業における少なくとも１つの操作のログと、編集ソフトウェアを用いて編集されたファイルの、編集前後の差分を示す差分情報とを取得し、ログから、ファイルの編集に用いられた編集ソフトウェアの起動操作を示す第１のログを抽出し、第１のログを、差分情報に示された差分をファイルに反映させる操作を示す第２のログに置き換える、作業ログ編集方法が提供される。
【発明の効果】
【０００８】
１態様によれば、作業手順の作成時にファイルの編集操作が再利用可能となる。
【図面の簡単な説明】
【０００９】
【図１】第１の実施の形態に係るシステムの構成例を示す図である。
【図２】第２の実施の形態のシステム構成例を示す図である。
【図３】本実施の形態に用いるコンピュータのハードウェアの一構成例を示す図である。
【図４】関連づけ処理の一例を示す図である。
【図５】手順探索の一例を示す図である。
【図６】各装置の機能を示すブロック図である。
【図７】第２の実施の形態の作業手順再利用の処理手順の一例を示すシーケンス図である。
【図８】プロンプト文字列を含むログ出力例を示す図である。
【図９】作業者の入力に応じたログの例を示す図である。
【図１０】入出力ファイルに関するログの例を示す図である。
【図１１】入出力ファイルリストの一例を示す図である。
【図１２】ｔｔｙ利用時の作業者の入力を表すシステムコールのログを示す図である。
【図１３】ｔｔｙを利用しない場合の作業者の入力を表すシステムコールのログを示す図である。
【図１４】ファイルのコピー方法の例を示す図である。
【図１５】書き込みの起きうるファイルのopenを表すシステムコールのログの例を示す図である。
【図１６】監視ファイルリストの一例を示す図である。
【図１７】writeシステムコールのログの例を示す図である。
【図１８】コピーファイル情報の一例を示す図である。
【図１９】closeシステムコールのログの例を示す図である。
【図２０】差分ファイルの作成例を示す図である。
【図２１】作業ログ・正規化情報・差分ファイル送信処理の手順の一例を示すフローチャートである。
【図２２】ファイル情報記録処理の手順の一例を示すフローチャートである。
【図２３】情報保存処理の手順の一例を示すフローチャートである。
【図２４】フック処理の順の一例を示すフローチャートである。
【図２５】ログＤＢ内の作業ログの一例を示す図である。
【図２６】差分ファイルＤＢ内の差分ファイルの一例を示す図である。
【図２７】正規化情報ＤＢ内の正規化情報の一例を示す図である。
【図２８】操作に関する記述の書き換え例を示す図である。
【図２９】入力ファイルに関する記述の書き換え例を示す図である。
【図３０】出力ファイルに関する記述の挿入例を示す図である。
【図３１】正規化後の作業ログの例を示す図である。
【図３２】正規化処理の手順の一例を示す図である。
【図３３】第３の実施の形態の作業手順再利用の処理手順の一例を示すフローチャートである。
【図３４】第２のコピー方法によるコピー例を示す図である。
【図３５】作業ログ・正規化情報・差分ファイル送信処理の手順の一例を示すフローチャートである。
【図３６】ファイル情報記録処理の手順の一例を示すフローチャートである。
【図３７】情報保存処理の手順の一例を示すフローチャートである。
【図３８】編集操作のログから作成したグラフの例を示す図である。
【図３９】正規化後のグラフの例を示す図である。
【図４０】正規化処理の手順の一例を示す図である。
【発明を実施するための形態】
【００１０】
以下、本実施の形態について図面を参照して説明する。なお各実施の形態は、矛盾のない範囲で複数の実施の形態を組み合わせて実施することができる。
〔第１の実施の形態〕
図１は、第１の実施の形態に係るシステムの構成例を示す図である。第１の実施の形態に係るシステムは、管理対象装置１と情報処理装置２とを有する。管理対象装置１は、例えば１以上のコンピュータを有するコンピュータシステムである。情報処理装置２も、例えば１以上のコンピュータを有するコンピュータシステムである。
【００１１】
管理対象装置１は、編集ソフトウェア（編集ＳＷ）１ａの実行を検出し、編集ＳＷ１ａを利用したファイル４の編集における編集前後で差分を示す差分情報を生成する。差分情報は、例えば差分ファイル４ｂに含められる。管理対象装置１は、差分情報を含む差分ファイル４ｂを情報処理装置２に送信する。
【００１２】
また管理対象装置１は、管理対象装置１に対して実施された作業における少なくとも１つの操作のログを取得し、作業に関する一連の操作のログをまとめた作業ログ５を、情報処理装置２に送信する。実施された作業には、編集ＳＷ１ａの起動操作も含まれる。
【００１３】
編集ＳＷ１ａの実行の検出のために、管理対象装置１は、例えば入力装置による入力の有無を監視する。そして管理対象装置１は、起動されたソフトウェアの実行中に入力装置からの入力がある場合、そのソフトウェアを編集ＳＷ１ａとして検出する。
【００１４】
情報処理装置２は、記憶部２ａと演算部２ｂとを有する。記憶部２ａは、管理対象装置１から取得した作業ログ５と差分ファイル４ｂとを記憶する。
演算部２ｂは、作業ログ５から、ファイル４の編集に用いられた編集ＳＷ１ａの起動操作を示す第１のログを抽出する。そして演算部２ｂは、第１のログを、差分ファイル４ｂ内の差分情報に示された差分をファイル４に反映させる操作を示す第２のログに置き換える。例えば差分情報に、文字列「ddd」が追加されていると示されている場合、第１のログが、ファイル４に文字列「ddd」を追加する操作を示す第２のログに置き換えられる。
【００１５】
また演算部２ｂは、第１のログから編集ＳＷの起動操作を示すグラフ６を生成し、そのグラフ６の置き換えを行ってもよい。例えばグラフ６は、事前条件のノードと編集ＳＷの起動操作のノードと事後条件のノードとを有する。グラフ６の事前条件は、編集ＳＷ１ａを実行する装置に期待される状態を示している。グラフ６の事前条件のノードには、例えば編集ＳＷの実行ファイルを有していることを示すノードや、編集対象のファイル４を有していることを示すノードが含まれる。グラフ６の事後条件は、編集ＳＷ１ａを実行した装置に期待される状態を示している。グラフ６の事後条件のノードには、例えば編集済みのファイル４ａを有していることを示すノードが含まれる。
【００１６】
グラフ６は、例えば、事前条件のノードと差分の反映処理の実行操作のノードと事後条件のノードとを有するグラフ７に置き換えられる。グラフ７の事前条件は、差分の反映処理を実行する装置に期待される状態を示している。例えばグラフ７の事前条件のノードには、差分を反映させる差分適用コマンドの実行プログラムを有していることを示すノード、ファイル４を有していることを示すノード、差分ファイル４ｂを有していることを示すノードが含まれる。グラフ７の事後条件は、差分の反映処理を実行した装置に期待される状態を示している。グラフ７の事後条件のノードには、例えば編集済みのファイル４ａを有していることを示すノードが含まれる。
【００１７】
このようなシステムによれば、管理対象装置１において、ファイル４の編集操作を含む作業が行われると、その作業に関する作業ログ５が取得され、情報処理装置２に送信される。また管理対象装置１では、編集前のファイル４と編集後のファイル４ａとの差分を示す差分情報が生成される。差分情報は、例えば差分ファイル４ｂとして情報処理装置２に送信される。
【００１８】
情報処理装置２では、作業ログ５から、編集ＳＷ１ａの起動操作に関する第１のログが抽出される。そして抽出された第１のログが、差分ファイル４ｂ内の差分情報に示された差分をファイル４に反映させる操作を示す第２のログに置き換えられる。例えば第１のログに基づいて作成されたグラフ６が、第２のログに基づいて作成されたグラフ７に置き換えられる。
【００１９】
情報処理装置２は、例えば作業ログ５に含まれる操作ごとのログそれぞれについて、同様にグラフを作成すれば、事前条件と事後条件との適合性を判定することで、複数の操作を組み合わせた作業手順を作成することができる。なお作業手順の作成方法については、後述する（図４、図５参照）。作業手順を作成する際、置き換え前のグラフ６は、編集ＳＷ１ａを用いた作業者の入力による編集内容が反映されておらず、作業手順の作成の際に利用することができない。他方、置き換え後のグラフ７は、作業者からの入力に代えて用意された差分ファイル４ｂを反映させる操作が示されており、作業手順の作成の際に利用することができる。すなわちグラフ７に示された差分適用操作は、作業者からの入力なしに、自動実行できる。その結果、ファイルの編集操作を再利用した作業手順が作成可能となる。
【００２０】
なお、演算部２ｂは、例えば情報処理装置２が有するプロセッサにより実現することができる。また、記憶部２ａは、例えば情報処理装置２が有するメモリにより実現することができる。
【００２１】
また、図１に示した各要素間を接続する線は通信経路の一部を示すものであり、図示した通信経路以外の通信経路も設定可能である。
〔第２の実施の形態〕
次に第２の実施の形態について説明する。第２の実施の形態は、多数のサーバから作業ログを収集して、特定のサーバに対する作業手順を自動生成できるようにしたものである。この作業手順の生成に際し、編集操作に関するログは、編集内容を自動で反映させることができる操作のログに書き換えられる。
【００２２】
図２は、第２の実施の形態のシステム構成例を示す図である。第２の実施の形態では、図１に示した第１の実施の形態の情報処理装置２の一例として、管理サーバ１００が設けられている。管理サーバ１００には、ネットワーク２０を介して複数のサーバ４１〜４４が接続されている。複数のサーバ４１〜４４は、それぞれサーバ、ストレージ装置、ネットワークスイッチなどを含んでいる。
【００２３】
またネットワーク２０には、複数の作業者５１〜５４それぞれが使用する端末装置３１〜３４が接続されている。サーバ４１〜４４は、それぞれ別個の作業者が管理している。またサーバ４１〜４４は、それぞれ１以上のサーバで構成されている。
【００２４】
図２の例では、作業者５１は、端末装置３１を使用してサーバ４１を管理する。また作業者５２は、端末装置３２を使用してサーバ４２を管理する。また作業者５３は、端末装置３３を使用してサーバ４３を管理する。また作業者５４は、端末装置３４を使用してサーバ４４を管理する。
【００２５】
管理サーバ１００は、作業者５１〜５４によるサーバ４１〜４４の運用管理を支援するコンピュータである。管理サーバ１００は、作業者５１〜５４による端末装置３１〜３４を介したサーバ４１〜４４に対する操作内容をサーバ４１〜４４から取得し、作業ログとして保持する。また管理サーバ１００は、保持している作業ログに基づいて、作業内容に応じた操作手順を示すグラフを生成する。さらに管理サーバ１００は、作業者５１〜５４による端末装置３１〜３４からの手順要求に応じて、手順要求を操作する作業者が使用するサーバに適合する操作手順を生成し、手順要求を出力した端末装置に応答する。
【００２６】
管理サーバ１００は、多様な操作手順を生成可能とするため、沢山の作業者の手順の作業ログを操作単位に細切れにし、各操作の動作条件を明らかにしておき、操作をつなぎあわせて操作手順を生成する。
【００２７】
図３は、本実施の形態に用いる管理サーバのハードウェアの一構成例を示す図である。管理サーバ１００は、プロセッサ１０１によって装置全体が制御されている。プロセッサ１０１には、バス１０９を介してメモリ１０２と複数の周辺機器が接続されている。プロセッサ１０１は、マルチプロセッサであってもよい。プロセッサ１０１は、例えばＣＰＵ（Central Processing Unit）、ＭＰＵ（Micro Processing Unit）、またはＤＳＰ（Digital Signal Processor）である。プロセッサ１０１がプログラムを実行することで実現する機能の少なくとも一部を、ＡＳＩＣ（Application Specific Integrated Circuit）、ＰＬＤ（Programmable Logic Device）などの電子回路で実現してもよい。
【００２８】
メモリ１０２は、管理サーバ１００の主記憶装置として使用される。メモリ１０２には、プロセッサ１０１に実行させるＯＳのプログラムやアプリケーションプログラムの少なくとも一部が一時的に格納される。また、メモリ１０２には、プロセッサ１０１による処理に必要な各種データが格納される。メモリ１０２としては、例えばＲＡＭ（Random Access Memory）などの揮発性の半導体記憶装置が使用される。
【００２９】
バス１０９に接続されている周辺機器としては、ＨＤＤ（Hard Disk Drive）１０３、グラフィック処理装置１０４、入力インタフェース１０５、光学ドライブ装置１０６、機器接続インタフェース１０７およびネットワークインタフェース１０８がある。
【００３０】
ＨＤＤ１０３は、内蔵したディスクに対して、磁気的にデータの書き込みおよび読み出しを行う。ＨＤＤ１０３は、管理サーバ１００の補助記憶装置として使用される。ＨＤＤ１０３には、ＯＳのプログラム、アプリケーションプログラム、および各種データが格納される。なお、補助記憶装置としては、フラッシュメモリなどの不揮発性の半導体記憶装置を使用することもできる。
【００３１】
グラフィック処理装置１０４には、モニタ２１が接続されている。グラフィック処理装置１０４は、プロセッサ１０１からの命令に従って、画像をモニタ２１の画面に表示させる。モニタ２１としては、ＣＲＴ（Cathode Ray Tube）を用いた表示装置や液晶表示装置などがある。
【００３２】
入力インタフェース１０５には、キーボード２２とマウス２３とが接続されている。入力インタフェース１０５は、キーボード２２やマウス２３から送られてくる信号をプロセッサ１０１に送信する。なお、マウス２３は、ポインティングデバイスの一例であり、他のポインティングデバイスを使用することもできる。他のポインティングデバイスとしては、タッチパネル、タブレット、タッチパッド、トラックボールなどがある。
【００３３】
光学ドライブ装置１０６は、レーザ光などを利用して、光ディスク２４に記録されたデータの読み取りを行う。光ディスク２４は、光の反射によって読み取り可能なようにデータが記録された可搬型の記録媒体である。光ディスク２４には、ＤＶＤ（Digital Versatile Disc）、ＤＶＤ−ＲＡＭ、ＣＤ−ＲＯＭ（Compact Disc Read Only Memory）、ＣＤ−Ｒ（Recordable）／ＲＷ（ReWritable）などがある。
【００３４】
機器接続インタフェース１０７は、管理サーバ１００に周辺機器を接続するための通信インタフェースである。例えば機器接続インタフェース１０７には、メモリ装置２５やメモリリーダライタ２６を接続することができる。メモリ装置２５は、機器接続インタフェース１０７との通信機能を搭載した記録媒体である。メモリリーダライタ２６は、メモリカード２７へのデータの書き込み、またはメモリカード２７からのデータの読み出しを行う装置である。メモリカード２７は、カード型の記録媒体である。
【００３５】
ネットワークインタフェース１０８は、ネットワーク２０に接続されている。ネットワークインタフェース１０８は、ネットワーク２０を介して、他のコンピュータまたは通信機器との間でデータの送受信を行う。
【００３６】
以上のようなハードウェア構成によって、第２の実施の形態の処理機能を実現することができる。なお、第１の実施の形態に示した装置も、図３に示した管理サーバ１００と同様のハードウェアにより実現することができる。
【００３７】
管理サーバ１００は、例えばコンピュータ読み取り可能な記録媒体に記録されたプログラムを実行することにより、第２の実施の形態の処理機能を実現する。管理サーバ１００に実行させる処理内容を記述したプログラムは、様々な記録媒体に記録しておくことができる。例えば、管理サーバ１００に実行させるプログラムをＨＤＤ１０３に格納しておくことができる。プロセッサ１０１は、ＨＤＤ１０３内のプログラムの少なくとも一部をメモリ１０２にロードし、プログラムを実行する。また管理サーバ１００に実行させるプログラムを、光ディスク２４、メモリ装置２５、メモリカード２７などの可搬型記録媒体に記録しておくこともできる。可搬型記録媒体に格納されたプログラムは、例えばプロセッサ１０１からの制御により、ＨＤＤ１０３にインストールされた後、実行可能となる。またプロセッサ１０１が、可搬型記録媒体から直接プログラムを読み出して実行することもできる。
【００３８】
次に、サーバ４１〜４４に対して実施された作業の作業ログに基づいて、特定のサーバの作業手順を生成する処理の概要を説明する。
管理サーバ１００は、サーバ４１〜４４から作業ログを収集する。管理サーバ１００は、例えば作業ログに示される一連の操作を、１つの操作ごとに分割する。管理サーバ１００は、操作ログに基づいて、各操作の事前条件と事後条件とを判断する。
【００３９】
事前条件は、操作に応じた処理を実行するシステムに期待される状態である。事後条件は、操作に応じた処理を実行したシステムに期待される状態である。以下、単に「条件」といった場合、事前条件と事後条件とを包含するものとする。
【００４０】
事前条件は、例えば操作に応じて実行される処理ごとに存在する。事前条件としては、例えば「操作に応じた処理の実行時に読み込むファイルをシステムが有している。」という条件がある。この場合、操作に応じた処理の実行時に読み込むファイルのリストが事前条件内に定義される。
【００４１】
事後条件は、例えば操作に応じた処理ごとに存在する。事後条件としては、例えば「操作に応じた処理の実行により生成されたファイルをシステムが有している。」という条件がある。この場合、操作に応じた処理の実行により生成されたファイルのリストが事後条件内に定義される。
【００４２】
操作ごとの事前条件と事後条件とを判断した管理サーバ１００は、例えば各操作に事前条件と事後条件とを関連付けた条件定義情報を生成する。例えば複数の操作それぞれを、その操作の事後条件を事前条件とする操作に関連付ける。例えば管理サーバ１００は、条件に基づいてグラフを作成する。グラフは、複数の操作それぞれを遷移元とし、遷移元の操作の事後条件を事前条件とする操作を遷移先とし、遷移元の操作から遷移先の操作への遷移を定義したものである。ある操作から別の操作への遷移は、グラフ上では、例えば事前条件または事後条件を示す条件を経由した遷移として定義される。
【００４３】
図４は、関連づけ処理の一例を示す図である。図４の例では、４つの操作がある。この場合、操作ごとのグラフ６１〜６４を作成することができる。グラフ６１〜６４は、ノードとエッジとの組み合わせで表される。ノードは、操作または条件を示す要素である。エッジは、ノード間を結ぶ矢印であり、ノード間の関係を示す。
【００４４】
図４の例では、操作を矩形のノードで示し、条件を楕円のノードで示している。操作を示すノードの中には、その操作の操作ＩＤが示されている。条件を示すノードの中には、その条件の条件ＩＤが示されている。操作のノードの左側には、事前条件のノードが配置されており、操作のノードの右側には事後条件のノードが配置されている。操作のノードに対し、その操作の事前条件と事後条件とのノードとが、エッジで接続されている。事前条件のノードと操作のノードとを接続するエッジは、矢印が操作のノードを指している。事後条件のノードと操作のノードとを接続するエッジは、矢印が事後条件のノードを指している。
【００４５】
操作ごとのグラフ６１〜６４のうち、同じ操作または同じ条件があれば、その操作または条件が１つのノードにまとめられる。同じ操作または条件をまとめることで、操作ごとのグラフ６１〜６４は、１つのグラフ６５に統合される。グラフ６５では、操作ＩＤ「操作１」の操作と操作ＩＤ「操作２」の操作との事前条件である条件ＩＤ「条件１２」のノードが、１つのノードにまとめられている。また操作ＩＤ「操作１」の操作の事後条件である条件ＩＤ「条件１３」のノードと、操作ＩＤ「操作３」の操作の事前条件である条件ＩＤ「条件１３」のノードとが、１つのノードにまとめられている。また操作ＩＤ「操作２」の操作の事後条件である条件ＩＤ「条件２２」のノードと、操作ＩＤ「操作４」の操作の事前条件である条件ＩＤ「条件２２」のノードとが、１つのノードにまとめられている。
【００４６】
このように統合されたグラフ６５を用いて、操作対象のサーバに操作を行う際に、手順探索を行うことができる。
図５は、手順探索の一例を示す図である。図５の例では、図４に示したようなグラフ６５から手順探索を行うものとする。そして探索条件として、初期条件６６として条件ＩＤ「条件１１」、「条件１２」の条件が与えられ、目標条件６７として条件ＩＤ「条件３１」の条件が与えられたものとする。初期条件６６は、操作対象のサーバが満たしている条件である。目標条件６７は、操作対象のサーバが、操作後に満たすことが期待される条件である。すなわち、操作対象のサーバが目標条件６７を満たすようにするための作業手順が探索される。
【００４７】
探索条件が入力されると、グラフ６５から目標条件が探索される。グラフ６５には、目標条件６７に対応する条件（条件ＩＤ「条件３１」）が存在する。
次に目標条件６７に対応する条件から、グラフ６５上を初期条件６６まで遡れるかどうかが探索される。グラフ６５では、初期条件６６に対応する条件（条件ＩＤ「条件１１」、「条件１２」）が存在する。そして初期条件６６に対応する条件のノードと、目標条件６７に対応する条件のノードとの間は、操作ＩＤ「操作１」、条件ＩＤ「条件１３」、操作ＩＤ「操作３」の各ノードを介して接続されている。そこで、探索によって抽出された経路上のノードとエッジとが抽出され、サブグラフ６８が生成される。
【００４８】
なおサブグラフ６８中の操作の事前条件は、初期条件もしくはその操作より前に実行可能な操作の事後条件になっていなければならない。例えばグラフ６５上を、条件ＩＤ「条件３１」のノードから遡るとき、操作ＩＤ「操作４」、条件ＩＤ「条件２２」、操作ＩＤ「操作２」、条件ＩＤ「条件１２」の各ノードを辿る経路もある。しかし、この経路の上の操作ＩＤ「操作２」の操作の事前条件である条件ＩＤ「条件２１」が、初期条件として満たされておらず、実行可能な操作の事後条件でもない。そのため条件ＩＤ「条件２１」のノードは選択することができず、このノードを経由する経路は、探索の対象から除外される。
【００４９】
なお図５の例では、簡単のために目標条件を１つとしたが、目標条件が複数ある場合、管理サーバ１００は、目標条件ごとに手順探索を行う。そして管理サーバ１００は、目標条件ごとのサブグラフを、同じ操作または条件をまとめることで統合する。
【００５０】
手順探索部１６０は、生成されたサブグラフ６８が、操作対象のサーバに対する操作手順６９を表している。手順実行部１７０は、サブグラフ６８に基づいて、スクリプトを生成する。例えば手順実行部１７０は、抽出したサブグラフ６８に含まれる操作を、初期条件に近い操作ほど前に実行されるように並べる。すなわち、手順実行部１７０は、ある操作Ａにおいて、その事前条件Ｂを事後条件とするような操作Ｃがある場合は、その操作Ｃを先に実行するように、操作を並べる。このような操作の配置方法として、例えばトポロジカルソートなどの方法がある。
【００５１】
このようにして操作を並べたスクリプトが生成される。図５の例では、操作ＩＤ「操作１」の操作の次に、操作ＩＤ「操作３」の操作を実行する手順を記述したスクリプトが生成される。
【００５２】
このように、管理サーバ１００は、過去に行った作業における操作手順を、操作ごとに分割して再利用した操作手順を生成する。すなわち、細かな手順（操作）の粒度で再利用できる。これにより、過去の作業全体のような大きな纏まりの手順から探索条件に合致する事例が見つけ出せない場合であっても、個別の操作の組み合わせにより、探索条件に合致する操作手順を生成することができる。その結果、操作手順を生成できる場面が増え、過去の手順の再利用率が向上する。そして、作業の工数が削減される。
【００５３】
ところで、システムの構築作業や運用作業には、設定ファイルの編集といった、ファイルの作成・修正を伴う編集操作が含まれることがある。このような編集操作は、例えばエディタのような編集ＳＷを用いて実行される。編集ＳＷに対する作業者の手動操作は、作業ログに含まれない。そのため作業ログのみを用いて、操作対象のサーバに適用する作業手順を自動生成しようとすると、 作業者の手動でのファイル編集操作を再利用できない。
【００５４】
例えば、作業ログに、“edit aaa.conf”という操作があったとする。ここで“edit”は、エディタの起動命令である。“aaa.conf”は編集対象のファイル名である。この操作の文字列からは、編集内容（どのような編集を行ったのか）は判らない。すなわち、編集内容は、作業者のエディタへの入力次第であり、エディタへの入力については作業ログに含まれない。そのため、編集内容を判断することができない。なおエディタへの入力内容を取得できたとしても、その入力に応じてどのような編集が実行されるかは、エディタ次第である。エディタのソフトウェアは多数存在し、すべてのエディタについて、入力に応じた挙動を解析して編集内容を判断できるようにするのは困難である。
【００５５】
このように、作業手順の中にエディタのようなソフトウェアによるファイルの編集操作が含まれる場合、作業ログには編集操作の内容が含まれないため、実施された編集操作を再利用できない。
【００５６】
なお、編集操作が実施された場合、編集した内容が重要なのであって、エディタなどの編集ＳＷはひとつの編集手段に過ぎない。操作ログだけで実施された手順を解析すると、あるエディタを用いた“edit aaa.conf”という操作と、他のエディタを用いた“edit2 aaa.conf”操作は、別の操作として認識される。現実には多種多様なエディタが存在し、エディタ種別ごとに別操作と認識すると、エディタのための余計な入出力ファイルが事前条件・事後条件となり、グラフが巨大化する。また、エディタのインストール手順など、本来不要な依存関係が発生しうる。その結果、グラフがさらに大きくなり、手順探索により処理時間の長期化や、使用するメモリ容量の肥大化を招く。また、本来不要な操作を含んだ手順を探索することとなり、探索処理を長期化させる要因ともなる。
【００５７】
そこで、第２の実施の形態では、手動でのファイル編集操作を含んだ操作手順の自動作成を可能にするため、手作業によるファイルの変更内容を明確化し、編集内容を、自動化可能な操作の記述に書き換える。以下、手作業によるファイルの変更内容を明確化するための書き換え処理を、正規化と呼ぶ。
【００５８】
正規化の処理は、大別すると以下の３つの処理に分けられる。
１．ファイル編集操作の検知処理
サーバ４１〜４４は、作業者の手動でのファイル編集操作を、「どんな操作がエディタであるかといった辞書」を予め持たずに検知する。例えばサーバ４１〜４４は、ある操作の開始から終了までの間、作業者からの入力があるかどうかを監視する。そしてサーバ４１〜４４は、作業者からの入力が１度でもあれば、その操作は「エディタによる編集」と判断する。
【００５９】
２．ファイルの編集前後の差分作成処理
サーバ４１〜４４は、編集対象のファイルに対し、編集前後の差分を作成する。例えばサーバ４１〜４４は、編集操作の検知処理により「エディタによる編集」の操作を検知した場合、ファイルの編集前後で差分を取得する。例えばlinux（登録商標）にはdiffというファイルの差分を示す差分情報を取得するコマンドがあり、このようなコマンドを実行することで差分を取得することができる。なお差分を取得するために、編集前のファイルのコピーが作成される。差分の取得方法としては、ファイルのコピータイミングが異なる２つの方法が考えられる。
【００６０】
＜差分取得方法１＞サーバ４１〜４４は、操作による出力ファイル（例: aaa.conf）への書き込み前に、編集前のファイルのコピー（例: aaa.conf.bak）を作成し、編集後のファイル（aaa.conf）との差分を取得する。これは、例えば以下のコマンドで実現できる。
diff -c aaa.conf.bak aaa.conf > aaa.conf.diff
＜差分取得方法２＞サーバ４１〜４４は、読み込んだファイルすべてのコピーを取得しておき、その操作終了時にコピーのファイルすべてについて、上記同様に差分を取得する（差分のないものは破棄）。
【００６１】
第２の実施の形態では、差分取得方法１が適用されるものとする。なお差分取得方法２は、後述する第３の実施の形態に適用される。
３．ログの正規化処理
管理サーバ１００は、編集の差分を元に、編集操作のログを、編集操作が自動化された操作のログに正規化する例えば管理サーバ１００は、編集操作のログにおける操作および入出力ファイルを、以下に置き換える。
【００６２】
＜入力ファイル＞
管理サーバ１００は、編集前の元ファイル、差分、および元ファイルと差分とから編集後ファイルを作るコマンドの実行プログラムを、入力ファイルとする。なおコマンドの実行プログラムは、ＯＳの内部コマンドで実行できる場合、ＯＳ内のコマンドを実行するプログラムモジュールが、入力ファイルとなる。例えば以下のような入力ファイルが定義される。
aaa.conf(元ファイル)、aaa.conf.diff(差分)、patch(コマンド)
＜出力ファイル＞
管理サーバ１００は、編集後のファイルを出力ファイルとする。例えば以下のような出力ファイルが定義される。
aaa.conf(編集後ファイル)
＜操作＞
管理サーバ１００は、コマンド名や差分ファイル名などからなる操作文字列を、操作とする。例えば以下のような操作が定義される。
patch aaa.conf aaa.conf.diff
このような置き換えが、操作やその入出力ファイルを記録したログや、そこから抽出したグラフなどに対して行われる。第２の実施の形態では、管理サーバ１００は、ログの記述を書き換える。なおグラフを置き換える例については、後述する第３の実施の形態に示す。
【００６３】
以上が、ログを正規化するための概略の処理である。
なおファイル編集操作の検知処理は、処理の効率化のために実施される。ある操作が、手作業による編集操作であるかどうかを識別できないと、すべての操作について、ファイルの差分を取得することになる。すべての操作について、利用したファイルの差分情報を取得すると、処理量や保存用メモリ量が増大するとともに、グラフのサイズが大きくなる。グラフが大きくなると、探索時間や必要メモリ量は増える。そこで第２の実施の形態では、手作業のファイル編集についてのみ、ファイルの差分情報を取得することで、処理の効率化を図る。
【００６４】
手作業のファイル編集かどうかの識別には、例えば、どんな操作（コマンド）がエディタであるかという辞書（エディタの辞書）を用いることが考えられる。具体的にはサーバ４１〜４４において、[“edit”, “edit2”, … ] といったエディタの起動コマンドの辞書を持っておき、操作の文字列にそれらが含まれていれば、手作業とみなす。この場合、“edit aaa.conf”という操作は手作業を含む操作と判断され、“service tomcat start”という操作波は、手作業を含まない操作と判断される。ただし、このような手法を用いた場合、辞書にない未知のエディタで編集されたときに対処できない。
【００６５】
そこでサーバ４１〜４４は、ある操作の開始から終了までの間、作業者からの入力があるかどうかを監視する。そしてサーバ４１〜４４は、作業者からの入力が１度でもあれば、その操作は「エディタによる編集」とみなす。これにより、作業者の手動でのファイル編集操作を、「どんな操作がエディタであるかといった辞書」を予め持たずに検知できる。
【００６６】
次に編集操作を含めた作業を再利用した操作手順を生成するための、各サーバ４１〜４４と管理サーバ１００との機能について説明する。
図６は、各装置の機能を示すブロック図である。管理対象となる各サーバ４１〜４４は、情報取得部４１ａ，４２ａ，４３ａ，４４ａを有する。情報取得部４１ａ，４２ａ，４３ａ，４４ａは、作業ログと、編集操作により編集されたファイルの差分情報を取得する。情報取得部４１ａ，４２ａ，４３ａ，４４ａは、取得した差分情報を、管理サーバ１００に送信する。
【００６７】
管理サーバ１００は、記憶部１１０、ユーザインタフェース（ＵＩ）１２０、情報収集部１３０、正規化部１４０、グラフ作成部１５０、手順探索部１６０、および手順実行部１７０を有する。
【００６８】
記憶部１１０は、ログＤＢ１１１、差分ファイルＤＢ１１２、正規化情報ＤＢ１１３、およびグラフＤＢ１１４を記憶する。例えばメモリ１０２またはＨＤＤ１０３の記憶領域の一部が、記憶部１１０として使用される。ログＤＢ１１１には、サーバ４１〜４４から収集された操作ログが格納される。差分ファイルＤＢ１１２には、サーバ４１〜４４から収集された差分ファイルが格納される。差分ファイルは、編集操作により編集されたファイルの差分情報を含むファイルである。正規化情報ＤＢ１１３には、操作ログに記録された操作のうち、正規化の対象となる編集操作に関する情報が格納される。グラフＤＢ１１４には、生成されたグラフが格納される。
【００６９】
ＵＩ１２０は、作業者からの入力を受け付ける。例えばＵＩ１２０は、操作対象のサーバに対する操作手順を探索する際の探索条件の入力を受け付ける。探索条件が入力された場合、ＵＩ１２０は、その探索条件を手順探索部１６０に送信する。またＵＩ１２０は、作業者からの入力に応じて実行した処理の結果を、モニタ２１に表示する。
【００７０】
情報収集部１３０は、サーバ４１〜４４から操作ログ、差分ファイル、正規化情報などの情報を収集する。情報収集部１３０は、収集した情報を記憶部１１０に格納する。例えば情報収集部１３０は、操作ログを操作ログＤＢ１１１に格納し、差分ファイルを差分ファイルＤＢ１１２に格納し、正規化情報を正規化情報ＤＢ１１３に格納する。
【００７１】
正規化部１４０は、ログＤＢ１１１に格納された操作ログのうち、ファイルの編集操作に関するログを、ファイルの操作内容が明確になるように正規化する。正規化部１４０は、正規化した操作で、ログＤＢ１１１を更新する。
【００７２】
グラフ作成部１５０は、編集操作を正規化した後のログＤＢ１１１に基づいて、グラフを作成する。グラフの作成方法は、図４に示す通りである。グラフ作成部１５０は、作成したグラフを、グラフＤＢ１１４に格納する。
【００７３】
手順探索部１６０は、作成されたグラフから手順を探索する。例えば手順探索部１６０は、ＵＩ１２０から探索条件を取得すると、グラフＤＢ１１４内のグラフを参照し、取得した探索条件に合致した手順を探索する。手順の探索方法は、図５に示す通りである。手順探索部１６０は、探索した手順を、手順実行部１７０に送信する。
【００７４】
手順実行部１７０は、取得した手順に従って、操作対象のサーバに対する操作を実行する。
なお、図６に示した各要素間を接続する線は通信経路の一部を示すものであり、図示した通信経路以外の通信経路も設定可能である。また、図６に示した各要素の機能は、例えば、その要素に対応するプログラムモジュールをコンピュータに実行させることで実現することができる。
【００７５】
図７は、第２の実施の形態の作業手順再利用の処理手順の一例を示すシーケンス図である。図７の例では、サーバ４１〜４４に対して実施された操作を利用して、サーバ４４に実施する作業の作業手順を作成し、サーバ４４に自動で作業を実施する場合を示している。
【００７６】
サーバ４１〜４３は、作業が実施されると、情報取得部４１ａ，４２ａ，４３ａが正規化情報と差分ファイルとを作成し、作業ログ・正規化情報・差分ファイルを管理サーバに送信する（ステップＳ１０１〜Ｓ１０３）。管理サーバ１００では、情報収集部１３０が、作業ログ・正規化情報・差分ファイルを受信し、記憶部１１０に格納する（ステップＳ１０４〜Ｓ１０６）。
【００７７】
管理サーバ１００の正規化部１４０は、正規化情報に基づいて、編集操作の操作内容を正規化する（ステップＳ１０７）。次にグラフ作成部１５０は、図４に示したように、作業ログに示されている各操作のグラフを作成し、それらのグラフを統合する（ステップＳ１０８）。そしてグラフ作成部１５０は、作成したグラフをグラフＤＢ１１４に格納する。
【００７８】
管理サーバ１００の手順探索部１６０は、図５に示すように、グラフＤＢ１１４に格納されたグラフに基づいて、サーバ４４に適用可能な作業手順を作成する（ステップＳ１０９）。この際、差分ファイルは、サーバ４４に存在しているものとして、作業手順が作成される。そして管理サーバ１００の手順実行部１７０は、差分ファイルをサーバ４４に送信すると共に、作成された作業手順に従って、サーバ４４に対する遠隔操作を行う（ステップＳ１１０）。サーバ４４では、管理サーバ１００からの操作に応じた処理が実行される（ステップＳ１１１）。
【００７９】
以上のような手順で、サーバ４１〜４３に対して実施された作業手順内の操作を再利用して、サーバ４４に対する作業を自動で実施できる。なお、サーバ４４において作業が実際された場合にも、その作業に応じて、作業ログなどの情報が管理サーバ１００に送信される。またサーバ４１〜４３において作業を実施する場合に、管理サーバ１００で作業ログに基づいて作業手順を生成し、遠隔操作によりサーバ４１〜４３に作業を実施することもできる。
【００８０】
次に、サーバ４１における作業ログ・正規化情報・差分ファイルの送信処理について詳細に説明する。
図６に示したシステムでは、作業者は管理サーバ１００を経由して、操作対象のサーバ４１にアクセスする。このときサーバ４１は、作業者による操作内容や、それによるファイルアクセスなどを監視する。
【００８１】
監視の手段としては、例えばlinux（登録商標）ならばstraceというツールがある。straceを用いればシステムコールを監視できる。そこで、操作対象のサーバにおいて、操作を行うプロセスのopen/read/writeなどのシステムコールを監視することで、ファイル操作や標準入出力・エラー出力に関するログを取得することができる。１回の操作の範囲は、例えば、writeシステムコールの監視により、プロンプト文字列の出力から次の出力までの間として捕捉できる。
【００８２】
図８は、プロンプト文字列を含むログ出力例を示す図である。ログ７１には、例えばＰＩＤ（process id）、時刻、システムコール実行内容が含まれる。ＰＩＤは、操作を行うプロセスの識別子である。時刻は、システムコールを検知した時刻である。そして個々の操作の間には、プロンプトの文字列を含む情報が出力される。図８の例では、「操作１」の後のログにおける“3463”がＰＩＤであり、“04:34:30.486563”が時刻であり、その後に続く文字列がシステムコールの内容である。図８に示すログ７１は、writeシステムコールを監視することで取得されたログである。このログ７１のシステムコール実行内容のうちの、“[root@localhost 〜]#”がプロンプトの文字列である。このプロンプトの文字列の出現をもって、新たな操作の開始と判断することができる。
【００８３】
ファイルの編集を行う操作の場合、操作の開始から終了の間に、作業者からの入力がある。そこで、１操作ごとに、作業者による入力が監視される。
作業者による入力は、例えばsendmsgシステムコールを監視することで、取得できる。
【００８４】
図９は、作業者の入力に応じたログの例を示す図である。例えば入力文字列７２に示すように、作業者がプロンプトで”edit aaa.conf”と入力したものとする。この場合、例えば「3461  11:22:08.752738 sendmsg(3, ｛msg＿name(12)=｛sa＿family=AF＿NETLINK, pid=0, groups=00000000｝, msg＿iov(2)=[｛"\37\0\0\0d\4\1\0\0\0\0\0\0\0\0\0", 16｝, ｛"emacs aaa.conf\0", 15｝], msg＿controllen=0, msg＿flags=0｝, 0) = 31」というログ７３が取得できる。
【００８５】
なお、ログ７３に示される操作文字列は、正規化によって書き換えられる可能性がある。そこでサーバ４１は、sendmsgシステムコールの行を「操作の行」として、例えばメモリに一時的に記録する。そしてサーバ４１は、「作業者からの入力」と判明した場合に、ログ７３に示されている行をログＤＢ１１１に保存する。
【００８６】
操作中には、ファイルの入出力が行われる。入力されるファイルは、その操作を実行するための事前条件となる。出力されるファイルは、その操作を実行するための事後条件となる。入出力されるファイルを示す情報は、例えば操作中のopenシステムコールを監視することで、ログとして取得できる。
【００８７】
図１０は、入出力ファイルに関するログの例を示す図である。openシステムコールの監視により取得したログ７４には、システムコール実行内容に“open”の文字列が含まれる。図１０に示すログ７４の１行目は“/etc/ld.so.cache”ファイルをO＿RDONLYモードで開くことを示している。２行目は、“aaa.conf”ファイルをO＿WRONLY|O＿CREAT|O＿TRUNCモードで開くことを示している。３行目は、“.aaa.conf.swp”ファイルをO＿RDWR|O＿CREAT|O＿EXCLモードで開くことを示している。
【００８８】
操作中の入力・出力ファイルは、正規化によって置き換えられる可能性がある。そこでサーバ４１は、入出力ファイルを示すログ７４を、例えばメモリに一時的に記録する。そしてサーバ４１は、「作業者からの入力」と判明した場合に、入出力ファイルを示すログをログＤＢ１１１に保存する。
【００８９】
入出力ファイルを示すログ７４に示されるモードの意味は、以下の通りである。
・O＿RDONLY：読み込みのみとしてファイルを開く。
・O＿WRONLY：書き込みのみとしてファイルを開く。
・O＿CREAT：ファイルが存在しなかった場合は作成（create）する。
・O＿TRUNC：ファイルが既に存在し、O＿RDWR またはO＿WRONLYの場合、長さ０に切り詰め（truncate）られる。
・O＿RDWR：読み書きするものとしてファイルを開く。
・O＿EXCL：O＿CREATと一緒に使用された場合、排他（exclusive）を試みる。すなわち、ファイルが既に存在した場合はエラーとなる。
【００９０】
これらのモードのうち、O＿RDONLY、O＿WRONLY、O＿RDWRに着目して、入力・出力ファイルが分類される。分類は、以下のように行う。
・モードにO＿RDONLYがあれば、操作対象のファイルを入力ファイルに分類。
・モードにO＿WRONLYがあれば、操作対象のファイルを出力ファイルに分類。
・モードにO＿RDWRがあれば、操作対象のファイルを入力ファイルかつ出力ファイルに分類。
【００９１】
この判断方法を用いるとき、サーバ４１は、openシステムコールが現れた場合、ファイルごとに、入力、出力、またはその両方の属性を持たせ、入出力ファイルリストに記録する。
【００９２】
図１１は、入出力ファイルリストの一例を示す図である。入出力ファイルリスト７５には、操作対象のファイルのファイル名に対応づけて、属性が設定されている。入力ファイルに分類されたファイルの属性は「入力」である。出力ファイルに分類されたファイルの属性は「出力」である。入力ファイルかつ出力ファイルに分類されたファイルの属性は「入力、出力」である。
【００９３】
ファイルの編集操作が行われる場合、操作中に作業者が操作する入力装置からの入力がある。そこでサーバ４１は、操作中の作業者が操作する入力装置からの入力の有無を判定する。例えばサーバ４１は、１操作ごとに、開始から終了までの間、作業者が操作する入力装置からの入力の有無を監視する。例えばサーバ４１は、readシステムコールを監視することで、作業者からの入力の有無を判断する。
【００９４】
なおlinux（登録商標）では、操作に対応するプロセスに対し、作業者からの入力は標準入力として渡される。このとき、仮想的な端末（ｔｔｙ）を利用して作業者からの入力を受け付ける場合と、ｔｔｙを利用せずに作業者からの入力を受け付ける場合とがある。それぞれの場合について、以下のようにして作業者からの入力を観測することができる。
【００９５】
ｔｔｙを利用する場合、サーバ４１は、/dev/ttyがopenされ、それに対するリードがあるかどうかを監視する。サーバ４１は、/dev/ttyに対するリードがある場合、作業者からの入力があると判断する。例えば、/dev/ttyをO＿RDWRまたはO＿RDONLYでopenし、そのファイルのファイルディスクリプタ＝３に対するリードがある場合、作業者からの入力があると判断できる。
【００９６】
図１２は、ｔｔｙ利用時の作業者の入力を表すシステムコールのログを示す図である。ｔｔｙ利用時の作業者の入力を示すシステムコールのログ７６では、１行目が、ｔｔｙに対応するファイルがopenされたことを示し、２行目が、そのファイルから文字“a”をリードしたことを示している。サーバ４１は、ファイルへの操作中に、ログ７６に示すようなシステムコールを検出すると、ファイルに対する作業者からの入力があったものと判断する。
【００９７】
それに対し、ｔｔｙを利用しない場合、作業者からの入力があっても、/dev/ttyをO＿RDWRまたはO＿RDONLYでopenしていないか、openしても、openしたファイルに対するリードがない。この場合、サーバ４１は、リードのシステムコールを監視することで、例えば、作業者からの入力が、read(0, “入力文字”, …)といった形で観測できる。
【００９８】
図１３は、ｔｔｙを利用しない場合の作業者の入力を表すシステムコールのログを示す図である。ｔｔｙを利用しない場合の作業者の入力を示すシステムコールのログ７７において、read(0, “入力文字”, …)における“0”はファイルディスクリプタ番号を示している。ファイルディスクリプタ番号“0”は、標準入力を表している。また、続く“a”といった文字列が入力文字列で、文末の“1”は文字列長を表す。従って、ログ７７の１行目は、文字“a”が入力されたことを示し、２行目は、ENTERキーが入力されたことを示している。
【００９９】
なお、read(0,…)で得られる標準入力には、作業者からの入力だけでなく、リダイレクトによるファイル内容の入力などの場合もある。そこでサーバ４１は、「作業者からの入力」なのかどうかの判定を行う。例えば、以下のように判定できる。
【０１００】
作業者からの入力がある場合、通常、入力文字列を端末装置へフィードバック（エコーバック）するという特徴がある。エコーバックしなければ、作業者は自らの入力が正しいか分からないためである。そこでサーバ４１は、エコーバックの有無を監視する。例えばサーバ４１は、標準入力のreadシステムコールで得られた文字列が、その後すぐに（次の標準入力のリードまでに）標準出力に対するwriteシステムコールで出力されていれば、「作業者からの入力あり」と判定する。
【０１０１】
これにより、予め用意したエディタ名の辞書を用いて判定する場合よりも、汎用的な方法で、ファイル編集を行う操作を判断することができる。操作中に作業者からの入力があったと判定した場合、サーバ４１は、現在操作中のファイルに対して作業者からの入力があったことをメモリなどに記録する。
【０１０２】
サーバ４１は、作業者からの入力があった場合、ファイルの編集内容を編集前後の差分として取得するため、ファイルのコピーを作成する。編集前後の差分を取得するためのファイルのコピー方法としては、以下の２つの方法が考えられる。
・ファイルに対する書き込みを監視し、書き込み時にシステムコールをフックして、そのファイルのコピーを作成する方法（第１のコピー方法）。
・操作内でライトのopenがあるたびにファイルをコピーする方法（第２のコピー方法）。
【０１０３】
第２の実施の形態には、第１のコピー方法を適用するものとする。なお第２のコピー方法については、後述する第３の実施の形態に適用される。
ファイルのコピーを作成したサーバ４１は、ファイルへの操作が終了後、コピーしておいたファイルと操作後のファイルとを比較し、差分を示す差分ファイルを作成する。
【０１０４】
図１４は、ファイルのコピー方法の例を示す図である。プロセス２０１が、ファイルが書き込みの起きうるモードでファイル２０２をオープンすると、そのファイル２０２が監視対象となる。そしてプロセス２０１からファイルへの書き込みのシステムコールが発行されると、そのシステムコールがフックされ、ファイル２０２のコピーが生成される。コピーにより生成されたファイル２０３は、例えばＨＤＤに格納される。その後、ファイル２０２への書き込みが実行される。
【０１０５】
例えばエディタがファイルを開くとき、サーバ４１は、openシステムコールを監視し、openされたファイルが書き込みの起きうるファイルなら、そのファイルを監視ファイルリストに追加する。例えばopenシステムコールのモードに、O＿WRONLYまたはO＿RDWRが含まれる場合、openされるファイルは書き込みの起きうるファイルである。
【０１０６】
図１５は、書き込みの起きうるファイルのopenを表すシステムコールのログの例を示す図である。図１５に示すログ７８は、O＿WRONLYのモードを含め、ファイルをopenしている。従って、書き込みが行われる可能性がある。
【０１０７】
書き込みが行われる可能性があるファイルのopenであれば、サーバ４１は、そのファイルを監視ファイルリストに登録し、書き込みの監視対象とする。
図１６は、監視ファイルリストの一例を示す図である。監視ファイルリスト７９には、ＰＩＤに対応づけて、監視対象のファイルのファイルパスとファイルディスクリプタが設定されている。なおファイルパスには、ファイルのディレクトリ構造上の位置と、ファイル名とが含まれる。
【０１０８】
サーバ４１は、監視対象ファイルリストに登録されているファイルに対する書き込みを監視する。例えばエディタによるファイルへの書き込みが起きた時、サーバ４１では、内部的にwriteシステムコールが発行される。サーバ４１は、このwriteシステムコールをフックする。サーバ４１は、フック後に、writeシステムコールのログを記録する。
【０１０９】
図１７は、writeシステムコールのログの例を示す図である。例えばログ８０に示すようなwriteシステムコールのファイルディスクリプタが監視ファイルリストに登録されていれば、そのシステムコールがログ８０の採取前にフックされる。
【０１１０】
システムコールのフックは、例えばカーネルモジュールで行われる。サーバ４１は、writeシステムコールをフックすると、例えば以下の処理を行う。
監視ファイルリスト７９に該当エントリがあれば、そのファイルのコピーを作成する。
例えばサーバ４１は、以下のコマンドを実行する。
cp ＜監視ファイルリストのファイルパス＞ ＜コピーを置くディレクトリ＞＜PID＞＜監視ファイルリストのファイルパス＞.bak
コピーを置くディレクトリを/tmpとすると、例えば“cp /etc/aaa.conf /tmp/3826/etc/aaa.conf.bak”というコマンドが実行される。
【０１１１】
サーバ４１は、コピーしたファイルの情報とその位置を、コピーファイル情報としてメモリ内に記録する。
図１８は、コピーファイル情報の一例を示す図である。コピーファイル情報８１には、操作を行っているプロセスのＰＩＤに対応づけて、コピー元のファイルのファイルパスと、コピーされたファイルのファイルパス（コピー位置）とが設定されている。
【０１１２】
サーバ４１は、システムコールのフックの処理では、監視ファイルリスト７９における対応するエントリの有無によらず、最後には元々のwriteシステムコールを呼び出す。またサーバ４１は、closeシステムコールを監視し、監視対象のファイルが閉じられたら、監視ファイルリスト７９から、閉じられたファイルとファイルディスクリプタの値が同じエントリを削除する。
【０１１３】
図１９は、closeシステムコールのログの例を示す図である。closeシステムコールのログ８２に示すように、closeシステムコールには、閉じるファイルのファイルディスクリプタが示されている。そこでサーバ４１は、closeシステムコールに示されるファイルディスクリプタの値を、監視ファイルリスト７９から検索する。サーバ４１は、該当するエントリがある場合、そのエントリを監視ファイルリスト７９から削除する。
【０１１４】
またサーバ４１は、１つの操作が終了すると、監視ファイルリスト７９を破棄する。このようにして、ファイルへの書き込み時に、編集前のファイルのコピーを作成することができる。第１のコピー方法では、ファイルへの書き込みが発生した時点で、書き込みの実行前にファイルのコピーを行うため、無駄なファイルのコピーを行わずにすみ、処理の効率化が図れる。
【０１１５】
編集操作前のファイルのコピーを作成しておくことで、編集操作後に、編集前後のファイルを比較して、差分を判断することができる。そして差分を示す差分ファイルが作成される。
【０１１６】
図２０は、差分ファイルの作成例を示す図である。サーバ４１は、個々の操作が終了すると、操作中に作業者からの入力があった場合に、コピー先のファイル２０３と元のファイル２０２との差分を取得する。例えばサーバ４１は、コピーファイル情報８１のエントリごとに、ファイルパスとコピー位置を取得する。次にサーバ４１は、以下のコマンドを実行する。
diff -c ＜コピーファイル情報のコピー位置＞ ＜コピーファイル情報のファイルパス＞ > ＜差分ファイルの識別子＞.diff
コピーファイル情報のコピー位置が「/tmp/3826/etc/aaa.conf.bak」であり、コピーファイル情報のファイルパスが「/etc/aaa.conf」であり、差分ファイル２０５の識別子が「aaa.conf」の場合、以下のようなコマンドになる。
diff -c /tmp/3826/etc/aaa.conf.bak /etc/aaa.conf > aaa.conf.diff
これにより、図２０のような差分ファイル２０５が作成される。なお差分ファイル２０５のファイル識別子は、差分ファイルＤＢ１１２に格納したときに一意に識別できるように、所定の規則に従って決定する。差分ファイル２０５のファイル名を一意にする方法として、例えば＜コピーファイル情報のコピー位置＞文字列からsha1などのダイジェストを作り、＜差分ファイルの識別子＞とすることができる。
ファイルパスのファイル名： /tmp/3826/etc/aaa.conf.bak の場合、以下のようなコマンドで差分ファイル２０５の識別子を作成できる。
$ echo "/tmp/3826/etc/aaa.conf.bak" | sha1sum -t
このコマンドの結果、例えば「ef149b1b55f8bbc797240862dccfa0b881016710」という値が得られる。この値を差分ファイル２０５の識別子とすると、差分ファイル２０５のファイル名は「ef149b1b55f8bbc797240862dccfa0b881016710.diff」となる。なお、第２の実施の形態の説明では、簡単のために、差分ファイル２０５のファイル名を「aaa.conf.diff」とする。
【０１１７】
作成された差分ファイル２０５には、例えば編集後のファイルの内容が含まれている。そして差分ファイル２０５内の編集後のファイルの内容のうち、編集によって追加された行に「＋」の記号が示されている。また差分ファイル２０５内には、比較されたファイル２０２，２０３のファイル名や更新日時などが含まれる。
【０１１８】
編集前後のファイルの差分がある場合（例えば差分ファイルサイズが０でない場合）、ファイルの編集操作中に作業者からの入力があったと判断できる。
差分ファイルを作成すると、サーバ４１は、それまでの作業のログと共に、差分ファイルを管理サーバ１００に送信する。サーバ４１は、差分ファイル送信後に、その差分ファイルに対応するコピーファイル情報を破棄すると共に、差分ファイル作成用にコピーしたファイルを削除する。
【０１１９】
このようにして、サーバ４１から管理サーバ１００へ、各種情報を送信することができる。以下、これらの情報の作成と送信の手順について詳細に説明する。
図２１は、作業ログ・正規化情報・差分ファイル送信処理の手順の一例を示すフローチャートである。
【０１２０】
［ステップＳ１２１］サーバ４１は、作業者からの入力の有無を示す変数「edit-flag」に、０を設定する。
［ステップＳ１２２］サーバ４１は、システムコールを監視する。監視により得られたシステムコールは、ログとしてメモリまたはＨＤＤに記録される。
【０１２１】
［ステップＳ１２３］サーバ４１は、発生したシステムコールにプロンプトを示す文字列があるか否かを判断する（図８参照）。サーバ４１は、プロンプトを示す文字列があれば、１つの操作が終了したと判断する。この場合、処理がステップＳ１３２に進められる。プロンプトを示す文字列がなければ、処理がステップＳ１２４に進められる。
【０１２２】
［ステップＳ１２４］サーバ４１は、発生したシステムコールが、ファイルの編集操作か否かを判断する（図９参照）。ファイルの編集操作であれば、処理がステップＳ１２５に進められる。ファイルの操作でなければ、処理がステップＳ１２６に進められる。
【０１２３】
［ステップＳ１２５］サーバ４１は、編集操作を示すログの行を、「操作の行」としてメモリなどに記録する。
［ステップＳ１２６］サーバ４１は、発生したシステムコールが、ファイルの入出力処理を示しているか否かを判断する（図１０参照）。ファイルの入出力処理であれば、処理がステップＳ１２７に進められる。ファイルの入出力処理でなければ、処理がステップＳ１２８に進められる。
【０１２４】
［ステップＳ１２７］サーバ４１は、入出力ファイルリストや監視ファイルリストへのファイル情報記録処理を行う。この処理の詳細は後述する（図２２参照）。
［ステップＳ１２８］サーバ４１は、発生したシステムコールが、作業者からの入力を示しているか否かを判断する（図１２、図１３参照）。作業者からの入力であれば、処理がステップＳ１２９に進められる。作業者からの入力でなければ、処理がステップＳ１３０に進められる。
【０１２５】
［ステップＳ１２９］サーバ４１は、変数「edit-flag」に１を設定する。
［ステップＳ１３０］サーバ４１は、ファイルが閉じられ、かつ閉じられたファイルが監視ファイルリストに存在するか否かを判断する。監視ファイルリストに存在するファイルが閉じられた場合、処理がステップＳ１３１に進められる。監視ファイルリストに存在するファイルが閉じられたのでなければ、処理がステップＳ１２２に進められる。
【０１２６】
［ステップＳ１３１］サーバ４１は、監視ファイルリストから閉じられたファイルを削除する。その後、処理がステップＳ１２２に進められる。
［ステップＳ１３２］サーバ４１は、プロンプトの文字列を含むシステムコールが発生した場合、情報保存処理を行う。この処理の詳細は後述する（図２３参照）。
【０１２７】
［ステップＳ１３３］サーバ４１は、全操作が終了したか否かを判断する。例えばサーバ４１は、管理サーバ１００からサーバ４１への操作のための通信接続が切断された場合、全操作が終了したもの判断する。全操作が終了した場合、処理を終了する。全操作が終了していなければ、処理がステップＳ１２２に進められる。
【０１２８】
次に、ファイル情報記録処理（ステップＳ１２７）の詳細について説明する。
図２２は、ファイル情報記録処理の手順の一例を示すフローチャートである。
［ステップＳ１４１］サーバ４１は、入出力ファイルリスト７５（図１１参照）に、入出力対象のファイルのファイル名と属性とを記録する。
【０１２９】
［ステップＳ１４２］サーバ４１は、入出力対象のファイルが、書き込みが起こりうるファイル（出力の属性を有するファイル）か否かを判断する。書き込みが起こりうるファイルであれば、処理がステップＳ１４３に進められる。書き込みが起こりうるファイルでなければ、リスト作成処理が終了する。
【０１３０】
［ステップＳ１４３］サーバ４１は、監視ファイルリスト７９（図１６）に、入出力対象のファイルの情報（ＰＩＤ、ファイルパス。ファイルディスクリプタ）を記録する。
このようにして、入出力の対象となるファイルに関する情報が、入出力ファイルリスト７５と監視ファイルリスト７９に記録される。
【０１３１】
次に情報保存処理（ステップＳ１３２）の詳細について説明する。
図２３は、情報保存処理の手順の一例を示すフローチャートである。
［ステップＳ１５１］サーバ４１は、コピーファイル情報８１（図１８参照）に基づいて、元のファイルと、そのファイルを編集前にコピーしたファイルとの差分を示す差分ファイル（図２０参照）を作成する。そしてサーバ４１は、差分ファイルを管理サーバ１００に送信する。すると管理サーバ１００において、差分ファイルが差分ファイルＤＢ１１２に格納される。
【０１３２】
［ステップＳ１５２］サーバ４１は、変数「edit-flag」に０を設定する。
［ステップＳ１５３］サーバ４１は、正規化情報を生成し、管理サーバ１００に送信する。すると管理サーバ１００において、正規化情報が、正規化情報ＤＢ１１３に格納される。
【０１３３】
［ステップＳ１５４］サーバ４１は、コピーファイル情報８１とコピーされたファイルとを破棄する。
［ステップＳ１５５］サーバ４１は、監視ファイルリスト７９を破棄する。
【０１３４】
［ステップＳ１５６］サーバ４１は、未送信の作業ログを管理サーバ１００に送信する。すると管理サーバ１００において、作業ログが、作業ログＤＢ１１１に格納される。
次に、書き込みのフック処理の詳細について説明する。
【０１３５】
図２４は、フック処理の順の一例を示すフローチャートである。この処理は、例えばシステムコールを検出するごとに実行される。
［ステップＳ１６１］サーバ４１は、発生したシステムコールが、ファイルへの書き込みか否かを判断する（図１７参照）。ファイルへの書き込みであれば、処理がステップＳ１６２に進められる。ファイルへの書き込みでなければ、処理が終了する。
【０１３６】
［ステップＳ１６２］サーバ４１は、変数「edit-flag」の値が１か否かを判断する。値が１であれば、処理がステップＳ１６３に進められる。値が１でなければ、処理が終了する。
【０１３７】
［ステップＳ１６３］サーバ４１は、書き込み先のファイルが監視対象として監視ファイルリスト７９に登録されているか否かを判断する。監視対象であれば、処理がステップＳ１６４に進められる。監視対象でなければ、処理が終了する。
【０１３８】
［ステップＳ１６４］ファイルへの書き込みであり、かつ変数「edit-flag」の値が１の場合、サーバ４１は、書き込み先のファイルのコピーを作成する。
［ステップＳ１６５］サーバ４１は、コピーファイル情報８１（図１８参照）に、コピー元のファイルと、コピー先のファイルとの情報を、対応づけて記録する。
【０１３９】
フック処理が完了後、システムコールの本来の書き込み処理が実行される。このようにして、システムコールのフックにより、書き込みが発生する可能性のあるファイルへの書き込みのシステムコールが発生すると、書き込みが実行される前に、編集前のファイルがコピーされる。
【０１４０】
以上の処理により、サーバ４１から管理サーバ１００に、作業ログ、差分ファイル、正規化情報が送信される。同様の処理が他のサーバ４２〜４４でも実行される。管理サーバ１００では、情報収集部１３０が、サーバ４１〜４４から送信された情報を取得する。そして情報収集部１３０は、受信したログをログＤＢ１１１に格納し、差分ファイルを差分ファイルＤＢ１１２に格納し、正規化情報を正規化情報ＤＢ１１３に格納する。
【０１４１】
図２５は、ログＤＢ内の作業ログの一例を示す図である。ログＤＢ１１１には、サーバ４１それぞれから受信した作業ログ１１１ａ，１１１ｂ，・・・が格納されている。
図２６は、差分ファイルＤＢ内の差分ファイルの一例を示す図である。差分ファイルＤＢ１１２には、サーバ４１から取得した差分ファイル２０５，２０５ａ，・・・が格納されている。なお差分ファイルは、対応する編集操作を含む作業順を、いずれかのサーバで再利用する際には、そのサーバに配布される。
【０１４２】
管理サーバ１００は、差分ファイルを受信すると、差分に応じた正規化情報を正規化情報ＤＢ１１３に登録する。
図２７は、正規化情報ＤＢ内の正規化情報の一例を示す図である。正規化情報ＤＢ１１３には、正規化情報ごとに、ＩＤ、操作の行、入出力ファイルリスト、ファイルパス、および差分ファイル名が設定されている。ＩＤは、正規化情報の識別子である。操作の行は、編集作業による操作を示す作業ログ内の行の記載である。入出力ファイルリストは、編集操作における入力ファイルと出力ファイルとのリストである。ファイルパスは、編集操作により編集されたファイルのファイルパスである。差分ファイル名は、編集操作により編集されたファイルの編集前後における差分を示す差分ファイルのファイル名である。
【０１４３】
管理サーバ１００の正規化部１４０は、編集操作に関する正規化情報や差分ファイルを用いて、ログの正規化を行う。例えば正規化部１４０は、個々の編集操作の情報が記憶部１１０に格納されるごとに、その編集操作のログの正規化を行う。また編集操作を含む一連の作業終了ごとに、編集操作のログを正規化してもよい。
【０１４４】
正規化部１４０は、作業者の手入力による編集操作のログを、自動化された操作のログに正規化するため、操作や出力ファイルの情報を置き換える。
＜操作＞
編集操作は、例えばエディタなどの起動コマンドや、作業者の入力としてログに記述されている。そこで正規化部１４０は、ログ内の例えばエディタの実行ファイルの起動や作業者の入力を示す記述を、差分ファイルに示される差分を元のファイルに統合する処理の実行を示す記述に置き換える。置き換え後は、例えばコマンド名／元のファイル名／差分ファイル名などからなる正規化された操作文字列となる。コマンド名が“patch”、元のファイル名が“aaa.conf”、差分ファイル名が“aaa.conf.diff”の場合、操作を示す記述が、以下のような記述に置き換えられる。
“patch aaa.conf aaa.conf.diff"
＜入力ファイル＞
エディタでの編集操作では、エディタの実行ファイル、エディタの環境設定ファイル、編集対象のファイルなどが入力ファイルとしてログに記録されている。正規化後は、編集前のファイル、差分ファイル、差分ファイルと元ファイルから編集後ファイルを作るコマンドの実行ファイル、およびこのコマンドに必要な入力ファイル群が、入力ファイルとなる。例えば、aaa.conf（元のファイル）、aaa.conf.diff（差分ファイル）、patch（コマンドの実行ファイル）、/etc/ld.so.cache、/lib64/libselinux.so.1、/lib64/libc.so.6, …（コマンドに必要な入力ファイル群）などが入力ファイルとなる。
【０１４５】
＜出力ファイル＞
出力ファイルは、編集後のファイルである。例えば元のファイルが、ファイル名そのままで更新される場合、元のファイルと同じファイル名“aaa.conf”が出力ファイルとなる。
【０１４６】
ここで編集操作を再利用するためには、ログに基づいて生成したグラフが、正規化されたログに従っていればよい。そのため操作内容の正規化方法としては、格納してあるログファイルを書き換えてグラフを作成する方法と、ログに基づいて生成したグラフを書き換える方法とが考えられる。以下、２つの書き換え方法について説明する。
【０１４７】
＜ログファイルを直接書き換える方法＞
図４に示したように、ログからは、事前条件・事後条件・操作のグラフを作成することができる。編集操作のログを、正規化した内容に書き直せば、そのログから正規化したグラフを作成することができる。
【０１４８】
ログを書き換える位置は、大別すると、操作に関する記述部分と、入出力ファイルに関する記述部分である。例えば、操作に関する記述部分は、sendmsgシステムコールの記述であり、入出力ファイルに関する記述部分は、openシステムコールで操作されるファイルの記述である。
【０１４９】
例えば正規化部１４０は、正規化情報ＤＢ１１３のエントリを選択する。次に正規化部１４０は、選択したエントリの、操作の行、ファイルパス、差分ファイル名を取り出す。正規化部１４０は、選択したエントリの「操作の行」と合致する箇所を、ログＤＢ１１１の中から検索する。正規化部１４０は、合致する箇所を含むこの１操作の範囲を決定する。１操作の範囲は、例えばプロント文字列を含むwriteシステムコールに挟まれた範囲である（図８参照）。そして正規化部１４０は、操作の範囲において、操作および入出力ファイルに関する記述を書き換える。
【０１５０】
図２８は、操作に関する記述の書き換え例を示す図である。正規化部１４０は、ログＤＢ１１１内の作業ログ１１１ａから、正規化情報の操作の行に合致するログを検出すると、そのログの操作の文字列“emacs aaa.conf”を、“patch ファイルパス  差分ファイル名”といった正規化された操作文字列で置き換える。図２８の例では、“patch /etc/aaa.conf aaa.conf.diff”に置き換えられている。
【０１５１】
図２９は、入力ファイルに関する記述の書き換え例を示す図である。正規化部１４０は、作業ログ１１１ａの編集操作の範囲内のログのopenシステムコールの行をすべて削除する。削除後の操作の範囲の末尾の直前に、以下の入力ファイルの記述を挿入する。
【０１５２】
例えば入力対象のファイルごとに、以下のファイルをopenする記述が追加される。なおopen時のモードは、入力の属性を有するモード（例えばO＿RDONLY）である。入力対象のファイルは、編集前のファイル、差分ファイル、差分ファイルと元ファイルから編集後ファイルを作るコマンドの実行ファイル、およびコマンドの実行に必要な入力ファイル群である。例えば、aaa.conf(元ファイル)、aaa.conf.diff(差分ファイル)、/usr/bin/patch(コマンド)、/etc/ld.so.cache, /lib64/libselinux.so.1, /lib64/libc.so.6, …（コマンドに必要な入力ファイル群）が、入力対象のファイルである。
【０１５３】
挿入する記述の書式は、「PID 時刻 open(“ファイル名”, O＿RDONLY)= 3」という書式である。例えば「3461  11:22:25.741764  open(“/etc/aaa.conf”, O＿RDONLY) = 3」という記述が挿入される。このとき正規化部１４０は、挿入する記述のPIDには、例えば操作のPIDを流用する。図２９の例では、PIDは「3461」である。また正規化部１４０は、時刻として、例えば、操作の範囲の末尾の行の時刻を流用する。図２５に示した作業ログ１１１ａであれば、「3461  11:22:25.741764 write(2, “[root@cumulus-test 〜]# ”, 23) = 23」という行の時刻「11:22:25.741764」が、挿入する行の時刻として流用される。
【０１５４】
出力ファイルに関しては、例えば出力ファイルに関する記述が挿入される。
図３０は、出力ファイルに関する記述の挿入例を示す図である。作業ログ１１１ａ内の書き換え対象の操作の範囲に、出力ファイルに関する記述が追加される。例えば出力ファイルである編集後のファイルが“/etc/aaa.conf”であれば、そのファイルを“O＿WRONLY|O＿CREAT|O＿TRUNC”モードでopenするシステムコールのログを示す記述が挿入される。このとき、PIDや時刻の流用元は、入力ファイルに関して挿入する記述と同様である。
【０１５５】
このようにして、作業ログ１１１ａ内の編集操作に関する記述の正規化が行われる。
図３１は、正規化後の作業ログの例を示す図である。作業ログ１１１ａに対して、操作に関する記述９１と入力ファイルに関する記述９２との書き換えを行い、出力ファイルに関する記述９３を挿入することで、作業ログ１１１ａが正規化される。
【０１５６】
このように、作業ログが正規化されることで、作業ログ内の作業者の入力に応じた編集操作の記述が、自動実行可能な記述に書き直される。正規化後の作業ログを用いて、各サーバ４１で実施された作業を再現すれば、編集操作を含む作業を再現することができる。
【０１５７】
次に正規化処理の手順について説明する。
図３２は、正規化処理の手順の一例を示す図である。
［ステップＳ１７１］正規化部１４０は、正規化情報ＤＢ１１３のエントリ（正規化情報）ごとに、ステップＳ１７２〜Ｓ１７７の処理を実行する。
【０１５８】
［ステップＳ１７２］正規化部１４０は、正規化情報に対応する作業ログを、ログＤＢ１１１から取得する。
［ステップＳ１７３］正規化部１４０は、正規化情報に示される操作の行の、作業ログ内での位置を特定する。
【０１５９】
［ステップＳ１７４］正規化部１４０は、操作の範囲を決定する。
［ステップＳ１７５］正規化部１４０は、操作の範囲の末尾の行から、ＰＩＤと時刻とを取得する。
【０１６０】
［ステップＳ１７６］正規化部１４０は、操作の範囲内のログの記述を書き換える。
［ステップＳ１７７］正規化部１４０は、ログの書き換えを行った作業ログを、ログＤＢ１１１に上書きで保存する。
【０１６１】
［ステップＳ１７８］正規化部１４０は、すべての正規化情報についてステップＳ１７２〜Ｓ１７７の処理が完了したら、正規化処理を終了する。
このようにして、手作業によるファイルの編集内容が、作業ログ内で明確化される。その結果、手作業によるファイル編集操作を含めて、手順を再利用可能となる。編集操作が再利用できることで、構築時や運用における利用者の工数を削減できる。
【０１６２】
また、自動化された操作に正規化することで、使用したエディタなどの編集方法を問わず、同じ編集内容を一つの操作で表現でき、グラフのサイズを小さくできる。その結果、処理時間や必要なリソースを削減できる。
【０１６３】
〔第３の実施の形態〕
次に第３の実施の形態について説明する。第３の実施の形態は、操作ごとのグラフを作成した後に、グラフを書き換えることで正規化をするものである。なお第３の実施の形態では、システムコールのフックを行わず、書き込みされる可能性のあるファイル（O＿RDWR, O＿WRONLY）がopenされると、そのときにコピーを作成する。
【０１６４】
以下、第２の実施の形態との相違点を中心に、第３の実施の形態について説明する。なお、第３の実施の形態のシステム構成は、図２、図３に示した第２の実施の形態の構成と同様である。また第３の実施の形態の機能は、図６に示した第２の実施の形態の要素と同様である。
【０１６５】
図３３は、第３の実施の形態の作業手順再利用の処理手順の一例を示すフローチャートである。
サーバ４１〜４３は、作業が実施されると、情報取得部４１ａ，４２ａ，４３ａが正規化情報と差分ファイルとを作成し、作業ログ・正規化情報・差分ファイルを管理サーバに送信する（ステップＳ２０１〜Ｓ２０３）。管理サーバ１００では、情報収集部１３０が、作業ログ・正規化情報・差分ファイルを受信し、記憶部１１０に格納する（ステップＳ２０４〜Ｓ２０６）。
【０１６６】
管理サーバ１００のグラフ作成部１５０は、図４に示したように、作業ログに示されている各操作のグラフを作成する（ステップＳ２０７）。次に正規化部１４０は、編集操作に対応するグラフを、編集内容を再現できるように正規化する（ステップＳ２０８）。次に正規化部１４０は、操作ごとのグラフを統合する（ステップＳ２０９）。そしてグラフ作成部１５０は、作成したグラフをグラフＤＢ１１４に格納する。
【０１６７】
管理サーバ１００の手順探索部１６０は、図５に示すように、グラフＤＢ１１４に格納されたグラフに基づいて、サーバ４４に適用可能な作業手順を作成する（ステップＳ２１０）。そして管理サーバ１００の手順実行部１７０は、作成された作業手順に従って、サーバ４４に対する遠隔操作を行う（ステップＳ２１１）。サーバ４４では、管理サーバ１００からの操作に応じた処理が実行される（ステップＳ２１２）。
【０１６８】
以上のような手順で、サーバ４１〜４３に対して実施された作業手順内の操作を再利用して、サーバ４４に対する作業を自動で実施できる。なお、サーバ４４において作業が実施された場合にも、その作業に応じて、作業ログなどの情報が管理サーバ１００に送信される。またサーバ４１〜４３において作業を実施する場合に、管理サーバ１００で作業ログに基づいて作業手順を生成し、遠隔操作によりサーバ４１〜４３に作業を実施することもできる。
【０１６９】
次に、サーバ４１における作業ログ・正規化情報・差分ファイルの送信処理について詳細に説明する。
第２の実施の形態では、ファイルに対する書き込みが監視され、書き込み時のシステムコールのフックにより、ファイルのコピーが作成されるが、第３の実施の形態では、システムコールのフックをせずにファイルがコピーされる。フックを用いない場合、書き込みを止めるわけではないので、書き込みが起こってからコピーしていては遅い。そこでサーバ４１は、ファイルがopenされるたびに、そのファイルのコピーを作成する。
【０１７０】
例えばサーバ４１は、書き込みされる可能性のあるファイル（O＿RDWR, O＿WRONLY）について、コピーを作成する。書き込みされる可能性のあるファイルは、入出力ファイルリスト７５で出力属性のあるファイルである。サーバ４１は、ファイルをコピーすると、コピー先のファイルの情報とその位置を、コピーファイル情報として、メモリに記録する。
【０１７１】
図３４は、第２のコピー方法によるコピー例を示す図である。例えばプロセス２０１がO＿WRONLYのモードでファイル２０２をopenした場合、ファイル２０２がコピーされ、コピーしたファイル２０３がＨＤＤに格納される。そしてプロセス２０１のＰＩＤ、ファイル２０２のファイルパス、およびファイル２０３のファイルパス（コピー位置）の組が、コピーファイル情報８１（図１８参照）に設定される。
【０１７２】
他方、プロセス２０１がO＿RDONLYモードでファイル２０４をopenした場合、ファイル２０４はコピーされず、コピーファイル情報８１への情報の登録も行われない。
このように、書き込みの可能性があるファイルをすべてコピーすることで、システムの信頼性維持などの理由で、システムコールをフックすることが困難な場合であっても、ファイルのコピーを作成することができる。
【０１７３】
以下、第３の実施の形態における、サーバ４１による情報の作成と送信の手順について詳細に説明する。
図３５は、作業ログ・正規化情報・差分ファイル送信処理の手順の一例を示すフローチャートである。
【０１７４】
［ステップＳ２２１］サーバ４１は、システムコールを監視する。監視により得られたシステムコールは、ログとしてメモリまたはＨＤＤに記録される。
［ステップＳ２２２］サーバ４１は、発生したシステムコールにプロンプトを示す文字列があるか否かを判断する（図８参照）。プロンプトを示す文字列があれば、処理がステップＳ２２７に進められる。プロンプトを示す文字列がなければ、処理がステップＳ２２３に進められる。
【０１７５】
［ステップＳ２２３］サーバ４１は、発生したシステムコールが、ファイルの編集操作か否かを判断する（図９参照）。ファイルの編集操作であれば、処理がステップＳ２２４に進められる。ファイルの操作でなければ、処理がステップＳ２２５に進められる。
【０１７６】
［ステップＳ２２４］サーバ４１は、編集操作を示すログの行を、「操作の行」としてメモリなどに記録する。
［ステップＳ２２５］サーバ４１は、発生したシステムコールが、ファイルの入出力処理を示しているか否かを判断する（図１０参照）。ファイルの入出力処理であれば、処理がステップＳ２２６に進められる。ファイルの入出力処理でなければ、処理がステップＳ２２１に進められる。
【０１７７】
［ステップＳ２２６］サーバ４１は、入出力ファイルリストや監視ファイルリストへのファイル情報記録処理を行う。この処理の詳細は後述する（図３６参照）。その後、処理がステップＳ２２１に進められる。
【０１７８】
［ステップＳ２２７］サーバ４１は、プロンプトの文字列を含むシステムコールが発生した場合、情報保存処理を行う。この処理の詳細は後述する（図３７参照）。
［ステップＳ２２８］サーバ４１は、全操作が終了したか否かを判断する。全操作が終了した場合、処理を終了する。全操作が終了していなければ、処理がステップＳ２２１に進められる。
【０１７９】
次に、ファイル情報記録処理（ステップＳ２２６）の詳細について説明する。
図３６は、ファイル情報記録処理の手順の一例を示すフローチャートである。
［ステップＳ２３１］サーバ４１は、入出力ファイルリスト７５（図１１参照）に、入出力対象のファイルのファイル名と属性とを記録する。
【０１８０】
［ステップＳ２３２］サーバ４１は、入出力対象のファイルが、書き込みが起こりうるファイル（出力の属性を有するファイル）か否かを判断する。書き込みが起こりうるファイルであれば、処理がステップＳ２３３に進められる。書き込みが起こりうるファイルでなければ、リスト作成処理が終了する。
【０１８１】
［ステップＳ２３３］サーバ４１は、入出力対象のファイルのコピーを作成する。
［ステップＳ２３４］サーバ４１は、監視ファイルリスト７９（図１６）に、入出力対象のファイルの情報（ＰＩＤ、ファイルパス。ファイルディスクリプタ）を記録する。
【０１８２】
このようにして、入出力の対象となるファイルに関する情報が、入出力ファイルリスト７５と監視ファイルリスト７９に記録される。
次に情報保存処理（ステップＳ２２７）の詳細について説明する。
【０１８３】
図３７は、情報保存処理の手順の一例を示すフローチャートである。
［ステップＳ２４１］サーバ４１は、コピーファイル情報８１（図１８参照）に基づいて、元のファイルと、そのファイルを編集前にコピーしたファイルとの差分を示す差分ファイル（図２０参照）を作成する。そしてサーバ４１は、差分ファイルを管理サーバ１００に送信する。すると管理サーバ１００において、差分ファイルが差分ファイルＤＢ１１２に格納される。
【０１８４】
［ステップＳ２４２］サーバ４１は、正規化情報を生成し、管理サーバ１００に送信する。すると管理サーバ１００において、正規化情報が、正規化情報ＤＢ１１３に格納される。
【０１８５】
［ステップＳ２４３］サーバ４１は、コピーファイル情報８１とコピーされたファイルとを破棄する。
［ステップＳ２４４］サーバ４１は、未送信の作業ログを管理サーバ１００に送信する。すると管理サーバ１００において、作業ログが、作業ログＤＢ１１１に格納される。
【０１８６】
以上の処理により、サーバ４１から管理サーバ１００に、作業ログ、差分ファイル、正規化情報が送信される。
次に、第３の実施の形態における正規化処理について説明する。第３の実施の形態では、グラフを書き換えることで正規化が行われる。
【０１８７】
図４に示したように、作業ログに基づいて、操作の事前条件と事後条件とを定義したグラフ６１〜６４を作成し、条件の適合性によってグラフ６１〜６４を統合して、グラフ６５を作成することができる。そして図５に示したように、グラフ６５を用いて、初期条件６６を満たすサーバを作業対象としたときに、そのサーバが目標条件６７を満たすようにするための操作手順６９を作成することができる。
【０１８８】
このようにグラフ６１〜６５を介して、いずれかのサーバに適用する作業手順を作成する場合、作業ログ内の編集操作を、編集操作に対応するグラフを作成する際に正規化することができる。
【０１８９】
図３８は、編集操作のログから作成したグラフの例を示す図である。グラフでは、操作を示すノード３０４の左に事前条件のノード３０１〜３０３が接続され、右に事後条件を示すノード３０５が接続されている。事前条件は、入出力ファイルリストのうち、入力の属性を有するファイルを有しているという条件であり、それらのファイルに対応するノード３０１〜３０３が、操作を示すノード３０４に接続される。事後条件は、入出力ファイルリストのうち、出力の属性を有するファイルを有しているという条件であり、それらのファイルに対応するノード３０５が、操作を示すノード３０４に接続される。このようなグラフは、グラフ作成部１５０により作成され、グラフＤＢ１１４に格納される。
【０１９０】
正規化部１４０は、正規化情報ＤＢ１１３のエントリごとに、以下の処理を行う。
正規化部１４０は、まず正規化の対象となるグラフを選択する。例えば正規化部１４０は、正規化情報ＤＢ１１３内のエントリを選択し、そのエントリの操作の行における操作の文字と、入出力ファイルリストを取得する。図２７の正規化情報ＤＢ１１３のＩＤ「１」のエントリであれば、操作の文字として“edit aaa.conf”が取得され、入出力ファイルリストとして“｛“/usr/share/emacs/site-lisp/default.el”:“入力”,“/etc/aaa.conf”:“出力”, … ｝”が取得される。次に正規化部１４０は、正規化情報ＤＢ１１３内の選択したエントリに対応するグラフを、置き換え対象として選択する。
【０１９１】
正規化部１４０は、選択したエントリから、ファイルパス（例えば/etc/aaa.conf）と差分ファイル名（例えばaaa.conf.diff）とを取得する。
正規化部１４０は、選択したグラフの事前条件のノードをすべて削除する。次に正規化部１４０は、グラフの事前条件として、編集前の元ファイル、差分ファイル、差分ファイルと元ファイルから編集後ファイルを作るコマンドの実行ファイル、およびコマンドの実行に使用する入力ファイル群に対応するノードを追加する。
【０１９２】
正規化部１４０は、選択したグラフの事後条件のノードをすべて削除する。次に正規化部１４０は、グラフの事後条件として、編集後のファイルとしてのファイルパスに対応するノードを追加する。
【０１９３】
正規化部１４０は、操作を示すノードを、“patch ファイルパス  差分ファイル名”といった正規化された操作文字列によるコマンド入力操作を示すノードに置き換える。
図３９は、正規化後のグラフの例を示す図である。図３９の例では、事前条件としてノード３１１〜３１４が設定されている。ノード３１１は、差分ファイルと元ファイルから編集後ファイルを作るコマンドの実行ファイル“patch”を示している。ノード３１２は、コマンドの実行に使用する入力ファイル群（/etc/ld.so.cache, /lib64/libselinux.so.1, /lib64/libc.so.6, …）を示している。ノード３１３は、元ファイル“/etc/aaa.conf”を示している。ノード３１４は、差分ファイル“aaa.conf.diff”を示している。操作を示すノード３１５は、“patch  aaa.conf  aaa.conf.diff”というコマンドの入力操作を示している。事後条件を示すノード３１６は、編集後のファイル“/etc/aaa.conf”を示している。
【０１９４】
図４０は、正規化処理の手順の一例を示す図である。
［ステップＳ２５１］正規化部１４０は、正規化情報ＤＢ１１３のエントリ（正規化情報）ごとに、ステップＳ２５２〜Ｓ２５４の処理を実行する。
【０１９５】
［ステップＳ２５２］正規化部１４０は、編集操作に対応するグラフを、書き換え対象として選択する。
［ステップＳ２５３］正規化部１４０は、選択したグラフについて、作業者の入力に応じた編集操作が自動化されるように書き換える（図３８、図３９参照）。
【０１９６】
［ステップＳ２５４］正規化部１４０は、グラフＤＢ１１４内の書き換え対象のグラフを、ステップＳ２５３での書き換え後のグラフに置き換える。
［ステップＳ２５５］正規化部１４０は、すべての正規化情報についてステップＳ２５２〜Ｓ２５４の処理が完了したら、正規化処理を終了する。
【０１９７】
このようにして、ログを書き換えずに、グラフの書き換えによって、編集操作の正規化を行うことができる。
以上、実施の形態を例示したが、実施の形態で示した各部の構成は同様の機能を有する他のものに置換することができる。また、他の任意の構成物や工程が付加されてもよい。さらに、前述した実施の形態のうちの任意の２以上の構成（特徴）を組み合わせたものであってもよい。
【符号の説明】
【０１９８】
１  管理対象装置
１ａ  編集ソフトウェア（編集ＳＷ）
２  情報処理装置
２ａ  記憶部
２ｂ  演算部
４  ファイル（編集前）
４ａ  ファイル（編集後）
４ｂ  差分ファイル
５  作業ログ
６，７  グラフ
【図１】
2016018227.tif 000003
【図２】
2016018227.tif 000004
【図３】
2016018227.tif 000005
【図４】
2016018227.tif 000006
【図５】
2016018227.tif 000007
【図６】
2016018227.tif 000008
【図７】
2016018227.tif 000009
【図８】
2016018227.tif 000010
【図９】
2016018227.tif 000011
【図１０】
2016018227.tif 000012
【図１１】
2016018227.tif 000013
【図１２】
2016018227.tif 000014
【図１３】
2016018227.tif 000015
【図１４】
2016018227.tif 000016
【図１５】
2016018227.tif 000017
【図１６】
2016018227.tif 000018
【図１７】
2016018227.tif 000019
【図１８】
2016018227.tif 000020
【図１９】
2016018227.tif 000021
【図２０】
2016018227.tif 000022
【図２１】
2016018227.tif 000023
【図２２】
2016018227.tif 000024
【図２３】
2016018227.tif 000025
【図２４】
2016018227.tif 000026
【図２５】
2016018227.tif 000027
【図２６】
2016018227.tif 000028
【図２７】
2016018227.tif 000029
【図２８】
2016018227.tif 000030
【図２９】
2016018227.tif 000031
【図３０】
2016018227.tif 000032
【図３１】
2016018227.tif 000033
【図３２】
2016018227.tif 000034
【図３３】
2016018227.tif 000035
【図３４】
2016018227.tif 000036
【図３５】
2016018227.tif 000037
【図３６】
2016018227.tif 000038
【図３７】
2016018227.tif 000039
【図３８】
2016018227.tif 000040
【図３９】
2016018227.tif 000041
【図４０】
2016018227.tif 000042