我正在尝试使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?
如果是,以下答案可以为您提供帮助。
您的多行模式不正确。
请引用此配置:
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
。