特許第5946423号(P5946423)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ インターナショナル・ビジネス・マシーンズ・コーポレーションの特許一覧

特許5946423システム・ログの分類方法、プログラム及びシステム
<>
  • 特許5946423-システム・ログの分類方法、プログラム及びシステム 図000002
  • 特許5946423-システム・ログの分類方法、プログラム及びシステム 図000003
  • 特許5946423-システム・ログの分類方法、プログラム及びシステム 図000004
  • 特許5946423-システム・ログの分類方法、プログラム及びシステム 図000005
  • 特許5946423-システム・ログの分類方法、プログラム及びシステム 図000006
  • 特許5946423-システム・ログの分類方法、プログラム及びシステム 図000007
  • 特許5946423-システム・ログの分類方法、プログラム及びシステム 図000008
  • 特許5946423-システム・ログの分類方法、プログラム及びシステム 図000009
  • 特許5946423-システム・ログの分類方法、プログラム及びシステム 図000010
  • 特許5946423-システム・ログの分類方法、プログラム及びシステム 図000011
  • 特許5946423-システム・ログの分類方法、プログラム及びシステム 図000012
  • 特許5946423-システム・ログの分類方法、プログラム及びシステム 図000013
  • 特許5946423-システム・ログの分類方法、プログラム及びシステム 図000014
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】5946423
(24)【登録日】2016年6月10日
(45)【発行日】2016年7月6日
(54)【発明の名称】システム・ログの分類方法、プログラム及びシステム
(51)【国際特許分類】
   G06F 17/30 20060101AFI20160623BHJP
【FI】
   G06F17/30 210D
   G06F17/30 414A
【請求項の数】17
【全頁数】18
(21)【出願番号】特願2013-93930(P2013-93930)
(22)【出願日】2013年4月26日
(65)【公開番号】特開2014-215883(P2014-215883A)
(43)【公開日】2014年11月17日
【審査請求日】2015年11月27日
【早期審査対象出願】
(73)【特許権者】
【識別番号】390009531
【氏名又は名称】インターナショナル・ビジネス・マシーンズ・コーポレーション
【氏名又は名称原語表記】INTERNATIONAL BUSINESS MACHINES CORPORATION
(74)【代理人】
【識別番号】100108501
【弁理士】
【氏名又は名称】上野 剛史
(74)【代理人】
【識別番号】100112690
【弁理士】
【氏名又は名称】太佐 種一
(72)【発明者】
【氏名】水谷 正慶
【審査官】 田中 秀樹
(56)【参考文献】
【文献】 特開2007−272892(JP,A)
【文献】 特開2005−100363(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 17/30
(57)【特許請求の範囲】
【請求項1】
コンピュータの処理により、1つの行がフォーマットをあらわすシステムログを入力して、フォーマットを類別するための方法であって、
システムログの1つの行のメッセーを読取るステップと、
各ノードがフォーマットを保持する木構造のルートノードのログと、読み取った前記メッセージの類似度を計算し、類似度が所定の値より高ければ新しいフォーマットを作成し、それを前記ルートノードに保持するステップと、
所定の条件に従い、前記メッセージ前記ルートノードの子ノードとして追加するステップと、
前記新しいフォーマットの作成後、その新しいフォーマットと類似するフォーマットを、フォーマットを格納したテーブルから検索するステップと、
類似するフォーマットが見つかったら、フォーマットを統合することで、複数のフォーマットを統合する親フォーマットを作成するステップと、
前記フォーマットを前記テーブルに格納するステップを有する、
方法。
【請求項2】
前記所定の条件に従い、前記メッセージ前記ルートノードの子ノードとして追加するステップが、
前記類似度が前記所定の値より低く、前記ルートノードに既に子ノードが所定個数以上あれば、最も類似度の近い子ノードを前記ルートノードに置き換えるステップと、
前記類似度が前記所定の値より低く、前記ルートノードの子ノードが前記所定個数以下あれば、前記メッセージ前記ルートノードの子ノードとして追加するステップを有する、
請求項1に記載の方法。
【請求項3】
前記メッセージの類似度を計算するステップは、記号及び空白により前記メッセージを複数のシーケンスに分割するステップと、分割したシーケンス毎に比較して類似しているほど高い点数を加算するステップと、加算値をシーケンス数で割るステップを含む、請求項1に記載の方法。
【請求項4】
前記比較されるシーケンスが異なる場合は、文字種別の出現回数から作成したベクトルで類似度を計算するステップをさらに有する、請求項3に記載の方法。
【請求項5】
前記フォーマットを格納したテーブルから検索するステップは、n-gramとして検索する、請求項1に記載の方法。
【請求項6】
前記親フォーマットを作成するステップが、フォーマットを、Shortest Edit Scriptに従い複数の編集要素に分割し、該複数の編集要素毎に処理する、請求項1に記載の方法。
【請求項7】
コンピュータの処理により、1つの行がフォーマットをあらわすシステムログを入力して、フォーマットを類別するためのプログラムであって、
前記コンピュータに、
システムログの1つの行のメッセーを読取るステップと、
各ノードがフォーマットを保持する木構造のルートノードのログと、読み取った前記メッセージの類似度を計算し、類似度が所定の値より高ければ新しいフォーマットを作成し、それを前記ルートノードに保持するステップと、
所定の条件に従い、前記メッセージ前記ルートノードの子ノードとして追加するステップと、
前記新しいフォーマットの作成後、その新しいフォーマットと類似するフォーマットを、フォーマットを格納したテーブルから検索するステップと、
類似するフォーマットが見つかったら、フォーマットを統合することで、複数のフォーマットを統合する親フォーマットを作成するステップと、
前記フォーマットを前記テーブルに格納するステップを実行させる、
プログラム。
【請求項8】
前記所定の条件に従い、前記メッセージ前記ルートノードの子ノードとして追加するステップが、
前記類似度が前記所定の値より低く、前記ルートノードに既に子ノードが所定個数以上あれば、最も類似度の近い子ノードを前記ルートノードに置き換えるステップと、
前記類似度が前記所定の値より低く、前記ルートノードの子ノードが前記所定個数以下あれば、前記メッセージ前記ルートノードの子ノードとして追加するステップを有する、
請求項7に記載のプログラム。
【請求項9】
前記メッセージの類似度を計算するステップは、記号及び空白により前記メッセージを複数のシーケンスに分割するステップと、分割したシーケンス毎に比較して類似しているほど高い点数を加算するステップと、加算値をシーケンス数で割るステップを含む、請求項7に記載のプログラム。
【請求項10】
前記比較されるシーケンスが異なる場合は、文字種別の出現回数から作成したベクトルで類似度を計算するステップをさらに有する、請求項9に記載のプログラム。
【請求項11】
前記フォーマットを格納したテーブルから検索するステップは、n-gramとして検索する、請求項7に記載のプログラム。
【請求項12】
前記親フォーマットを作成するステップが、フォーマットを、Shortest Edit Scriptに従い複数の編集要素に分割し、該複数の編集要素毎に処理する、請求項7に記載のプログラム。
【請求項13】
コンピュータの処理により、1つの行がフォーマットをあらわすシステムログを入力し
て、フォーマットを類別するためのシステムであって、
システムログの1つの行のメッセーを読取る手段と、
各ノードがフォーマットを保持する木構造のルートノードのログと、読み取った前記メッセージの類似度を計算し、類似度が所定の値より高ければ新しいフォーマットを作成し、それを前記ルートノードに保持する手段と、
前記類似度が前記所定の値より低く、前記ルートノードに既に子ノードが所定個数以上あれば、最も類似度の近い子ノードを前記ルートノードに置き換える手段と、
前記類似度が前記所定の値より低く、前記ルートノードの子ノードが前記所定個数以下あれば、前記メッセージ前記ルートノードの子ノードとして追加する手段と、
前記新しいフォーマットの作成後、その新しいフォーマットと類似するフォーマットを、フォーマットを格納したテーブルから検索する手段と、
類似するフォーマットが見つかったら、フォーマットを統合することで、複数のフォーマットを統合する親フォーマットを作成する手段と、
前記フォーマットを前記テーブルに格納する手段を有する、
システム。
【請求項14】
前記メッセージの類似度を計算する手段は、記号及び空白により前記メッセージを複数のシーケンスに分割する機能と、分割したシーケンス毎に比較して類似しているほど高い点数を加算する機能と、加算値をシーケンス数で割る機能を含む、請求項13に記載のシステム。
【請求項15】
前記比較されるシーケンスが異なる場合は、文字種別の出現回数から作成したベクトルで類似度を計算する手段をさらに有する、請求項14に記載のシステム。
【請求項16】
前記フォーマットを格納したテーブルから検索する手段は、n-gramとして検索する、請求項13に記載のシステム。
【請求項17】
前記親フォーマットを作成する手段が、フォーマットを、Shortest Edit Scriptに従い複数の編集要素に分割し、該複数の編集要素毎に処理する、請求項13に記載のシステム。
【発明の詳細な説明】
【技術分野】
【0001】
この発明は、コンピュータ・システムによって生成されるシステム・ログを分類する技法に関するものである。
【背景技術】
【0002】
コンピュータ・システムは、ときどきはトラブルや障害に見舞われることが避けられない。それは、ハードウェアの障害、ローカル・ネットワークの障害、インターネットの障害、ソフトウェアのバグ、データの破損などのさまざまな原因によるものがある。
【0003】
このような障害が起きたとき、その原因を解析できるように、オペレーティング・システム、ミドルウェア、アプリケーション・プログラムなどの様々なレベルで、システム・ログを生成する手段が講じられる。
【0004】
このようなシステム・ログは、一般的に次のような性質をもつ。
− 予めソフトウェア内部などで規定されているフォーマットに従い、出力されるメッセージを含む。
− 1つのメッセージは、文字を含む記号で構成されるシーケンスである。
− メッセージは人間が可読であるものには限らないが、意味のある粒度で分解できる必要がある。
− 可読な文字列は、空白あるいは特殊な記号で分割されている。
【0005】
さて、システムの障害時には、このような性質をもつシステム・ログが大量に生成されることがある。その際、これらのシステム・ログから状況を把握し、早期に問題を解決するためには、迅速に問題を特定する必要がある。
【0006】
生成された文字列から意味を認識する技術として、テキスト・マイニングなどの自然言語解析的アプローチが既知であるが、システム・ログは機械的に生成されたものであるため、自然言語解析的アプローチは適用できない。
【0007】
刻々生成されるシステム・ログをデータ・ストリームとみなしたとき、データ・ストリームのデータのクラスタリング技法として、特開2005−100363号公報、あるいは特開2007−272892号公報に記載されたような技法が知られている。
【0008】
特開2005−100363号公報は、最初に、データ・ストリームからオンライン統計を作成し、その後、オンライン統計のオフライン・プロセッシングを、オフライン・プロセッシングが必要であるか、あるいは望ましいときに行うことを開示する。
【0009】
特開2007−272892号公報は、クラスタリングシステムのクラスを特徴付ける語数、比率又は頻度を示す確率的モデルパラメータにより少なくとも部分的に定義される、確率的クラスタリングシステムのアップデート方法を記述する。
【0010】
しかし、これらの技法は、システム・ログを処理するように適合されたものではない。
【0011】
一方、システム・ログを処理するための技法を記述する論文として下記のものがある。
・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
【0012】
しかし、これらの論文に記述されている技法は、事前にある程度のヒントを入力する必要があったり、オフラインでの実行を想定しているため、順次到着するログに対して処理をするのに不向きであったり、データが少ない場合に十分な性能を発揮しないなどの問題があった。
【先行技術文献】
【特許文献】
【0013】
【特許文献1】特開2005−100363号公報
【特許文献2】特開2007−272892号公報
【非特許文献】
【0014】
【非特許文献1】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.
【非特許文献2】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.
【非特許文献3】L. Tang, T. Li, and C. shing Perng, “Logsig: Generating system events from raw textual logs,” in in Proceedings of ACM CIKM, 2011.
【非特許文献4】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
【発明の概要】
【発明が解決しようとする課題】
【0015】
この発明の目的は、順次到着するログに対して、オンラインでログを処理することが可能な技法を提供することにある。
【0016】
この発明の他の目的は、ログのデータが少ない場合にも有効に適用可能なログ処理技法を提供することにある。
【課題を解決するための手段】
【0017】
この発明は、1つのログメッセージ(多くのシステムでは一行)を一つのノードとし、順次入力されるログメッセージから木構造を作りつつ、類似するフォーマットの探索、新しいフォーマットの作成、及びフォーマットの調整をすることによって、上記課題を解決する。
【0018】
なお、この発明を通じて、フォーマットとは、固定部と可変部の組み合わせの情報のことをいう。例えば、C言語のコードで、printf("xxx %s yyy",param);というのがあった場合、これから出力される"xxx ppp yyy"の形式のうちの、xxx yyyが固定部、pppが可変部となる。
【0019】
この発明に従うシステムは、新しく入力されたログメッセージを以て木構造からノードを探索する。そして、新しく入力されたログメッセージに対して所定以上の類似度のログメッセージをもつノードが見つかると、フォーマットを作成して、そのノードに格納する。
【0020】
そして、調整フェーズに入り、作成したフォーマットとの類似フォーマットをフォーマット・テーブル中で探索して、見つかると、その見つかったフォーマットとの類似度計算を行い、類似度が所定の値以上であるなら、2つのフォーマットを統合した親フォーマットのノードを作成し、その親フォーマットのノードに、2つのフォーマットのノードがぶらさがることになる。
【0021】
木構造上での探索に戻って、この発明の好適な一側面によれば、目下のノードのメッセージと、新しく入力されたログメッセージの類似度が所定以下なら、そのノードの子ノードの数を調べ、それが所定の数以下なら新しく入力されたログメッセージをもつ子ノードが追加され、子ノードの数が所定の数に達していたなら、最も類似する子ノードを目下のノードに代入する。
【発明の効果】
【0022】
この発明によれば、ログメッセージの類似度は比較的厳密に、木構造上で行い、ログメッセージの数をnとすると、探索時間は平均O(log n)、最悪でもO(n)で、比較的短くて済む。この時間は、nが増えても探索時間は急激には増大しない。
【0023】
一方、比較的時間のかかるフォーマットの調整処理は、メッセージの類似度が所定の値を超えた場合にのみ行われるので、全体のパフォーマンスをあまり低下させない。
【0024】
このようにして、オンラインでログを処理することが可能な技法が提供される。
【図面の簡単な説明】
【0025】
図1】本発明を実施するための一例のハードウェアの構成を示すブロック図である。
図2】本発明を実施するための一例の機能構成を示すブロック図である。
図3】本発明の全体的な処理のフローチャートを示す図である。
図4】探索フェーズで使う木構造の例を示すブロック図である。
図5】メッセージの類似度計算処理のフローチャートを示す図である。
図6】フォーマットの作成の処理のフローチャートを示す図である。
図7】類似度の計算の例を示す図である。
図8】類似フォーマット検索処理のフローチャートを示す図である。
図9】フォーマット検索及び登録処理の例を示す図である。
図10】親フォーマット作成処理のフローチャートを示す図である。
図11】フォーマットの類似度計算処理の例を示す図である。
図12】2つのフォーマットから親フォーマットを結合する様子を示す図である。
図13】2つのフォーマットと親フォーマットの、木構造における関係を示す図である。
【発明を実施するための形態】
【0026】
以下、図面に従って、本発明の実施例を説明する。これらの実施例は、本発明の好適な態様を説明するためのものであり、発明の範囲をここで示すものに限定する意図はないことを理解されたい。また、以下の図を通して、特に断わらない限り、同一符号は、同一の対象を指すものとする。
【0027】
図1を参照すると、本発明の一実施例に係るシステム構成及び処理を実現するためのコンピュータ・ハードウェアのブロック図が示されている。図1において、システム・バス102には、CPU104と、主記憶(RAM)106と、ハードディスク・ドライブ(HDD)108と、キーボード110と、マウス112と、ディスプレイ114が接続されている。CPU104は、好適には、32ビットまたは64ビットのアーキテクチャに基づくものであり、例えば、インテル社のCore(商標) i3、Core(商標) i5、Core(商標) i7、Xeon(R)、AMD社のAthlon(商標)、Phenom(商標)、Sempron(商標)などを使用することができる。主記憶106は、好適には、8GB以上の容量、より好ましくは、16GB以上の容量をもつものである。
【0028】
ハードディスク・ドライブ108には、オペレーティング・システム(OS)が格納されている。オペレーティング・システムは、Linux(商標)、マイクロソフト社のWindows(商標) 7、Windows(商標)8などの、CPU104に適合する任意のものでよい。
【0029】
ハードディスク・ドライブ108にはまた、好適には、Apacheなどの、Webサーバとしてシステムを動作させるためのプログラムが保存されている。
【0030】
ハードディスク・ドライブ108にはさらに、複数のミドルウェアやアプリケーション・プログラムが保存されている。
【0031】
キーボード110及びマウス112は、オペレーティング・システムが提供するグラフィック・ユーザ・インターフェースに従い、ディスプレイ114に表示されたアイコン、タスクバー、テキストボックスなどのグラフィック・オブジェクトを操作するために使用される。
【0032】
図1において示すハードウェア上で動作するシステムにおいて、オペレーティング・システム、ミドルウェア、アプリケーション・プログラムのうちの少なくとも1つが、システム・ログを生成する機能をもつ。
【0033】
システム・ログは、これらには限定されないが、例えば下記のシステム障害に応じて生成される。
− ハードウェアの障害
− ローカル・ネットワーク、インターネットなどの通信関係の障害
− ソフトウェアのバグ
− 一部または全体のデータの破損
【0034】
このようなシステム・ログは、一般的に次のような性質をもつ。
− 予めソフトウェア内部などで規定されているフォーマットに従い、出力されるメッセージを含む。
− 1つのメッセージは、文字を含む記号で構成されるシーケンスである。
− メッセージは人間が可読であるものには限らないが、意味のある粒度で分解できる必要がある。
− 可読な文字列は、空白あるいは特殊な記号で分割されている。
【0035】
ハードディスク・ドライブ108にはさらに、図2に示す、本発明に係るログ解析プログラム206と、視覚化/異常検知/相関分析プログラム212が保存されており、ログ解析プログラムは、オペレーティング・システムの動作により、ハードディスク・ドライブ108から主記憶106にロードされ実行される。ログ解析プログラム及び視覚化/異常検知/相関分析プログラム212は、C、C++、C#、Java(R)などの既存の任意のプログラミング言語処理系により作成することができる。ログ解析プログラム206の詳細な機能については、図2の機能ブロック図を参照して、後で説明する。
【0036】
次に、図2の機能ブロック図を参照して、本発明の処理プログラムの構成について説明する。図2において、監視対象のシステム202は、オペレーティング・システム、ミドルウェア、あるいはアプリケーション・プログラムなどであり、ログ生成機能204は、監視対象のシステム202の障害を検出して、ログ・メッセージを生成する。ログ生成機能204は、オペレーティング・システムあるいはミドルウェアの機能の一部であってもよい。
【0037】
本発明に係るログ解析プログラム206は、ログ生成機能204が生成したログ・メッセージを受け取って、学習・パース・分類する。
【0038】
ログ解析プログラム206は、メッセージ類似度計算機能と、フォーマット類似度計算機能と、フォーマット作成機能と、類似フォーマット検索&登録機能をもち、これらの機能を使用して、受け取ったログ・メッセージから、図4に示すような木構造のデータ208を作成し、受け取ったログ・メッセージと木構造のノードのメッセージの類似度を計算し、その類似度が所定の閾値より小さいときは、新たなノードを追加し、その類似度が所定の閾値より大きいときは、フォーマット・テーブル210に保存されているフォーマットの類似度を比較して、フォーマットの類似度が所定の閾値より大きいときは、統合したフォーマットを作成して、親ノードを作成する。ログ解析プログラム206は、必要に応じて、ログ・メッセージをログ・データベース214として、ハードディスク・ドライブ108に書き出す。これらの処理の詳細は、図3以下のフローチャートを参照して、後でより詳細に説明する。
【0039】
木構造のデータ208と、フォーマット・テーブル210は、主記憶106と、ハードディスク・ドライブ108のどちらに保存してもよいが、少なくとも木構造のデータ208は、処理の高速化のため、可能な限り主記憶106に置くのが望ましい。
【0040】
視覚化/異常検知/相関分析プログラム212は、ログ解析プログラム206からの分析出力及びログ・データベース214のエントリを受け取って、ユーザーに表示するため視覚化し、既知の異常ログ・サンプルとの比較により異常検知するとともに、場合により、既知の異常ログ・サンプルとの相関分析を行うが、この機能は本発明の特徴とはあまり関係ないので、これ以上詳細には述べない。
【0041】
次に、図3のフローチャートを参照して、ログ解析プログラム206の処理について説明する。図3において、ステップ302では、ログ解析プログラム206は、一行分のログメッセージを入力する。
【0042】
次に、ステップ304で、ログ解析プログラム206は、メッセージのノード化、すなわち、ノードNを生成して、N.messageにメッセージを格納する。なお、以下では、N.messageを単にNと略記することがある。
【0043】
次に、ステップ306で、ログ解析プログラム206は、Npに、木の根ノードを格納する。図4では、矢印402で示すのが、木の根ノードである。
【0044】
次に、ステップ308で、ログ解析プログラム206は、NとNpの類似度を計算する。この類似度の計算は、図5のフローチャートを参照して後で説明する。
【0045】
ステップ308で、計算した類似度が、ある閾値Tmより大きくないと判断されたなら、ステップ310に進み、Npの子ノードの数が、Cmaxと等しいかどうか判断する。ここでCmaxは、予め定めた2以上の整数であるが、経験則上、4から10の間で選択される。図4では例えば、ノード402に対して、ノード404及びノード406が子ノードである。
【0046】
もしステップ310で、Npの子ノードの数が、Cmaxと等しくない、すなわちCmaxより少ないと判断すると、ログ解析プログラム206は、append(N)により、Npの子ノードとしてNを追加し、ステップ314で、ログメッセージのみ、視覚化/異常検知/相関分析プログラム212またはログ・データベース214に出力して、ステップ302に戻る。
【0047】
もしステップ310で、Npの子ノードの数が、Cmaxと等しいと判断すると、ログ解析プログラム206は、ステップ316で、Nに最も類似した子ノードを選択し、その子ノードのメッセージをNpに格納して、ステップ308に戻る。なお、ここでの類似の判断は、ステップ308でのアルゴリズムと同様でよい。
【0048】
戻って、ステップ308で、計算した類似度が、ある閾値Tm以上であると判断されたなら、ログ解析プログラム206は、ステップ318で、NpとNからフォーマットを生成して、Np.formatに格納する。この処理は、図6のフローチャートを参照して後で説明する。
【0049】
ステップ318に続いて、ログ解析プログラム206は、ステップ320で、N.formatに、Np.formatを格納し、ステップ322で、N.formatとの類似フォーマットを、フォーマット・テーブル210で探索して、見つかったらそれをFとする。なお、ここでLnは、n-gramでの検索であることを示す。フォーマット・テーブル210の探索ステップは、図8のフローチャートを参照して後で説明する。
【0050】
ステップ324では、ログ解析プログラム206は、フォーマット・テーブル210の検索結果が空であるかどうか判断する。この実施例では、最初はフォーマット・テーブル210は空なので、ここでの判断が肯定的になり、ログ解析プログラム206は、ステップ326でフォーマット・テーブル210にN.formatを登録し、ステップ328でフォーマット+ログメッセージを視覚化/異常検知/相関分析プログラム212またはログ・データベース214に出力して、ステップ302に戻る。
【0051】
ステップ324で、フォーマット・テーブル210の検索結果が空でないと判断すると、ログ解析プログラム206は、ステップ330でFとN.formatの間のフォーマット類似度を計算し、その類似度が、所定の閾値Tfより大きくないなら、ステップ326でフォーマット・テーブル210にN.formatを登録し、ステップ328でフォーマット+ログメッセージを視覚化/異常検知/相関分析プログラム212またはログ・データベース214に出力して、ステップ302に戻る。なお、フォーマット類似度の計算処理は、図8のフローチャートを参照して後で説明する。
【0052】
ステップ330でFとN.formatの間のフォーマット類似度がTfより大きいと判断されたなら、ログ解析プログラム206は、ステップ330で、FとN.formatから親フォーマットSFを作成し、ステップ334でその親フォーマットSFにFを子ノードとして追加し、ステップ336でその親フォーマットSFにN.formatを子ノードとして追加し、ステップ328に行く。なお、親フォーマット作成処理については、図10のフローチャートを参照して後で説明する。例えば図4では、親フォーマットをもつノード408に、2つのノード412及び412が付加されるものとして示されている。
【0053】
次に、図5のフローチャートと、図7の模式図を参照して、図3のフローチャートのステップ308で実行される、メッセージの類似度の計算処理について説明する。
【0054】
図5のステップ502において、ログ解析プログラム206は、新規ノードNと、既存ノードNpを入力する。
【0055】
ログ解析プログラム206は、ステップ504において、N.messageをシーケンス、すなわち、図7に示すように、メッセージをスペースや記号で、sshd [ 6486 ] : authentication ... のように複数のシーケンスに区切った形式に変換して、S1に代入する。
【0056】
ログ解析プログラム206は、ステップ506において、Npがフォーマット(F)をもつなら、フォーマットを、そうでないならNp.messageをシーケンスに変換して、S2に代入する。フォーマットをS2に代入する場合、類似度計算のために、過去Np.formatでフォーマット化されたメッセージもシーケンス化する。
【0057】
ステップ508において、ログ解析プログラム206は、len(S1)とlen(S2)が等しいかどうか判断する。ここでlen(S1)とlen(S2)はそれぞれ、シーケンスの数である。
【0058】
そして、len(S1)とlen(S2)とが等しくないと判断されたなら、ステップ510で0を返して、メッセージ類似度計算機能のルーチンを終了する。
【0059】
ステップ508において、len(S1)とlen(S2)とが等しいと判断したなら、ログ解析プログラム206は、ステップ512で、r = 0として、ステップ514に進む。
【0060】
ステップ514からステップ518までは、C言語の記法に従うと、for ( n = 0; n < len(S1); n++ ) { r += 類似度(S1[n],S2[n]); } である。ここで、S1[n]とは、S1[0]をS1の先頭のシーケンスとして、先頭からn + 1番目のシーケンスである。
【0061】
類似度(S1[n],S2[n])の計算方法は、様々な方法が考えられるが、1つの実施例では、次のようにする。
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
ステップ516では、このようにして計算される類似度(S1[n],S2[n])を、rに累加していく。
【0062】
そして、ステップ520で、r/len(S1)を最終的に類似度として返す。
【0063】
次に、図6のフローチャートを参照して、フォーマット作成処理について説明する。
図6のステップ602では、ログ解析プログラム206は、シーケンス1としてS1を入力し、シーケンス2としてS2を入力する。
【0064】
ステップ604では、ログ解析プログラム206は、初期化した配列Fを用意する。
【0065】
次のステップ606からステップ618までは、C言語の記法に従うと、for ( n = 0; n < len(S1); n++ ) { ... }のループである。
【0066】
ループ内のステップ608でログ解析プログラム206は、S1[n] == S2[n]かどうかを判断し、もしそうなら、シーケンスが一致するので、ステップ610で、F[n] ← S1[n]と代入する。
【0067】
S1[n] == S2[n]でないなら、ログ解析プログラム206は、ステップ612で、pを初期化し、pをパラメータ・オブジェクトとし、ステップ614では、p.add(S1[n])とp.add(S2[n])を実行する。ここで、pは過去にパラメータとして入力されたシーケンスすべてを結合したものであり、p.add(S1[n])はpにS1[n]を追加し、p.add(S2[n])はpにS2[n]を追加する。
【0068】
そして、ログ解析プログラム206は、ステップ616で、F[n] ← pと代入する。このようなシーケンスの追加の結果、pは長い文字列となるが、図5のステップ516に関して上記で説明した文字種計算のアルゴリズムによれば、長さの異なる文字列どうしでも、類似度が計算できる。このようなpに対応する箇所は可変部と呼ばれ、図7では便宜上、"???"と示されている。
【0069】
for ( n = 0; n < len(S1); n++ ) に従い、ステップ606からステップ618までをnについて完了すると、ステップ620でFを返して終了する。この処理は、図7では、マージしてF1を生成することに対応する。
【0070】
次に、図8のフローチャートを参照して、図3におけるステップ322の類似フォーマット検索処理について説明する。
【0071】
図8のステップ802で、ログ解析プログラム206は、フォーマットFを入力する。次のステップ804で、ログ解析プログラム206は、Fからn-gramを作成して、Gに格納する。すなわち、Gは、Fのn-gramの配列、あるいは集合である。これは、図9の参照番号902で示す箇所に対応する。
【0072】
ステップ806で、ログ解析プログラム206は、配列Rを0で初期化する。
【0073】
ステップ808からステップ814までは、Gの要素であるg各々についての処理である。ステップ810で、ログ解析プログラム206は、Gから取り出したgを以て、フォーマット・テーブル210を検索し、gを含むフォーマットF'が見つかると、ペア(F',g)を集合GFに格納する。これは、図9の参照番号904で示す箇所に対応する。
【0074】
ステップ812では、ログ解析プログラム206は、R[F']に1を加える。すなわち、Rは(F',r)という要素をもち、ここでr = R[F']とおく。
【0075】
こうして、Gの全てのgを尽くしてステップ808からステップ814までのループが完了すると、ログ解析プログラム206は、ステップ816からステップ822までのループに進む。
【0076】
ステップ816からステップ822までのループは、Rの各要素(F',r)についての処理である。
【0077】
ステップ818では、 ログ解析プログラム206は、r * 2 / (len(F) + len(F')) > Tfかどうかを判断する。Tfは所定の閾値である。その判断が否定的なら単に次の要素(F',r)に進み、その判断が肯定的なら、親フォーマットSFを作成するために、図10のフローチャートの処理を呼び出して、次の要素(F',r)に進む。
【0078】
こうして、ステップ816からステップ822までのループが完了すると処理は終わる。なお、図9の参照番号904で示す箇所は、図3のフローチャートのステップ330に対応する。また、図9の参照番号906で示す箇所は、図3のフローチャートのステップ336に相当する。
【0079】
次に、図10のフローチャートを参照して、親フォーマットSFを作成するための処理について説明する。
【0080】
図10のステップ1002において、ログ解析プログラム206は、フォーマットF1及びF2を入力する。図11には、フォーマットF1及びF2の例が示されている。
【0081】
ステップ1004で、ログ解析プログラム206は、既にF1、F2が親フォーマットをもっていたら、それをF1、F2に置き換える。
【0082】
ステップ1006で、ログ解析プログラム206は、E = SES(F1,F2)で最長マッチEをとる。ここで、SESとは、Shortest Edit Scriptのことである。ここで、SESの代わりにLCS、すなわちLongest Common Subsequenceを用いてもよい。E = SES(F1,F2)はより詳細には、図11に示すように、フォーマットの類似度を計算する処理を含む。ここでは、図5のフローチャートに関連して説明した類似度計算処理が実行される。
【0083】
ここで、Eは編集情報e1,e2,...,eiのリストである。e.editはシーケンスの操作としてmatch, replace, insertのどれかを含む。e.target1は対象となるF1[n1]、e.target2は対象となるF2[n2]をそれぞれ属性としてもつ。
【0084】
e.editがinsertのときは、e.target1とe.target2のどちらかがnullである。また、len(E) <= max(len(F1),len(F2))が成り立つ。
【0085】
図10に戻って、ステップ1008で、ログ解析プログラム206は、親フォーマットSFを初期化し、次のステップ1010で、n = 0とおく。
【0086】
次のステップ1012からステップ1032までは、Eの各要素eについてのループである。
【0087】
ステップ1014でログ解析プログラム206は、e.editがmatchかどうか判断し、もしそうなら、ステップ1016でSF[n] ← e.target1として、ステップ1030でnを1だけ増やして、次のループに進む。
【0088】
ステップ1014でe.editがmatchでないなら、ログ解析プログラム206は、ステップ1018でパラメータ・オブジェクトpを初期化し、ステップ1020でp.add(e.target1)、p.add(e.target2)を実行する。これらの処理は、図6のフローチャートのステップ612及び614で示した処理と同様である。p.add(t)は、tがnullなら無視する。ここで、e.target1及びe.target2は、自分がどのpに属しているか知っており、元のフォーマットではパラメータと判断されなくても、親フォーマットを参照することで、パラメータと判断できるようになる。
【0089】
ステップ1022で、ログ解析プログラム206は、e.editがinsertかどうか判断し、もしそうなら、ステップ1024でp.ranged = yesとし、ステップ1028でSF[n] ← pとし、ステップ1030でnを1だけ増やして、次のループに進む。このとき、p.ranged = yesとするということは、可変長のパラメータであるということを示し、分析時に役に立てることができる。
【0090】
ステップ1022で、ログ解析プログラム206がe.editがinsertでないと判断すると、ステップ1024でp.ranged = noとし、ステップ1028でSF[n] ← pとし、ステップ1030でnを1だけ増やして、次のループに進む。
【0091】
こうして、ステップ1012からステップ1032までを、Eの各要素eについて終了すると、ログ解析プログラム206は、SFを返して、図10のフローチャートで示す処理を終了する。
【0092】
図12は、図10のフローチャートで示す処理の実例を示す図である。図示されているように、F1とF2から、Faを生成する。このFaが、図10のフローチャートにおけるSFである。結果的に、図13に示すように、木構造上で、FaがF1とF2の両方の親フォーマットとなる。
【0093】
なお、参考までに、本発明に従うシステムによって生成されるログ分類結果の例を示す。下記のログで、*が可変部を意味する。
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 )
... ...
【0094】
以上、この発明を特定の実施例に従い説明してきたが、この発明は、特定のハードウェア、ソフトウェア、プラットフォームに拘わらず、任意のソフトウェア/ハードウェア構成で利用可能であることを理解されたい。
【0095】
また、この発明は、オンライン的なシステム・ログ解析に特に有効であるが、用途はそれには限定されず、バッチ的な処理にも適用可能である。さらに、この発明が最大限に効果を発揮するのは障害時であるが、平常時に出力されるログを分類し、フォーマットを推定することにも利用できる。平常時はログのフォーマットを定義する余裕があるので障害時ほど効果は最大化されないが、ワンタイムのフォーマット定義のための省力化、および継続的なメンテナンスの省力化も可能である。
【符号の説明】
【0096】
104 CPU
106 RAM
108 ハードディスク・ドライブ
206 ログ解析プログラム
208 木構造
210 フォーマット・テーブル
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13