如何有条件地创建splunk字段别名?

时间:2012-04-04 21:53:11

标签: splunk

我尝试将来自两个不同日志的信息合并到一个查询中,但我不确定如何,或者是否可以执行此操作。基本上我想这样做:

LOG 1:
<client=foo userId=1234 version=10>
<client=foo userId=5432 version=8>
<client=bar userId=4567 version=4>

LOG 2:
fooid=1234 speed=500
fooid=5432 speed=300

我要做的是收集有关版本== 10的所有用户的速度的统计信息。

根据我的阅读,如果我使用userId == fooid的别名,可以通过这样的说法来实现:

fooid=* AND version=10

但是,我仍然遇到并非所有userIds都是fooids的问题。所以我希望能够在Log 1中创建一个fooid字段别名,但前提是client = foo。这是可能的,如果是的话,我该怎么做?

此外,如果有其他方式来执行此搜索,我们将非常感激。

3 个答案:

答案 0 :(得分:3)

您是将这些日志引入同一索引还是让它们分开索引?你应该能够做像index = FOO OR index = FOO2 |这样的事情如果您要引入单独的索引,则搜索fooid = * AND version = 10。

我们的开发者网站(http://dev.splunk.com)上有一个搜索备忘单 - http://dev.splunk.com/web_assets/developers/pdf/splunk_reference.pdf

,搜索语言参考指南也可以提供帮助:http://docs.splunk.com/Documentation/Splunk/latest/SearchReference/WhatsInThisManual

答案 1 :(得分:1)

这应该可以解决问题:

index=FOO (sourcetype=LOG1 client=foo version=10) OR (sourcetype=LOG2) 
| eval user=coalesce(fooid,userid) 
| stats avg(speed) by user

coalesce eval表示&#34;如果用户存在,用户就会失效,否则用户就是用户ID&#34;。除此之外,我只是进行了适当的搜索,只是抓取你想要的数据和一个简单的统计数据。

答案 2 :(得分:0)

在搜索时这样做: index=FOO OR index=FOO2 | eval mergedID=if(isnotnull(fooid),fooid,userId) | transaction mergedID | stats min(speed) max(speed) avg(speed) by version