首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Regex找不到所有故障的存在

Regex找不到所有故障的存在
EN

Stack Overflow用户
提问于 2020-02-06 15:45:44
回答 1查看 53关注 0票数 0

状态:“失败: DNS解析失败: Rcode域(3)”,“CheckedTime”:datetime.datetime(2017年,2,1,14,47,38,382000,tzinfo=tzlocal())},{“区域”:'us-east-1','IPAddress':'01.000.2.12','StatusReport':{‘StatusReport’:{'Status':‘成功: DNS解析成功: Rcode域(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解析失败: 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”:{“状态”:“失败: DNS解析失败: Rcode域(3)”,“CheckedTime”:datetime.datetime(2017,2,1,14,47,42,801000,tzinfo=tzlocal())}},{'Region':'us-west-2','IPAddress':'01.000.18.10','StatusReport':{ 'StatusReport':‘失败: DNS解析失败: Rcode域(3)’,'CheckedTime':datetime.datetime(2017,2,1,14,47,25,189000,tzinfo=tzlocal()},{'Region':'us-east-1',‘47地址’:'01.000.1.10','StatusReport':{‘状态’:‘失败: DNS解析失败: Rcode域(3)’,'CheckedTime':datetime.datetime(2017年,2,1,14,47,42,293000,tzinfo=tzlocal()}})}}

问题

我需要在字符串和相关消息中找到任何失败,它不应该在消息中寻找任何成功。

状态:‘失败: DNS解析失败: Rcode域(3)’,'CheckedTime':datetime.datetime(2017年,2,1,14,47,38,382000,tzinfo=tzlocal()}},{'Region':'us-east-1','IPAddress':'01.000.2.12',‘状态’:‘失败: DNS解析失败: Rcode域(3)’,'CheckedTime':datetime.datetime(2017年,2,1,14,47,34,715000,Tzinfo=tzlocal()}},{'Region':'us-west-2','IPAddress':'01.000.22.10‘等。

我尝试了什么:

代码语言:javascript
复制
Status':.+Failure.*(?=Success)

代码语言:javascript
复制
'Status':.+

但这并没有给我我想要的。

救命啊!!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-11 05:11:27

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

考虑到您的示例数据不是JSON,我们需要回到正则表达式。

这是一个非常基本的正则表达式,它提取从初始{到与数据匹配的双}}的所有内容。(?m)max_match=0告诉斯普伦克要尽可能多地匹配。

代码语言:javascript
复制
| rex max_match=0 field=raw "(?m)(?<r>{.*}})"

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

代码语言:javascript
复制
| mvexpand r | fields - raw

接下来,对每个条目执行rex操作,只提取status_msg

代码语言:javascript
复制
| rex field=r "'Status': '(?<status_msg>[^']+)'"

最后,删除status_msg包含Success的事件/行

代码语言:javascript
复制
| where NOT status_msg LIKE "%Success%"

下面是处理数据的正则表达式的一个示例。

代码语言:javascript
复制
| 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%"
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60098764

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档