Regex找不到所有故障

问题描述 投票:-1回答:1

状态]:'失败:DNS解析失败:Rcode Domain(3)','CheckedTime':datetime.datetime(2017,2,1,14,14,47,38,382000,tzinfo = tzlocal())}}, {'Region':'us-east-1','IPAddress':'01 .000.2.12','StatusReport':{'Status':'Success:DNS resolution Success:Rcode Domain(3)','CheckedTime': datetime.datetime(2017,2,1,14,14,47,35,371000,tzinfo = tzlocal())}},{'Region':'us-west-1','IPAddress':'01 .000.14.10', 'StatusReport':{'Status':'失败:DNS解析失败:Rcode Domain(3)','CheckedTime':datetime.datetime(2017,2,1,1,14,47,34,715000,tzinfo = tzlocal() )}},{'Region':'us-west-2','IPAddress':'01 .000.22.10','StatusReport':{'Status':'Failure:DNS resolution failed:Rcode Domain(3)', 'CheckedTime':datetime.datetime(2017,2,1,1,14,47,42,801000,tzinfo = tzlocal())}},{'Region':'us-west-2','IPAddress':'01 .000 .18.10','StatusReport':{'Status':'故障:DNS解析失败:Rcode Domain(3)','CheckedTime':datetime.datetime(2017,2,1,1,14,47,25,189000,tzinf o = tzlocal())}},{'Region':'us-east-1','IPAddress':'01.000.1.10','StatusReport':{'Status':'Failure:DNS解析失败:Rcode域(3)','CheckedTime':datetime.datetime(2017,2,1,1,14,47,42,293000,tzinfo = tzlocal())}}}]

问题

我需要在字符串和关联的消息中查找任何失败,并且不应在消息中寻找任何成功。

状态]:'失败:DNS解析失败:Rcode Domain(3)','CheckedTime':datetime.datetime(2017,2,1,14,14,47,38,382000,tzinfo = tzlocal())}}, {'Region':'us-east-1','IPAddress':'01 .000.2.12','状态':'失败:DNS解析失败:Rcode Domain(3)','CheckedTime':datetime.datetime(2017,2,1,1,14,47,34,715000,tzinfo = tzlocal())}},{ '区域':'us-west-2','IP地址':'01 .000.22.10'等

我尝试过的事情:

Status':.+Failure.*(?=Success)

'Status':.+

但是它不能满足我的需求。

请帮助!

regex splunk regex-greedy
1个回答
0
投票

一个主要问题是数据也很相似,但不完全是JSON。 Splunk可以在索引时间或使用诸如spath之类的命令很好地处理JSON。

鉴于您的示例数据不是JSON,我们需要使用正则表达式。

这是一个非常基本的正则表达式,它提取从初始{到匹配您数据的双精度}}的所有内容。 (?m)max_match=0告诉Splunk进行尽可能多的匹配。

| rex max_match=0 field=raw "(?m)(?<r>{.*}})"

现在Splunk已匹配事件中的每个条目,我们可以将它们拆分为单独的事件,并删除完整事件。

| mvexpand r | fields - raw

接下来,对每个条目执行一次rex,仅提取status_msg

| rex field=r "'Status': '(?<status_msg>[^']+)'"

最后,将事件/行放在status_msg包含Success的位置

| where NOT status_msg LIKE "%Success%"

这里是正则表达式处理数据的示例。

| makeresults | eval raw="{[{'Region': 'us-east-1', 'IPAddress': '01.000.2.12', 'StatusReport': {'Status': 'Success: DNS resolution Success: Rcode Domain(3)', 'CheckedTime': datetime.datetime(2017, 2, 1, 14, 47, 35, 371000, tzinfo=tzlocal())}},
  {'Region': 'us-west-1', 'IPAddress': '01.000.14.10', 'StatusReport': {'Status': 'Failure: DNS resolution failed: Rcode Domain(3)', 'CheckedTime': datetime.datetime(2017, 2, 1, 14, 47, 34, 715000, tzinfo=tzlocal())}},
  {'Region': 'us-west-2', 'IPAddress': '01.000.22.10', 'StatusReport': {'Status': 'Failure: DNS resolution failed: Rcode Domain(3)', 'CheckedTime': datetime.datetime(2017, 2, 1, 14, 47, 42, 801000, tzinfo=tzlocal())}}, 
  {'Region': 'us-west-2', 'IPAddress': '01.000.18.10', 'StatusReport': {'Status': 'Failure: DNS resolution failed: Rcode Domain(3)', 'CheckedTime': datetime.datetime(2017, 2, 1, 14, 47, 25, 189000, tzinfo=tzlocal())}},
  {'Region': 'us-east-1', 'IPAddress': '01.000.1.10', 'StatusReport': {'Status': 'Failure: DNS resolution failed: Rcode Domain(3)', 'CheckedTime': datetime.datetime(2017, 2, 1, 14, 47, 42, 293000, tzinfo=tzlocal())}}]}"
| rex max_match=9999 field=raw "(?m)(?<r>{.*}})"
| mvexpand r | fields - raw
| rex field=r "'Status': '(?<status_msg>[^']+)'"
| where NOT status_msg LIKE "%Success%"
© www.soinside.com 2019 - 2024. All rights reserved.