我正在尝试使logstash多行与以下测试文件一起使用:
val=abc 123 abc test
并为过滤器使用以下配置:
filter { if [message] =~ "val" { match => ["message", "val=%{WORD:calc}" } multiline { pattern => [calc] what => "next" } }
输出显示如下(除去其他字段):
"message" => "val=abc" "calc" => "abc" ... "message" => "123 abc"
上面的内容让我知道grok是匹配的(因此是“ calc”字段),但是我不确定为什么多行不合并第一行和第二行
您是说如果该calc字段存在,第一行和第二行将合并为一个Envet?
calc
如果是,以下答案可以为您提供帮助。您的多行模式不正确。请参考此配置:
input { stdin{} } filter { if [message] =~ "val" { grok { match => ["message", "val=%{WORD:calc}"] } } multiline { pattern => "(val)" what => "next" } } output { stdout { codec => "rubydebug" } }
多行中的模式是当message字段中有val单词时,您遇到该模式,它将与第二行多行合并。在您的例子中,你使用[cal]这方式时,message现场有cal字,但是,没有任何cal的message领域。
message
val
[cal]
cal