2016-12-06 60 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