我在玩 logstash 并想尝试多行过滤器。我正在尝试解析一个可以包含多行内容的文件。我正在使用多行过滤器,但它没有按应有的方式工作。我在文件中有以下内容。
2014-10-11 10:10:10 xxxx yyyy
2013-09-12 11:11:11 aaaa bbbb
2012-01-01 10:10:10 cccc dddd
2011-10-12 01:01:01 mmmm Nan
使用 Grok 模式
CUSTOMTIME %{YEAR}-%{MONTHNUM}-%{MONTHDAY} %{TIME}
我在 logstash 中使用以下配置文件
input {
file{
path => "/Users/akshayanilkapoor/Kumo/logs/akshay"
codec => multiline {
pattern => "^.*"
what => "previous"
negate => true
}
}
stdin{
codec => multiline {
pattern => "^%{CUSTOMTIME}"
what => "previous"
negate => true
}
}
}
filter {
grok {
patterns_dir => "./patterns"
match => ["message", "%{CUSTOMTIME:date1} %{GREEDYDATA:lumber-type} %{GREEDYDATA:lumber-desc}"]
}
}
output {
stdout {codec => rubydebug}
}
当我从stdin复制粘贴上面显示的数据时,它按预期工作,即它显示输出以及包含文件中所有事件的消息。当我将相同的文件传递给文件时,它会为每个日志条目输出不同的消息,即我得到 4 个不同的日志事件(这不是我想要的)
注意:我尝试将以下选项与多线一起使用,
- (?m) grok 中的多行模式,这也无济于事。
- 还使用 mutate 过滤器将 "\n" 替换为 " " 并用 grok 解析它。
我认为我一直在犯一个非常愚蠢的错误,或者我错误地理解了要实施的过滤器。任何帮助将非常感激!