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

时间:2016-12-08 17:20:41

标签: elasticsearch logstash logstash-grok

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

我已经配置好并且正常工作,几乎让logstash正常工作。

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

在理想的世界中,我希望能够应用不同的multiline编解码器,具体取决于条目的type

我试过了

        if [type] == "server.log" {
            codec => multiline {
                    pattern => "^\d{2}:\d{2}:\d{2},\d+"
                    negate => true
                    what => "previous"
            }
        }

但是这导致logstash失败,我的猜测是if块中不允许input

我还尝试使用multiline过滤器插件,但结果是

  

“找不到任何名为'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"] }
}

1 个答案:

答案 0 :(得分:2)

我将多线移动到filebeat.yml并解决了我的问题:)

相关问题