2013-07-15 91 views
3

我正在使用Logstash(使用Kibana作爲UI)。我想從我的日誌中提取一些字段,以便我可以在UI的LHS中對它們進行過濾。在Logstash中提取字段

從我的日誌中的樣本行看起來是這樣的:

2013-07-04 00:27:16.341 -0700 [Comp40_db40_3720_18_25] client_login=C-316fff97-5a19-44f1-9d87-003ae0e36ac9 ip_address=192.168.4.1 

在我logstash的conf文件,我把這個:

filter { 
    grok { 
     type => "mylog" 
     pattern => "(?<CLIENT_NAME>Comp\d+_db\d+_\d+_\d+_\d+)" 
    } 
} 

理想情況下,我想提取Comp40_db40_3720_18_25(數量數字可能會有所不同,但在由_)和client_login(也可以是client_logout)分隔的每個部分中將始終至少爲1。然後,我可以搜索CLIENT_NAME = Comp40 ... CLIENT_NAME = Comp55等。

我是否在配置中缺少某些內容以使其成爲我可以在Kibana中使用的字段?

謝謝!

+0

正則表達式看起來不錯,但我會使用類似(比較[_a-Z \ d] + )。你可以請分享一下不起作用的東西。順便說一下,我假設你的conf文件中還定義了elasticsearch輸出。 –

+0

是的,我在Logstash中使用ES的嵌入式實例。我想我期望的是,如果我點擊LHS上的@ fields.client_name(在列下),它會顯示出它已經提取的所有字段的計數,甚至是它們的列表,即Comp40。 ,Comp55等。這有道理嗎? – user2406467

+0

我想我想要的就是Logstash/Kibana演示(http://demo.logstash.net/)上的最佳示例。如果您點擊@消息,您可以看到該類型頂部「類別」的5個左右的細分。 – user2406467

回答

4

如果您無法正確匹配模式,使用Grok Debugger是一個很好的解決方案。

對於給定的問題,您可以將您的搜索數據分隔到另一個變量中,並將其他變量數字另存爲另一個(垃圾)變量。

例如:

(?<SEARCH_FIELD>Comp\d+)%{GREEDYDATA:trash_variable}] 

(請在上述模式中使用Grok Debugger