ルール・ベース・パーサーのパーサー・コンポーネントの構成

パーサーの役割は、抽出で区切られたメッセージを取得し、 ストリング値と共通ベース・イベント属性とのマッピング・セットをビルドすることです。

前提条件:

パーサー・コンポーネントを構成するには、 パーサーの 2 つの実行レベルに対する規則を構成する必要があります。

グローバル処理

パーサー・コンポーネントのグローバル処理は、グローバルな正規表現規則セットを受け取り、 これらの規則を抽出から提供されたメッセージ結果に適用します。

パーサー・コンポーネントのグローバル処理規則を構成するには、以下のステップに従います。

  1. アダプター構成エディターの左側のペインで、「構成」> 「コンテキスト・インスタンス」> 「パーサー」 の順にノードを展開します。右側のペインにパーサーの情報が表示されます。

    右側のペインにパーサー構成の詳細が表示される

  2. 説明」フィールドにパーサーの説明を入力します。
  3. ログ・レコードに、レコード内のエレメントを区切るセパレーター・トークンが入っている場合は、 「セパレーター・トークン」フィールドにそのトークンを入力します。 例えば、myapp アプリケーション・ログ・レコードの場合、 エレメントとエレメントの間のセパレーター・トークンはダブルスペースです。
    <March 14, 2004 10:25:21 EST>  application:myapp  severity:3  message:WARNING-file style.css missing
    セパレーター・トークンは、正規表現 [ ]{2} で指定することができます。
  4. ログ・レコードに名前と値のペアのパターンのエレメントが入っている場合は、 「指定トークン」フィールドに名前を値に関連付けるトークンを指定することができます。 上記と同じ例を使用すると、myapp ログ・レコードでは、 指定トークンはコロン : になります。

注: グローバル処理フェーズで構文解析された値は、先頭と末尾の空白文字が切り取られます。 したがって、値には先頭と末尾の空白文字がないこと前提にして、位置の値を使用する置換規則を 書き込むことができます。

属性処理

パーサーの 2 番目の実行フェーズでは、特定の置換規則を適用して、 共通ベース・イベント属性に割り当てる値を識別します。

以下の共通ベース・イベント属性が必要です。

共通ベース・イベント・エレメントおよびそれらの関連属性の全リストについては、 共通ベース・イベント・モデルを参照してください。

エレメントと属性の追加および構成

エレメントを追加および構成するには次のようにします。

  1. アダプター構成エディターの左側のペインで、 「構成」>「コンテキスト・インスタンス」>「パーサー」 >「共通ベース・イベント」と選択します。 右側のペインに共通ベース・イベントの情報が表示されます。
  2. エレメントを追加するには、「共通ベース・イベント」ノードを右クリックし、 ポップアップ・メニューから追加するエレメントを選択します。エレメントが 「共通ベース・イベント」ノードの下に作成されます。
    下の例では、状態 エレメントが追加されています。

    situation 属性は右側ペインに表示されます。

  3. 追加したエレメントを構成するには、そのエレメントをクリックします。エレメント・プロパティー が右側のペインに表示されます。
  4. 親で必須」チェック・ボックスを使用すると、親エレメントを有効にするために、 このエレメントが有効値をもつ必要があるかどうかを指定できます。上の例で 状態 エレメント のチェック・ボックスを選択すると、パーサーは、共通ベース・イベント・オブジェクトが 有効な状態エレメントをもつ必要があることを指示されます。処理中に 状態 エレメント がヌル値を戻すと、パーサーは共通ベース・イベント・オブジェクトの他の子エレメントを処理しなくなります。 これは、必須の子エレメントが無効な値を戻したため、パーサーは共通ベース・イベント・オブジェクト が無効であることをすでに認識しているためです。
  5. 子の選択」チェック・ボックスを使用すると、有効な子属性またはエレメントが有効値 を戻したときに、このエレメントの処理を停止するかどうかを指定できます。例えば、 上記の 状態 エレメントについて考えてみます。このエレメントは、それぞれが自分自身の サブツリーをもった 3 つの子エレメントをもっています。状態 エレメントの「子の選択」 チェック・ボックスを選択すると、有効値を戻す最初の子サブツリーで構文解析が停止します。この機能により、 複数の子エレメントや属性をもつエレメントの構文解析パフォーマンスが大幅に向上します。
    注:categoryName は状態の必須の属性ですが、状態タイプ・エレメントのいずれかが値を戻すと、 汎用ログ・アダプターは categoryName を適切な値に設定します。

属性を追加および構成するには、次のようにします。

  1. アダプター構成エディターの左側のペインで、 「構成」>「コンテキスト・インスタンス」>「パーサー」 >「共通ベース・イベント」と選択します。 右側のペインに共通ベース・イベントの情報が表示されます。
  2. 属性を追加するには、「共通ベース・イベント」ノードを右クリックし、 ポップアップ・メニューから追加する属性を選択します。選択した属性が「共通ベース・イベント」ノードの下に作成されます。
    下の例は、「共通ベース・イベント」ノードの下に追加された msg 属性を示しています。

    msg 属性が右側のペインに表示される

  3. 属性をクリックして、右側ペインに属性プロパティーを表示します。
  4. 上記の例で、すべてのログ・レコードに msg 属性が含まれていない場合は、 「直前の一致置換をデフォルトとして使用する」チェック・ボックスを選択します。 これで、最後に一致したメッセージの値が msg 属性に割り当てられます。
  5. msg のデフォルト値を設定する場合は、 「デフォルト値」フィールドに値を入力します。 このデフォルト値は、置換規則が存在または一致せず、 「直前の一致置換をデフォルトとして使用する」チェック・ボックスが選択されていない場合、 または直前の一致する値が保管されていない場合にのみ使用されます。
  6. 属性の「親で必須」チェック・ボックスを使用すると、親エレメントを有効にするために、 この属性が有効値をもつ必要があるかどうかを指定できます。

属性置換規則の追加および構成

共通ベース・イベント属性に置換規則を追加するには、 「属性」>「追加」>「置換規則」と選択します。 置換規則の詳細がエディターの右側のペインに表示されます。

  1. ログ・レコードにトークンで区切られた名前と値のペアが入っている場合は、 「」フィールドを使用することができます。 名前と値のペアの値を抽出するには、式 $h('nameofNameValuePair') を使用します。
    例えば、myapp アプリケーションから同じログ・レコードを使用するとします。
    <March 14, 2004 10:25:21 EST>  application:myapp  severity:3  message:WARNING-file style.css missing
    セパレーター・トークンを []{2}、指定トークンを : と指定し、 メッセージを抽出する式を $h('message') にします。
    」フィールドのその他の応用については、 「桁」フィールドの使用のトピックを参照してください。
  2. 一致」には、レコード内で検索するパターンを指定します。 「桁」フィールドを指定した場合は、レコードの一部が検索されます。 それ以外の場合は、レコード全体で指定したパターンの検索が行われます。 このパターンの中で、括弧を使用して特定のデータをグループにまとめ、 「置換」フィールドで参照することができます。パターンがレコード内のデータと一致すると、 この規則が書き込まれる共通ベース・イベント属性に、「置換」フィールドの値に基づいて値が割り当てられます。 「一致」フィールドが空のままの場合は、規則が一致するものと見なされます。
    myapp ログ・レコードの例で、「桁」フィールドによって抽出したメッセージの値を突き合わせるには、 以下の正規表現を使用することができます。
    ^(¥w+)-(.*)
    この一致するパターンは 2 つのグループから成り立ちます。 最初のグループは、文字とそれに続くダッシュからなるセットです。 2 番目のグループは、ダッシュの後ろから、 「桁」フィールドの指定で定義されたメッセージ値の終わりまでのすべての値です。
  3. 置換」フィールドに、 一致の結果として共通ベース・イベント属性に割り当てる値を指定します。 値は、一致するパターンで定義されるグループを表すリテラル $1、$2 などを使用して、 一致したストリングから抽出することができます。
    myapp ログ・レコードの例で、warning の値を共通ベース・イベント msg 属性に割り当てる場合は、 置換を $2 として指定します。

    構文解析されるログ・レコードの例と、「フォーマッター結果」ビューに表示される結果

  4. 「桁」、「一致」、および「置換」フィールドと一致した値でカスタム構文解析ロジックを実行する場合は、 「置換拡張機能クラス」を使用することができます。 ユーザー・クラスは、汎用ログ・アダプターで実行するために、 汎用ログ・アダプター・インターフェース
    org.eclipse.hyades.logging.adapter.parsers.ISubstitutionExtension 
    を 実装する必要があります。

  5. 時刻形式」フィールドを使用して、 creationTime 属性の置換規則を作成することができます。 このフィールドに、Java 時刻パターン・ストリングを指定します。 入力されたパターンは、日付を long 値として生成する java.text.SimpleDateFormat クラスを使用して 「桁」、「一致」、および「置換」フィールドと一致した値を構文解析する場合に使用されます。 この値を使用して、 共通ベース・イベントに必要な XML スキーマの dateTime 形式で日付のストリング値が生成されます。
    myapp ログ・レコードの例では、「時刻形式」規則は以下のようになります。

    Java の単純な日付形式クラスを使用した「時刻形式」フィールドのサンプル規則

  6. アダプター構成ファイルを保管して変更内容を適用します。
  7. 規則をテストするには、「アダプターの再実行「アダプターの再実行」アイコンのピクチャー をクリックしてアダプターを実行します。 結果が「フォーマッター結果 (Formatter Result)」ビューに表示されます。 ヒント: 表示を開始するレコード数を指定できます。「アダプターの再実行」アイコン から使用できるドロップダウンを使用し、「レコードから開始」を選択します。これによって、 開始するレコード数を指定できるダイアログが開きます。
  8. 次のイベントの表示「次のイベントの表示」アイコンのピクチャー アイコンをクリックし、 作成した規則を使用して生成された共通ベース・イベント属性を表示します。

注: Java の単純な日付形式について詳しくは、 javadoc (java.sun.com/j2se/1.4.2/docs/api/java/text/SimpleDateFormat.html) を参照してください。

パーサー規則が完了したら、アダプター構成ファイルのアウトプッター・コンポーネントを構成することができます。

関連概念
Hyades 汎用ログ・アダプターの概説
共通ベース・イベント・フォーマットの仕様

関連タスク
アウトプッター・コンポーネントの構成