(57)【要約】【課題】ログ収集における通信負荷を低減すること。【解決手段】情報処理装置１０は、ログ取得対象装置２０，３０からログ情報Ｌ１，Ｌ２を取得し、ログ情報Ｌ１，Ｌ２の間の差分を変数部分として抽出し、当該変数部分を識別子に置換し、置換後のログ情報の第１のハッシュ値を計算する。情報処理装置１０は、変数部分の抽出に用いられる抽出情報と識別子と第１のハッシュ値とをログ取得対象装置４０に送信する。ログ取得対象装置４０は、抽出情報と識別子と第１のハッシュ値とを受信し、ログ情報Ｌ３から抽出情報に基づいて変数部分を抽出し、ログ情報Ｌ３の変数部分を識別子に置換した置換後のログ情報の第２のハッシュ値を計算する。ログ取得対象装置４０は、第２のハッシュ値が第１のハッシュ値と一致するか否かを判定し、一致する場合に第１のハッシュ値を情報処理装置１０に送信し、一致しない場合にログ情報Ｌ３を情報処理装置１０に送信する。【選択図】図１
2020135701.tif 000002
【特許請求の範囲】
【請求項１】
ログ情報を生成する複数のログ取得対象装置のうち、所定数のログ取得対象装置の各々から前記ログ情報を取得し、取得した所定数の前記ログ情報の間の差分を変数部分として抽出し、抽出した前記変数部分を識別子に置換し、置換後のログ情報の第１のハッシュ値を計算し、前記ログ情報における前記変数部分の抽出に用いられる抽出情報と前記識別子と前記第１のハッシュ値とを、前記所定数のログ取得対象装置とは異なるログ取得対象装置に送信する情報処理装置と、
前記抽出情報と前記識別子と前記第１のハッシュ値とを受信し、生成した前記ログ情報から前記抽出情報に基づいて前記変数部分を抽出し、生成した前記ログ情報の前記変数部分を前記識別子に置換した置換後のログ情報の第２のハッシュ値を計算し、前記第２のハッシュ値が前記第１のハッシュ値と一致するか否かを判定し、一致する場合に、前記第１のハッシュ値を前記情報処理装置に送信し、一致しない場合に、生成した前記ログ情報を前記情報処理装置に送信するログ取得対象装置と、
を有する情報処理システム。
【請求項２】
前記情報処理装置は、前記第１のハッシュ値を応答済であって、前記ログ情報に含まれる前記変数部分の値を未取得である前記ログ取得対象装置に前記識別子を送信し、
前記ログ取得対象装置は、前記識別子を受信すると、生成した前記ログ情報のうち、前記識別子に対応する前記変数部分に記載された値を、前記情報処理装置に送信する、
請求項１記載の情報処理システム。
【請求項３】
前記情報処理装置は、前記複数のログ取得対象装置に共通のプログラムを実行させ、
前記複数のログ取得対象装置それぞれは、共通のプログラムの実行に応じた前記ログ情報を生成する、
請求項１または２記載の情報処理システム。
【請求項４】
前記情報処理装置は、前記抽出情報と前記識別子と前記第１のハッシュ値とを２以上のログ取得対象装置に送信し、前記第１のハッシュ値を応答した前記ログ取得対象装置の組み合わせを記録する、
請求項１乃至３の何れか１項に記載の情報処理システム。
【請求項５】
前記情報処理装置は、前記所定数のログ取得対象装置の各々から前記ログ情報を取得する際に、過去に共通のハッシュ値を応答した前記ログ取得対象装置の前記組み合わせが複数記録されている場合、互いに異なる前記組み合わせに属する前記ログ取得対象装置から前記ログ情報を取得する、
請求項４記載の情報処理システム。
【請求項６】
ログ取得対象装置から取得されたログ情報を記憶する記憶部と、
複数のログ取得対象装置のうち、所定数の第１のログ取得対象装置の各々から前記ログ情報を取得して前記記憶部に格納し、取得した所定数の前記ログ情報の間の差分を変数部分として抽出し、抽出した前記変数部分を識別子に置換し、置換後のログ情報の第１のハッシュ値を計算し、前記ログ情報における前記変数部分の抽出に用いられる抽出情報と前記識別子と前記第１のハッシュ値とを、前記第１のログ取得対象装置とは異なる第２のログ取得対象装置に送信し、前記送信の応答として前記第２のログ取得対象装置から前記第１のハッシュ値または前記ログ情報を受信する処理部と、
を有する情報処理装置。
【請求項７】
コンピュータに、
ログ情報を生成する複数のログ取得対象装置のうち、所定数の第１のログ取得対象装置の各々から前記ログ情報を取得し、
取得した所定数の前記ログ情報の間の差分を変数部分として抽出し、
抽出した前記変数部分を識別子に置換し、
置換後のログ情報の第１のハッシュ値を計算し、
前記ログ情報における前記変数部分の抽出に用いられる抽出情報と前記識別子と前記第１のハッシュ値とを、前記第１のログ取得対象装置とは異なる第２のログ取得対象装置に送信し、
前記送信の応答として前記第２のログ取得対象装置から前記第１のハッシュ値または前記ログ情報を受信する、
処理を実行させる情報処理プログラム。
【請求項８】
生成されたログ情報を記憶する記憶部と、
前記ログ情報における変数部分の抽出に用いられる抽出情報と前記変数部分の識別子と第１のハッシュ値とを他の情報処理装置から受信し、前記ログ情報から前記抽出情報に基づいて前記変数部分を抽出し、前記ログ情報の前記変数部分を前記識別子に置換した置換後のログ情報の第２のハッシュ値を計算し、前記第２のハッシュ値が前記第１のハッシュ値と一致するか否かを判定し、一致する場合に、前記第１のハッシュ値を前記情報処理装置に送信し、一致しない場合に、前記ログ情報を前記他の情報処理装置に送信する処理部と、
を有する情報処理装置。
【請求項９】
コンピュータに、
前記コンピュータにより生成されたログ情報における変数部分の抽出に用いられる抽出情報と前記変数部分の識別子と第１のハッシュ値とを情報処理装置から受信し、
前記ログ情報から前記抽出情報に基づいて前記変数部分を抽出し、
前記ログ情報の前記変数部分を前記識別子に置換した置換後のログ情報の第２のハッシュ値を計算し、
前記第２のハッシュ値が前記第１のハッシュ値と一致するか否かを判定し、一致する場合に、前記第１のハッシュ値を前記情報処理装置に送信し、一致しない場合に、前記ログ情報を前記情報処理装置に送信する、
処理を実行させる情報処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は情報処理システム、情報処理装置および情報処理プログラムに関する。
【背景技術】
【０００２】
情報処理システムでは大量のデータが利用される。データの増大は、保存用の記憶装置に所要される容量の増大やデータ通信のためのネットワークの負荷の増大の要因となる。
そこで、例えばバックアップやアーカイブといった主記憶装置および補助記憶装置のためのストレージおよびネットワークの占有面積を減らすために、サブファイルレベルで重複データを検出してサブファイルデータの重複排除をする方法が提案されている。提案の方法では、重複排除のために分析されるファイル記憶単位またはブロック記憶単位から一または複数の「チャンク」を作成し、重複するチャンクが作成されたか否かを検出する。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】国際公開第２０１０／０８０５９１号
【発明の概要】
【発明が解決しようとする課題】
【０００４】
情報処理装置が複数の装置からログを収集することがある。この場合、ログ収集に伴う通信負荷が高まることがあるという問題がある。例えば、ログを生成する装置単位では生成されるログに重複した内容が少ないことがあり、ログの送信前に各装置で上記のようにチャンクを検出して重複排除を行っても、情報処理装置によるログ収集に伴う通信負荷を十分に低減できないことがある。
【０００５】
１つの側面では、本発明は、ログ収集における通信負荷を低減できる情報処理システム、情報処理装置および情報処理プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００６】
１つの態様では、情報処理システムが提供される。この情報処理システムは、情報処理装置とログ取得対象装置とを有する。情報処理装置は、ログ情報を生成する複数のログ取得対象装置のうち、所定数のログ取得対象装置の各々からログ情報を取得し、取得した所定数のログ情報の間の差分を変数部分として抽出し、抽出した変数部分を識別子に置換し、置換後のログ情報の第１のハッシュ値を計算し、ログ情報における変数部分の抽出に用いられる抽出情報と識別子と第１のハッシュ値とを、所定数のログ取得対象装置とは異なるログ取得対象装置に送信する。ログ取得対象装置は、抽出情報と識別子と第１のハッシュ値とを受信し、生成したログ情報から抽出情報に基づいて変数部分を抽出し、生成したログ情報の変数部分を識別子に置換した置換後のログ情報の第２のハッシュ値を計算し、第２のハッシュ値が第１のハッシュ値と一致するか否かを判定し、一致する場合に、第１のハッシュ値を情報処理装置に送信し、一致しない場合に、生成したログ情報を情報処理装置に送信する。
【０００７】
また、１つの態様では、情報処理装置が提供される。
また、１つの態様では、情報処理プログラムが提供される。
【発明の効果】
【０００８】
１つの側面では、ログ収集における通信負荷を低減できる。
【図面の簡単な説明】
【０００９】
【図１】第１の実施の形態の情報処理システムを示す図である。
【図２】第２の実施の形態の情報処理システムの例を示す図である。
【図３】ＤＣサーバのハードウェア例を示すブロック図である。
【図４】処理デプロイおよび処理実行の例を示す図である。
【図５】ログファイルの例を示す図である。
【図６】ＤＣサーバの機能例を示すブロック図である。
【図７】ＥＣの機能例を示すブロック図である。
【図８】プログラムレポジトリエントリの例を示す図である。
【図９】処理実行履歴エントリの例を示す図である。
【図１０】ログデータストアエントリの例を示す図ある。
【図１１】変数部識別情報ＤＢエントリの例を示す図である。
【図１２】変数部ＤＢエントリの例を示す図である。
【図１３】ＥＣ毎応答記録情報の例を示す図である。
【図１４】マッチ情報の例を示す図である。
【図１５】同ハッシュ応答カウント情報の例を示す図である。
【図１６】クラスタＤＢエントリの例を示す図である。
【図１７】プログラム配備指示および実行指示例を示すフローチャートである。
【図１８】プログラム配備および処理実行例を示すフローチャートである。
【図１９】プログラム配備および実行の例を示す図である。
【図２０】ログファイル収集制御例を示すフローチャートである。
【図２１】ログ取得（サンプリング）例を示すフローチャートである。
【図２２】ログ取得（サンプリング）の例を示す図である。
【図２３】変数部推定例を示すフローチャートである。
【図２４】変数部推定の例を示す図である。
【図２５】ログ取得（重複排除）例を示すフローチャートである。
【図２６】ＥＣによる送信処理例を示すフローチャートである。
【図２７】ログ取得（重複排除）の例を示す図である。
【図２８】クラスタ更新例を示すフローチャートである。
【図２９】クラスタ更新の例を示す図である。
【図３０】変数値取得例を示すフローチャートである。
【図３１】変数値送信例を示すフローチャートである。
【図３２】変数値取得の例を示す図である。
【発明を実施するための形態】
【００１０】
以下、本実施の形態について図面を参照して説明する。
［第１の実施の形態］
第１の実施の形態を説明する。
【００１１】
図１は、第１の実施の形態の情報処理システムを示す図である。
情報処理システム１は、情報処理装置１０およびログ取得対象装置２０，３０，４０を有する。情報処理装置１０およびログ取得対象装置２０，３０，４０は、ネットワーク５０に接続されている。情報処理システム１は、４以上のログ取得対象装置を備えてもよい。ログ取得対象装置２０，３０，４０は、共通のプログラムによる処理を実行する。ログ取得対象装置２０，３０，４０は、当該プログラムによる自装置における処理、または、自装置に接続されたデバイスにおける処理に応じたログ情報を生成する。
【００１２】
情報処理装置１０は、ログ取得対象装置２０，３０，４０からログ情報を取得する。情報処理装置１０は、記憶部１１および処理部１２を有する。
記憶部１１は、ＲＡＭ（Random Access Memory）などの揮発性記憶装置でもよいし、ＨＤＤ（Hard Disk Drive）やフラッシュメモリなどの不揮発性記憶装置でもよい。処理部１２は、ＣＰＵ（Central Processing Unit）、ＤＳＰ（Digital Signal Processor）、ＡＳＩＣ（Application Specific Integrated Circuit）、ＦＰＧＡ（Field Programmable Gate Array）などを含み得る。処理部１２はプログラムを実行するプロセッサであってもよい。ここでいう「プロセッサ」には、複数のプロセッサの集合（マルチプロセッサ）も含まれ得る。なお、ログ取得対象装置２０，３０，４０も、生成したログ情報を記憶する記憶部およびログ情報の生成や送信を制御する処理部を備えている（図示を省略している）。
【００１３】
記憶部１１は、処理部１２により収集されたログ情報や処理部１２により生成された情報を記憶する。ここで、例えば、ある時点において、ログ取得対象装置２０は、ログ情報Ｌ１を生成し、保持する。ログ取得対象装置３０は、ログ情報Ｌ２を生成し、保持する。ログ取得対象装置４０は、ログ情報Ｌ３を生成し、保持する。
【００１４】
処理部１２は、複数のログ取得対象装置のうち、所定数のログ取得対象装置の各々からログ情報を取得する（ステップＳ１）。例えば、処理部１２は、ログ取得対象装置２０，３０，４０のうち、２つのログ取得対象装置２０，３０からログ情報Ｌ１，Ｌ２を取得する。
【００１５】
処理部１２は、取得した所定数のログ情報の間の差分を変数部分として抽出し、抽出した変数部分を識別子に置換し、置換後のログ情報の第１のハッシュ値を計算する（ステップＳ２）。例えば、処理部１２は、取得したログ情報Ｌ１，Ｌ２の間の差分を変数部分として抽出する。処理部１２は、２つのテキストの差分をとるコマンド（例えば、所定のＯＳ（Operating System）が提供するｄｉｆｆなど）を用いることができる。
【００１６】
一例では、ログ情報Ｌ１は、１行目に「ｕｓｅｒ＝ａａａ」を含み、２行目に「ｈｏｓｔ＝ｂｂｂ」を含み、３行目以降に「ｓｔａｒｔ  ａｐｐＡ  …」というテキスト情報を含む。また、ログ情報Ｌ２は、１行目に「ｕｓｅｒ＝ｘｘｘ」を含み、２行目に「ｈｏｓｔ＝ｙｙｙ」を含み、３行目以降に「ｓｔａｒｔ  ａｐｐＡ  …」というテキスト情報を含む。ログ情報Ｌ１，Ｌ２のその他の記載は同じである。
【００１７】
処理部１２は、ログ情報Ｌ１，Ｌ２を比較することで、ログ情報Ｌ１，Ｌ２のうちの「ｕｓｅｒ＝」の直後の差分部分（「ａａａ」および「ｘｘｘ」で異なる部分）および「ｈｏｓｔ＝」の直後の差分部分（「ｂｂｂ」および「ｙｙｙ」で異なる部分）を抽出する。処理部１２は、抽出した部分を変数部分とする。例えば、処理部１２は、ログ情報Ｌ１，Ｌ２の１行目の「ｕｓｅｒ＝」の直後の差分部分を第１の変数部分とする。処理部１２は、ログ情報Ｌ１，Ｌ２の２行目の「ｈｏｓｔ＝」の直後の差分部分を第２の変数部分とする。
【００１８】
処理部１２は、抽出した変数部分を識別子に置換する。例えば、処理部１２は、第１の変数部分に識別子「ＩＤ１」を付与し、第２の変数部分に識別子「ＩＤ２」を付与する。そして、処理部１２は、ログ情報Ｌ１の「ｕｓｅｒ＝」の直後の差分部分を「ＩＤ１」（ＩＤはIDentifierの略）に置換し、ログ情報Ｌ１の「ｈｏｓｔ＝」の直後の差分部分を「ＩＤ２」に置換する。ログ情報Ｌ４は、当該置換後のログ情報である。なお、処理部１２は、ログ情報Ｌ２の変数部分を同様に置換しても、置換後のログ情報Ｌ４を得ることができる。
【００１９】
処理部１２は、置換後のログ情報Ｌ４を所定のハッシュ関数に入力することで、ログ情報Ｌ４の第１のハッシュ値（ｈａｓｈ＝Ｈ１）を計算する。処理部１２により用いられるハッシュ関数は、ログ取得対象装置２０，３０，４０でも共有される。また、ハッシュ値のサイズは、ハッシュ関数に入力されるログ情報のサイズよりも小さい。ハッシュ値は、要約値と呼ばれることもある。
【００２０】
処理部１２は、ログ情報における変数部分の抽出に用いられる抽出情報と置換に用いた識別子と第１のハッシュ値とを、複数のログ取得対象装置のうち所定数のログ取得対象装置とは異なるログ取得対象装置に送信する（ステップＳ３）。
【００２１】
例えば、処理部１２は、ログ情報Ｌ１，Ｌ２における変数部分の抽出に用いられる抽出情報を生成する。当該抽出情報は、ログ情報Ｌ１，Ｌ２における「ｕｓｅｒ＝」の直後の第１の変数部分、および、「ｈｏｓｔ＝」の直後の第２の変数部分を特定する情報を含む。第１の変数部分を特定する情報は、ログ情報Ｌ１，Ｌ２における行番号（例えば、「１行目」など）や、該当の変数部分の箇所を表す正規表現（例えば、「ｕｓｅｒ＝＊」（アスタリスク「＊」はワイルドカードを示す））を含む。同様に、第２の変数部分を特定する情報は、ログ情報Ｌ１，Ｌ２における行番号（例えば、「２行目」）や、該当の変数部分の箇所を表す正規表現（例えば、「ｈｏｓｔ＝＊」）を含む。ただし、抽出情報の内容は、これらに限られない。また、抽出情報の内容は行番号および正規表現の組み合わせでもよいし、正規表現のみで変数部分を特定できる場合には正規表現のみでもよい。
【００２２】
処理部１２は、抽出情報と置換に用いた識別子「ＩＤ１」、「ＩＤ２」と、第１のハッシュ値（ｈａｓｈ＝Ｈ１）とを、ログ取得対象装置２０，３０，４０のうち、ログ取得対象装置４０に送信する。なお、抽出情報に複数の変数部分が含まれる場合、各変数部分に対して識別子が対応付けられる。上記の例では、第１の変数部分に対して識別子「ＩＤ１」が対応付けられる。また、第２の変数部分に対して識別子「ＩＤ２」が対応付けられる。抽出情報は、当該変数部分と識別子との対応関係の情報を含む。なお、識別子の情報は、抽出情報に含まれてもよい。
【００２３】
ログ取得対象装置４０は、情報処理装置１０により送信された抽出情報と識別子と第１のハッシュ値とを受信する。ログ取得対象装置４０は、生成したログ情報から抽出情報に基づいて変数部分を抽出し、生成した当該ログ情報の変数部分を識別子に置換した置換後のログ情報の第２のハッシュ値を計算する（ステップＳ４）。
【００２４】
例えば、ログ取得対象装置４０は、生成したログ情報Ｌ３から抽出情報に基づいて変数部分を抽出する。一例では、ログ情報Ｌ３は、１行目に「ｕｓｅｒ＝ｍｍｍ」を含み、２行目に「ｈｏｓｔ＝ｎｎｎ」を含み、３行目以降に「ｓｔａｒｔ  ａｐｐＡ  …」というテキスト情報を含む。例えば、ログ取得対象装置４０は、抽出情報における行番号「１行目」に対する正規表現「ｕｓｅｒ＝＊」に基づいて、「ｕｓｅｒ＝ｍｍｍ」のうちの「ｍｍｍ」の部分を第１の変数部分として抽出する。ログ取得対象装置４０は、抽出情報に基づいて、第１の変数部分（「ｍｍｍ」に相当する部分）を第１の変数部分に対応する識別子「ＩＤ１」に置換する。同様に、ログ取得対象装置４０は、抽出情報における行番号「２行目」に対する正規表現「ｈｏｓｔ＝＊」に基づいて、「ｈｏｓｔ＝ｎｎｎ」のうちの「ｎｎｎ」の部分を第２の変数部分として抽出する。ログ取得対象装置４０は、抽出情報に基づいて、第２の変数部分（「ｎｎｎ」に相当する部分）を第２の変数部分に対応する識別子「ＩＤ２」に置換する。ログ情報Ｌ５は、ログ情報Ｌ３に対する置換後のログ情報である。
【００２５】
そして、ログ取得対象装置４０は、ログ情報Ｌ５をハッシュ関数（情報処理装置１０が用いるハッシュ関数と同じハッシュ関数）に入力して、ログ情報Ｌ２の第２のハッシュ値（ｈａｓｈ＝Ｈ２）を計算する。
【００２６】
ログ取得対象装置４０は、計算された第２のハッシュ値が第１のハッシュ値と一致するか否かを判定し、一致する場合に、第１のハッシュ値を情報処理装置１０に送信し、一致しない場合に、生成したログ情報を情報処理装置１０に送信する（ステップＳ５）。
【００２７】
例えば、ログ取得対象装置４０は、第１のハッシュ値（ｈａｓｈ＝Ｈ１）と、第２のハッシュ値（ｈａｓｈ＝Ｈ２）とが一致する（Ｈ１＝Ｈ２である）場合、第１のハッシュ値（ｈａｓｈ＝Ｈ１）を情報処理装置１０に送信する。なお、この場合、第１のハッシュ値は第２のハッシュ値と同じなので、ログ取得対象装置４０は、第２のハッシュ値を情報処理装置１０に送信するとも言える。
【００２８】
あるいは、ログ取得対象装置４０は、情報処理装置１０から受信した第１のハッシュ値（ｈａｓｈ＝Ｈ１）と、自身で計算した第２のハッシュ値（ｈａｓｈ＝Ｈ２）とが一致しない（Ｈ１≠Ｈ２である）場合、生成したログ情報Ｌ３を情報処理装置１０に送信する。
【００２９】
なお、図１のステップＳ５の例では、Ｈ１＝Ｈ２である場合を例示し、Ｈ１≠Ｈ２である場合の図示を省略している。
情報処理システム１によれば、情報処理装置１０により、ログ情報を生成する複数のログ取得対象装置のうち、所定数のログ取得対象装置２０，３０の各々からログ情報が取得される。情報処理装置１０により、取得した所定数のログ情報の間の差分が変数部分として抽出され、抽出された変数部分が識別子に置換され、置換後のログ情報の第１のハッシュ値が計算される。情報処理装置１０により、ログ情報における変数部分の抽出に用いられる抽出情報と識別子と第１のハッシュ値とが、所定数のログ取得対象装置とは異なるログ取得対象装置４０に送信される。ログ取得対象装置４０により、抽出情報と識別子と第１のハッシュ値とが受信される。ログ取得対象装置４０により、生成したログ情報から抽出情報に基づいて変数部分が抽出され、生成したログ情報の変数部分を識別子に置換した置換後のログ情報の第２のハッシュ値が計算される。ログ取得対象装置４０により、第１のハッシュ値が第２のハッシュ値と一致するか否かが判定され、一致する場合に、第２のハッシュ値が情報処理装置に送信され、一致しない場合に、生成したログ情報が情報処理装置に送信される。
【００３０】
これにより、ログ情報のうちの変数部分のみが異なっておりログ情報の主要なメッセージ部分（処理の起動や動作状況など）が共通するログ情報の収集を抑え、収集対象を主要なメッセージ部分が異なるログ情報に絞り込める。例えば、正常稼働しており、ログ情報の主要なメッセージが共通するログ取得対象装置については、ログ情報そのものの取得を省略してハッシュ値のみの取得とし、正常時とは異なるエラーなどのメッセージを含むログ情報のみを取得対象にできる。前述のように、ハッシュ値のサイズはログ情報のサイズよりも小さい。このため、ネットワーク５０に送信されるデータ量が低減される。また、ログ取得対象装置によるデータ送信量や情報処理装置１０によるデータ受信量が低減される。こうして、複数のログ取得対象装置に跨ってログの収集を省略可能とすることで、ログ収集における通信負荷を低減できる。
【００３１】
なお、情報処理装置１０は、ハッシュ値を送信したログ取得対象装置４０については、ログ取得対象装置４０が保持するログ情報について変数部分のみが異なるだけで、それ以外の部分はログ情報Ｌ１，Ｌ２と共通であると判断できる。
【００３２】
また、情報処理装置１０は、ログ取得対象装置４０がハッシュ値を応答した場合に、ログ取得対象装置４０が生成したログ情報Ｌ３の変数部分の情報を取得することもできる。具体的には、情報処理装置１０は、第１のハッシュ値を応答済であって、ログ情報Ｌ３に含まれる変数部分の値を未取得であるログ取得対象装置４０に、当該変数部分に対応する識別子（「ＩＤ１」や「ＩＤ２」）を送信する。ログ取得対象装置４０は、識別子を受信すると、生成したログ情報Ｌ３のうち、識別子に対応する変数部分に記載された値（「ｍｍｍ」や「ｎｎｎ」）を、情報処理装置１０に送信する。情報処理装置１０は、当該値を受信すると、ログ情報Ｌ４の「ＩＤ１」や「ＩＤ２」の箇所に、対応する値「ｍｍｍ」や「ｎｎｎ」を代入することで、ログ情報Ｌ３を取得可能である。この場合、ログ情報Ｌ３の全体を情報処理装置１０に送信するよりも小さいサイズのデータ送信で済み、通信負荷を低減できる。
【００３３】
更に、「ログ取得対象装置」の機能をもつコンピュータなどを、「情報処理装置」と呼ぶこともできる。
以下では、より具体的な情報処理システムを例示して、情報処理装置１０およびログ取得対象装置２０，３０，４０が有する機能を更に詳細に説明する。
【００３４】
［第２の実施の形態］
次に、第２の実施の形態を説明する。
図２は、第２の実施の形態の情報処理システムの例を示す図である。
【００３５】
第２の実施の形態の情報処理システムは、データセンタ（ＤＣ：Data Center）サーバ１００、エッジコンピュータ（ＥＣ：Edge Computer）２００，２００ａ，２００ｂ，…を有する。ＤＣサーバ１００およびＥＣ２００，２００ａ，２００ｂ，…は、ネットワーク６０に接続されている。ネットワーク６０は、ＬＡＮ（Local Area Network）でもよいし、ＷＡＮ（Wide Area Network）やインターネットなどでもよい。
【００３６】
ＥＣ２００には、エッジデバイス３００，３００ａが接続されている。ＥＣ２００ａには、エッジデバイス３００ｂ，３００ｃが接続されている。ＥＣ２００ｂには、エッジデバイス３００ｄ，３００ｅが接続されている。また、ネットワーク６０には、クライアントの情報処理装置(以下、クライアントと記載)４００が接続されている。
【００３７】
ここで、第２の実施の形態の情報処理システムは、一例として、ＦａａＳ（Function as a Service）を提供する。ＦａａＳを提供するシステムは、ユーザが記述したプログラム（Function）を受け取り、データ登録などの所定のトリガを契機として、当該プログラムを実行し、結果を出力する。
【００３８】
ＤＣサーバ１００は、ＦａａＳによる処理実行を制御するサーバコンピュータであり、データセンタに配置される。ＤＣサーバ１００は、ユーザにより登録されたプログラムを、ネットワーク６０を介してＥＣ２００，２００ａ，２００ｂ，…に配布し、トリガに従って実行指示し、実行結果を回収する。プログラムにより実行される処理としては、例えば、エッジコンピュータに接続されたエッジデバイスによる処理や、エッジコンピュータによる処理が考えられる。ＤＣサーバ１００は、ＥＣ２００，２００ａ，２００ｂ，…のログを収集し、収集したログに基づいて、ＥＣ２００，２００ａ，２００ｂ，…によるプログラムの実行状況（例えば、正常に動作しているか否かなど）の監視を行う。ＤＣサーバ１００は、第１の実施の形態の情報処理装置１０の一例である。
【００３９】
ＥＣ２００，２００ａ，２００ｂ，…は、ＤＣサーバ１００から実行対象のプログラムを取得し、ＤＣサーバ１００による実行指示に応じてプログラムを実行するサーバコンピュータである。ＥＣ２００，２００ａ，２００ｂ，…は、プログラムの実行結果を含むログを生成し、保持する。ＥＣ２００，２００ａ，２００ｂ，…は、ＤＣサーバ１００の要求に応じて、ＤＣサーバ１００にログを提供する。ＥＣ２００，２００ａ，２００ｂ，…は、第１の実施の形態のログ取得対象装置２０，３０，４０の一例である。
【００４０】
エッジデバイス３００，３００ａ，３００ｂ，３００ｃ，３００ｄ，３００ｅ，…は、例えば、それぞれ異なる地域に設置され、該当のエッジデバイスが接続されたＥＣにより制御される。エッジデバイス３００，３００ａ，３００ｂ，３００ｃ，３００ｄ，３００ｅ，…としては、温度や降水量などの物理量を計測するセンサ、周囲を撮像するカメラ、空調機、ロボットなどの種々のデバイスが考えられる。
【００４１】
クライアント４００は、第２の実施の形態の情報処理システムを利用するユーザが操作するクライアントコンピュータである。クライアント４００は、ネットワーク６０を介して、実行対象のプログラムの配備指示や、プログラムを実行するトリガの情報や、実行結果やログの取得指示などを、ＤＣサーバ１００に入力する。
【００４２】
上記のように、観測／計測対象の近傍（エッジ）にエッジデバイスおよびＥＣを配置し、ＥＣによりエッジデバイスのデータの集約や処理を行い、ＤＣサーバ１００に送信する手法は、エッジコンピューティングと呼ばれることがある。
【００４３】
図３は、ＤＣサーバのハードウェア例を示すブロック図である。
ＤＣサーバ１００は、ＣＰＵ１０１、ＲＡＭ１０２、ＨＤＤ１０３、画像信号処理部１０４、入力信号処理部１０５、媒体リーダ１０６およびＮＩＣ（Network Interface Card）１０７を有する。なお、ＣＰＵ１０１は、第１の実施の形態の処理部１２に対応する。ＲＡＭ１０２またはＨＤＤ１０３は、第１の実施の形態の記憶部１１に対応する。
【００４４】
ＣＰＵ１０１は、プログラムの命令を実行するプロセッサである。ＣＰＵ１０１は、ＨＤＤ１０３に記憶されたプログラムやデータの少なくとも一部をＲＡＭ１０２にロードし、プログラムを実行する。なお、ＣＰＵ１０１は複数のプロセッサコアを含んでもよい。また、ＤＣサーバ１００は複数のプロセッサを有してもよい。以下で説明する処理は複数のプロセッサまたはプロセッサコアを用いて並列に実行されてもよい。また、複数のプロセッサの集合を「マルチプロセッサ」または単に「プロセッサ」と言うことがある。
【００４５】
ＲＡＭ１０２は、ＣＰＵ１０１が実行するプログラムやＣＰＵ１０１が演算に用いるデータを一時的に記憶する揮発性の半導体メモリである。なお、ＤＣサーバ１００は、ＲＡＭ以外の種類のメモリを備えてもよく、複数個のメモリを備えてもよい。
【００４６】
ＨＤＤ１０３は、ＯＳやミドルウェアやアプリケーションソフトウェアなどのソフトウェアのプログラム、および、データを記憶する不揮発性の記憶装置である。なお、ＤＣサーバ１００は、フラッシュメモリやＳＳＤ（Solid State Drive）などの他の種類の記憶装置を備えてもよく、複数の不揮発性の記憶装置を備えてもよい。
【００４７】
画像信号処理部１０４は、ＣＰＵ１０１からの命令に従って、ＤＣサーバ１００に接続されたディスプレイ１１１に画像を出力する。ディスプレイ１１１としては、ＣＲＴ（Cathode Ray Tube）ディスプレイ、液晶ディスプレイ（ＬＣＤ：Liquid Crystal Display）、プラズマディスプレイ、有機ＥＬ（ＯＥＬ：Organic Electro-Luminescence）ディスプレイなど、任意の種類のディスプレイを用いることができる。
【００４８】
入力信号処理部１０５は、ＤＣサーバ１００に接続された入力デバイス１１２から入力信号を取得し、ＣＰＵ１０１に出力する。入力デバイス１１２としては、マウス・タッチパネル・タッチパッド・トラックボールなどのポインティングデバイス、キーボード、リモートコントローラ、ボタンスイッチなどを用いることができる。また、ＤＣサーバ１００に、複数の種類の入力デバイスが接続されていてもよい。
【００４９】
媒体リーダ１０６は、記録媒体１１３に記録されたプログラムやデータを読み取る読み取り装置である。記録媒体１１３として、例えば、磁気ディスク、光ディスク、光磁気ディスク（ＭＯ：Magneto-Optical disk）、半導体メモリなどを使用できる。磁気ディスクには、フレキシブルディスク（ＦＤ：Flexible Disk）やＨＤＤが含まれる。光ディスクには、ＣＤ（Compact Disc）やＤＶＤ（Digital Versatile Disc）が含まれる。
【００５０】
媒体リーダ１０６は、例えば、記録媒体１１３から読み取ったプログラムやデータを、ＲＡＭ１０２やＨＤＤ１０３などの他の記録媒体にコピーする。読み取られたプログラムは、例えば、ＣＰＵ１０１によって実行される。なお、記録媒体１１３は可搬型記録媒体であってもよく、プログラムやデータの配布に用いられることがある。また、記録媒体１１３やＨＤＤ１０３を、コンピュータ読み取り可能な記録媒体と言うことがある。
【００５１】
ＮＩＣ１０７は、ネットワーク６０に接続され、ネットワーク６０を介して他のコンピュータと通信を行うインタフェースである。ＮＩＣ１０７は、例えば、スイッチやルータなどの通信装置とケーブルで接続される。
【００５２】
ＥＣ２００，２００ａ，２００ｂ，…およびクライアント４００もＤＣサーバ１００と同様のハードウェアにより実現される。
なお、エッジデバイス３００，３００ａ，３００ｂ，３００ｃ，３００ｄ，３００ｅ，…も、それぞれ、ＣＰＵなどのプロセッサ、ＲＡＭなどの主記憶装置およびフラッシュメモリなどの補助記憶装置を有している（図示を省略する）。
【００５３】
図４は、処理デプロイおよび処理実行の例を示す図である。
図４では、ＥＣ２００に着目して説明するが、ＥＣ２００ａ，２００ｂ，…も同様の手順となる。
【００５４】
まず、ＤＣサーバ１００は、クライアント４００によるデプロイ指示に応じて、クライアント４００によりアップロードされたプログラムに関する処理デプロイ命令をＥＣ２００に送信する。処理デプロイ命令は、処理の識別子を引数として含み、ＥＣ２００に該当のプログラムの配備を命令する。ＥＣ２００は、処理デプロイ命令に含まれる識別子を用いて、該当のプログラムをＤＣサーバ１００から取得（ｐｕｌｌ）する。
【００５５】
次に、ＤＣサーバ１００は、所定のトリガを検出すると、トリガに対応するデプロイ済の処理の識別子を引数として、処理実行命令をＥＣ２００に送信する。ＥＣ２００は、処理実行命令に含まれる識別子に対応するプログラムを実行し、プログラムの処理結果をＤＣサーバ１００に送信（ｐｕｓｈ）する。あるいは、ＥＣ２００は、プログラムの実行に応じて、エッジデバイス３００，３００ａの動作制御（例えば、アクチュエータの操作など）を行うこともある。
【００５６】
ＥＣ２００は、処理結果やアクチュエータの操作などとは別に、プログラムの実行に応じたログの内容が記述されたログファイルを生成する。ユーザによるシステム開発時などのデバッグや、正常動作の確認のため、ＤＣサーバ１００によるログファイルの確認が行われる。ただし、ＤＣサーバ１００が全てのＥＣから、ログファイルを収集すると、ログファイル収集に伴う通信負荷が過大になる可能性がある。そこで、ＤＣサーバ１００およびＥＣ２００は、ログファイル収集を効率化する機能を提供する。
【００５７】
図５は、ログファイルの例を示す図である。
ログファイルＬ１０は、ＥＣ２００により生成される。前述のように、ＥＣ２００，２００ａ，２００ｂ，…に配布されるプログラムによる処理の実行内容は、各ＥＣで共通である。すなわち、ＤＣサーバ１００は、複数のＥＣに共通のプログラムを実行させる。各ＥＣは、共通のプログラムの実行に応じたログファイルを生成する。
【００５８】
このように共通のプログラムの実行に応じて各ＥＣで生成されるログファイルでは、各ＥＣが動作する環境の差異によって、ログファイル内における変数部が互いに異なる値になるが、それ以外のメッセージは共通することになる。
【００５９】
例えば、ログファイルＬ１０では、下線部の箇所（斜体としている）が変数部である。具体的には、４行目の「ＤＥＢＵＧ」、「ＩＴＢ３００−００１」、「ｖ１／ＩＴＢ３００−００１／＿ｂｉｎ／ｄｒｃ−ｄａ−ｄｅｖ」、「ｖ１／ＩＴＢ３００−００１／ｄｒｃ−ｄａ−ｄｅｖ」、「ｈｏｇｅ．ｆｕｇａ．ｐｉｙｏ」、「ｆａｌｓｅ」、「０」、「ａｆ１２３ｂｃ」の箇所である。また、７行目の「ｔｃｐ：／／ｈｏｇｅ．ｆｕｇａ．ｐｉｙｏ：３２８３」の箇所である。ログファイルＬ１０によるＥＣ２００の動作確認では、これら変数部の記述よりも、それ以外のメッセージの箇所の方が重要となる。
【００６０】
図６は、ＤＣサーバの機能例を示すブロック図である。
ＤＣサーバ１００は、記憶部１２０、制御部１３０、ＣＬ（CLient）通信部１４０およびＥＣ通信部１５０を有する。記憶部１２０は、ＲＡＭ１０２またはＨＤＤ１０３の記憶領域を用いて実現される。制御部１３０、ＣＬ通信部１４０およびＥＣ通信部１５０は、ＲＡＭ１０２に記憶されたプログラムをＣＰＵ１０１が実行することで実現される。
【００６１】
記憶部１２０は、制御部１３０の処理に用いられる各種の情報を記憶する。記憶部１２０は、プログラムレポジトリ１２１、ログデータストア１２２、変数部識別情報ＤＢ（DataBase）１２３、変数部ＤＢ１２４およびクラスタＤＢ１２５を有する。
【００６２】
プログラムレポジトリ１２１は、各ＥＣに配備されるプログラムを記憶する。プログラムレポジトリ１２１に格納されるプログラムは、例えば、ユーザにより作成され、クライアント４００によりＤＣサーバ１００にアップロードされる。
【００６３】
ログデータストア１２２は、各ＥＣから収集されたログファイルを記憶する。
変数部識別情報ＤＢ１２３は、各ＥＣから収集されたログファイルにおける変数部の抽出に用いられる情報を記憶する。
【００６４】
変数部ＤＢ１２４は、ログファイルにおける各変数部の値を記憶する。
クラスタＤＢ１２５は、ＥＣのクラスタを示す情報を記憶する。ＥＣのクラスタは、ログファイルにおける、ある一部の変数部の値以外の記述内容が共通するＥＣ群をグループ化したものである。変数部の値は、ＥＣの利用環境やハードウェア環境などに応じて変わり得る。このため、同一クラスタに属するＥＣ群は、利用環境やハードウェア環境が共通する（あるいは類似する）と推定される。
【００６５】
制御部１３０は、プログラム配備やログファイル収集を制御する。制御部１３０はプログラム配備制御部１３１、ログ取得部１３２および変数部推定部１３３を有する。
プログラム配備制御部１３１は、各ＥＣに対するプログラムの配備やトリガに応じたプログラムの実行指示を制御する。
【００６６】
ログ取得部１３２は、各ＥＣで生成されたログファイルを取得し、取得したログファイルをログデータストア１２２に格納する。ログ取得部１３２は、まずは、２以上のＥＣからログファイルをサンプリングし、変数部推定部１３３による変数部推定を実行させる。ログ取得部１３２は、ログファイルの変数部を当該変数部の識別子に置換してハッシュ値を求めてＥＣに提供する。ログ取得部１３２は、ログファイルの該当の変数部を識別子に置換させて計算されたハッシュ値が提供されたハッシュ値と異なる場合に、当該ログファイルをＥＣから取得する。一方、ＥＣにより計算されたハッシュ値と提供されたハッシュ値とが一致する場合には、ログ取得部１３２は、当該ハッシュ値をＥＣから取得する。ログ取得部１３２は、ハッシュ値を送信したＥＣから変数部の値を取得する場合、当該変数部の識別子をＥＣに指定して、該当の変数部の値を応答させる。ログ取得部１３２は取得した変数部の値を、変数部ＤＢ１２４に格納する。
【００６７】
また、ログ取得部１３２は、各ＥＣからのハッシュ値の応答状況に基づいて、ＥＣのクラスタを示す情報の生成や更新を行い、クラスタＤＢ１２５に格納する。
変数部推定部１３３は、サンプリングされた２以上のログファイルの差分（ｄｉｆｆ）をとることで、差分箇所を特定し、当該差分箇所を変数部として抽出する。変数部推定部１３３は、ログファイルのうち、変数部を抽出するための抽出情報を生成し、変数部識別情報ＤＢ１２３に格納する。なお、変数部推定部１３３は、ログファイルの差分を取る際、ログファイル内の時刻が記載された箇所を所定の文字列で置換してから、差分を取る。通常、時刻は、ログファイルの行内の所定の位置に所定のフォーマットで記載されることが多く、変数部推定部１３３は、ログファイル内の当該位置およびフォーマットの箇所を検索することで、時刻が記載された箇所を特定可能である。
【００６８】
ＣＬ通信部１４０は、クライアント４００と通信する。ＣＬ通信部１４０は、クライアント４００からのデータの受信や、クライアント４００に対するデータの送信を行う。
ＥＣ通信部１５０は、各ＥＣと通信する。ＥＣ通信部１５０は、各ＥＣに対するデータの送信や、各ＥＣからのデータの受信を行う。
【００６９】
図７は、ＥＣの機能例を示すブロック図である。
ＥＣ２００は、記憶部２２０、制御部２３０およびＤＣ通信部２４０を有する。記憶部２２０は、ＥＣ２００が備えるＲＡＭまたはＨＤＤの記憶領域を用いて実現される。制御部２３０およびＤＣ通信部２４０は、ＥＣ２００のＲＡＭに記憶されたプログラムを、ＥＣ２００が備えるＣＰＵが実行することで実現される。
【００７０】
記憶部２２０は、制御部２３０の処理に用いられる各種の情報を記憶する。記憶部２２０は、プログラムレポジトリ２２１、ログデータストア２２２、変数部識別情報ＤＢ２２３および変数部ＤＢ２２４を有する。
【００７１】
プログラムレポジトリ２２１は、ＤＣサーバ１００から取得されたプログラムを記憶する。
ログデータストア２２２は、プログラムの実行に応じて生成されたログファイルを記憶する。
【００７２】
変数部識別情報ＤＢ２２３は、生成されたログファイルにおける変数部の抽出に用いられる抽出情報を記憶する。抽出情報は、ＤＣサーバ１００から取得される。
変数部ＤＢ２２４は、ログファイルにおける各変数部の値を記憶する。
【００７３】
制御部２３０は、プログラムの実行やＤＣサーバ１００へのログ送信を制御する。制御部２３０は、プログラム取得部２３１、処理実行部２３２、ログ重複判定部２３３および変数検索部２３４を有する。
【００７４】
プログラム取得部２３１は、配備対象のプログラムをＤＣサーバ１００から取得し、取得したプログラムをプログラムレポジトリ２２１に格納する。
処理実行部２３２は、配備されたプログラムを実行する。例えば、処理実行部２３２は、ＤＣサーバ１００から処理実行指示を受け付けると、当該プログラムを実行し、プログラムの実行に応じたログファイルを生成する。処理実行部２３２は、生成したログファイルをログデータストア２２２に格納する。
【００７５】
ログ重複判定部２３３は、ログ重複判定を行う。具体的には、ログ重複判定部２３３は、ログファイルにおける変数部の抽出に用いられる情報と、変数部に対する識別子と、ログファイルに対して生成されたハッシュ値とをＤＣサーバ１００から取得する。ログ重複判定部２３３は、ＥＣ２００により生成されたログファイルの該当の変数部を、受信した識別子に置換し、当該置換後のログファイルのハッシュ値を計算する。このとき、ログ重複判定部２３３は、該当の変数部の値を、変数部ＤＢ２２４に格納する。ログ重複判定部２３３は、両ハッシュ値が一致する場合、ＥＣ２００で生成されたログファイルがＤＣサーバ１００により取得済のログファイルと重複すると判定し、計算したハッシュ値をＤＣサーバ１００に送信する。ログ重複判定部２３３は、両ハッシュ値が一致しない場合、ＥＣ２００で生成されたログファイルがＤＣサーバ１００により取得済のログファイルと重複しないと判定し、ＥＣ２００で生成されたログファイルをＤＣサーバ１００に送信する。
【００７６】
変数検索部２３４は、ＤＣサーバ１００から変数部の識別子が指定されると、当該識別子に対応する変数部の値を変数部ＤＢ２２４から取得し、ＤＣサーバ１００に提供する。
ＤＣ通信部２４０は、ＤＣサーバ１００と通信する。ＤＣ通信部２４０は、ＤＣサーバ１００からのデータの受信や、ＤＣサーバ１００に対するデータの送信を行う。
【００７７】
なお、ＥＣ２００ａ，２００ｂ，…もＥＣ２００と同様の機能を有する。
図８は、プログラムレポジトリエントリの例を示す図である。
プログラムレポジトリエントリＲ１は、プログラムレポジトリ１２１，２２１に格納されるデータ（エントリ）である。プログラムレポジトリエントリＲ１は、ｐｒｏｇｒａｍ＿ｉｄおよびｐｒｏｇｒａｍのフィールドを含む。
【００７８】
ｐｒｏｇｒａｍ＿ｉｄのフィールドには、プログラムの識別子（ｕｕｉｄ：Universally Unique ID）が登録される。
ｐｒｏｇｒａｍのフィールドには、プログラムの本体（ｂｉｎａｒｙのデータ）が登録される。
【００７９】
図９は、処理実行履歴エントリの例を示す図である。
処理実行履歴エントリＲ２は、ログデータストア１２２，２２２に格納されるデータである。処理実行履歴エントリＲ２は、ｅｘｅｃ＿ｉｄおよびｐｒｏｇｒａｍ＿ｉｄのフィールドを含む。
【００８０】
ｅｘｅｃ＿ｉｄのフィールドには、処理実行の識別子が登録される。
ｐｒｏｇｒａｍ＿ｉｄのフィールドには、プログラムの識別子が登録される。
図１０は、ログデータストアエントリの例を示す図ある。
【００８１】
ログデータストアエントリＲ３は、ログデータストア１２２，２２２に格納されるデータである。ログデータストアエントリＲ３は、ｅｘｅｃ＿ｉｄおよびｌｏｇのフィールドを含む。
【００８２】
ｅｘｅｃ＿ｉｄのフィールドには、処理実行の識別子が登録される。ｌｏｇのフィールドには、ログの内容を示す文字列（ｓｔｒｉｎｇ）のデータが登録される。
図１１は、変数部識別情報ＤＢエントリの例を示す図である。
【００８３】
変数部識別情報ＤＢエントリＲ４は、変数部識別情報ＤＢ１２３，２２３に格納されるデータである。変数部識別情報ＤＢエントリＲ４は、ｐｒｏｇｒａｍ＿ｉｄ、ｈａｓｈおよびｖａｒｓ＿ｉｎｆｏのフィールドを含む。
【００８４】
ｐｒｏｇｒａｍ＿ｉｄのフィールドには、プログラムの識別子が登録される。
ｈａｓｈのフィールドには、該当のプログラムの実行に応じたログファイル（変数部を変数部の識別子に置換した後のログファイル）に対して生成されたハッシュ値が登録される。
【００８５】
ｖａｒｓ＿ｉｎｆｏのフィールドには、変数部の識別子に対応付けて、当該変数部の抽出に用いられる抽出情報が登録される。ｖａｒｓ＿ｉｎｆｏのフィールドは、ｖａｒ＿ｉｄ、ｌｉｎｅおよびｒｅｇ＿ｅｘｐのフィールドを含む。
【００８６】
ｖａｒ＿ｉｄのフィールドには、変数部の識別子（ｕｕｉｄ）が登録される。
ｌｉｎｅのフィールドには、該当のプログラムのログファイルにおいて、当該変数部が出現する行の番号（行番号）が登録される。
【００８７】
ｒｅｇ＿ｅｘｐのフィールドには、該当の行番号で示される行のうちの変数部を表す正規表現が登録される。
ｖａｒｓ＿ｉｎｆｏのフィールドには、変数部の数だけ、ｖａｒ＿ｉｄ、ｌｉｎｅおよびｒｅｇ＿ｅｘｐの組が登録される。
【００８８】
図１２は、変数部ＤＢエントリの例を示す図である。
変数部ＤＢエントリＲ５は、変数部ＤＢ１２４，２２４に格納されるデータである。変数部ＤＢエントリＲ５は、ｅｘｅｃ＿ｉｄ、ｐｒｏｇｒａｍ＿ｉｄおよびｖａｒｓのフィールドを含む。
【００８９】
ｅｘｅｃ＿ｉｄのフィールドには、プログラムの処理実行の識別子が登録される。
ｐｒｏｇｒａｍ＿ｉｄのフィールドには、プログラムの識別子が登録される。
ｖａｒｓのフィールドには、変数部の識別子に対応付けて、当該変数部の値が登録される。ｖａｒｓのフィールドは、ｖａｒ＿ｉｄおよびｖａｌｕｅのフィールドを含む。
【００９０】
ｖａｒ＿ｉｄのフィールドには、変数部の識別子が登録される。
ｖａｌｕｅのフィールドには、変数部の値（変数値）が登録される。
ｖａｒｓのフィールドには、変数部の数だけ、ｖａｒ＿ｉｄおよびｖａｌｕｅの組が登録される。
【００９１】
図１３は、ＥＣ毎応答記録情報の例を示す図である。
ＥＣ毎応答記録情報Ｒ６は、記憶部１２０の所定の記憶領域に格納されるデータである。ＥＣ毎応答記録情報Ｒ６は、あるタイミングにおけるログファイル収集の際に、各ＥＣが送信したハッシュ値（ハッシュ値ではなくログファイルを送信した場合はｎｕｌｌ）を管理するための情報である。ＥＣ毎応答記録情報Ｒ６は、ｒｅｓｐｏｎｓｅｓのフィールドを含む。ｒｅｓｐｏｎｓｅｓのフィールドは、ｅｃ＿ｉｄおよびｒｅｓｐｏｎｓｅのフィールドを含む。
【００９２】
ｅｃ＿ｉｄのフィールドには、ＥＣの識別子が登録される。
ｒｅｓｐｏｎｓｅのフィールドには、該当のＥＣが応答したハッシュ値、または、ｎｕｌｌが登録される。ｎｕｌｌは、該当のＥＣがハッシュ値ではなく、ログファイル本体を応答したことを示す。
【００９３】
ｒｅｓｐｏｎｓｅｓのフィールドには、ｅｃ＿ｉｄ毎に、ｒｅｓｐｏｎｓｅが登録される。
図１４は、マッチ情報の例を示す図である。
【００９４】
マッチ情報Ｒ７は、記憶部１２０の所定の記憶領域に格納されるデータである。マッチ情報Ｒ７は、あるタイミングにおけるログファイル収集の際に同じハッシュ値を応答したＥＣの管理に用いられる。マッチ情報Ｒ７は、ｐｒｏｇｒａｍ＿ｉｄ、ｈａｓｈおよびｅｃ＿ｉｄｓのフィールドを含む。
【００９５】
ｐｒｏｇｒａｍ＿ｉｄのフィールドには、プログラムの識別子が登録される。
ｈａｓｈのフィールドには、ハッシュ値が登録される。
ｅｃ＿ｉｄｓは、該当のハッシュ値を応答したＥＣの識別子（ｅｃ＿ｉｄ）が登録される。該当のハッシュ値を応答したＥＣが複数の場合、ｅｃ＿ｉｄｓに登録されるｅｃ＿ｉｄも複数になる。
【００９６】
また、マッチ情報Ｒ７には、ｐｒｏｇｒａｍ＿ｉｄ毎にｈａｓｈおよびｅｃ＿ｉｄｓが登録される。
図１５は、同ハッシュ応答カウント情報の例を示す図である。
【００９７】
同ハッシュ応答カウント情報Ｒ８は、記憶部１２０の所定の記憶領域に格納されるデータである。同ハッシュ応答カウント情報Ｒ８は、同じハッシュ値を応答した２以上のＥＣによる、当該同じハッシュ値の応答回数を管理するための情報である。同ハッシュ応答カウント情報Ｒ８は、ｅｃ＿ｉｄｓ、ｗｈｏｌｅ＿ｃｏｕｎｔおよびｓａｍｅ＿ｒａｔｉｏのフィールドを含む。
【００９８】
ｅｃ＿ｉｄｓのフィールドには、同じハッシュ値を応答したＥＣの識別子（ｅｃ＿ｉｄ）の組が登録される。
ｗｈｏｌｅ＿ｃｏｕｎｔのフィールドには、該当の２以上のＥＣが同じハッシュ値を応答した総回数が登録される。
【００９９】
ｓａｍｅ＿ｒａｔｉｏのフィールドには、該当の２以上のＥＣが同じハッシュ値を応答する確率（同ハッシュ応答率）が登録される。同ハッシュ応答率は、ｗｈｏｌｅ＿ｃｏｕｎｔを、重複排除によるログ取得要求をＥＣに送信した総回数で割ることで求めることができる。
【０１００】
同ハッシュ応答カウント情報Ｒ８には、同じハッシュ値を応答したＥＣの組毎に、ｅｃ＿ｉｄｓ（ｅｃ＿ｉｄの組、ｗｈｏｌｅ＿ｃｏｕｎｔおよびｓａｍｅ＿ｒａｔｉｏ）が登録される。同ハッシュ応答カウント情報Ｒ８に登録されていないＥＣの組については、同じハッシュ値を応答した実績がない（すなわち、同ハッシュ応答率が０％である）ことを示す。
【０１０１】
図１６は、クラスタＤＢエントリの例を示す図である。
クラスタＤＢエントリＲ９は、クラスタＤＢ１２５に格納されるデータである。クラスタＤＢエントリＲ９は、ｃｌｕｓｔｅｒ＿ｉｄおよびｅｃ＿ｉｄｓのフィールドを含む。
【０１０２】
ｃｌｕｓｔｅｒ＿ｉｄのフィールドには、クラスタの識別子（ｕｕｉｄ）が登録される。
ｅｃ＿ｉｄｓのフィールドには、該当のクラスタに属するＥＣの識別子（ｅｃ＿ｉｄ）の組が登録される。
【０１０３】
クラスタＤＢエントリＲ９には、作成されたクラスタの数だけ、ｃｌｕｓｔｅｒ＿ｉｄおよびｅｃ＿ｉｄｓの組が登録される。
次に、第２の実施の形態の情報処理システムにおける処理手順を説明する。
【０１０４】
まず、ＤＣサーバ１００によるプログラム配備指示およびプログラムの実行指示の手順を説明する。
図１７は、プログラム配備指示および実行指示例を示すフローチャートである。
【０１０５】
（Ｓ１０）プログラム配備制御部１３１は、クライアント４００から処理デプロイ命令を受信する。処理デプロイ命令は、配備対象のプログラムの指定、および、プログラムを実行するトリガの情報を含む。
【０１０６】
（Ｓ１１）プログラム配備制御部１３１は、配備対象のプログラムをプログラムレポジトリ１２１に登録し、配備対象のプログラムに対する識別子（ｐｒｏｇｒａｍ＿ｉｄ）を発行する。これにより、該当のプログラムに対して、プログラムレポジトリエントリＲ１がプログラムレポジトリ１２１に登録される。
【０１０７】
（Ｓ１２）プログラム配備制御部１３１は、プログラムの配備対象のＥＣ（対象ＥＣ）に処理デプロイ命令を送信する。処理デプロイ命令は、プログラムの識別子を含む。
（Ｓ１３）プログラム配備制御部１３１は、対象ＥＣによる配備対象のプログラムの取得要求に応じて、対象ＥＣに配備対象のプログラムを提供する。プログラム配備制御部１３１は、プログラムの識別子と当該プログラムを提供した対象ＥＣの識別子（ｅｃ＿ｉｄ）との対応関係を示す情報を、記憶部１２０に格納する。
【０１０８】
（Ｓ１４）プログラム配備制御部１３１は、クライアント４００から配備済のプログラムの処理実行命令を受信する。
（Ｓ１５）プログラム配備制御部１３１は、配備済のプログラムに関するトリガの発生を検出すると、実行対象プログラムの識別子と、処理実行毎に付与する処理実行識別子（ｅｘｅｃ＿ｉｄ）とを引数として、対象ＥＣに処理実行命令を、対象ＥＣに送信する。以降、プログラム配備制御部１３１は、トリガを検出されるたびに、対象ＥＣに処理実行命令を送信する。なお、プログラム配備制御部１３１は、実行対象プログラムの識別子と処理実行識別子とを対応付けて記憶部１２０に格納する。
【０１０９】
次に、ＥＣ２００によるプログラム配備および処理実行の手順を説明する。なお、以下では、ＥＣ２００の手順を主に説明するが、ＥＣ２００ａ，２００ｂ，…もＥＣ２００と同様の手順を実行する。
【０１１０】
図１８は、プログラム配備および処理実行例を示すフローチャートである。
（Ｓ２０）プログラム取得部２３１は、ＤＣサーバ１００から処理デプロイ命令を受信する。
【０１１１】
（Ｓ２１）プログラム取得部２３１は、処理デプロイ命令に含まれるプログラムの識別子を指定したプログラムの取得要求をＤＣサーバ１００に送信し、当該取得要求に応じたプログラムをＤＣサーバ１００から取得する。プログラム取得部２３１は、取得したプログラムに関するプログラムレポジトリエントリＲ１を、プログラムレポジトリ２２１に格納する。
【０１１２】
（Ｓ２２）処理実行部２３２は、ＤＣサーバ１００から処理実行命令を受信する。
（Ｓ２３）処理実行部２３２は、処理実行命令に応じたプログラムの処理を実行し、処理実行命令に含まれる処理実行識別子（ｅｘｅｃ＿ｉｄ）をキーとして、処理実行に応じて生成されたログファイルを、ログデータストア２２２に保存する。すなわち、処理実行部２３２は、プログラムの処理の実行に応じて、処理実行履歴エントリＲ２およびログデータストアエントリＲ３を生成し、ログデータストア２２２に格納する。以降、処理実行部２３２は、ＤＣサーバ１００より処理実行命令を受信するたびに、生成されたログファイルを、ログデータストア２２２に格納する。
【０１１３】
図１９は、プログラム配備および実行の例を示す図である。
ＤＣサーバ１００は、配備対象のプログラムと配備先のＥＣ（対象ＥＣ）の情報と処理実行の契機となるトリガの情報とをクライアント４００から受信する。ＤＣサーバ１００は、配備対象のプログラムとトリガの情報とを記憶部１２０に保存する。配備対象のプログラムは、プログラムレポジトリ１２１に保存される。例えば、ＤＣサーバ１００は、対象ＥＣとして指定されたＥＣ２００，２００ａ，２００ｂに処理デプロイ命令を送信し、処理デプロイ命令に応じたプログラムの取得要求をＥＣ２００，２００ａ，２００ｂから受信する。ＤＣサーバ１００は、プログラムの取得要求に応じて、ＥＣ２００，２００ａ，２００ｂに配備対象のプログラムを提供する。提供されたプログラムは、ＥＣ２００のプログラムレポジトリ２２１、ＥＣ２００ａのプログラムレポジトリ２２１ａおよびＥＣ２２１ｂのプログラムレポジトリ２２１ｂに格納される。
【０１１４】
ＤＣサーバ１００は、クライアント４００により指定されたトリガが成立すると、提供したプログラムによる処理実行命令をＥＣ２００，２００ａ，２００ｂに送信する。ＥＣ２００，２００ａ，２００ｂは、処理実行命令に応じて、該当のプログラムによる処理を実行し、ログファイルを生成する。
【０１１５】
次に、ＤＣサーバ１００によるログファイル収集制御の手順を説明する。
図２０は、ログファイル収集制御例を示すフローチャートである。
（Ｓ３０）ログ取得部１３２は、サンプリングによるログ取得を実行する。サンプリングによるログ取得とは、あるプログラムの配備先となった全てのＥＣのうちの一部からログファイルの取得を行うことである。サンプリング数は、２以上であり、記憶部１２０に予め設定される。サンプリングによるログ取得（「ログ取得（サンプリング）」と表記することがある）の詳細は後述される。
【０１１６】
（Ｓ３１）変数部推定部１３３は、サンプリングされたログファイル同士を比較することで、ログファイルにおける変数部の推定を行う。変数部推定の詳細は、後述される。
（Ｓ３２）ログ取得部１３２は、重複排除によるログ取得を実行する。重複排除によるログ取得とは、各ＥＣからの、変数部が異なるだけのログファイルの収集を抑制し、変数部以外が異なるログファイルに絞った収集を行うことを示す。重複排除によるログ取得（「ログ取得（重複排除）」と表記することがある）の詳細は後述される。
【０１１７】
（Ｓ３３）ログ取得部１３２は、重複排除によるログ取得の結果に応じて、クラスタ更新を行う。クラスタ更新の詳細は後述される。
図２１は、ログ取得（サンプリング）例を示すフローチャートである。
【０１１８】
ログ取得（サンプリング）の処理は、ステップＳ３０に相当する。
（Ｓ４０）ログ取得部１３２は、クライアント４００からログ取得要求を受信する。当該ログ取得要求は、変数部を除いたログファイルの取得要求である。ログ取得要求は、ログファイルの取得対象の処理実行識別子（ｅｘｅｃ＿ｉｄ）を含む。
【０１１９】
（Ｓ４１）ログ取得部１３２は、ステップＳ１５で記憶部１２０に格納した情報に基づいて、処理実行識別子に対応するプログラムを提供した複数のＥＣを特定し、複数のＥＣの中から、サンプリング対象のＥＣを決定する。ログ取得部１３２は、ＥＣのクラスタを未作成の場合、複数のＥＣの中から予め定められた所定数（２以上）のＥＣをランダムに選択して、サンプリング対象とする。ログ取得部１３２は、ＥＣのクラスタを作成済の場合、例えば、当該クラスタに基づいて、異なるクラスタに属するＥＣから所定数のサンプリング対象を、各クラスタから１つずつ決定することが考えられる。クラスタリングの結果を用いることで、なるべく少ないサンプル数で変数部を抜き出せる可能性が高まる。
【０１２０】
（Ｓ４２）ログ取得部１３２は、サンプリング対象のＥＣに、指定された処理実行識別子を引数として、ログ取得要求を送信する。
（Ｓ４３）ログ取得部１３２は、ステップＳ４２で送信したログ取得要求に応じたログファイルをサンプリング対象のＥＣから受信する。ログ取得部１３２は、受信したログ（処理実行履歴エントリＲ２およびログデータストアエントリＲ３）を、ログデータストア１２２に格納する。
【０１２１】
図２２は、ログ取得（サンプリング）の例を示す図である。
例えば、ＥＣ２００，２００ａ，２００ｂは、配備されたプログラムを実行し、ログファイルを生成済である。ＥＣ２００は、処理実行識別子「ｅｘｅｃ＿ｉｄ」に対応付けて、ログファイル「ｌｏｇｆｉｌｅ＿ａ」を保持する。ＥＣ２００ａは、処理実行識別子「ｅｘｅｃ＿ｉｄ」に対応付けて、ログファイル「ｌｏｇｆｉｌｅ＿ｂ」を保持する。ＥＣ２００ｂは、処理実行識別子「ｅｘｅｃ＿ｉｄ」に対応付けて、ログファイル「ｌｏｇｆｉｌｅ＿ｃ」を保持する。ＥＣ２００，２００ａ，２００ｂは、共通の処理実行識別子に対応付けて、それぞれのログファイルを保持することになる。
【０１２２】
ＤＣサーバ１００は、クライアント４００から、処理実行識別子「ｅｘｅｃ＿ｉｄ」を含むログ取得要求を受信する。すると、ＤＣサーバ１００は、当該処理実行識別子「ｅｘｅｃ＿ｉｄ」に対応するプログラムを配備したＥＣ２００，２００ａ，２００ｂを特定する。ＤＣサーバ１００は、ＥＣ２００，２００ａ，２００ｂの中から、サンプリング対象のＥＣを選択する。例えば、ＤＣサーバ１００は、ＥＣ２００，２００ａ，２００ｂのうち、ＥＣ２００，２００ａをサンプリング対象として選択する。すると、ＤＣサーバ１００は、処理識別子「ｅｘｅｃ＿ｉｄ」を含むログ取得要求をＥＣ２００，２００ａに送信する。
【０１２３】
ＥＣ２００は、ログ取得要求を受信すると、ログ取得要求に含まれる処理識別子「ｅｘｅｃ＿ｉｄ」に対応するログファイル「ｌｏｇｆｉｌｅ＿ａ」をＤＣサーバ１００に送信する。
【０１２４】
ＥＣ２００ａは、ログ取得要求を受信すると、ログ取得要求に含まれる処理識別子「ｅｘｅｃ＿ｉｄ」に対応するログファイル「ｌｏｇｆｉｌｅ＿ｂ」をＤＣサーバ１００に送信する。
【０１２５】
こうして、ＤＣサーバ１００は、サンプリング対象のＥＣからログファイルを取得する。
図２３は、変数部推定例を示すフローチャートである。
【０１２６】
変数部推定の処理は、ステップＳ３１に相当する。
（Ｓ５０）変数部推定部１３３は、サンプリングしたログファイル同士の差分を取る。例えば、変数部推定部１３３は、ＯＳが提供するｄｉｆｆコマンドなどによって差分を取ってもよい。なお、前述のように、変数部推定部１３３は、各ログファイルに含まれる時刻の記載箇所については、所定の文字列に置換してから、差分を取る。
【０１２７】
（Ｓ５１）変数部推定部１３３は、ステップＳ５０で取得された差分の箇所を変数部と決定する。
（Ｓ５２）変数部推定部１３３は、ステップＳ５１で決定した変数部の抽出情報を生成する。抽出情報は、該当の変数部の抽出に用いられる情報であり、例えば、ログファイルにおける変数部の位置を、行番号や正規表現などによって表す情報である。
【０１２８】
（Ｓ５３）変数部推定部１３３は、該当の変数部に識別子（ｖａｒ＿ｉｄ）を付与する。
（Ｓ５４）変数部推定部１３３は、サンプリングした何れかのログファイルの変数部を、当該変数部に対応する識別子に置換する。
【０１２９】
（Ｓ５５）変数部推定部１３３は、置換後のログファイルを所定のハッシュ関数に入力することで置換後のログファイルに対応するハッシュ値を計算する。ここで、ステップＳ５５で用いられるハッシュ関数は、ＤＣサーバ１００および各ＥＣにおいて共有される。
【０１３０】
（Ｓ５６）変数部推定部１３３は、プログラム識別子（ｐｒｏｇｒａｍ＿ｉｄ）をキーとして、抽出情報およびハッシュ値を変数部識別情報ＤＢ１２３に保存する。すなわち、変数部推定部１３３は、プログラム識別子とステップＳ５２で生成した抽出情報と、ステップＳ５３で付与した変数部の識別子とステップＳ５５で計算したハッシュ値とを含む変数部識別情報ＤＢエントリＲ４を生成する。変数部推定部１３３は、変数部識別情報ＤＢエントリＲ４を変数部識別情報ＤＢ１２３に格納する。
【０１３１】
図２４は、変数部推定の例を示す図である。
ログファイルＬ１１は、ログファイル「ｌｏｇｆｉｌｅ＿ａ」の内容を示す。ログファイルＬ１２は、ログファイル「ｌｏｇｆｉｌｅ＿ｂ」の内容を示す。変数部推定部１３３は、ログファイルＬ１１，Ｌ１２の差分を取る前に、ログファイルＬ１１，Ｌ１２それぞれの時刻が記載された箇所を所定の文字列に置換する。図２４の例では、時刻が記載された箇所が「＜ｔｉｍｅｓｔａｍｐ＞」の文字列に置換されている。
【０１３２】
ログファイルＬ１１，Ｌ１２を比較すると、ログファイルＬ１１の３行目の「ｆｏｏ」の記述と、ログファイルＬ１２の３行目の「ｂａｒ」の記述とが異なる。このため、変数部推定部１３３は、ログファイルＬ１１，Ｌ１２の「ｆｏｏ」および「ｂａｒ」に相当する差分部分を変数部と決定し、例えば、当該変数部に対して識別子「１２３」を付与する。変数部推定部１３３は、識別子「１２３」の変数部に対する抽出情報として、行番号が「ｌｉｎｅ：３」、正規表現が「ｒｅｇ＿ｅｘｐ：ｈｏｍｅ／．＊／ｃｏｎｆｉｇ」という情報を生成する。
【０１３３】
また、ログファイルＬ１１，Ｌ１２を比較すると、ログファイルＬ１１の４行目の「ｅｃ＿ａ」の記述と、ログファイルＬ１２の４行目の「ｅｃ＿ｂ」の記述とが異なる。このため、変数部推定部１３３は、ログファイルＬ１１，Ｌ１２の「ｅｃ＿ａ」および「ｅｃ＿ｂ」に相当する差分部分を変数部と決定し、例えば、当該変数部に対して識別子「４５６」を付与する。変数部推定部１３３は、識別子「４５６」の変数部に対する抽出情報として、行番号が「ｌｉｎｅ：４」、正規表現が「ｒｅｇ＿ｅｘｐ：ＯＷＮ＿ＩＤ／．＊，ＤＡＴＡ」という情報を生成する。
【０１３４】
また、変数部推定部１３３は、ログファイルＬ１１（またはログファイルＬ１２）の各変数部を、該当の変数部に対応する識別子に置換したログファイルのハッシュ値を計算する。ハッシュ値の計算結果は、「ａｂ８０２ｄｃｆ３６」である。
【０１３５】
変数部推定部１３３は、プログラムの識別子（例えば、「００１」とする）に対応付けて、計算したハッシュ値と、各変数部の識別子と、各変数部の抽出情報とを登録した変数部識別情報ＤＢエントリＲ４１を生成し、変数部識別情報ＤＢ１２３に格納する。
【０１３６】
図２５は、ログ取得（重複排除）例を示すフローチャートである。
ログ取得（重複排除）は、ステップＳ３２に相当する。
（Ｓ６０）ログ取得部１３２は、ログ取得対象ＥＣを決定する。例えば、クラスタＤＢ１２５にクラスタの情報が未作成の場合、ログ取得部１３２は、今回のログファイルを未取得であるＥＣからランダムに所定数（２以上）のＥＣを選択して、ログ取得対象ＥＣとする。また、例えば、クラスタＤＢ１２５にクラスタの情報が作成済の場合、ログ取得部１３２は、今回のログファイルを未取得であり、異なるクラスタに属する所定数（２以上）のＥＣを選択して、ログ取得対象ＥＣとする。
【０１３７】
（Ｓ６１）ログ取得部１３２は、処理実行識別子、変数部識別情報（変数部識別情報ＤＢエントリＲ４の情報）およびハッシュ値リストを引数として、ログ取得要求をログ取得対象ＥＣに送信する。ここで、ログ取得部１３２は、２回目以降の「ログ取得（重複排除）」では、それ以前のハッシュ値も合わせてログ取得対象ＥＣに送信する。このため、「ハッシュ値リスト」となる。変数部識別情報は、ハッシュ値リストのハッシュ値毎の変数部の抽出情報を含む。
【０１３８】
（Ｓ６２）ログ取得対象ＥＣによるログファイルの送信処理が実行される。当該送信処理の詳細は後述される。
（Ｓ６３）ログ取得部１３２は、ログ取得対象ＥＣ毎に応答を記録する。応答は、ハッシュ値またはログファイル本体の何れかを含む。すなわち、ログ取得部１３２は、ＥＣ毎応答記録情報Ｒ６に、各ＥＣからの応答内容（ハッシュ値またはｎｕｌｌ（ログファイルを応答したことを示す））を記録する。
【０１３９】
（Ｓ６４）ログ取得部１３２は、取得対象のログファイルを保持する全てのＥＣから応答を受信済であるか否かを判定する。当該全てのＥＣから応答を受信済の場合、処理が終了する。当該全てのＥＣから応答を受信済でない場合、ステップＳ６５に処理が進む。
【０１４０】
（Ｓ６５）ログ取得部１３２は、ステップＳ６３で受信した今回の応答にログファイルが含まれるか否かを判定する。応答にログファイルが含まれる場合、ステップＳ６６に処理が進む。応答にログファイルが含まれない場合、ステップＳ６０に処理が進む。
【０１４１】
（Ｓ６６）変数部推定部１３３は、変数部推定の処理を実行する。ステップＳ６６の変数部推定では、今回応答として取得したログファイルと、前回までに取得したログファイルとの差分を取ることで、新たに変数部の推定を行う。その結果、変数部が追加で抽出されることになる。変数部推定の手順は、図２３で説明した通りである。そして、ステップＳ６０に処理が進む。
【０１４２】
図２６は、ＥＣによる送信処理例を示すフローチャートである。
ＥＣによる送信処理は、ステップＳ６２に相当する。
（Ｓ７０）ログ重複判定部２３３は、ＤＣサーバ１００からログ取得要求を受信する。ログ重複判定部２３３は、ログ取得要求に含まれる処理実行識別子と変数部識別情報（変数部識別情報ＤＢエントリＲ４）とハッシュ値リストとを取得する。ログ重複判定部２３３は、変数部識別情報ＤＢエントリＲ４を変数部識別情報ＤＢ２２３に格納する。
【０１４３】
（Ｓ７１）ログ重複判定部２３３は、ログ取得要求で指定された処理実行識別子に該当する処理のログファイルから変数部識別情報を基に変数部を抽出する。
（Ｓ７２）ログ重複判定部２３３は、抽出した変数部を当該変数部に対応する識別子（ログ取得要求に含まれる識別子）に置換し、置換後のログファイルのハッシュ値を計算する。なお、ログ重複判定部２３３は、ハッシュ値の計算の前に、ログファイルに含まれる時刻の記載をＤＣサーバ１００と予め合意された所定の文字列に置換する。
【０１４４】
（Ｓ７３）ログ重複判定部２３３は、ステップＳ７２で計算したハッシュ値が、ハッシュ値リストに含まれる何れかのハッシュ値に一致するか否かを判定する。一致する場合、ステップＳ７４に処理が進む。一致しない場合、ステップＳ７６に処理が進む。
【０１４５】
（Ｓ７４）ログ重複判定部２３３は、変数部の識別子をキーとして、変数値を保存する。すなわち、ログ重複判定部２３３は、変数部ＤＢエントリＲ５を生成し、変数部ＤＢ２２４に格納する。
【０１４６】
（Ｓ７５）ログ重複判定部２３３は、一致したハッシュ値をＤＣサーバ１００に送信する。そして、ＥＣによる送信処理が終了する。
（Ｓ７６）ログ重複判定部２３３は、該当処理のログファイルをＤＣサーバ１００に送信する。そして、ＥＣによる送信処理が終了する。
【０１４７】
図２７は、ログ取得（重複排除）の例を示す図である。
ＥＣ２００ｂは、ログファイルＬ１３を保持している。この場合に、ＥＣ２００ｂは、ＤＣサーバ１００から、処理実行識別子（ｅｘｅｃ＿ｉｄ）「１」と、変数部識別情報ＤＢエントリＲ４１と、ハッシュ値（ｈａｓｈ）「ａｂ８０２ｄｃｆ３６」とを含むログ取得要求を受信する。なお、ハッシュ値は、変数部識別情報ＤＢエントリＲ４１に含まれる。
【０１４８】
ＥＣ２００ｂは、変数部識別情報ＤＢエントリＲ４１に基づいて、ログファイルＬ１３から変数部を抽出する。例えば、ＥＣ２００ｂは、１つ目の変数部として、変数部識別情報ＤＢエントリＲ４１のｖａｒ＿ｉｄ「１２３」に対応する、ログファイルＬ１３の３行目の「ｂａｒ」を抽出する。また、ＥＣ２００ｂは、２つ目の変数部として、変数部識別情報ＤＢエントリＲ４１のｖａｒ＿ｉｄ「４５６」に対応する、ログファイルＬ１３の４行目の「ｅｃ＿ｃ」を抽出する。
【０１４９】
ＥＣ２００ｂは、抽出した１つ目の変数部の値「ｂａｒ」をｖａｒ＿ｉｄ「１２３」に対応付け、抽出した２つ目の変数部の値「ｅｃ＿ｃ」をｖａｒ＿ｉｄ「４５６」に対応付けた変数部ＤＢエントリＲ５１を生成し、ＥＣ２００ｂの変数部ＤＢ２２４ｂに格納する。ＥＣ２００ｂは、ログファイルＬ１３の時刻部分を、「ｔｉｍｅｓｔａｍｐ」の文字列に置換し、１つ目の変数部を「１２３」に置換し、２つ目の変数部を「４５６」に置換し、置換後のログファイルのハッシュ値を計算する。計算されたハッシュ値は、「ａｂ８０２ｄｃｆ３６」であったとする。計算された当該ハッシュ値は、ＤＣサーバ１００から受信したハッシュ値「ａｂ８０２ｄｃｆ３６」に一致する。このため、ＥＣ２００ｂは、ハッシュ値「ａｂ８０２ｄｃｆ３６」をＤＣサーバ１００に送信する。
【０１５０】
ＤＣサーバ１００は、ＥＣ２００ｂからハッシュ値「ａｂ８０２ｄｃｆ３６」を受信する。すると、ＤＣサーバ１００は、変数部識別情報ＤＢエントリＲ４１に基づいて、ｖａｒ＿ｉｄ「１２３」および「４５６」で示される変数部の箇所以外のログファイルＬ１３の記述が、ログファイルＬ１１，Ｌ１２と共通であると判断する。
【０１５１】
なお、ＥＣ２００ｂで計算されたハッシュ値が、ＤＣサーバ１００から受信したハッシュ値と異なることもある。この場合、ＥＣ２００ｂは、ハッシュ値ではなく、保持するログファイルをＤＣサーバ１００に送信する。
【０１５２】
また、ＤＣサーバ１００は、今回抽出された各変数部を識別子で置換した場合のハッシュ値だけでなく、共通する可能性が高い部分を残した場合のハッシュ値もハッシュ値リストに含めて合わせて各ＥＣに送る。これにより、ＤＣサーバ１００は、ＥＣから応答されたハッシュ値によって、部分的に変数部を特定することもできる。その結果、変数部を別途収集するコストが省けると同時に、各エッジが応答したハッシュ値によってクラスタリングの精度が高まり、サンプリングが容易になる。ただし、ステップＳ６１において、ＤＣサーバ１００が、今回抽出された各変数部を識別子で置換した場合のハッシュ値のみをＥＣに送信することを妨げるものではない。すなわち、ＤＣサーバ１００は、ハッシュ値リストではなく、今回の置換に応じた単一のハッシュ値を送信してもよい。
【０１５３】
図２８は、クラスタ更新例を示すフローチャートである。
クラスタ更新の処理は、ステップＳ３３に相当する。
（Ｓ８０）ログ取得部１３２は、ログ取得（重複排除）時に記録したハッシュ値で同一の値を応答したＥＣをグループ化する。具体的には、ＥＣ毎応答記録情報Ｒ６に基づいて、同一のハッシュ値を応答したＥＣ群を特定し、グループ化することで、マッチ情報Ｒ７を生成する。
【０１５４】
（Ｓ８１）ログ取得部１３２は、グループ化したＥＣ同士の同ハッシュ応答カウントを更新する。すなわち、ログ取得部１３２は、マッチ情報Ｒ７に基づいて、同ハッシュ応答カウント情報Ｒ８を更新する。
【０１５５】
（Ｓ８２）ログ取得部１３２は、更新した同ハッシュ応答カウントに基づいてクラスタを更新する。すなわち、ログ取得部１３２は、同ハッシュ応答カウント情報Ｒ８に基づいて、同ハッシュ応答率が所定の閾値以上であるハッシュ値の組をクラスタとして、クラスタＤＢエントリＲ９に登録する。ステップＳ８２により、クラスタＤＢエントリＲ９に既存のクラスタがない場合、新たにクラスタが登録され、クラスタＤＢエントリＲ９に既存のクラスタがある場合、既存のクラスタが更新される。なお、ステップＳ８２における閾値は、記憶部１２０に予め設定される。当該閾値としては、例えば、７０％や８０％など運用に応じた値が設定される。
【０１５６】
図２９は、クラスタ更新の例を示す図である。
ＤＣサーバ１００は、ＥＣ毎応答記録情報Ｒ６１を保持しているとする。ＥＣ毎応答記録情報Ｒ６１は、ＥＣ識別子「ｅｃ＿ｃ」および「ｅｃ＿ｇ」に対して、ハッシュ値「ａｂ８０２ｄｃｆ３６」が記録されている。これは、ＥＣ識別子「ｅｃ＿ｃ」および「ｅｃ＿ｇ」に対応する２つのＥＣが同じハッシュ値を応答したことを示す。
【０１５７】
ＤＣサーバ１００は、ＥＣ毎応答記録情報Ｒ６１に基づいて、マッチ情報Ｒ７を生成し、マッチ情報Ｒ７に基づいて、同ハッシュ応答カウント情報Ｒ８１を生成する。同ハッシュ応答カウント情報Ｒ８１は、ＥＣ識別子「ｅｃ＿ｃ」および「ｅｃ＿ｇ」の組に対して、ｗｈｏｌｅ＿ｃｏｕｎｔ「１０」、ｓａｍｅ＿ｒａｔｉｏ「０．８」という情報を含む。これは、ＥＣ識別子「ｅｃ＿ｃ」および「ｅｃ＿ｇ」に対応する２つのＥＣが同じハッシュ値を応答した総数が１０回であり、当該２つのＥＣが同じハッシュ値を応答する確率が０．８＝８０％であることを示す。当該確率は、クラスタ化のための確率の閾値よりも大きいものとする。
【０１５８】
すると、ＤＣサーバ１００は、ＥＣ識別子「ｅｃ＿ｃ」および「ｅｃ＿ｇ」に対応する２つのＥＣをクラスタリングすることを示すクラスタＤＢエントリＲ９１を生成し、クラスタＤＢ１２５に格納する。クラスタＤＢエントリＲ９１の例では、ＥＣ識別子「ｅｃ＿ｃ」および「ｅｃ＿ｇ」に対応する２つのＥＣが、クラスタ識別子（ｃｌｕｓｔｅｒ＿ｉｄ）「００７」のクラスタに所属することを示す。
【０１５９】
このように、ＤＣサーバ１００は、変数部の抽出情報と変数部の識別子とハッシュ値とを２以上のＥＣに送信し、送信したハッシュ値を応答したＥＣの組み合わせ（すなわち、クラスタ）を、クラスタＤＢ１２５に記録する。ＤＣサーバ１００は、各ＥＣからログ取得（サンプリング）を行う際に、過去に共通のハッシュ値を応答したＥＣの組み合わせが複数記録されている場合、互いに異なる組み合わせに属するＥＣからログファイルを取得する。
【０１６０】
このように、ＤＣサーバ１００は、ＥＣをクラスタリングして、図２１のログ取得（サンプリング）を行うことで、少ないサンプリング数で比較的多くの変数部を抽出可能になる。このため、変数部の抽出のためのサンプリングの負荷を低減できる。また、ログ取得（重複排除）において、各ＥＣからハッシュ値が応答される可能性が高まり、ログファイル本体が応答される可能性が低くなる。このため、ログ取得に伴う通信負荷を一層低減できる。
【０１６１】
ＤＣサーバ１００は、ハッシュ値を応答したＥＣが保持するログファイルにおける変数部の値（変数値）を取得することができる。次に、ＤＣサーバ１００による変数値取得の手順を例示する。
【０１６２】
図３０は、変数値取得例を示すフローチャートである。
（Ｓ９０）ログ取得部１３２は、クライアント４００から変数値取得命令を受信する。
（Ｓ９１）ログ取得部１３２は、受信した変数値取得命令に基づき、取得対象ＥＣを特定する。取得対象ＥＣは、クライアント４００から指定された変数値を未取得であるＥＣである。ログ取得部１３２は、取得対象ＥＣに処理実行識別子、変数部識別子を引数として、変数値取得要求を送信する。
【０１６３】
（Ｓ９２）ＤＣサーバ１００により送信された変数値取得要求に応じてＥＣによる変数値送信が実行される。ＥＣによる変数値送信の処理の詳細は後述される。
（Ｓ９３）ログ取得部１３２は、変数値取得要求に応じた変数値を対象ＥＣから受信する。ログ取得部１３２は、受信した変数値に基づいて変数部ＤＢエントリＲ５を生成し、変数部ＤＢエントリＲ５を変数部ＤＢ１２４に格納する。ログ取得部１３２は、ＣＬ通信部１４０を介して、クライアント４００に、指定された変数部の変数値を送信する。
【０１６４】
図３１は、変数値送信例を示すフローチャートである。
変数値送信の処理は、ステップＳ９２に相当する。
（Ｓ１００）変数検索部２３４は、ＤＣサーバ１００から変数値取得要求を受信する。
【０１６５】
（Ｓ１０１）変数検索部２３４は、変数値取得要求に含まれる処理実行識別子および変数部識別子で示される変数部に対応する変数値を変数部ＤＢ２２４から取得する。変数検索部２３４は、取得した変数値をＤＣサーバ１００に送信する。
【０１６６】
図３２は、変数値取得の例を示す図である。
例えば、ＤＣサーバ１００は、処理実行識別子「００１」と、変数部識別子「１２３」、「４５６」とを引数とした変数値取得要求Ｒｑ１を、ＥＣ２００ｂに送信する。
【０１６７】
ＥＣ２００ｂは、変数値取得要求Ｒｑ１を受信すると、処理実行識別子「００１」と変数部識別子「１２３」をキーとして、変数部ＤＢ２２４ｂを検索し、当該キーに対応する変数値「ｂａｒ」を取得する。また、ＥＣ２００ｂは、処理実行識別子「００１」と変数部識別子「４５６」をキーとして、変数部ＤＢ２２４ｂを検索し、当該キーに対応する変数値「ｅｃ＿ｃ」を取得する。
【０１６８】
すると、例えば、ＥＣ２００ｂは、処理実行識別子「００１」、プログラム識別子「００１」、変数部識別子「１２３」に対する変数値「ｂａｒ」、変数部識別子「４５６」に対する変数値「ｅｃ＿ｃ」を含む応答Ｒｓ１を、ＤＣサーバ１００に送信する。
【０１６９】
こうして、ＤＣサーバ１００は、ログ取得段階でハッシュ値を応答したＥＣについても、事後的に、変数部の変数値を取得することができる。
ところで、ＤＣサーバ１００が多数のＥＣからログを収集する場合、収集方法によっては、ログ収集に伴う通信負荷が高まることがある。例えば、ＥＣ単位では生成されるログに重複した内容が少ないことがある。この場合、例えば、ログの送信前に各ＥＣで新規ログの内容のうち送信済の内容の重複部分を検出して重複排除を行っても、ＤＣサーバ１００によるログ収集の通信負荷の低減効果が小さい。すなわち、ログ収集に伴う通信負荷の主要因は、多数のＥＣからのログ本体の送信である。また、各ＥＣにおけるログのパターンは固定的ではなく、単純に辞書（ハッシュ値）を作れないこともある。データ処理プログラムのライフサイクルは短く、次々に新しいプログラムが作成・実行されるためである。
【０１７０】
これに対し、第２の実施の形態の情報処理システムによれば、変数部分のみが異なり主要なメッセージ部分（処理の起動や動作状況など）が共通するログファイルの収集を抑え、収集対象を主要なメッセージ部分が異なるログファイルに絞り込める。例えば、正常稼働しており、ログファイルの主要なメッセージが共通するＥＣについては、ログファイルそのものの取得を省略してハッシュ値のみの取得とし、正常時とは異なるエラーなどのメッセージを含むログファイルのみを取得対象にできる。ハッシュ値のサイズは、ログファイルのサイズよりも小さい。このため、ネットワーク６０に送信されるデータ量が低減される。また、各ＥＣによるデータ送信量やＤＣサーバ１００によるデータ受信量が低減される。こうして、ログ収集における通信負荷を低減できる。
【０１７１】
なお、ＤＣサーバ１００は、ハッシュ値を送信したＥＣについては、当該ＥＣが保持するログファイルについて変数部分のみが異なるだけで、それ以外の部分はサンプリング済の他のＥＣのログファイルと共通であると判断できる。
【０１７２】
また、ＤＣサーバ１００は、あるＥＣがハッシュ値を応答した場合に、当該ＥＣが生成したログファイルの変数部分の情報を取得することもできる。この場合も、当該ＥＣが保持するログファイルの全体をＤＣサーバ１００に送信するよりも小さいサイズのデータ送信で済み、通信負荷を低減できる。
【０１７３】
なお、第１の実施の形態の情報処理は、処理部１２にプログラムを実行させることで実現できる。また、第２の実施の形態の情報処理は、ＣＰＵ１０１にプログラムを実行させることで実現できる。プログラムは、コンピュータ読み取り可能な記録媒体１１３に記録できる。
【０１７４】
例えば、プログラムを記録した記録媒体１１３を配布することで、プログラムを流通させることができる。また、プログラムを他のコンピュータに格納しておき、ネットワーク経由でプログラムを配布してもよい。コンピュータは、例えば、記録媒体１１３に記録されたプログラムまたは他のコンピュータから受信したプログラムを、ＲＡＭ１０２やＨＤＤ１０３などの記憶装置に格納し（インストールし）、当該記憶装置からプログラムを読み込んで実行してもよい。
【０１７５】
以上の第１，第２の実施の形態を含む実施形態に関し、更に以下の付記を開示する。
（付記１）  ログ情報を生成する複数のログ取得対象装置のうち、所定数のログ取得対象装置の各々から前記ログ情報を取得し、取得した所定数の前記ログ情報の間の差分を変数部分として抽出し、抽出した前記変数部分を識別子に置換し、置換後のログ情報の第１のハッシュ値を計算し、前記ログ情報における前記変数部分の抽出に用いられる抽出情報と前記識別子と前記第１のハッシュ値とを、前記所定数のログ取得対象装置とは異なるログ取得対象装置に送信する情報処理装置と、
前記抽出情報と前記識別子と前記第１のハッシュ値とを受信し、生成した前記ログ情報から前記抽出情報に基づいて前記変数部分を抽出し、生成した前記ログ情報の前記変数部分を前記識別子に置換した置換後のログ情報の第２のハッシュ値を計算し、前記第２のハッシュ値が前記第１のハッシュ値と一致するか否かを判定し、一致する場合に、前記第１のハッシュ値を前記情報処理装置に送信し、一致しない場合に、生成した前記ログ情報を前記情報処理装置に送信するログ取得対象装置と、
を有する情報処理システム。
【０１７６】
（付記２）  前記情報処理装置は、前記第１のハッシュ値を応答済であって、前記ログ情報に含まれる前記変数部分の値を未取得である前記ログ取得対象装置に前記識別子を送信し、
前記ログ取得対象装置は、前記識別子を受信すると、生成した前記ログ情報のうち、前記識別子に対応する前記変数部分に記載された値を、前記情報処理装置に送信する、
付記１記載の情報処理システム。
【０１７７】
（付記３）  前記情報処理装置は、前記複数のログ取得対象装置に共通のプログラムを実行させ、
前記複数のログ取得対象装置それぞれは、共通のプログラムの実行に応じた前記ログ情報を生成する、
付記１または２記載の情報処理システム。
【０１７８】
（付記４）  前記情報処理装置は、前記抽出情報と前記識別子と前記第１のハッシュ値とを２以上のログ取得対象装置に送信し、前記第１のハッシュ値を応答した前記ログ取得対象装置の組み合わせを記録する、
付記１乃至３の何れか１つに記載の情報処理システム。
【０１７９】
（付記５）  前記情報処理装置は、前記所定数のログ取得対象装置の各々から前記ログ情報を取得する際に、過去に共通のハッシュ値を応答した前記ログ取得対象装置の前記組み合わせが複数記録されている場合、互いに異なる前記組み合わせに属する前記ログ取得対象装置から前記ログ情報を取得する、
付記４記載の情報処理システム。
【０１８０】
（付記６）  ログ取得対象装置から取得されたログ情報を記憶する記憶部と、
複数のログ取得対象装置のうち、所定数の第１のログ取得対象装置の各々から前記ログ情報を取得して前記記憶部に格納し、取得した所定数の前記ログ情報の間の差分を変数部分として抽出し、抽出した前記変数部分を識別子に置換し、置換後のログ情報の第１のハッシュ値を計算し、前記ログ情報における前記変数部分の抽出に用いられる抽出情報と前記識別子と前記第１のハッシュ値とを、前記第１のログ取得対象装置とは異なる第２のログ取得対象装置に送信し、前記送信の応答として前記第２のログ取得対象装置から前記第１のハッシュ値または前記ログ情報を受信する処理部と、
を有する情報処理装置。
【０１８１】
（付記７）  前記処理部は、前記第１のハッシュ値を応答済であって、前記ログ情報に含まれる前記変数部分の値を未取得である前記第２のログ取得対象装置に前記識別子を送信し、前記第２のログ取得対象装置で生成された前記ログ情報のうち、前記識別子に対応する前記変数部分に記載された値を、前記第２のログ取得対象装置から受信する、
付記６記載の情報処理装置。
【０１８２】
（付記８）  前記処理部は、前記複数のログ取得対象装置に共通のプログラムを実行させ、前記複数のログ取得対象装置それぞれにより、前記共通のプログラムの実行に応じた前記ログ情報を生成させる、
付記６または７記載の情報処理装置。
【０１８３】
（付記９）  前記処理部は、前記抽出情報と前記識別子と前記第１のハッシュ値とを２以上の前記第２のログ取得対象装置に送信し、前記第１のハッシュ値を応答した前記ログ取得対象装置の組み合わせを記録する、
付記６乃至８の何れか１つに記載の情報処理装置。
【０１８４】
（付記１０）  前記処理部は、前記所定数の前記第１のログ取得対象装置の各々から前記ログ情報を取得する際に、過去に共通のハッシュ値を応答した前記ログ取得対象装置の前記組み合わせが複数記録されている場合、互いに異なる前記組み合わせに属する前記ログ取得対象装置から前記ログ情報を取得する、
付記９記載の情報処理装置。
【０１８５】
（付記１１）  コンピュータに、
ログ情報を生成する複数のログ取得対象装置のうち、所定数の第１のログ取得対象装置の各々から前記ログ情報を取得し、
取得した所定数の前記ログ情報の間の差分を変数部分として抽出し、
抽出した前記変数部分を識別子に置換し、
置換後のログ情報の第１のハッシュ値を計算し、
前記ログ情報における前記変数部分の抽出に用いられる抽出情報と前記識別子と前記第１のハッシュ値とを、前記第１のログ取得対象装置とは異なる第２のログ取得対象装置に送信し、
前記送信の応答として前記第２のログ取得対象装置から前記第１のハッシュ値または前記ログ情報を受信する、
処理を実行させる情報処理プログラム。
【０１８６】
（付記１２）  前記コンピュータに、前記第１のハッシュ値を応答済であって、前記ログ情報に含まれる前記変数部分の値を未取得である前記ログ取得対象装置に前記識別子を送信し、
前記第２のログ取得対象装置で生成された前記ログ情報のうち、前記識別子に対応する前記変数部分に記載された値を、前記第２のログ取得対象装置から受信する、
処理を実行させる付記１１記載の情報処理プログラム。
【０１８７】
（付記１３）  前記コンピュータに、前記複数のログ取得対象装置に共通のプログラムを実行させ、前記複数のログ取得対象装置それぞれにより、前記共通のプログラムの実行に応じた前記ログ情報を生成させる、
処理を実行させる付記１１または１２記載の情報処理プログラム。
【０１８８】
（付記１４）  前記コンピュータに、前記抽出情報と前記識別子と前記第１のハッシュ値とを２以上の前記第２のログ取得対象装置に送信し、前記第１のハッシュ値を応答した前記ログ取得対象装置の組み合わせを記録する、
処理を実行させる付記１１乃至１３の何れか１つに記載の情報処理プログラム。
【０１８９】
（付記１５）  前記コンピュータに、前記所定数の前記第１のログ取得対象装置の各々から前記ログ情報を取得する際に、過去に共通のハッシュ値を応答した前記ログ取得対象装置の前記組み合わせが複数記録されている場合、互いに異なる前記組み合わせに属する前記ログ取得対象装置から前記ログ情報を取得する、
処理を実行させる付記１４記載の情報処理プログラム。
【０１９０】
（付記１６）  生成されたログ情報を記憶する記憶部と、
前記ログ情報における変数部分の抽出に用いられる抽出情報と前記変数部分の識別子と第１のハッシュ値とを他の情報処理装置から受信し、前記ログ情報から前記抽出情報に基づいて前記変数部分を抽出し、前記ログ情報の前記変数部分を前記識別子に置換した置換後のログ情報の第２のハッシュ値を計算し、前記第２のハッシュ値が前記第１のハッシュ値と一致するか否かを判定し、一致する場合に、前記第１のハッシュ値を前記情報処理装置に送信し、一致しない場合に、前記ログ情報を前記他の情報処理装置に送信する処理部と、
を有する情報処理装置。
【０１９１】
（付記１７）  コンピュータに、
前記コンピュータにより生成されたログ情報における変数部分の抽出に用いられる抽出情報と前記変数部分の識別子と第１のハッシュ値とを情報処理装置から受信し、
前記ログ情報から前記抽出情報に基づいて前記変数部分を抽出し、
前記ログ情報の前記変数部分を前記識別子に置換した置換後のログ情報の第２のハッシュ値を計算し、
前記第２のハッシュ値が前記第１のハッシュ値と一致するか否かを判定し、一致する場合に、前記第１のハッシュ値を前記情報処理装置に送信し、一致しない場合に、前記ログ情報を前記情報処理装置に送信する、
処理を実行させる情報処理プログラム。
【符号の説明】
【０１９２】
１  情報処理システム
１０  情報処理装置
１１  記憶部
１２  処理部
２０，３０，４０  ログ取得対象装置
５０  ネットワーク
Ｌ１，Ｌ２，Ｌ３  ログ情報
Ｌ４，Ｌ５  置換後のログ情報
【図１】
2020135701.tif 000003
【図２】
2020135701.tif 000004
【図３】
2020135701.tif 000005
【図４】
2020135701.tif 000006
【図５】
2020135701.tif 000007
【図６】
2020135701.tif 000008
【図７】
2020135701.tif 000009
【図８】
2020135701.tif 000010
【図９】
2020135701.tif 000011
【図１０】
2020135701.tif 000012
【図１１】
2020135701.tif 000013
【図１２】
2020135701.tif 000014
【図１３】
2020135701.tif 000015
【図１４】
2020135701.tif 000016
【図１５】
2020135701.tif 000017
【図１６】
2020135701.tif 000018
【図１７】
2020135701.tif 000019
【図１８】
2020135701.tif 000020
【図１９】
2020135701.tif 000021
【図２０】
2020135701.tif 000022
【図２１】
2020135701.tif 000023
【図２２】
2020135701.tif 000024
【図２３】
2020135701.tif 000025
【図２４】
2020135701.tif 000026
【図２５】
2020135701.tif 000027
【図２６】
2020135701.tif 000028
【図２７】
2020135701.tif 000029
【図２８】
2020135701.tif 000030
【図２９】
2020135701.tif 000031
【図３０】
2020135701.tif 000032
【図３１】
2020135701.tif 000033
【図３２】
2020135701.tif 000034