logstash多行编解码器不工作
我已将日志存储管道配置为向elastic报告。我能够读取日志文件。我的日志文件包含多行消息,但每行都作为一条消息报告给elastic 日志配置文件:logstash多行编解码器不工作,logstash,Logstash,我已将日志存储管道配置为向elastic报告。我能够读取日志文件。我的日志文件包含多行消息,但每行都作为一条消息报告给elastic 日志配置文件: input { file { path => ["abc.log" ] start_position => "beginning" codec => multiline { pattern
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报告完整的日志文件。请帮帮我,它把它们连在一起了?这意味着模式不匹配,因为每次匹配模式时它都会创建一个新事件。行开始和日志级别之间可能存在前导空格,或者日志和模式之间可能存在其他一些小差异。没错!!这是空间问题。更正,它的工作如预期。太好了!我注意到它们的示例前面有一些空格,但当时我认为这只是一个格式化或复制/粘贴错误。