使用 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",但我没有足够的经验命令提供很多指导。