2011-09-24 105 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/