2012-04-04 129 views
1

我试图将来自两个不同日志的信息合并到一个查询中,但我不知道如何,或者如果我能做到这一点。基本上我想这样做:如何有条件地创建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

从我读过的统计,如果我做用户id == fooid的别名,这可能说这样的事情是可能的:

fooid=* AND version=10 

然而,我仍然有,并非所有的用户id是fooids问题。所以我希望能够在日志1中创建一个fooid字段别名,但只有在client = foo的情况下才能创建。这是可能的,如果是这样,我该怎么做?

此外,如果还有其他方法来执行此搜索,它将非常赞赏。

回答

3

你是把这些日志引入同一个索引还是你让他们去分开索引?你应该可以做一些类似于index = FOO或index = FOO2 |的东西搜索fooid = * AND版本= 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

+0

现在的计划是让他们进入相同的指数。但是,如果将它们放入不同的索引将允许我“加入”日志消息,我可以将它们分开。如果他们在同一个索引中,这是否会工作: 'index = FOO(sourcetype = LOG1 OR sourcetype = LOG2)|搜索fooid = * AND version = 10' – caffein 2012-04-05 00:08:25

0

在执行此操作搜索时间是这样的: index=FOO OR index=FOO2 | eval mergedID=if(isnotnull(fooid),fooid,userId) | transaction mergedID | stats min(speed) max(speed) avg(speed) by version

1

这应该做的伎俩:

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

coalesce评估说“用户是fooid,如果它存在,否则用户是用户ID”。除此之外,我刚刚进行适当的搜索以获取您想要的数据和简单的统计数据。