Splunk:显示不同事件中出现的所有 id

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

我的数据如下:

event_A: { [-]
     processingTimeMillis: 2178
      event_A_recipients: [ [-]
       id1,
       id2,
       id3,
       id4,
     ]
   }
   eventType: event_A

event_B: { [-]
     processingTimeMillis: 2178
      event_B_recipients: [ [-]
       id1,
       id3,
     ]
   }
   eventType: event_B

event_B: { [-]
     processingTimeMillis: 2178
      event_B_recipients: [ [-]
       id2
     ]
   }
   eventType: event_B

上面是我的源数据的示例。事件有两种类型,event_A 和 event_B(json 数据)。我试图列出所有与 event_A 关联的 id,但不列出与 event_B 关联的 id。我尝试使用 spath 和子搜索,但到目前为止没有任何效果。

以上数据应该是id4。

splunk splunk-query
1个回答
0
投票

好吧,这看起来很棘手(当然,上次我说其他人也来了,回答起来更容易)。我的做法是:

  • 首先,您需要执行
    transaction
    将所有事件合并为一个。
  • 然后你需要将它
    mvexpand
    复制到A的id的副本上。
  • 然后你可以
    mvappend
    使用A的id的扩展值来复制B的id。 (如果已经存在,则不会添加)
  • 然后您可以创建一个变量,该变量是
    null()
    或 A 的 id 扩展值的值,具体取决于
    mvcount
  • 然后您可以
    stats
    将这些值放回到一个事件中

这是一个随处运行的示例:

| makeresults
| eval JSON="{\"event_A\":{\"processingTimeMillis\":\"2178\",\"event_A_recipients\":[\"id1\",\"id2\",\"id4\"]},\"eventType\":\"event_A\"}|{\"event_B\":{\"processingTimeMillis\":\"2178\",\"event_B_recipients\":[\"id1\",\"id3\"]},\"eventType\":\"event_B\"}|{\"event_B\":{\"processingTimeMillis\":\"2178\",\"event_B_recipients\":[\"id2\"]},\"eventType\":\"event_B\"}"
| eval JSON=split(JSON,"|")
| mvexpand JSON

| spath input=JSON
| rename event_A.event_A_recipients{} as A
| rename event_B.event_B_recipients{} as B

| eval id=""
| transaction id

| eval A_copy=A
| mvexpand A_copy

| eval C=mvdedup(mvappend(B,A_copy))
| eval matches=if(mvcount(C)>mvcount(B),null(),A_copy)

| table _time A B matches
| stats values(*) as * by _time
© www.soinside.com 2019 - 2024. All rights reserved.