メインコンテンツまでスキップ
Sumo Logic Japanese

XML 形式のログの parse

XML operator は XPath 1.0 仕様のサブセットを使用して、XML ログのフィールドを parse できます。この operator を使用すると、XPath リファレンスを使用して XML ログから parse するフィールドを指定できます。

XML operator で parse するには、取り込まれた XML ファイルが適切にフォーマットされており、有効である必要があります。XML が無効な場合は、エラーが発生します。

構文

  • | parse XML [field=<field_name>] "<xpath_expression>"[, "<xpath_expression>"] [as <fields>] [nodrop]

オプション

  • field=<field_name> 

    field=fieldname オプションを使用すると、フィールドを指定して、デフォルト メッセージ以外を parse できます。詳細については、「Parse field」を参照してください。 

  • nodrop 

    nodrop オプションは parse 用語のセグメントと一致しないメッセージも結果に含めるようにします。詳細については、「Parse nodrop」を参照してください。

ルール

  • フィールドを指定しないと、受信メッセージのテキスト全体が使用されます。
  • XPath が無効な場合は、エラーが発生します。
  • フィールド名の数が指定された XPath の数と一致しない場合は、エラーが発生します。
  • フィールドが適切な XML 形式ではない場合は、nodrop を指定しない限り Null が返されます。
  • XPath がドキュメント内のどの部分とも一致しない場合は、nodrop を指定しない限り Null が返されます。
  • XPath が要素と一致する場合は、その文字列表現が返されます。
  • XPath が複数の要素と一致する場合は、最初の一致が返されます。

XPath サブセットの制限事項

XPath 1.0 の全仕様はサポートされていません。パフォーマンスの向上のため、Sumo Logic では次の制限を含む仕様のサブセットをサポートしています。

前方のみ

XML operator は XML パスのツリーを前方にのみ移動できます。たとえば、次の式は使用できません。

/af/nursery/../@type

場所のフル パス

parse する要素のフル パスを指定する必要があります。このため、"self-or-descendant" 式は使用できません。たとえば、次のパスは使用できません。

//af

/af//nursery

拡張構文の軸指定子は使用できない

拡張構文は使用できません。たとえば、次の式は使用できません。

/child::af

/descendant-or-self::af

提供されている parse オペレーションは次の XML ログを参照します。

<users>
   <user id="123" role="manager">
      <first_name>Sally</first_name>
      <last_name>Jones</last_name>
      <email>sally@emailplace.com</email>
   </user>
   <user id="456" role="contributor">
      <first_name>Bob</first_name>
      <last_name>Smith</last_name>
      <email>bob@emailplace.com</email>
   </user>
</users>

要素値の parse

first_name 要素値のような XPath 参照を使用して情報を parse できます。

* | parse xml "/users/user/first_name/text()" as first_name

text() 関数は、要素からテキスト値をプルします。結果として、Sally という値が格納された first_name という名前のフィールドが返されます。

配列内の 2 番目の user 要素を parse するには、次のように指定します。

* | parse xml "/users/user[2]/first_name/text()" as first_name

結果として、Bob という値が格納された first_name という名前のフィールドが返されます。

配列内の最後の要素を parse するには、次のように指定します。

* | parse xml "/users/user[last()]/first_name/text()" as first_name

属性 (この例では where id="456") に基づいて要素を parse するには、次のように指定します。

* | parse xml "/users/user[@id=456]/first_name/text()" as first_name"

属性値の parse

id 属性を parse するには、次のように指定します。

* | parse xml "/users/user/@id" as id

結果として、123 という値が格納された id という名前のフィールドが返されます。

2 番目の user 要素から id 要素を parse するには、次のように指定します。

* | parse xml "/users/user[2]/@id" as id

リスト内の最後のユーザから id 値を parse するには、次のように指定します。 

* | parse xml "/users/user[last()]/@id" as id

複数値の parse

1 つのメッセージから複数の要素と属性の値を別々のフィールドに parse するには、Xpath 式のコンマ区切りリストを使用します。たとえば、上の例から first_name 要素値と id 属性を parse するには、次のように指定します。 

* | parse xml "/users/user/@id", "/users/user/first_name/text()" as id, first_name

  • この記事は役に立ちましたか?