我正在玩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个不同的日志事件(这不是我想要的)
注意:我尝试使用以下选项以及多线,
我认为我犯了一个非常愚蠢的错误,或者我正在理解过滤器的错误实施。任何帮助将不胜感激!
答案 0 :(得分:0)
我误解了多行编解码器的否定选项,正如我预期的那样:p这是我用来配置工作的配置文件,它可以帮助某人。
input {
file{
path => "/Users/akshayanilkapoor/Kumo/logs/akshay"
codec => multiline {
pattern => "^[0-9]"
what => "previous"
#negate => true
}
}
stdin{
codec => multiline {
pattern => "^[a-z]"
what => "previous"
negate => "true"
}
}
}
filter {
grok {
match => ["message", "(?m)%{RSMROLLBACKTIME:date1} %{GREEDYDATA:lumber-type} %{GREEDYDATA:lumber-desc}"]
}
}
output {
stdout {codec => rubydebug}
}