(57)【要約】      （修正有）【課題】順次到着するログに対して、オンラインでログを処理する技法を提供する。【解決手段】新しく入力されたログメッセージを以て、木構造からノードを探索し、所定以上の類似度のログメッセージをもつノードが見つかると、フォーマットを作成して、そのノードに格納する。調整フェーズに入り、作成したフォーマットとの類似フォーマットをフォーマット・テーブル中で探索し、類似度が所定の値以上であるなら、２つのフォーマットを統合した親フォーマットのノードを追加し、その下に、２つのフォーマットのノードがぶらさがる。木構造上での探索に戻って、目下のノードのメッセージと、新しく入力されたログメッセージの類似度が所定以下なら、そのノードの子ノードの数を調べ、それが所定の数以下なら新しく入力されたログメッセージをもつ子ノードが追加され、子ノードの数が所定の数に達していたなら、最も類似する子ノードを目下のノードに代入する。【選択図】図２
2014215883.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータの処理により、1つの行がフォーマットをあらわすシステムログを入力して、フォーマットを類別するための方法であって、
システムログの1つの行のメッセージNを読取るステップと、
各ノードがフォーマットを保持する木構造のルートノードNpを用意するステップと、
システムログの1つの行を読取り、前記Npのログと、読み取ったシステムログNのメッセージの類似度を計算し、類似度が所定の値より高ければ新しいフォーマットを作成し、それをNpに保持するステップと、
所定の条件に従い、NをNpの子ノードに追加するステップと、
前記新しいフォーマットの作成後、その新しいフォーマットと類似するフォーマットを、フォーマットを格納したテーブルから検索するステップと、
類似するフォーマットが見つかったら、フォーマットを統合することで、複数のフォーマットを統合する親フォーマットを作成するステップと、
前記フォーマットを前記テーブルに格納するステップを有する、
方法。
【請求項２】
前記所定の条件に従い、NをNpの子ノードに追加するステップが、
前記類似度が前記所定の値より低く、Npに既に子ノードが所定個数以上あれば、最も類似度の近い子ノードをNpに置き換えるステップと、
前記類似度が前記所定の値より低く、Npの子ノードが前記所定個数以下あれば、NをNpの子ノードに追加するステップを有する、
請求項１に記載の方法。
【請求項３】
前記メッセージの類似度を計算するステップは、記号及び空白により前記メッセージを複数のシーケンスに分割するステップと、分割したシーケンス毎に比較して類似しているほど高い点数を加算するステップと、加算値をシーケンス数で割るステップを含む、請求項１に記載の方法。
【請求項４】
前記比較されるシーケンスが異なる場合は、文字種別の出現回数から作成したベクトルで類似度を計算するステップをさらに有する、請求項３に記載の方法。
【請求項５】
前記フォーマットを格納したテーブルから検索するステップは、n-gramとして検索する、請求項１に記載の方法。
【請求項６】
前記親フォーマットを作成するステップが、フォーマットを、Shortest Edit Scriptに従い複数の編集要素に分割し、該複数の編集要素毎に処理する、請求項１に記載の方法。
【請求項７】
コンピュータの処理により、1つの行がフォーマットをあらわすシステムログを入力して、フォーマットを類別するためのプログラムであって、
前記コンピュータに、
システムログの1つの行のメッセージNを読取るステップと、
各ノードがフォーマットを保持する木構造のルートノードNpを用意するステップと、
システムログの1つの行を読取り、前記Npのログと、読み取ったシステムログNのメッセージの類似度を計算し、類似度が所定の値より高ければ新しいフォーマットを作成し、それをNpに保持するステップと、
所定の条件に従い、NをNpの子ノードに追加するステップと、
前記新しいフォーマットの作成後、その新しいフォーマットと類似するフォーマットを、フォーマットを格納したテーブルから検索するステップと、
類似するフォーマットが見つかったら、フォーマットを統合することで、複数のフォーマットを統合する親フォーマットを作成するステップと、
前記フォーマットを前記テーブルに格納するステップを実行させる、
プログラム。
【請求項８】
前記所定の条件に従い、NをNpの子ノードに追加するステップが、
前記類似度が前記所定の値より低く、Npに既に子ノードが所定個数以上あれば、最も類似度の近い子ノードをNpに置き換えるステップと、
前記類似度が前記所定の値より低く、Npの子ノードが前記所定個数以下あれば、NをNpの子ノードに追加するステップを有する、
請求項７に記載のプログラム。
【請求項９】
前記メッセージの類似度を計算するステップは、記号及び空白により前記メッセージを複数のシーケンスに分割するステップと、分割したシーケンス毎に比較して類似しているほど高い点数を加算するステップと、加算値をシーケンス数で割るステップを含む、請求項７に記載のプログラム。
【請求項１０】
前記比較されるシーケンスが異なる場合は、文字種別の出現回数から作成したベクトルで類似度を計算するステップをさらに有する、請求項９に記載のプログラム。
【請求項１１】
前記フォーマットを格納したテーブルから検索するステップは、n-gramとして検索する、請求項７に記載のプログラム。
【請求項１２】
前記親フォーマットを作成するステップが、フォーマットを、Shortest Edit Scriptに従い複数の編集要素に分割し、該複数の編集要素毎に処理する、請求項７に記載のプログラム。
【請求項１３】
コンピュータの処理により、1つの行がフォーマットをあらわすシステムログを入力して、フォーマットを類別するためのシステムであって、
システムログの1つの行のメッセージNを読取る手段と、
各ノードがフォーマットを保持する木構造のルートノードNpを用意する手段と、
システムログの1つの行を読取り、前記Npのログと、読み取ったシステムログNのメッセージの類似度を計算し、類似度が所定の値より高ければ新しいフォーマットを作成し、それをNpに保持する手段と、
前記類似度が前記所定の値より低く、Npに既に子ノードが所定個数以上あれば、最も類似度の近い子ノードをNpに置き換える手段と、
前記類似度が前記所定の値より低く、Npの子ノードが前記所定個数以下あれば、NをNpの子ノードに追加する手段と、
前記新しいフォーマットの作成後、その新しいフォーマットと類似するフォーマットを、フォーマットを格納したテーブルから検索する手段と、
類似するフォーマットが見つかったら、フォーマットを統合することで、複数のフォーマットを統合する親フォーマットを作成する手段と、
前記フォーマットを前記テーブルに格納する手段を有する、
システム。
【請求項１４】
前記メッセージの類似度を計算する手段は、記号及び空白により前記メッセージを複数のシーケンスに分割する機能と、分割したシーケンス毎に比較して類似しているほど高い点数を加算する機能と、加算値をシーケンス数で割る機能を含む、請求項１３に記載のシステム。
【請求項１５】
前記比較されるシーケンスが異なる場合は、文字種別の出現回数から作成したベクトルで類似度を計算する手段をさらに有する、請求項１４に記載のシステム。
【請求項１６】
前記フォーマットを格納したテーブルから検索する手段は、n-gramとして検索する、請求項１３に記載のシステム。
【請求項１７】
前記親フォーマットを作成する手段が、フォーマットを、Shortest Edit Scriptに従い複数の編集要素に分割し、該複数の編集要素毎に処理する、請求項１３に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、コンピュータ・システムによって生成されるシステム・ログを分類する技法に関するものである。
【背景技術】
【０００２】
コンピュータ・システムは、ときどきはトラブルや障害に見舞われることが避けられない。それは、ハードウェアの障害、ローカル・ネットワークの障害、インターネットの障害、ソフトウェアのバグ、データの破損などのさまざまな原因によるものがある。
【０００３】
このような障害が起きたとき、その原因を解析できるように、オペレーティング・システム、ミドルウェア、アプリケーション・プログラムなどの様々なレベルで、システム・ログを生成する手段が講じられる。
【０００４】
このようなシステム・ログは、一般的に次のような性質をもつ。
−  予めソフトウェア内部などで規定されているフォーマットに従い、出力されるメッセージを含む。
−  １つのメッセージは、文字を含む記号で構成されるシーケンスである。
−  メッセージは人間が可読であるものには限らないが、意味のある粒度で分解できる必要がある。
−  可読な文字列は、空白あるいは特殊な記号で分割されている。
【０００５】
さて、システムの障害時には、このような性質をもつシステム・ログが大量に生成されることがある。その際、これらのシステム・ログから状況を把握し、早期に問題を解決するためには、迅速に問題を特定する必要がある。
【０００６】
生成された文字列から意味を認識する技術として、テキスト・マイニングなどの自然言語解析的アプローチが既知であるが、システム・ログは機械的に生成されたものであるため、自然言語解析的アプローチは適用できない。
【０００７】
刻々生成されるシステム・ログをデータ・ストリームとみなしたとき、データ・ストリームのデータのクラスタリング技法として、特開２００５−１００３６３号公報、あるいは特開２００７−２７２８９２号公報に記載されたような技法が知られている。
【０００８】
特開２００５−１００３６３号公報は、最初に、データ・ストリームからオンライン統計を作成し、その後、オンライン統計のオフライン・プロセッシングを、オフライン・プロセッシングが必要であるか、あるいは望ましいときに行うことを開示する。
【０００９】
特開２００７−２７２８９２号公報は、クラスタリングシステムのクラスを特徴付ける語数、比率又は頻度を示す確率的モデルパラメータにより少なくとも部分的に定義される、確率的クラスタリングシステムのアップデート方法を記述する。
【００１０】
しかし、これらの技法は、システム・ログを処理するように適合されたものではない。
【００１１】
一方、システム・ログを処理するための技法を記述する論文として下記のものがある。
・R. Vaarandi, “A breadth-first algorithm for mining frequent patterns from event logs,” in In Proceedings of the 2004 IFIP International Conference on Intelligence in Communication Systems, 2004, pp. 293-308.
・A. A. Makanju, A. N. Zincir-Heywood, and E. E. Milios, “Clustering event logs using iterative partitioning,” in KDD ’09: Proceedings of the 15th ACM SIGKDD international conference on Knowledge discovery and data mining. New York, NY, USA: ACM, 2009, pp. 1255-1264.
・L. Tang, T. Li, and C. shing Perng, “Logsig: Generating system events from raw textual logs,” in in Proceedings of ACM CIKM, 2011.
・K. Q. Zhu, K. Fisher, and D. Walker, “Incremental learning of system log formats,” SIGOPS Oper. Syst. Rev., vol. 44, no. 1, pp. 85-90, Mar. 2010. [Online]. Available: http://doi.acm.org/10.1145/1740390.1740410
【００１２】
しかし、これらの論文に記述されている技法は、事前にある程度のヒントを入力する必要があったり、オフラインでの実行を想定しているため、順次到着するログに対して処理をするのに不向きであったり、データが少ない場合に十分な性能を発揮しないなどの問題があった。
【先行技術文献】
【特許文献】
【００１３】
【特許文献１】特開２００５−１００３６３号公報
【特許文献２】特開２００７−２７２８９２号公報
【非特許文献】
【００１４】
【非特許文献１】R. Vaarandi, “A breadth-first algorithm for mining frequent patterns from event logs,” in In Proceedings of the 2004 IFIP International Conference on Intelligence in Communication Systems, 2004, pp. 293-308.
【非特許文献２】A. A. Makanju, A. N. Zincir-Heywood, and E. E. Milios, “Clustering event logs using iterative partitioning,” in KDD ’09: Proceedings of the 15th ACM SIGKDD international conference on Knowledge discovery and data mining. New York, NY, USA: ACM, 2009, pp. 1255-1264.
【非特許文献３】L. Tang, T. Li, and C. shing Perng, “Logsig: Generating system events from raw textual logs,” in in Proceedings of ACM CIKM, 2011.
【非特許文献４】K. Q. Zhu, K. Fisher, and D. Walker, “Incremental learning of system log formats,” SIGOPS Oper. Syst. Rev., vol. 44, no. 1, pp. 85-90, Mar. 2010. [Online]. Available: http://doi.acm.org/10.1145/1740390.1740410
【発明の概要】
【発明が解決しようとする課題】
【００１５】
この発明の目的は、順次到着するログに対して、オンラインでログを処理することが可能な技法を提供することにある。
【００１６】
この発明の他の目的は、ログのデータが少ない場合にも有効に適用可能なログ処理技法を提供することにある。
【課題を解決するための手段】
【００１７】
この発明は、１つのログメッセージ（多くのシステムでは一行）を一つのノードとし、順次入力されるログメッセージから木構造を作りつつ、類似するフォーマットの探索、新しいフォーマットの作成、及びフォーマットの調整をすることによって、上記課題を解決する。
【００１８】
なお、この発明を通じて、フォーマットとは、固定部と可変部の組み合わせの情報のことをいう。例えば、Ｃ言語のコードで、printf("xxx %s yyy",param);というのがあった場合、これから出力される"xxx ppp yyy"の形式のうちの、xxx yyyが固定部、pppが可変部となる。
【００１９】
この発明に従うシステムは、新しく入力されたログメッセージを以て木構造からノードを探索する。そして、新しく入力されたログメッセージに対して所定以上の類似度のログメッセージをもつノードが見つかると、フォーマットを作成して、そのノードに格納する。
【００２０】
そして、調整フェーズに入り、作成したフォーマットとの類似フォーマットをフォーマット・テーブル中で探索して、見つかると、その見つかったフォーマットとの類似度計算を行い、類似度が所定の値以上であるなら、２つのフォーマットを統合した親フォーマットのノードを作成し、その親フォーマットのノードに、２つのフォーマットのノードがぶらさがることになる。
【００２１】
木構造上での探索に戻って、この発明の好適な一側面によれば、目下のノードのメッセージと、新しく入力されたログメッセージの類似度が所定以下なら、そのノードの子ノードの数を調べ、それが所定の数以下なら新しく入力されたログメッセージをもつ子ノードが追加され、子ノードの数が所定の数に達していたなら、最も類似する子ノードを目下のノードに代入する。
【発明の効果】
【００２２】
この発明によれば、ログメッセージの類似度は比較的厳密に、木構造上で行い、ログメッセージの数をnとすると、探索時間は平均O(log n)、最悪でもO(n)で、比較的短くて済む。この時間は、nが増えても探索時間は急激には増大しない。
【００２３】
一方、比較的時間のかかるフォーマットの調整処理は、メッセージの類似度が所定の値を超えた場合にのみ行われるので、全体のパフォーマンスをあまり低下させない。
【００２４】
このようにして、オンラインでログを処理することが可能な技法が提供される。
【図面の簡単な説明】
【００２５】
【図１】本発明を実施するための一例のハードウェアの構成を示すブロック図である。
【図２】本発明を実施するための一例の機能構成を示すブロック図である。
【図３】本発明の全体的な処理のフローチャートを示す図である。
【図４】探索フェーズで使う木構造の例を示すブロック図である。
【図５】メッセージの類似度計算処理のフローチャートを示す図である。
【図６】フォーマットの作成の処理のフローチャートを示す図である。
【図７】類似度の計算の例を示す図である。
【図８】類似フォーマット検索処理のフローチャートを示す図である。
【図９】フォーマット検索及び登録処理の例を示す図である。
【図１０】親フォーマット作成処理のフローチャートを示す図である。
【図１１】フォーマットの類似度計算処理の例を示す図である。
【図１２】２つのフォーマットから親フォーマットを結合する様子を示す図である。
【図１３】２つのフォーマットと親フォーマットの、木構造における関係を示す図である。
【発明を実施するための形態】
【００２６】
以下、図面に従って、本発明の実施例を説明する。これらの実施例は、本発明の好適な態様を説明するためのものであり、発明の範囲をここで示すものに限定する意図はないことを理解されたい。また、以下の図を通して、特に断わらない限り、同一符号は、同一の対象を指すものとする。
【００２７】
図１を参照すると、本発明の一実施例に係るシステム構成及び処理を実現するためのコンピュータ・ハードウェアのブロック図が示されている。図１において、システム・バス１０２には、ＣＰＵ１０４と、主記憶（ＲＡＭ）１０６と、ハードディスク・ドライブ（ＨＤＤ）１０８と、キーボード１１０と、マウス１１２と、ディスプレイ１１４が接続されている。ＣＰＵ１０４は、好適には、３２ビットまたは６４ビットのアーキテクチャに基づくものであり、例えば、インテル社のCore(商標) i3、Core(商標) i5、Core(商標) i7、Xeon(R)、AMD社のAthlon(商標)、Phenom(商標)、Sempron(商標)などを使用することができる。主記憶１０６は、好適には、８ＧＢ以上の容量、より好ましくは、１６ＧＢ以上の容量をもつものである。
【００２８】
ハードディスク・ドライブ１０８には、オペレーティング・システム（ＯＳ）が格納されている。オペレーティング・システムは、Linux（商標）、マイクロソフト社のWindows(商標) 7、Windows(商標)8などの、ＣＰＵ１０４に適合する任意のものでよい。
【００２９】
ハードディスク・ドライブ１０８にはまた、好適には、Apacheなどの、Ｗｅｂサーバとしてシステムを動作させるためのプログラムが保存されている。
【００３０】
ハードディスク・ドライブ１０８にはさらに、複数のミドルウェアやアプリケーション・プログラムが保存されている。
【００３１】
キーボード１１０及びマウス１１２は、オペレーティング・システムが提供するグラフィック・ユーザ・インターフェースに従い、ディスプレイ１１４に表示されたアイコン、タスクバー、テキストボックスなどのグラフィック・オブジェクトを操作するために使用される。
【００３２】
図１において示すハードウェア上で動作するシステムにおいて、オペレーティング・システム、ミドルウェア、アプリケーション・プログラムのうちの少なくとも１つが、システム・ログを生成する機能をもつ。
【００３３】
システム・ログは、これらには限定されないが、例えば下記のシステム障害に応じて生成される。
−  ハードウェアの障害
−  ローカル・ネットワーク、インターネットなどの通信関係の障害
−  ソフトウェアのバグ
−  一部または全体のデータの破損
【００３４】
このようなシステム・ログは、一般的に次のような性質をもつ。
−  予めソフトウェア内部などで規定されているフォーマットに従い、出力されるメッセージを含む。
−  １つのメッセージは、文字を含む記号で構成されるシーケンスである。
−  メッセージは人間が可読であるものには限らないが、意味のある粒度で分解できる必要がある。
−  可読な文字列は、空白あるいは特殊な記号で分割されている。
【００３５】
ハードディスク・ドライブ１０８にはさらに、図２に示す、本発明に係るログ解析プログラム２０６と、視覚化／異常検知／相関分析プログラム２１２が保存されており、ログ解析プログラムは、オペレーティング・システムの動作により、ハードディスク・ドライブ１０８から主記憶１０６にロードされ実行される。ログ解析プログラム及び視覚化／異常検知／相関分析プログラム２１２は、C、C++、C#、Java(R)などの既存の任意のプログラミング言語処理系により作成することができる。ログ解析プログラム２０６の詳細な機能については、図２の機能ブロック図を参照して、後で説明する。
【００３６】
次に、図２の機能ブロック図を参照して、本発明の処理プログラムの構成について説明する。図２において、監視対象のシステム２０２は、オペレーティング・システム、ミドルウェア、あるいはアプリケーション・プログラムなどであり、ログ生成機能２０４は、監視対象のシステム２０２の障害を検出して、ログ・メッセージを生成する。ログ生成機能２０４は、オペレーティング・システムあるいはミドルウェアの機能の一部であってもよい。
【００３７】
本発明に係るログ解析プログラム２０６は、ログ生成機能２０４が生成したログ・メッセージを受け取って、学習・パース・分類する。
【００３８】
ログ解析プログラム２０６は、メッセージ類似度計算機能と、フォーマット類似度計算機能と、フォーマット作成機能と、類似フォーマット検索＆登録機能をもち、これらの機能を使用して、受け取ったログ・メッセージから、図４に示すような木構造のデータ２０８を作成し、受け取ったログ・メッセージと木構造のノードのメッセージの類似度を計算し、その類似度が所定の閾値より小さいときは、新たなノードを追加し、その類似度が所定の閾値より大きいときは、フォーマット・テーブル２１０に保存されているフォーマットの類似度を比較して、フォーマットの類似度が所定の閾値より大きいときは、統合したフォーマットを作成して、親ノードを作成する。ログ解析プログラム２０６は、必要に応じて、ログ・メッセージをログ・データベース２１４として、ハードディスク・ドライブ１０８に書き出す。これらの処理の詳細は、図３以下のフローチャートを参照して、後でより詳細に説明する。
【００３９】
木構造のデータ２０８と、フォーマット・テーブル２１０は、主記憶１０６と、ハードディスク・ドライブ１０８のどちらに保存してもよいが、少なくとも木構造のデータ２０８は、処理の高速化のため、可能な限り主記憶１０６に置くのが望ましい。
【００４０】
視覚化／異常検知／相関分析プログラム２１２は、ログ解析プログラム２０６からの分析出力及びログ・データベース２１４のエントリを受け取って、ユーザーに表示するため視覚化し、既知の異常ログ・サンプルとの比較により異常検知するとともに、場合により、既知の異常ログ・サンプルとの相関分析を行うが、この機能は本発明の特徴とはあまり関係ないので、これ以上詳細には述べない。
【００４１】
次に、図３のフローチャートを参照して、ログ解析プログラム２０６の処理について説明する。図３において、ステップ３０２では、ログ解析プログラム２０６は、一行分のログメッセージを入力する。
【００４２】
次に、ステップ３０４で、ログ解析プログラム２０６は、メッセージのノード化、すなわち、ノードNを生成して、N.messageにメッセージを格納する。なお、以下では、N.messageを単にNと略記することがある。
【００４３】
次に、ステップ３０６で、ログ解析プログラム２０６は、Npに、木の根ノードを格納する。図４では、矢印４０２で示すのが、木の根ノードである。
【００４４】
次に、ステップ３０８で、ログ解析プログラム２０６は、NとNpの類似度を計算する。この類似度の計算は、図５のフローチャートを参照して後で説明する。
【００４５】
ステップ３０８で、計算した類似度が、ある閾値Tmより大きくないと判断されたなら、ステップ３１０に進み、Npの子ノードの数が、Cmaxと等しいかどうか判断する。ここでCmaxは、予め定めた2以上の整数であるが、経験則上、4から10の間で選択される。図４では例えば、ノード４０２に対して、ノード４０４及びノード４０６が子ノードである。
【００４６】
もしステップ３１０で、Npの子ノードの数が、Cmaxと等しくない、すなわちCmaxより少ないと判断すると、ログ解析プログラム２０６は、append(N)により、Npの子ノードとしてNを追加し、ステップ３１４で、ログメッセージのみ、視覚化／異常検知／相関分析プログラム２１２またはログ・データベース２１４に出力して、ステップ３０２に戻る。
【００４７】
もしステップ３１０で、Npの子ノードの数が、Cmaxと等しいと判断すると、ログ解析プログラム２０６は、ステップ３１６で、Nに最も類似した子ノードを選択し、その子ノードのメッセージをNpに格納して、ステップ３０８に戻る。なお、ここでの類似の判断は、ステップ３０８でのアルゴリズムと同様でよい。
【００４８】
戻って、ステップ３０８で、計算した類似度が、ある閾値Tm以上であると判断されたなら、ログ解析プログラム２０６は、ステップ３１８で、NpとNからフォーマットを生成して、Np.formatに格納する。この処理は、図６のフローチャートを参照して後で説明する。
【００４９】
ステップ３１８に続いて、ログ解析プログラム２０６は、ステップ３２０で、N.formatに、Np.formatを格納し、ステップ３２２で、N.formatとの類似フォーマットを、フォーマット・テーブル２１０で探索して、見つかったらそれをFとする。なお、ここでLnは、n-gramでの検索であることを示す。フォーマット・テーブル２１０の探索ステップは、図８のフローチャートを参照して後で説明する。
【００５０】
ステップ３２４では、ログ解析プログラム２０６は、フォーマット・テーブル２１０の検索結果が空であるかどうか判断する。この実施例では、最初はフォーマット・テーブル２１０は空なので、ここでの判断が肯定的になり、ログ解析プログラム２０６は、ステップ３２６でフォーマット・テーブル２１０にN.formatを登録し、ステップ３２８でフォーマット+ログメッセージを視覚化／異常検知／相関分析プログラム２１２またはログ・データベース２１４に出力して、ステップ３０２に戻る。
【００５１】
ステップ３２４で、フォーマット・テーブル２１０の検索結果が空でないと判断すると、ログ解析プログラム２０６は、ステップ３３０でFとN.formatの間のフォーマット類似度を計算し、その類似度が、所定の閾値Tfより大きくないなら、ステップ３２６でフォーマット・テーブル２１０にN.formatを登録し、ステップ３２８でフォーマット+ログメッセージを視覚化／異常検知／相関分析プログラム２１２またはログ・データベース２１４に出力して、ステップ３０２に戻る。なお、フォーマット類似度の計算処理は、図８のフローチャートを参照して後で説明する。
【００５２】
ステップ３３０でFとN.formatの間のフォーマット類似度がTfより大きいと判断されたなら、ログ解析プログラム２０６は、ステップ３３０で、FとN.formatから親フォーマットSFを作成し、ステップ３３４でその親フォーマットSFにFを子ノードとして追加し、ステップ３３６でその親フォーマットSFにN.formatを子ノードとして追加し、ステップ３２８に行く。なお、親フォーマット作成処理については、図１０のフローチャートを参照して後で説明する。例えば図４では、親フォーマットをもつノード４０８に、２つのノード４１２及び４１２が付加されるものとして示されている。
【００５３】
次に、図５のフローチャートと、図７の模式図を参照して、図３のフローチャートのステップ３０８で実行される、メッセージの類似度の計算処理について説明する。
【００５４】
図５のステップ５０２において、ログ解析プログラム２０６は、新規ノードNと、既存ノードNpを入力する。
【００５５】
ログ解析プログラム２０６は、ステップ５０４において、N.messageをシーケンス、すなわち、図７に示すように、メッセージをスペースや記号で、sshd [ 6486 ] : authentication ... のように複数のシーケンスに区切った形式に変換して、S1に代入する。
【００５６】
ログ解析プログラム２０６は、ステップ５０６において、Npがフォーマット(F)をもつなら、フォーマットを、そうでないならNp.messageをシーケンスに変換して、S2に代入する。フォーマットをS2に代入する場合、類似度計算のために、過去Np.formatでフォーマット化されたメッセージもシーケンス化する。
【００５７】
ステップ５０８において、ログ解析プログラム２０６は、len(S1)とlen(S2)が等しいかどうか判断する。ここでlen(S1)とlen(S2)はそれぞれ、シーケンスの数である。
【００５８】
そして、len(S1)とlen(S2)とが等しくないと判断されたなら、ステップ５１０で0を返して、メッセージ類似度計算機能のルーチンを終了する。
【００５９】
ステップ５０８において、len(S1)とlen(S2)とが等しいと判断したなら、ログ解析プログラム２０６は、ステップ５１２で、r = 0として、ステップ５１４に進む。
【００６０】
ステップ５１４からステップ５１８までは、Ｃ言語の記法に従うと、for ( n = 0; n < len(S1); n++ ) { r += 類似度(S1[n],S2[n]); } である。ここで、S1[n]とは、S1[0]をS1の先頭のシーケンスとして、先頭からn + 1番目のシーケンスである。
【００６１】
類似度(S1[n],S2[n])の計算方法は、様々な方法が考えられるが、１つの実施例では、次のようにする。
int s1[4],s2[4]; // 配列を宣言
int L;           // 文字列の長さ
char c;
int i,t;
s1[0] = s1[1] = s1[2] = s1[3] = 0; // 初期化
s2[0] = s2[1] = s2[2] = s2[3] = 0; // 初期化
// S1[n]についての計算
for ( i = 0; i < ( L = strlen(S1[n])); i++ )  {  //Lは、S1[n]の長さ
c = S1[n][i];
if (  c >= 'a' && c <= 'z' ) s1[0]++;
else if ( c >= 'A' && c <= 'Z' ) s1[1]++;
else if ( c >= '0' && c <= '9' ) s1[2]++;
else                             s1[3]++;
}
for ( i = 0; i < 4; i++ )
s1[i] = s1[i]/L;  // これにより、0 <= s1[i] <= 1
// S2[n]についての計算
for ( i = 0; i < ( L = strlen(S2[n])); i++ )  {  //Lは、S2[n]の長さ
c = S2[n][i];
if (  c >= 'a' && c <= 'z' ) s2[0]++;
else if ( c >= 'A' && c <= 'Z' ) s2[1]++;
else if ( c >= '0' && c <= '9' ) s2[2]++;
else                             s2[3]++;
}
for ( i = 0; i < 4; i++ )
s2[i] = s2[i]/L; // これにより、0 <= s2[i] <= 1
for ( i = 0, t = 0; i < 4; i++ )
t += (s1[i] - s2[i])*(s1[i] - s2[i]); // 結果的に0 <= t <= 4
r = sqrt((double) t); // 結果的に0 <= r <= 2
そこで、類似度(S1[n],S2[n])がr/2を返すと定義すると、
0 <= 類似度(S1[n],S2[n]) <= 1
ステップ５１６では、このようにして計算される類似度(S1[n],S2[n])を、rに累加していく。
【００６２】
そして、ステップ５２０で、r/len(S1)を最終的に類似度として返す。
【００６３】
次に、図６のフローチャートを参照して、フォーマット作成処理について説明する。
図６のステップ６０２では、ログ解析プログラム２０６は、シーケンス１としてS1を入力し、シーケンス２としてS2を入力する。
【００６４】
ステップ６０４では、ログ解析プログラム２０６は、初期化した配列Fを用意する。
【００６５】
次のステップ６０６からステップ６１８までは、Ｃ言語の記法に従うと、for ( n = 0; n < len(S1); n++ ) { ... }のループである。
【００６６】
ループ内のステップ６０８でログ解析プログラム２０６は、S1[n] == S2[n]かどうかを判断し、もしそうなら、シーケンスが一致するので、ステップ６１０で、F[n] ← S1[n]と代入する。
【００６７】
S1[n] == S2[n]でないなら、ログ解析プログラム２０６は、ステップ６１２で、pを初期化し、pをパラメータ・オブジェクトとし、ステップ６１４では、p.add(S1[n])とp.add(S2[n])を実行する。ここで、pは過去にパラメータとして入力されたシーケンスすべてを結合したものであり、p.add(S1[n])はpにS1[n]を追加し、p.add(S2[n])はpにS2[n]を追加する。
【００６８】
そして、ログ解析プログラム２０６は、ステップ６１６で、F[n] ← pと代入する。このようなシーケンスの追加の結果、pは長い文字列となるが、図５のステップ５１６に関して上記で説明した文字種計算のアルゴリズムによれば、長さの異なる文字列どうしでも、類似度が計算できる。このようなpに対応する箇所は可変部と呼ばれ、図７では便宜上、"???"と示されている。
【００６９】
for ( n = 0; n < len(S1); n++ ) に従い、ステップ６０６からステップ６１８までをnについて完了すると、ステップ６２０でFを返して終了する。この処理は、図７では、マージしてF1を生成することに対応する。
【００７０】
次に、図８のフローチャートを参照して、図３におけるステップ３２２の類似フォーマット検索処理について説明する。
【００７１】
図８のステップ８０２で、ログ解析プログラム２０６は、フォーマットFを入力する。次のステップ８０４で、ログ解析プログラム２０６は、Fからn-gramを作成して、Gに格納する。すなわち、Gは、Fのn-gramの配列、あるいは集合である。これは、図９の参照番号９０２で示す箇所に対応する。
【００７２】
ステップ８０６で、ログ解析プログラム２０６は、配列Rを0で初期化する。
【００７３】
ステップ８０８からステップ８１４までは、Gの要素であるg各々についての処理である。ステップ８１０で、ログ解析プログラム２０６は、Gから取り出したgを以て、フォーマット・テーブル２１０を検索し、gを含むフォーマットF'が見つかると、ペア(F',g)を集合GFに格納する。これは、図９の参照番号９０４で示す箇所に対応する。
【００７４】
ステップ８１２では、ログ解析プログラム２０６は、R[F']に1を加える。すなわち、Rは(F',r)という要素をもち、ここでr = R[F']とおく。
【００７５】
こうして、Gの全てのgを尽くしてステップ８０８からステップ８１４までのループが完了すると、ログ解析プログラム２０６は、ステップ８１６からステップ８２２までのループに進む。
【００７６】
ステップ８１６からステップ８２２までのループは、Rの各要素(F',r)についての処理である。
【００７７】
ステップ８１８では、 ログ解析プログラム２０６は、r * 2 / (len(F) + len(F'))  > Tfかどうかを判断する。Tfは所定の閾値である。その判断が否定的なら単に次の要素(F',r)に進み、その判断が肯定的なら、親フォーマットSFを作成するために、図１０のフローチャートの処理を呼び出して、次の要素(F',r)に進む。
【００７８】
こうして、ステップ８１６からステップ８２２までのループが完了すると処理は終わる。なお、図９の参照番号９０４で示す箇所は、図３のフローチャートのステップ３３０に対応する。また、図９の参照番号９０６で示す箇所は、図３のフローチャートのステップ３３６に相当する。
【００７９】
次に、図１０のフローチャートを参照して、親フォーマットSFを作成するための処理について説明する。
【００８０】
図１０のステップ１００２において、ログ解析プログラム２０６は、フォーマットF1及びF2を入力する。図１１には、フォーマットF1及びF2の例が示されている。
【００８１】
ステップ１００４で、ログ解析プログラム２０６は、既にF1、F2が親フォーマットをもっていたら、それをF1、F2に置き換える。
【００８２】
ステップ１００６で、ログ解析プログラム２０６は、E = SES(F1,F2)で最長マッチEをとる。ここで、SESとは、Shortest Edit Scriptのことである。ここで、SESの代わりにLCS、すなわちLongest Common Subsequenceを用いてもよい。E = SES(F1,F2)はより詳細には、図１１に示すように、フォーマットの類似度を計算する処理を含む。ここでは、図５のフローチャートに関連して説明した類似度計算処理が実行される。
【００８３】
ここで、Eは編集情報e1,e2,...,eiのリストである。e.editはシーケンスの操作としてmatch, replace, insertのどれかを含む。e.target1は対象となるF1[n1]、e.target2は対象となるF2[n2]をそれぞれ属性としてもつ。
【００８４】
e.editがinsertのときは、e.target1とe.target2のどちらかがnullである。また、len(E) <= max(len(F1),len(F2))が成り立つ。
【００８５】
図１０に戻って、ステップ１００８で、ログ解析プログラム２０６は、親フォーマットSFを初期化し、次のステップ１０１０で、n = 0とおく。
【００８６】
次のステップ１０１２からステップ１０３２までは、Eの各要素eについてのループである。
【００８７】
ステップ１０１４でログ解析プログラム２０６は、e.editがmatchかどうか判断し、もしそうなら、ステップ１０１６でSF[n] ← e.target1として、ステップ１０３０でnを1だけ増やして、次のループに進む。
【００８８】
ステップ１０１４でe.editがmatchでないなら、ログ解析プログラム２０６は、ステップ１０１８でパラメータ・オブジェクトpを初期化し、ステップ１０２０でp.add(e.target1)、p.add(e.target2)を実行する。これらの処理は、図６のフローチャートのステップ６１２及び６１４で示した処理と同様である。p.add(t)は、tがnullなら無視する。ここで、e.target1及びe.target2は、自分がどのpに属しているか知っており、元のフォーマットではパラメータと判断されなくても、親フォーマットを参照することで、パラメータと判断できるようになる。
【００８９】
ステップ１０２２で、ログ解析プログラム２０６は、e.editがinsertかどうか判断し、もしそうなら、ステップ１０２４でp.ranged = yesとし、ステップ１０２８でSF[n] ← pとし、ステップ１０３０でnを1だけ増やして、次のループに進む。このとき、p.ranged = yesとするということは、可変長のパラメータであるということを示し、分析時に役に立てることができる。
【００９０】
ステップ１０２２で、ログ解析プログラム２０６がe.editがinsertでないと判断すると、ステップ１０２４でp.ranged = noとし、ステップ１０２８でSF[n] ← pとし、ステップ１０３０でnを1だけ増やして、次のループに進む。
【００９１】
こうして、ステップ１０１２からステップ１０３２までを、Eの各要素eについて終了すると、ログ解析プログラム２０６は、SFを返して、図１０のフローチャートで示す処理を終了する。
【００９２】
図１２は、図１０のフローチャートで示す処理の実例を示す図である。図示されているように、F1とF2から、Faを生成する。このFaが、図１０のフローチャートにおけるSFである。結果的に、図１３に示すように、木構造上で、FaがF1とF2の両方の親フォーマットとなる。
【００９３】
なお、参考までに、本発明に従うシステムによって生成されるログ分類結果の例を示す。下記のログで、*が可変部を意味する。
1 nsl sshd [ * ] : Connection closed by *
2 nsl sshd [ * ] : Generating * 768 bit RSA key.
3 nsl xinetd [ * ] : START : * pid = * from = *
4 nsl sshd [ * ] : Did not receive indentification string from *
5 nsl sshd [ * ] : fatal : Timeout before authentication for *
6 nsl sshd [ * ] : input_userauth_request : illegal user *
7 nsl sshd [ * ] : Failed password for * from * port * ssh2
8 nsl sshd [ * ] : Received disconnect from * : 11 : Bye bye
9 nsl sshd [ * ] : Accepted password for test from * port *
10 nsl xinnetd [ * ] : EXIT : ftp pid = * duration = * ( sec )
... ...
【００９４】
以上、この発明を特定の実施例に従い説明してきたが、この発明は、特定のハードウェア、ソフトウェア、プラットフォームに拘わらず、任意のソフトウェア／ハードウェア構成で利用可能であることを理解されたい。
【００９５】
また、この発明は、オンライン的なシステム・ログ解析に特に有効であるが、用途はそれには限定されず、バッチ的な処理にも適用可能である。さらに、この発明が最大限に効果を発揮するのは障害時であるが、平常時に出力されるログを分類し、フォーマットを推定することにも利用できる。平常時はログのフォーマットを定義する余裕があるので障害時ほど効果は最大化されないが、ワンタイムのフォーマット定義のための省力化、および継続的なメンテナンスの省力化も可能である。
【符号の説明】
【００９６】
１０４    ＣＰＵ
１０６    ＲＡＭ
１０８    ハードディスク・ドライブ
２０６    ログ解析プログラム
２０８    木構造
２１０    フォーマット・テーブル
【図１】
2014215883.tif 000003
【図２】
2014215883.tif 000004
【図３】
2014215883.tif 000005
【図４】
2014215883.tif 000006
【図５】
2014215883.tif 000007
【図６】
2014215883.tif 000008
【図７】
2014215883.tif 000009
【図８】
2014215883.tif 000010
【図９】
2014215883.tif 000011
【図１０】
2014215883.tif 000012
【図１１】
2014215883.tif 000013
【図１２】
2014215883.tif 000014
【図１３】
2014215883.tif 000015