Splunk 比较来自不同来源的两个 rex 查询



我有两个查询...

(1(提交日志查询:

index=xxx_prod host="foo.org" 5032 submit | rex "id=PO:(?<PO>d*)" | dedup PO | table PO _time

(2(保存的日志查询:

index=xxx_prod host="bar.org" | rex "savePO.*POId=(?<PO>d*).*"responseCode":200" | dedup PO | table PO _time

我想比较来自不同服务的POtimestamp(来自_time字段(结果 一个是提交事件,另一个是保存事件。 我想将其显示为下表

PO    | submit_date             | save_date               | elapse_time_min | isSave   
1000001 | 2020-01-18 02:09:49.022 | 2020-01-18 02:51:51q289 | 41              | true
1000002 | 2020-01-18 03:18:25.780 | 2020-01-18 03:59:08.695 | 49              | true
1000003 | 2020-01-18 03:18:25.780 |                         |                 | false

您需要查看事务命令,该命令有助于基于字段加入事件,在您的情况下,PO

(index=xxx_prod host="foo.org" 5032 submit) OR (index=xxx_prod host="bar.org") | rex "id=PO:(?<PO>d*)" | rex "savePO.*POId=(?<PO>d*).*"responseCode":200" | transaction keeporphans=true PO | eval save_date = _time + duration | convert ctime(save_date) | table _time save_date duration

您需要正确检查rex命令提取,上面的transaction命令使用的是keeporphans,它保留没有匹配的保存事件的提交事件。

在这种情况下,您可以在字段PO上使用左连接。

index=xxx_prod host="foo.org" 5032 submit | rex "id=PO:(?<PO>d*)" | dedup PO | table PO _time
|rename _time as submit_date
|join type=left PO
[search index=xxx_prod host="bar.org" | rex "savePO.*POId=(?<PO>d*).*"responseCode":200" | dedup PO | table PO _time
|rename _time as save_date]
|eval elapse_time_min=round((save_date-submit_date)/60),0)
|eval isSave=if(isnull(save_date),"false","true")
|eval save_date=strftime(save_date,"%Y-%m-%dT%H:%M:%S.%Q")
|eval submit_date=strftime(submit_date,"%Y-%m-%dT%H:%M:%S.%Q")

最新更新