(57)【特許請求の範囲】
【請求項１】
複数のコンテキストから出力されたメッセージを順に受け付ける入力インタフェースから、所定の時間内に受け取った前記メッセージを順に格納する記憶部と、
前記記憶部に格納された前記メッセージを、前記複数のコンテキストの出力側で予め定められたメッセージの出力単位である要素メッセージに分解するメッセージ抽出部であって、次の所定の時間内に前記入力インタフェースから受け取ったメッセージを、前記記憶部から削除されていないメッセージに追加して格納し、前記記憶部から削除されていないメッセージと追加して格納したメッセージとを含む新たに格納されたメッセージを前記要素メッセージに分解する前記メッセージ抽出部と、
予め定められた前記要素メッセージの出現パターンにマッチする要素メッセージを選出し、前記メッセージを再構築するメッセージ再構築部であって、前記要素メッセージから前記メッセージを再構築した後、前記記憶部に格納されているメッセージのうちの再構築済みのメッセージを削除し、前記新たに格納されたメッセージから得られた要素メッセージの中から、前記出現パターンにマッチする要素メッセージを選出し、前記メッセージを再構築する前記メッセージ再構築部と、
を備えることを特徴とするメッセージ処理装置。
【請求項２】
請求項１に記載のメッセージ処理装置において、
前記メッセージ抽出部は、前記記憶部のうち前記所定の時間に受け取ったメッセージを記憶する部分である第１の部分とその次の前記所定の時間内に受け取ったメッセージを記憶する部分である第２の部分とに格納されたメッセージを処理対象範囲とした第１の抽出処理と、前記第２の部分と次の前記所定の時間内に読み込まれたメッセージを記憶する部分である第３の部分とに格納されているメッセージ処理対象範囲とした第２の抽出処理と、を繰り返し実行し、
前記メッセージ再構築部は、各抽出処理で得られた要素メッセージの中から前記出現パターンにマッチする要素メッセージを選出して前記メッセージを再構築する、
ことを特徴とするメッセージ処理装置。
【請求項３】
請求項１に記載のメッセージ処理装置において、
さらに、前記所定の時間の変更を受け付ける設定入出部を備え、
前記メッセージ抽出部は、変更された時間内に前記記憶部に格納された前記メッセージを前記要素メッセージに分解する、
ことを特徴とするメッセージ処理装置。
【請求項４】
請求項１に記載のメッセージ処理装置において、
前記メッセージ再構築部は、選出された要素メッセージの中から、前記削除されていないメッセージから得られた先頭の要素メッセージを選出する、
ことを特徴とするメッセージ処理装置。
【請求項５】
請求項１に記載のメッセージ処理装置において、
前記メッセージ抽出部は、前記複数のコンテキストの出力側において一定の区切り位置またはタイミングが到来するまでメッセージの出力を待ち、前記区切り位置またはタイミングの間に出力されたメッセージについて、前記要素メッセージに分解する、
ことを特徴とするメッセージ処理装置。
【請求項６】
複数のコンテキストから出力されたメッセージを順に受け付ける受付ステップと、
所定の時間内に受け取った前記メッセージを、前記複数のコンテキストの出力側で予め定められたメッセージの出力単位である要素メッセージに分解する抽出ステップにおいて、次の所定の時間内に入力インタフェースから受け取ったメッセージを、記憶部から削除されていないメッセージに追加して格納する格納ステップと、前記記憶部から削除されていないメッセージと追加して格納したメッセージとを含む新たに格納されたメッセージを前記要素メッセージに分解する分解ステップとを含み、
予め定められた前記要素メッセージの出現パターンにマッチする要素メッセージを選出し、前記メッセージを再構築する再構築ステップにおいて、前記要素メッセージから前記メッセージを再構築した後、前記記憶部に格納されているメッセージのうちの再構築済みのメッセージを削除する削除ステップを含み、前記新たに格納されたメッセージから得られた要素メッセージの中から、前記出現パターンにマッチする要素メッセージを選出し、前記メッセージを再構築する、
ことを特徴とするメッセージ処理方法。
【請求項７】
請求項６に記載のメッセージ処理方法において、
前記抽出ステップでは、記憶部のうち前記所定の時間に受け取ったメッセージを記憶する部分である第１の部分とその次の前記所定の時間内に受け取ったメッセージを記憶する部分である第２の部分とに格納されたメッセージを処理対象範囲とした第１の抽出処理と、前記第２の部分と次の前記所定の時間内に読み込まれたメッセージを記憶する部分である第３の部分とに格納されているメッセージ処理対象範囲とした第２の抽出処理と、を繰り返し実行し、
前記再構築ステップでは、各抽出処理で得られた要素メッセージの中から前記出現パターンにマッチする要素メッセージを選出して前記メッセージを再構築する、
ことを特徴とするメッセージ処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、入力されたメッセージについて、所定のパターンにマッチするメッセージを分類および抽出するメッセージ処理装置およびメッセージ処理方法に関し、特に、リアルタイム性を有するものに関する。
【背景技術】
【０００２】
オペレーティングシステム(OS)やアプリケーションソフトウェアが出力するログメッセージには、しばしば障害やエラーを示す情報が含まれている。これらのメッセージをパターンマッチングにより検出し、自動的に所定の復旧処理や報告処理といったエラーハンドリングを行うことは有用である。また、ログメッセージは、内容が変化しない固定的な範囲の他、動的に変化するパラメータを含むことがあり、そのパラメータの内容に依存したエラーハンドリングを行うこともある。
【０００３】
上記ログメッセージは、一つの発生事象につき複数のメッセージに分けて出力されることがある。特に、エラーハンドリングに必要なパラメータが前述の複数のメッセージに渡っている場合、これらの複数のメッセージを一連のメッセージとしてまとめて検出する必要がある。さらには、複数のコンテキストにおいて、一連のメッセージを出力する同種のイベントが同時期に発生した場合、一連のメッセージを構成するメッセージが互いに入り混じることがある。この場合、どのメッセージとどのメッセージが本来の一連のメッセージを構成していたか一概には判断できない。適切なエラーハンドリングを行うためには、混在した一連のメッセージを分離し、元の一連のメッセージを再構成する必要がある。
【０００４】
さらには、エラーの種別やSLO(Service Level Objective)によっては早急な自動復旧処理が必要とされることがあり、その場合、前述のメッセージ検出や一連のメッセージの再構成処理はリアルタイム要件を満たすことが求められる。すなわち、予測可能な時間内に処理可能である必要がある。
【０００５】
特に、混在した一連のメッセージの分離および再構成処理に関しては、技術分野は異なるが、ネットワーク監視技術の応用が考えられる（例えば、特許文献１）。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特表２０１３−５３４１０５
【発明の概要】
【発明が解決しようとする課題】
【０００７】
特許文献１では、パケットに付属する送受信ポートやIPアドレス情報を用いてストリームを区別することを前提としている。しかし、ログメッセージの解析処理においては、通常は、ログメッセージには出力コンテキストを区別するための情報が付加されていないため、一意に出力コンテキストを区別することはできない。これは、一連のメッセージの終端を一意に定めることができないことも意味する。このとき、特許文献１の方式によりツリー状態インジケータを用いてツリーを再構築する場合、すなわち元の一連のメッセージを再構築する場合、必要なメモリサイズは無制限となる。つまり、一連のメッセージの構成規則を満たす全てのメッセージの組み合わせについてツリーを保持する必要があり、さらに一連のメッセージの終端が不明瞭なため、保持期限も無制限となる。
【０００８】
計算機システムにおいて、メモリを動的に確保する処理は、メモリの内容を二次記憶装置に退避したり、メモリ解放を待つなど、長時間を要することがある。したがって、リアルタイム性を確保するには、動的なメモリ確保はせず、有限サイズのメモリを事前確保しておく必要がある。しかし前記の通り、特許文献１の方式では必要メモリサイズを有限に定めることができないため、リアルタイム性を確保することができない。
【課題を解決するための手段】
【０００９】
本発明により上記課題を解決する代表的なメッセージ処理装置の一つは、複数のコンテキストから出力されたメッセージを順に受け付ける入力インタフェースから、所定の時間内に受け取った前記メッセージを順に格納する記憶部と、前記記憶部に格納された前記メッセージを、前記複数のコンテキストの出力側で予め定められたメッセージの出力単位である要素メッセージに分解するメッセージ抽出部と、予め定められた前記要素メッセージの出現パターンにマッチする要素メッセージを選出し、前記メッセージを再構築するメッセージ再構築部と、を備えることを特徴とするメッセージ処理装置として構成される。
【００１０】
また、本発明は、上記メッセージ処理装置で行われるメッセージ処理方法としても把握される。
【発明の効果】
【００１１】
本発明によれば、メッセージ処理に必要な主たるメモリのサイズは、所定の時間内に出力されるメッセージを格納するのに十分な記憶領域に限定することができる。そのため、予め必要なサイズのメモリを確保しておけば、メモリ枯渇による処理遅延を回避でき、予測可能な時間内での処理が可能となる。
【図面の簡単な説明】
【００１２】
【図１】本発明を計算機上で実現した場合のハードウェア構成図である。
【図２】本発明の代表的な実施形態における機能ブロック図である。
【図３】本発明の適用先の一つにおける、具体的な入力メッセージ例である。
【図４】図３における入力メッセージが同時期に出力され、互いに入り混じった結果の例である。
【図５】図４における、互いに入り混じったメッセージに対し、不可分なメッセージ単位である要素メッセージに分解した結果の例である。
【図６】本発明の代表的な実施形態におけるフローチャートである。
【図７】図２に記載のメッセージ記憶領域の内容の例を示す図である。
【図８】図６に示したメッセージ抽出部40、メッセージ再構築部50が行う処理のイメージ図である。
【発明を実施するための形態】
【実施例１】
【００１３】
図１は、本発明によるメッセージ処理装置のハードウェア構成の一例であり、少なくともソフトウェアプログラムを実行する演算装置11と、前記プログラムおよびその実行に必要なデータを格納する記憶装置12を備えた計算機10上に実装される。また、通信装置13を備え、外部の監視端末20に備わった通信装置21と接続し、メッセージ処理結果を伝えてもよい。監視端末20は、例えば、二重系を構成する別の計算機に置き換えることも可能であり、例えば、メッセージ処理結果を伝えて主従系切り替えを実施してもよい。ディスプレイ14は、メッセージ処理結果の出力などに使用し、キーボード15は設定変更などに利用する。
【００１４】
ここでは、Linux（登録商標） OSにおいて、カーネルが出力するメッセージについて、本発明を適用する場合を例に実施の一形態を説明する。
【００１５】
図３、図４は、プロセスP1、P2、およびP3の三つのコンテキストにおいて、それぞれ同時に、SCSIディスク上で発生したエラーに関するメッセージを出力する例である。特に、図３は、各プロセスが出力する一連のメッセージを示し、図４は、図３のメッセージ群が互いに入り混じった結果の一例を示している。例えば、プロセスP2が出力するメッセージは、名前sdbで識別されるSCSIディスクに対して発行したRead(10)コマンドがタイムアウトしたことを示している。しかし、図４に示したように、類似した一連のメッセージと入り混じると、元々のメッセージが不明瞭となる。例えば、本来タイムアウトが発生したのはSCSIディスクsdbであるが、図４の例ではあたかもsdcで発生したかのように見える。なお図３、図４に示した例は、説明のため、実際に出力されるメッセージより若干簡素化している。
【００１６】
図２は、本発明を実施する一形態における、機能ブロック図である。入力インタフェース30は、メッセージ抽出部40がメッセージを読み込むためのインタフェースであり、このインタフェースに対して読み込みを行うと、それまでに出力されたメッセージを時系列順に得ることができる。Linux（登録商標） OSでは、/proc/kmsg 擬似ファイルなどが入力インタフェース30に該当する。
【００１７】
メッセージ抽出部40は、図６で説明する手順で入力インタフェース30からメッセージを読み取り、メッセージ記憶領域70に格納する。さらに、メッセージ抽出部40は、メッセージ記憶領域70内のメッセージの中から、不可分なメッセージ単位である要素メッセージを抽出する。不可分なメッセージ単位とは、例えば、入力インタフェース30が受け取るメッセージを出力する他のシステムや装置側であらかじめ定められたメッセージの出力単位である。
【００１８】
図５は、図３および図４の例について要素メッセージを抽出した結果を示しており、各行が一つの要素メッセージであることを意味する。図５の種別欄は、要素メッセージの種類ごとに便宜上与えた名称であり、後の説明で参照する。例えば、「sd 4:0:0:0: [sdc] CDB: Read(10)」というメッセージXは、実際には「sd 4:0:0:0: [sdc] 」、「CDB: 」、「Read(10)」の3回に分けて出力されるが、一度に出力されたメッセージは不可分であり、前記三つのメッセージがそれぞれ要素メッセージとなる。要素メッセージの抽出は、正規表現マッチングなど良く知られたパターンマッチング技術により容易に実現可能である。
【００１９】
抽出した要素メッセージは要素メッセージテーブル80で管理する。具体的には、例えば、要素メッセージ文字列を参照するポインタを、元になったメッセージの入力順に並べることで管理する。例えば、上述したメッセージXの場合には、その中から抽出された要素メッセージである「sd 4:0:0:0: [sdc] 」、「CDB: 」、「Read(10)」に対応する種別は、それぞれSdev、CDB、Cmdであると認識し、その順序を記憶することにより、メッセージから要素メッセージの抽出順序や要素メッセージからメッセージの再構築順序を管理する。
【００２０】
メッセージ再構築部50は、予め定められた要素メッセージの出現パターンにマッチする要素メッセージ列を選出し、その一連の要素メッセージ列を、元々出力された一連のメッセージとして出力インタフェース60に送る。ここで、出力インタフェース60に送る情報は、必ずしも元々の一連のメッセージの完全な再現である必要はなく、元々の一連のメッセージの内容を一意に特定できるものであれば何でも良い。例えば、上記メッセージXを例にとると、そのメッセージに含まれる要素メッセージ「sd 4:0:0:0: [sdc] 」、「CDB: 」、「Read(10)」の順に抽出されるため、各要素メッセージに対応する種別Sdev、CDB、Cmdを順に抽出し、抽出した一連の要素メッセージ列を出力インタフェース60に出力する。
【００２１】
出力インタフェース60は、メッセージ再構築部50が再構築した一連のメッセージの後処理を行うものであり、様々な形態が考えられる。例えば、再構築した一連のメッセージを表示するディスプレイや、外部の監視端末へ通知するための通信装置13や、自動復旧処理などを行うエラーハンドラ呼び出しがある。
【００２２】
図６は、メッセージ抽出部40、およびメッセージ再構築部50の動作フローの一例を示し、図７は、メッセージ抽出部40が入力メッセージをメッセージ記録領域70へ格納する様子の詳細を示している。
【００２３】
図６に基づくメッセージ抽出部40の動作は以下の通りである。  
ステップ400：メッセージ抽出部40は、入力インタフェース30に対し、新規メッセージが到着するまで待つ。
【００２４】
ステップ401：メッセージ抽出部40は、入力インタフェース30から、この時点で読み込み可能なメッセージを全て読み込み、メッセージ記憶領域70に格納する。このとき使用した領域を前半部分71とし、その時刻をt1とする（図７）。
【００２５】
ステップ402：メッセージ抽出部40は、所定の時間Tが経過するのを待つ。ここでTは、一連のメッセージの出力に要する時間に対し、十分大きな値に設定する。例えば、前述のSCSIエラーメッセージの例において、一つのコンテキストが一連のエラーメッセージを出力するのに要する時間が十数μ秒であったとすると、Tは1ミリ秒程度に設定すれば十分である。なお、所定の時間Tの値は、設定入力部90に対して、時間Tを記載した設定ファイルなどを入力し、変更可能としても良い。
【００２６】
ステップ403：メッセージ抽出部40は、入力インタフェース30から、この時点で読み込み可能なメッセージを全て読み込み、メッセージ記憶領域70内の前記前半部分71の直後に格納する。このとき使用した領域を後半部分72とし、その時刻をt2とする（図７）。なお、新規メッセージの入力がなかった場合、後半部分72は空となる。
【００２７】
ステップ404：よく知られたパターンマッチング技術を用い、メッセージ抽出部40は、上記前半部分71および後半部分72を含む記憶領域70全体に格納されたメッセージの中から要素メッセージを抽出し、抽出結果を要素メッセージテーブル80に格納する。例えば、図５における要素メッセージ「Sense Key : Recovered Error」、および「Sense Key : Medium Error」を抽出する手段として、正規表現「Sense Key : .+」によるパターンマッチングが利用できる。
【００２８】
ステップ405：メッセージ抽出部40は、メッセージ再構築部50に通知を送り、メッセージ再構築部50の処理を開始、あるいは再開する。
【００２９】
ステップ406：メッセージ抽出部40は、メッセージ再構築部50の処理完了の通知505を受けるまで待つ。
【００３０】
ステップ407：ステップ403のメッセージ読み込みにおいて、メッセージ抽出部40が一つもメッセージを読めなかった場合(T秒間の間、新規メッセージの入力がなかった)、ステップ408に進む。一つでもメッセージを読んだ場合、ステップ402に戻る。
【００３１】
図６に基づくメッセージ再構築部50の動作は以下の通りである。  
ステップ500：メッセージ再構築部50は、メッセージ抽出部40から、入力メッセージのメッセージ記憶領域70への格納と、抽出した要素メッセージの要素メッセージテーブル80への格納が完了した旨の通知405を受けるのを待つ。
【００３２】
ステップ501：メッセージ再構築部50は、予め設定しておいた要素メッセージの出現パターンにマッチする要素メッセージ列を選出する。具体的に図３〜５の例を用いて説明すると、SCSIディスク上でメディアエラーが発生した場合の要素メッセージ列は、図５に示す種別では、Sdev、Res、Sdev、SenseME、Sdev、CDB、Cmdの順になる。このような前記要素メッセージの出現パターンは、事前のエラー注入テストの結果やエラーメッセージ出力ソースコードを確認することで決定できる。また、前記予め設定しておいた要素メッセージの出現パターンにマッチする要素メッセージ列の選出は、良く知られた有限オートマトンによるパターンマッチングにより実現可能である。
【００３３】
ここで、図５において、前記要素メッセージの出現パターンにマッチする要素メッセージ列の一つは、「sd 3:0:0:0: [sdb] 」、「Result: driverbyte=DRIVER_TIMEOUT」、「sd 2:0:0:0: [sda] 」、「Sense Key : Medium Error」、「CDB: 」、「Read(10)」である。また別の一つは、「sd 4:0:0:0: [sdc] 」、「Result: driverbyte=DRIVER_SENSE」、「sd 4:0:0:0: [sdc] 」、「Sense Key : Medium Error」、「CDB: 」、「Read(10)」である。
【００３４】
図３のプロセスP3の欄に示したように、実際に出力された一連のメッセージは後者の要素メッセージ列に対応するが、前者のように実際のメッセージ出力と異なる要素メッセージ列を選出することもある。すなわち、前記選出処理は擬陽性を持つ。ある種のルールを課し、ルールに合致しない選出結果を除外することで、擬陽性の選出結果を削減することは可能である。しかし、その手法は対象とするメッセージの具体的な内容に依存するため、ここではさらに詳細には言及しない。
【００３５】
ステップ502：メッセージ再構築部50は、ステップ501により選出した要素メッセージ列について、その内容に応じたメッセージを再構築する。これは、前記要素メッセージ列を単純に連結したものでもよいし、前記要素メッセージ列に含まれる情報を厳選してより簡素なメッセージに変換してもよい。例えば、メッセージ再構築部50は、上記後者の要素メッセージ列をそのまま順に連結し、入力されたメッセージとして再構築する。
【００３６】
ステップ503：メッセージ再構築部50は、再構築したメッセージに応じたエラーハンドリングを実行する。例えば、エラーが発生したコンポーネントをリセットする、前記再構築したメッセージをログファイル、ディスプレイ14、あるいは外部の監視端末20に通知する、主従系切り替えを実施する、などが考えられる。
【００３７】
もしステップ501で複数の要素メッセージ列を選出可能である場合、その数だけステップ501〜503を繰り返す。
【００３８】
ステップ504：メッセージ再構築部50は、処理が完了したメッセージを記憶領域70および要素メッセージテーブル80から削除する。具体的には、時刻t0からt1までに読み込んだメッセージを格納した前半部分71と、前半部分71から抽出した要素メッセージを削除する。一方、時刻t1からt2までに読み込んだ後半部分72のメッセージと、後半部分72から抽出した要素メッセージはこの時点では削除しない。理由を以下に示す。
【００３９】
後半部分72に含まれるメッセージの中には、時刻t1の直前に出力が開始された一連のメッセージの前半部分を含むことがある。この場合、前記一連のメッセージに対応する要素メッセージ列は、この時点では完全な形で要素メッセージテーブル80に含まれていないので、ステップ501において当該一連のメッセージが選出されることはない。ここでもし、ステップ502において後半部分72も削除すると、次のメッセージ読み込み時には前記一連のメッセージの後半部分のみがメッセージ記憶領域70および要素メッセージテーブル80に残ることになる。このときも、ステップ501では当該一連のメッセージは選出されない。これは、ステップ503にてエラーハンドリングすべきメッセージを喪失することを意味する。これを防ぐため、後半部分72の内容は削除せずに、次回の処理における前半部分73として残しておく。
【００４０】
ステップ505：次のメッセージを受け付けるため、メッセージ再構築部50は、メッセージ抽出部40に通知を送る。この通知を受けたメッセージ抽出部40は、ステップ400に戻り、同様の処理を繰り返す。
【００４１】
図８は、図６に示したメッセージ抽出部40、メッセージ再構築部50が行う処理のイメージ図である。図８上部に示すように、メッセージ抽出部40は、t0からt1、t1からt2までの時間を、一連のメッセージの出力時間に対し十分大きな時間とする。このとき、t0〜t1までに入力された一連のメッセージは、メッセージの全体を含むケース（A）とメッセージの前半部分のみを含むケース（B）が生じる。この場合、t0〜t1までに読み込まれたバッファの内容で要素メッセージの抽出と一連のメッセージの再構築処理が行われると、上記(B)を正しく再構築することができない。しかし、t0〜t2までに読み込まれたバッファの内容でこれらの処理を実行すると、上記(B)の再構築は可能である。この場合には、さらに(D)がメッセージの前半部分のみを含むため、正しく再構築することができないが、次のタイミングで上記同様の処理を行うことにより、(D)を正しく再構築することができる。
【００４２】
つまり、図８下部に示すように、t0〜t2の間に読み込まれたバッファに記憶されているメッセージについて処理を行うと、(A)、(B)、(C)については正しく再構築できるが、(D)は正しく再構築できない。一方、t1〜t3の間に読み込まれたバッファに記憶されているメッセージについて処理を行うと、(B)は正しく再構築できないが、 (C)および(D)は正しく再構築することができる。すなわち、tn〜tn+2の間に読み込まれたバッファに記憶されているメッセージに対し、tn〜tn+1の範囲の先頭にあるメッセージに含まれる要素メッセージを含む一連のメッセージについて再構築処理を行うことで、どのようなタイミングでも上記一連のメッセージを正しく再構築することができる。
【００４３】
このように、本処理では、メッセージ抽出部40、メッセージ再構築部50が、メッセージ記憶領域70のうち、ある一定時間内に読み込まれたメッセージを記憶する部分である第１の部分（例えば、前半部分71）、その次の一定時間内に読み込まれたメッセージを記憶する部分である第２の部分（例えば、後半部分72）に格納されたメッセージ、さらに次の一定時間内に読み込まれたメッセージを記憶する部分である第３の部分（例えば、次の前半部分71）に格納されているメッセージのうち、最初に、上記前半部分71および後半部分72に記憶されている先頭の要素メッセージを含むメッセージ（例えば、図８下部の(A)、(B)）について抽出、再構築する。続いて、後半部分72および次の前半部分71記憶され、最初のタイミングでは上記先頭の要素メッセージを含まなかった(C)、(D)について抽出、再構築する。
【００４４】
すなわち、本処理では、メッセージ記憶領域70に記憶されているメッセージを再構築する処理対象となる範囲をウィンドウに見立て、あたかもそのウィンドウを、メッセージを読み込むタイミングでシフトさせ、処理対象となるウィンドウにあるメッセージを順次抽出、再構築する処理を繰り返すことにより、メモリサイズの容量を抑えつつ、正しくメッセージを再構築することができるようになっている。
【００４５】
本方式において、特に必要となるメモリサイズは、メッセージ記憶領域70と要素メッセージテーブル80である。以下、そのサイズの概算方法を示す。
【００４６】
最低限必要なメッセージ記憶領域70のサイズは、図７における前半部分71と後半部分72の合計であることから、所定の待ち時間Tと、最大メッセージ流量Mより、2TMとして概算することができる。最大メッセージ流量Mは、例えば前述のLinux（登録商標）カーネルが出力するメッセージの例の場合、次のように予測することができる。Linux（登録商標）カーネルが出力するメッセージのうち、大量に出力される可能性があるものについては、流量制限がかけられている。その制限は既定値では5秒間に10メッセージである。この制限はメッセージの種類ごとにかけられているケースがあるので、その分を係数として掛け、<係数>×<平均メッセージ長>×10/5 により概算することができる。ネットワークを通してメッセージが入力される場合は、そのネットワーク帯域を流量とすることができる。
【００４７】
要素メッセージテーブル80の最低限必要なメモリサイズは、メッセージ記憶領域70に含まれ得る最大要素メッセージ数に比例する値となる。したがって、抽出対象の要素メッセージの最小サイズとメッセージ記憶領域70のサイズより、容易に求められる。
【００４８】
以上により、入力メッセージ流量が制限される状況においては、必要なメモリサイズを有限サイズに固定することができ、動的メモリ確保とメモリ枯渇による処理遅延を防止することが可能となる。
【実施例２】
【００４９】
本実施例では、実施例１において、メッセージ記憶領域70と要素メッセージテーブル80のサイズを拡大し、リングバッファ状に取り扱うことで、メッセージ抽出部40とメッセージ再構築部50の処理を非同期的に動作可能とするものである。これにより、メッセージ再構築部50の処理中にメッセージ抽出部40によるメッセージ読み込みが行われないことに起因する、メッセージ溢れ(メッセージの喪失)のリスクを削減する。
【００５０】
具体的には、まず図６のステップ406において、メッセージ抽出部40がメッセージ記憶領域70の空き領域が不足するまで通知待ちを行わないように変更する。さらに、ステップ401および403において、メッセージ抽出部40は、当該ステップで読み取ったメッセージをメッセージ記憶領域70に追記していく。このとき、図７の前半部分71、後半部分72のように、当該ステップで入力したメッセージがどの範囲にあるか意識しながら格納する点については変更しない。要素メッセージテーブルの扱いについてもメッセージ記憶領域70と同様である。
【００５１】
一方、メッセージ再構築部50は、ステップ500において、メッセージ記憶領域70内に二つ以上の部分（例えば、前半部分71および後半部分72）が残っている場合、待ちを行わないように変更する。そしてステップ501では、メッセージ記憶領域70内の最古の部分（前半部分71）とその次の部分（後半部分72）から抽出された要素メッセージ列に対し、前述のパターンマッチング処理を行うように変更する。例えば、直近のステップ504で削除されたのが時刻tnに格納された部分（前半部分71の1つ前の部分）であった場合、メッセージ再構築部50は、時刻tn+1（前半部分71）とtn+2（後半部分72）に格納された部分を対象に処理を行う。
【実施例３】
【００５２】
本実施例は実施例１において、メッセージ抽出部40が所定時間待ってメッセージを読む代わりに、随時メッセージを読み込み、その時刻をタイムスタンプとして各メッセージに付与するようにした変形方式である。予めメッセージにタイムスタンプが付与されている場合、改めてタイムスタンプを付与する必要はない。
【００５３】
具体的には、図６のステップ401〜403において、メッセージ抽出部40は、2T時間(Tは前述の所定の待ち時間)の間、メッセージを読み続け、各メッセージに読み込み時刻のタイムスタンプを付加し、メッセージ記憶領域70に格納するように変更する。さらに、ステップ501では、メッセージ再構築部50が、前述の2T時間内にメッセージ記憶領域70に格納されたメッセージについて、最初のT時間に属するメッセージを前半部分71、次のT時間に属するメッセージを後半部分72として、実施例１と同様に後続の処理を行うように変更する。
【実施例４】
【００５４】
本実施例は、実施例１において所定時間待つ代わりに、一定の区切り位置やタイミングが到来するまで出力中の一連のメッセージの出力完了を待つように変更した変形例である。例えば、前述のLinux（登録商標）カーネルが出力する一連のメッセージの場合、基本的に一連のメッセージの出力は連続的に行われ、その間にプロセススイッチが行われるポイントがない(ただし、プリエンプティブカーネルである場合を除く)。したがって、メッセージ抽出部40は、演算装置11上の並列実行可能な全ての単位について、少なくとも1回以上、入力インタフェース30が受け取るメッセージを出力する他のシステムや装置側においてプロセススイッチが行われることを待つことにより、間接的に出力中の一連のメッセージの出力完了を待ち、あるプロセススイッチから次のプロセススイッチまでの間に出力されたメッセージについて、要素メッセージの抽出、一連のメッセージの再構築を行うことができる。つまり、メッセージ抽出部40は、複数のコンテキストの出力側においてプロセススイッチのような一定の区切り位置またはタイミングが到来するまでメッセージの出力を待ち、その区切り位置またはタイミングの間に出力されたメッセージを対象として記要素メッセージに分解することができる。
【実施例５】
【００５５】
本実施例は、実施例１の図６のステップ501において、メッセージ記憶領域70の後半部分72に先頭の要素メッセージを含む一連の要素メッセージを、選出の対象外とするように変更するものである。結果として、当該一連の要素メッセージは、後半部分72が次の周回における前半部分73（図７）になったときのみ、選出されることになる。すなわち、メッセージ再構築部50は、選出された要素メッセージの中から、後半部分72に先頭の要素メッセージを含むメッセージ記憶領域70から削除されていないメッセージから得られた先頭の要素メッセージを選出する。つまり、一連の要素メッセージの先頭から終端までが、あるタイミングにおける後半部分72内に完全に含まれる場合、二重に再構築処理(ステップ502)とエラーハンドリング処理(ステップ503)を実施することを防止することができる。
【符号の説明】
【００５６】
30…入力インタフェース、40…メッセージ抽出部、50…メッセージ再構築部、60…出力インタフェース、70…メッセージ記憶領域、80…要素メッセージテーブル。
【図１】
0006295176.tif 000002
【図２】
0006295176.tif 000003
【図３】
0006295176.tif 000004
【図４】
0006295176.tif 000005
【図５】
0006295176.tif 000006
【図６】
0006295176.tif 000007
【図７】
0006295176.tif 000008
【図８】
0006295176.tif 000009