elasticsearch Logstash Beats输入-多行编解码器,elasticsearch,logstash,logstash-grok,elasticsearch,Logstash,Logstash Grok" /> elasticsearch Logstash Beats输入-多行编解码器,elasticsearch,logstash,logstash-grok,elasticsearch,Logstash,Logstash Grok" />

elasticsearch Logstash Beats输入-多行编解码器

elasticsearch Logstash Beats输入-多行编解码器,elasticsearch,logstash,logstash-grok,elasticsearch,Logstash,Logstash Grok,我正在尝试发送多种类型的带有beats的日志,并在logstash服务器上解析它们 我已经配置好beats,并且工作正常,日志库几乎工作正常 我遇到的问题是other-log.log的条目以不同格式的字符串开头 在理想情况下,我希望能够根据条目的类型应用不同的多行编解码器 我试过了 if [type] == "server.log" { codec => multiline { pattern => "^

我正在尝试发送多种类型的带有beats的日志,并在logstash服务器上解析它们

我已经配置好beats,并且工作正常,日志库几乎工作正常

我遇到的问题是other-log.log的条目以不同格式的字符串开头

在理想情况下,我希望能够根据条目的类型应用不同的
多行
编解码器

我试过了

        if [type] == "server.log" {
            codec => multiline {
                    pattern => "^\d{2}:\d{2}:\d{2},\d+"
                    negate => true
                    what => "previous"
            }
        }
然而,这会导致日志存储失败,我的猜测是
输入
块中不允许
if

我也尝试过使用
多行
过滤器插件,但结果是

“找不到任何名为‘multiline’的筛选器插件。您确定这是正确的吗?尝试加载多行筛选器插件导致此错误:LoadError”

有没有人知道如何使这项工作

filebeat.yml

- input_type: log
  paths:
    - /application/server.log
  document_type: server.log
- input_type: log
  paths:
    - /tmp/other-log.log
  document_type: other.log
pipeline.conf

input {
    beats {
        host => "0.0.0.0"
        port => "5044"
        codec => multiline {
                pattern => "^\d{2}:\d{2}:\d{2},\d+"
                negate => true
                what => "previous"
        }
    }
}
filter {
        if [type] == "server.log" {
                grok {
                        match => { "message" => "(?<date>^\d{2}:\d{2}:\d{2},\d+)\s(?<level>[A-Z]+)\s+\[(?<class>.*?)\]\s+(?<message>(?m).*)" }
                        overwrite => ["message"]
                        add_tag =>  [ "server.log" ]
                }
        }
}
# The filter part of this file is commented out to indicate that it is
# optional.
# filter {
#
# }
output {
        elasticsearch { hosts => ["localhost:9200"] }
}
输入{
击败{
主机=>“0.0.0.0”
端口=>“5044”
编解码器=>多行{
模式=>“^\d{2}:\d{2}:\d{2}\d+”
否定=>true
什么=>“以前的”
}
}
}
滤器{
如果[type]=“server.log”{
格罗克{
match=>{“message”=>“(?^\d{2}:\d{2}:\d{2}\d+\s(?[A-Z]+)\s+\[(?.*?)\]\s+(?(?m.*)”)
覆盖=>[“消息”]
添加标签=>[“server.log”]
}
}
}
#此文件的筛选器部分将被注释掉,以指示它是
#可选。
#滤器{
#
# }
输出{
elasticsearch{hosts=>[“localhost:9200”]}
}

我将多行移动到了
filebeat.yml
,这解决了我的问题:)

如何在
filebeat.yml
中配置多行模式?