logstash多行编解码器不工作

logstash多行编解码器不工作,logstash,Logstash,我已将日志存储管道配置为向elastic报告。我能够读取日志文件。我的日志文件包含多行消息,但每行都作为一条消息报告给elastic 日志配置文件: input { file { path => ["abc.log" ] start_position => "beginning" codec => multiline { pattern

我已将日志存储管道配置为向elastic报告。我能够读取日志文件。我的日志文件包含多行消息,但每行都作为一条消息报告给elastic

日志配置文件:

input {
        file {
            path => ["abc.log" ]
            start_position => "beginning"
            codec => multiline
            {
                pattern => "^%{LOGLEVEL}"
                negate => "false"
                what => "next"
            }
        }
    }
    filter {

    }
    output {
        # only for debug purposes
        stdout {
            codec => rubydebug
        }
        elasticsearch {
            hosts => ["http://abcd:9200"]
            index => "logstash"
        }
    }
日志文件:

DEBUG - LogBO={
    message:############ ##############
------------>>!User Info[################################]
------------>>!Debug Info[ ############################# ]
***************isABCEnabled*********************true
}
DEBUG - LogBO={
    message:############ ##############
------------>>!User Info[################################]
------------>>!Debug Info[ ############################# ]
***************isABCEnabled*********************true
}
我可以看到日志被报告给Elastic,但因为每一行日志都是一条单独的消息。我要整根木头

DEBUG - LogBO={
    message:############ ##############
------------>>!User Info[################################]
------------>>!Debug Info[ ############################# ]
***************isABCEnabled*********************true
}
将作为单个消息报告给Elastic。请帮助我解决此问题

请帮助我解决此问题。

使用

codec => multiline {
    pattern => "^%{LOGLEVEL}"
    negate => "false"
    what => "next"
}
您正在告诉编解码器加入任何与
^%{LOGLEVEL}
匹配的行,以加入下一行。这将把第一行连接到第二行,因为第一行匹配
^%{LOGLEVEL}
。其他行将被忽略,图案将不会继续匹配并向下连接同一行。因此,最终会出现大量的部分日志事件

您将要使用

codec => multiline {
    pattern => "^%{LOGLEVEL}"
    negate => "true"
    what => "previous"
}

相反。这会告诉logstash将与前一行不匹配的任何行连接起来。这确保事件总是以匹配行开始,这是您想要的。

非常感谢!!按照您的建议尝试,但这导致向elastic报告完整的日志文件。请帮帮我,它把它们连在一起了?这意味着模式不匹配,因为每次匹配模式时它都会创建一个新事件。行开始和日志级别之间可能存在前导空格,或者日志和模式之间可能存在其他一些小差异。没错!!这是空间问题。更正,它的工作如预期。太好了!我注意到它们的示例前面有一些空格,但当时我认为这只是一个格式化或复制/粘贴错误。