2015-09-03 99 views
3

我在同一個日誌文件這三種日誌行:logstash grok - 如何進行條件模式匹配?

INFO [2015-08-27 18:46:14,279] ({qtp243745864-44} NotebookServer.java[onMessage]:101) - RECEIVE << RUN_PARAGRAPH 
INFO [2015-08-27 18:46:14,322] ({qtp243745864-44} NotebookServer.java[broadcast]:253) - SEND >> NOTE 
INFO [2015-08-27 18:46:16,809] ({pool-1-thread-2} RemoteInterpreter.java[init]:144) - Create remote interpreter org.apache.zeppelin.markdown.Markdown 

我想他們PARS使用神交,但未能得到正確的字段: 1)如何收杆括號內的數據? 2)日誌行的最後部分是任一(CMD方向cmd_data)或在實施例(CMD信息) :

cmd=Receive or SEND 
cmd_direction=<<or>> 
cmd_data=RUN_PARAGRAPH or NOTE 

但最後一行是CMD信息不對應於相同的格式。

我想找到匹配第一個和第二個但不是第三個的正確規則。 最終結果應該是(cmd + cmd_data)或(cmd_info)字段 有什麼幫助嗎?

回答

9

Logstash在配置文件中有條件,所以你可以有條件地匹配東西。

例如:

if ([mesage] =~ /(RECEIVE|SEND)/) { 
    grok { 
     // do your grok here 
    } 
} else if ([message] =~ /RemoteInterpreter/) { 
    grok { 
     // do some other grok here 
    } 
} 

如果您需要與grok S的關係是什麼樣的幫助,請嘗試使用grok debugger

+0

Can這是在正則表達式上完成的?例如如果([mesage] =〜/(^ \ S + <<^\ S + |^\ S + >>^\ S +) –

+0

您可以使用帶if的正則表達式,但是'^'放置錯誤 - 它的(\ S +(<<|>>)\ S +)' – Alcanzar

+0

謝謝!請稍後測試一下 –

0

我有一個類似的問題...

它幫助我:

if ("SEND" in [message]) { 
    grok { 
     // do your grok here 
    } 
}