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、端口和一些消息提取到三个新字段中:ip
、port
、msg
当然,如果你可以这应该在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
我有四个要用于一个查询的正则表达式。所有的正则表达式本身都可以,但我没有找到如何在 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、端口和一些消息提取到三个新字段中:ip
、port
、msg
当然,如果你可以这应该在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