如何使通过公共相关 ID 链接的变量显示在 Splunk 表的同一行上?

Posted

技术标签:

【中文标题】如何使通过公共相关 ID 链接的变量显示在 Splunk 表的同一行上?【英文标题】:How to make variables that are linked by a common correlation ID show on the same row of a Splunk table? 【发布时间】:2019-07-11 22:20:25 【问题描述】:

我正在记录从我的应用程序中的各个客户端进行外部服务调用所需的时间。这些来自 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 相同。

我对 time1、time2、timeN 进行 Splunk 搜索,然后提取时间和相关 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 设置为空/null事件。所以它实际上是在显示我告诉它的内容。但由于这些是不同的事件日志,我试图将它们与链接相关 ID 组合成一行,所以我不确定该怎么做。

【问题讨论】:

【参考方案1】:

我认为可能发生的情况是,当我执行 rex time1 但它是 rex time2 的事件将 time1 设置为空/null 对于那个特定的事件。所以它实际上是在显示我是什么 告诉它。

这是正确的。我们可以使用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

【讨论】:

以上是关于如何使通过公共相关 ID 链接的变量显示在 Splunk 表的同一行上?的主要内容,如果未能解决你的问题,请参考以下文章

如何使 azure redis 服务的公共链接和私有端点链接同时工作

以数值显示 SPL 级别,而不是改变颜色强度

如何通过其他 .cpp 文件中的类变量编辑公共成员变量?

如何使数组中的公共变量工作?

使用Google Drive SDK获取文件的公共链接

如何按ID排序不随机化Woocommerce的相关产品