我尝试将来自两个不同日志的信息合并到一个查询中,但我不确定如何,或者是否可以执行此操作。基本上我想这样做:
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。这是可能的,如果是的话,我该怎么做?
此外,如果有其他方式来执行此搜索,我们将非常感激。
答案 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