Splunk:如何在一个查询中使用多个正则表达式?

Splunk: How to use multiple regular expressions in one query?

我有四个要用于一个查询的正则表达式。所有的正则表达式本身都可以,但我没有找到如何在 pne 查询中一起使用它们:

这些是正则表达式:

表达式 1:

(?<time>\d{4}.\d{2}.\d{2}\s\d{2}.\d{2}.\d{2}.\d{3})

表达式 2:

deviceId...(?<deviceId>\d+)

表达式 3:

error....code...(?<errorCode>\w+)

表达式 4:

"\"message...(?<errorMessage>.*?)\"

我在 Splunk 中尝试了这个:

 source="xyz.log" |rex field=_raw  "(?<time>\d{4}.\d{2}.\d{2}\s\d{2}.\d{2}.\d{2}.\d{3}) deviceId...(?<deviceId>\d+) error....code...(?<errorCode>\w+) "\"message...(?<errorMessage>.*?)\"" |table time deviceId errorCode errorMessage

但是我得到一个错误。

我通常尽量避免将多个字段摘录放在一个 rex

相反,我喜欢这样的顺序:

<search>
| rex field=_raw "(?<ip>\d+\.\d+\.\d+\.\d+):"
| rex field=_raw "\d+:(?<port>\d+)"
| rex field=_raw "\d+:\d+\s+(?<msg>.+)"
<more stuff here>

在这个例子中,我将 IP、端口和一些消息提取到三个新字段中:ipportmsg

当然,如果你可以这应该在props.conf完成...但这并不总是可能的

您可以使用 OR | 运算符组合正则表达式,但使用多个 rex 命令要容易得多。使用多个命令的优点是允许关键字与顺序无关。

source="xyz.log" 
|rex field=_raw  "(?<time>\d{4}.\d{2}.\d{2}\s\d{2}.\d{2}.\d{2}.\d{3})" 
|rex "deviceId...(?<deviceId>\d+)"
|rex "error....code...(?<errorCode>\w+)"
|rex "\\"message...(?<errorMessage>.*?)\\"" 
|table time deviceId errorCode errorMessage