连接两个没有预定义字段的Splunk查询

时间:2019-04-21 07:50:54

标签: splunk splunk-query

我正在尝试加入2个splunk查询。但是,在这种情况下,两个查询之间的公共字符串不是预定义的splunk字段,而是以不同的方式记录的。我创建了可分别标识字符串的正则表达式,但是当我尝试使用join进行组合时,却没有得到结果。

我有这样的日志-

Logline 1-

21-04-2019 11:01:02.001 server1 app1    1023456789 1205265352567565 1234567Z-1234-1234-1234-123456789123    Application Completed 

Logline 2-

21-04-2019 11:00:00.000 journey_ends server1    app1 1035625855585989 .....(lots of text) commonID:1234567Z-1234-1234-1234-123456789123 .....(lots of text) status(value) OK

第二条日志行也可以是NOTOK

Logline 2-

21-04-2019 11:00:00.000 journey_ends server1    app1 1035625855585989 .....(lots of text) commonID:1234567Z-1234-1234-1234-123456789123 .....(lots of text) status(value) NOTOK 

我已经尝试了多种方法,但是我能想到的最好的方法是-

index=test "journey_ends" | rex "status(value) (?<StatusType>[A-Z][A-Z]*)" | rex "commonID\:(?<commonID>[^\t]{37})" | table StatusType, commonID | join type=inner commonID [ search index=test "Application Completed" | rex "^(?:[^\t\n]*\t){7}(?P<commonID>[^\t]+)" | table _time, commonID] | chart count over StatusType by commonID 

但是,以上查询没有向我提供统计信息。在详细模式下,我只能看到查询1的事件。请注意,上述2个查询分别正确运行。

但是,当前我必须首先运行查询以从“ Application Completed”日志行中获取commonID​​,然后在另一个查询中提供在结果第一个查询中找到的commonID​​列表作为输入,并从日志行中找到每个commonId的状态值2.

预期结果(在表中):

StatusType commonID OK  1234567Z-1234-1234-1234-123456789123 NOTOK  1234567Z-1234-1234-1234-985625623541 

1 个答案:

答案 0 :(得分:0)

您可以尝试以下查询吗,

index=main "Application Completed" | rex "(?<common_id>[[:alnum:]]+-[[:alnum:]]+-[[:alnum:]]+-[[:alnum:]]+-[[:alnum:]]+)" | table _time, common_id| join type=inner common_id [ search index=main | rex "status\(value\)\s+(?<status>.+)$" | rex "(?<common_id>[[:alnum:]]+-[[:alnum:]]+-[[:alnum:]]+-[[:alnum:]]+-[[:alnum:]]+)" | table status, common_id]