2011-09-24 87 views
3

我已经低于我的日志行数据:查询到遍历的Splunk

[email protected] id=1234 .... 
[email protected] id=4565 .... 
[email protected] id=5773 .... 
  1. 捕捉所有这些用户标识从-1d @ d的时期@d
  2. 对于每个用户,从指数的年初到-1d @ d &搜索看到,如果用户标识是通过比较实际的id字段
  3. 如果它不存在已经存在,然后将其添加到计数器
  4. 显示这最后计数。

我可以在Splunk中实现吗?

谢谢!

回答

2

是的,在Splunk中有几种方法可以做到这一点,每种方法的易用性和可扩展性都有所不同。我将逐步通过subsearch方法:

1)捕获从-1d @ d期间所有用户ID来@d

你想先验证只返回一个ID列表搜索,这将随后变成一个subsearch:

sourcetype=<MY_SOURCETYPE> [email protected] [email protected] | stats values(id) AS id 

2)对于每个用户,从索引的开头搜索直到-1d @ d &查看是否用户标识已经存在通过比较实际id字段

构造一个主要的搜索与不同的时间段,使用由式(1)来匹配这些ID的subsearch(注意subsearch必须search开始):

sourcetype=<MY_SOURCETYPE> [search sourcetype=<MY_SOURCETYPE> [email protected] [email protected] | stats values(id) AS id] earliest=0 [email protected] 

这将返回所有的原始数据集从索引开始直到但不包括1d @ d的包含来自(1)的ID的事件。

3)若它不存在,然后将其添加到计数器

修订与一个NOT针对整个subsearch和管查询的外搜索,stats看到它匹配的ID:

sourcetype=<MY_SOURCETYPE> NOT [search sourcetype=<MY_SOURCETYPE> [email protected] [email protected] | stats values(id) AS id] earliest=0 [email protected] | stats values(id) 

4)显示此最终计数。

修改最后stats命令返回,而不是一个独特的计数:在1万行

上述方法效果相当不错的数据集,在商品硬件:

sourcetype=<MY_SOURCETYPE> NOT [search sourcetype=<MY_SOURCETYPE> [email protected] [email protected] | stats values(id) AS id] earliest=0 [email protected] | stats dc(id) 

性能注意事项。问题是子搜索被阻塞,因此外部搜索需要等待。如果您需要处理更大的数据集,则需要使用其他方法来使其成为有效的搜索。

仅供参考,Splunk有专门的网站,您可以通过这个网站快速获得答案:http://splunk-base.splunk.com/answers/