2

我是 splunk 的新手,在比较两个不同查询的两列中的值时遇到了问题。

查询 1

index="abc_ndx" source="*/jkdhgsdjk.log" call_id="**" A_to="**" A_from="**" | transaction call_id keepevicted=true | search "xyz event:" | table _time, call_id, A_from, A_to | rename call_id as Call_id, A_from as From, A_to as To

查询 2

index="abc_ndx" source="*/ jkdhgsdjk.log" call_id="**" B_to="**" B_from="**" | transaction call_id keepevicted=true | search " xyz event:"| table _time, call_id, B_from, B_to | rename call_id as Call_id, B_from as From, B_to as To

这是我的两个不同的查询。我想将A_from列中的每个值与列中的每个值进行比较B_from,如果值匹配,则显示A_from.

可能吗?

我已经分别运行了这两个查询,并将每个查询的结果导出到 csv 和使用的vlookup函数中。但问题是最多可以导出 10000 行数据,所以我错过了很多数据,因为我的数据搜索有超过 10000 条记录。有什么帮助吗?

4

2 回答 2

2

目前还没有任何数据可以对此进行测试,但是,以下内容应该为您指明正确的方向。

当您整理出第一个查询的表时,您应该将搜索字符串“管道”到appendcols带有第二个搜索字符串的命令。此命令将允许您运行子搜索并将列“导入”到您的基本搜索中。

一旦你在同一个表中有两列。您可以使用该eval命令创建一个新字段,该字段比较两个值并根据需要分配一个值。

希望这可以帮助。

http://docs.splunk.com/Documentation/Splunk/5.0.2/SearchReference/Appendcols http://docs.splunk.com/Documentation/Splunk/latest/SearchReference/Eval

于 2013-04-14T12:06:17.287 回答
1

我不确定为什么需要将其保留为两个单独的查询。一切都来自相同的源类型,并且使用几乎相同的数据。所以我会做如下的事情:

index="abc_ndx" source="*/jkdhgsdjk.log" call_id="**" (A_to="**" A_from="**") OR (B_to="**" B_from="**") 
| transaction call_id keepevicted=true 
| search "xyz event:" 
| eval to=if(A_from == B_from, A_from, "no_match")
| table _time, call_id, to 

这会从您指定的源类型和索引中获取所有事件,这些事件具有 call_id 以及 A_to 和 A_from 或 B_to 和 B_from。然后它处理所有这些,让您根据“xyz 事件:”进行过滤(无论是什么)

然后它创建一个名为“to”的新字段,当 A_from == B_from 时显示 A_from,否则显示“no_match”(占位符,因为您没有指定当它们不匹配时应该做什么)

还有一种方法可以在不使用事务的情况下解决这个问题。虽然没有更多关于基础数据的细节,但我不能肯定地说。基本思想是,如果您有一个公共字段(在本例中为 call_id),您可以只使用 stats 来收集与该字段关联的值,而不是使用昂贵的事务命令。

例如:

index="abc_ndx" index="abc_ndx" source="*/jkdhgsdjk.log" call_id="**"
| stats last(_time) as earliest_time first(A_to) as A_to first(A_from) as A_from first(B_to) as B_to first(B_from) as B_from by call_id 

如果每个 call_id 只有一个值,则使用 first() 或 last() 实际上并不重要。(您甚至可以使用 min() max() av​​g() 并且您会得到相同的结果)也许这将帮助您更轻松地获得所需的输出。

于 2013-04-17T18:47:19.163 回答