Filebeat多行编解码器在我的情况下不起作用

时间:2017-05-09 11:24:58

标签: multiline elastic-stack filebeat

我在filebeat.yml中定义了多行编解码器,如下所示

multiline.pattern: '^%{TIMESTAMP_ISO8601} '
 multiline.negate: true
 multiline.match: after

但它似乎没有工作,因为多行日志会像下面一样附加在一起

单行日志

2017-05-07 22:29:43 [0] [pool-2-thread-1] INFO  c.app.task.ChannelActiveCheckTask - ---- 
Inside checkIfChannelActive execution ----

多行解析后存储在弹性搜索中的相应日志

   ---- Inside checkIfChannelActive execution ---- 2017-05-09 08:16:13 [0] [pool-2-thread-1] INFO  
    XYZZ - XYZ :: XYZ 2017-05-09 08:16:13 [0] [pool-2-thread-1] INFO XYZ - XYZYZZ

由于以上不起作用,我也尝试使用下面的多模式,但它也不起作用

multiline.pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}'

下面是我的logstash.conf

input {
beats {
port => 5044
}
}

filter {
mutate {
gsub => ["message", "\n", " "]
}
grok {
match => [ "message", "%{TIMESTAMP_ISO8601:timestamp} [%{NOTSPACE:uid}] [%
{NOTSPACE:thread}] %{LOGLEVEL:loglevel} %{DATA:class}-%{GREEDYDATA:message}" ]
overwrite => [ "message" ]
}
date {
match => [ "timestamp" , "yyyy-MM-dd HH:mm:ss" ]
target => "@timestamp"
}
if "_grokparsefailure" in [tags] {
drop { }
}
}

output {
elasticsearch {
hosts => localhost
index => "%{type}-%{+YYYY.MM.dd}"
}
}

有人可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

filebeats无法识别grok模式。你必须使用正则表达式。

您可以找到模式@ https://github.com/logstash-plugins/logstash-patterns-core/blob/master/patterns/grok-patterns

的定义