首页 > 解决方案 > Splunk:如何在一个查询中使用多个正则表达式?

问题描述

我有四个正则表达式,我想将它们用于一个查询。所有正则表达式本身都可以,但我没有找到如何在 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

但我得到了一个错误。

标签: regexsplunksplunk-query

解决方案


我通常会尽量避免将多个字段提取放在一个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......但这并不总是可能的


推荐阅读