2017-03-31 75 views
0

我刚开始使用grok for logstash,并试图使用grok过滤器解析我的日志文件。 我的logline是类似下面Grok跳过一部分邮件行

2017年3月30日13时26分13秒[00089] TIMER XXX.TimerLog:entType [机构],queueType [输出],memRecno = 446323718,audRecno = 2595542711,经过时间= 998ms

我想只捕捉初始日期/时间戳记,entType [organization]elapsed time = 998ms

但是,它看起来像我必须匹配行中的每个单词和数字的模式。有没有办法可以跳过它?我试图到处找,但找不到任何东西。请帮助。

+1

你有没有试过绕过你不关心的东西?(?:。*)? Grok语法只是上下文感知嵌套正则表达式的支持;所有常用的方法都适用。 –

回答

0

按照Charles Duffy的评论。

这样做有2种方式: 的GREEDYDATA方式(?:.*)

grok { 
    match => {"message" => "^%{DATE_US:dte}\s*%{TIME:tme}\s*\[%{GREEDYDATA}elapsed time\s*=\s*%{BASE10NUM}" 
} 

或者,告诉它忽略了一个比赛,并期待在列表中的下一个。

grok { 
    break_on_match => false 
    match => { "message" => "^%{DATE_US:dte}\s*%{TIME:tme}\s*\[" } 
    match => { "message" => "elapsed time\s*=\s*%{BASE10NUM:elapsedTime}" 
} 

然后,您可以归队日期&时间到一个单一的领域,将其转换为一个时间戳。