我正在尝试让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“字段),但我不知道为什么多行不合并第一行和第二行
发布于 2014-07-23 23:56:54
您的意思是如果存在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
单词时,message
字段中没有任何cal
。
https://stackoverflow.com/questions/24919351
复制