使用 Splunk 中的 rex 命令为 return xml 子元素创建正则表达式
Create regular expression using the rex command in Splunk to return xml child elements
我正在尝试使用 Splunk 命令 rex,它使用正则表达式从日志语句中提取数据。这是xml感兴趣的部分:
<tmsTrip xmlns="removed_for_security" xmlns:ns2="removed_for_security">
<recordType>PURCHASEDLINEHAUL</recordType>
<eventType>DISPATCH</eventType>
<updatedDateGMT>2020-05-21T17:22:55.000Z</updatedDateGMT>
<origin>
<ns2:numberCode>923</ns2:numberCode>
<ns2:numberType>2</ns2:numberType>
</origin>
<destination>
<ns2:numberCode>72</ns2:numberCode>
<ns2:numberType>2</ns2:numberType>
</destination>
我需要出发地和目的地的 numberCode。
这个rex return第一个,923.
rex field=_raw "\<ns2\:numberCode\>(?P<origin>[^\<]+)"
我需要一只霸王龙 return 第二个,72。
您可以使用 max_match
选项告诉 rex
到 return 他们两个。
| rex max_match=0 "\<ns2\:numberCode\>(?P<origin>[^\<]+)"
| eval originCode = mvindex(origin, 0), destCode = mvindex(origin, 1)
不幸的是,无法知道匹配的顺序,因此如果 XML 中的目的地先于起点,则此操作将失败。
您应该可以使用 spath
提取整个 XML 并参考 "origin.numberCode" 和 "destination.numberCode",但我没有足够的经验命令提供很多指导。
我正在尝试使用 Splunk 命令 rex,它使用正则表达式从日志语句中提取数据。这是xml感兴趣的部分:
<tmsTrip xmlns="removed_for_security" xmlns:ns2="removed_for_security">
<recordType>PURCHASEDLINEHAUL</recordType>
<eventType>DISPATCH</eventType>
<updatedDateGMT>2020-05-21T17:22:55.000Z</updatedDateGMT>
<origin>
<ns2:numberCode>923</ns2:numberCode>
<ns2:numberType>2</ns2:numberType>
</origin>
<destination>
<ns2:numberCode>72</ns2:numberCode>
<ns2:numberType>2</ns2:numberType>
</destination>
我需要出发地和目的地的 numberCode。 这个rex return第一个,923.
rex field=_raw "\<ns2\:numberCode\>(?P<origin>[^\<]+)"
我需要一只霸王龙 return 第二个,72。
您可以使用 max_match
选项告诉 rex
到 return 他们两个。
| rex max_match=0 "\<ns2\:numberCode\>(?P<origin>[^\<]+)"
| eval originCode = mvindex(origin, 0), destCode = mvindex(origin, 1)
不幸的是,无法知道匹配的顺序,因此如果 XML 中的目的地先于起点,则此操作将失败。
您应该可以使用 spath
提取整个 XML 并参考 "origin.numberCode" 和 "destination.numberCode",但我没有足够的经验命令提供很多指导。