我正在记录从应用程序中的各个客户端进行外部服务调用所花费的时间。这些是我在Splunk中搜索的各种事件,然后提取呼叫花费的时间。对于一次执行该应用程序,将使用多个客户端,并且有一个唯一的关联ID将它们链接在一起。
想象一下Splunk中的事件可能看起来像这样:
<RandomStuff, client1 time1: 3.2 , Random Stuff, correlation id: 250>
然后另一个事件是:
<RandomStuff, client2 time2: 2.7 , Random Stuff, correlation id: 250>
因此,客户端名称(例如client2 time2)将不同,但是对于特定执行,相关性ID相同。
我在Splunk中搜索time1,time2,timeN,然后提取时间和相关ID:
<my search>
| rex "time1: (?<t1>.*)"
| rex "time2: (?<t2>.*)"
| rex "time3: (?<t3>.*)"
| rex "correlation_id: (?<corId>.*)
这将捕获所有相关事件并提取时间(如果存在的话-因为一个Splunk事件将仅包含三个客户端之一,所以time1,time2和time3存在三个不同的事件)。
然后我将| table t1 t2 t3 corId
添加到搜索的末尾,并得到一个如下所示的表:
但是,我想要的是这样的东西:
任何人都知道如何将t1,t2和t3与匹配的相关ID合并到同一行吗?
我对Splunk不太好,所以我认为可能发生的是,当我执行rex time1
时,却发生了rex time2
事件,它将time1设置为空/空对于那个特定事件。因此,它实际上是在显示我要告诉的内容。但是由于这些是不同的事件日志,因此我尝试将它们与链接的关联ID合并为一行,因此我不确定该怎么做。
答案 0 :(得分:0)
我认为可能发生的是,当我做rex time1时, 使用rex time2的事件为此将time1设置为空/空 对于该特定事件。所以它实际上是在显示我 告诉它。
这是正确的。我们可以使用stats
命令来合并行。
<my search>
| rex "time1: (?<t1>.*)"
| rex "time2: (?<t2>.*)"
| rex "time3: (?<t3>.*)"
| rex "correlation_id: (?<corId>.*)"
| stats values(t1) as t1, values(t2) as t2, values(t3) as t3 by corId
| table t1 t2 t3 corId