2016-12-06 54 views
0

我有一個日誌文件,我用telegraf.logparser解析它,然後將它發送到influxdb。問題是,我的日誌文件有一個完整的字符串不同的領域:Grok,用不同的值處理日誌

2016-12-06 11:13:34 job id: mHiMMDmCDFKDmGXNMhm, lrmsid: 13370 
2016-12-06 11:14:34 job id: seeeeeewsda33rfddSD, lrmsid: 13371 
2016-12-06 11:14:37 job id: dmABFKDmqKcNDmHBFKD, failure: "Timeout" 

我可以匹配單與

%{TIMESTAMP_ISO8601} job id: %{WORD:jobid}, lrmsid: {%WORD.lrmsid} 
or 
%{TIMESTAMP_ISO8601} job id: %{WORD:jobid}, failure: {%WORD.fail} 

但我怎麼能做到這一點線,同時獲得..所以,如果lrmsid沒有設置,它得到lrmsid=null, and failure="Timeout" ..如果lrmsid設置其lrmsid=12345 and failure=null

回答

1

請試試這個:

(lrmsid: %{WORD:lrmsid})?(failure: "%{WORD:failure}")? 

它應該捕獲lrmsid或失敗,如果我沒有遺漏任何東西

+0

是的,使用「可選」字段幫助! – user1908375

+0

「接受答案」如何? ;) – deveth0

+0

正確的語法是:'(?:,failure:%{WORD:fail})?' – user1908375