Logtash grok /多行混淆

我的真实模式比较复杂,但我试图将问题归结为核心问题。 我不明白的东西。 请在http://grokconstructor.appspot.com/do/match上试试

我试图匹配以下几行:

Start-Date: 2017-08-07 06:48:12 End-Date: 2017-08-07 06:48:12 Start-Date: 2017-08-07 12:55:16 End-Date: 2017-08-07 12:56:01 

使用其他模式:

 DATE_EU2 %{YEAR}-%{MONTHNUM}-%{MONTHDAY}[\s]+?%{HOUR}:?%{MINUTE}(?::?%{SECOND})?%{ISO8601_TIMEZONE}? DATE_COMB %{DATE_EU2}?%{DATE_EU}?%{DATE_US}? 

以下主要模式:

 Start-Date: %{DATE_COMB:starttime}\nEnd-Date: %{DATE_COMB:endtime} 

多线filter:

 ^\n (negated) 

运行,你应该(希望!)得到:

 Start-Date: 2017-08-07 06:48:12 End-Date: 2017-08-07 06:48:12 Start-Date: 2017-08-07 12:55:16 End-Date: 2017-08-07 12:56:01 MATCHED starttime 2017-08-07··06:48:12 endtime 2017-08-07··06:48:12 after match: Start-Date: 2017-08-07 12:55:16 End-Date: 2017-08-07 12:56:01 

所以它是匹配的第一个logging,但不匹配第二个。 如果我添加一个'\ z'到主要模式的结尾,那么它将匹配第二个logging,但不是第一个。 所以显然把整个事情看作一条线。 但为什么? 我的多行筛选器指出,如果一行不是以换行符开头,它是前一个logging的一部分,对吗? 那么应该在中间留出一个空白的行,显然是从一个换行开始的,因此应该包含一个单独的事件,不是吗?

任何指针感激地接受。

input

 Start-Date: 2017-08-07 06:48:12 End-Date: 2017-08-07 06:48:12 Start-Date: 2017-08-07 12:55:16 End-Date: 2017-08-07 12:56:01 

多线滤波器= ^\n (否定)

多行筛选器将依次查看每行,以查看应该合并的内容。

 First line starts with `^Start-Date` (merged) Second line starts with `^End-Date` (merged) Third line is blank (merged, unless logstash skips blank lines) Fourth line starts with `^Start-Date` (merged) Fifth line starts with `^End-Date` (merged) 

试图匹配一个\n ,特别是在一行的开始是没有意义的。

你最好匹配^End-Date:并与前一个合并。 (或者如果一个事件有更多的行,并且总是以Start-Date: ,匹配并且否定。

根据评论和Grok构造函数进行testing编辑。

如果使用空白行作为logging分隔符更有意义,则^\z^\Z似乎可以正常工作。 \Z忽略任何最后的终止符,但看到\z也在我的testing工作,似乎确认,行,传入filter,是一个完全空的string(没有换行符或任何其他终止字符)。