Logstash节拍输入-多个多行编解码器

nwo49xxi  于 2022-12-09  发布在  Logstash
关注(0)|答案(2)|浏览(165)

我正在尝试发送多种类型的日志与节拍和解析他们的logstash服务器。
我已经配置了beat,并且工作正常,logstash几乎可以正常工作。
我遇到的问题是other-log.log中的条目以不同的格式字符串开头。
在一个理想的世界里,我希望能够根据条目的type应用不同的multiline编解码器。
我试过了

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

但是,这会导致logstash失败,我的猜测是input块中不允许有if
我也尝试过使用multiline过滤器插件,但它导致
“找不到任何名为'multiline'的过滤器插件。您确定这是正确的吗?尝试加载多行过滤器插件导致此错误:加载错误”
有人知道怎么做吗?

文件beat.yml

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

管道.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"] }
}
e0bqpujr

e0bqpujr1#

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

des4xlb0

des4xlb02#

这里是将多行文件移动到filebeat.yaml的配置。我使用以下配置捕获了多行日志。这是我的filebeat.yaml配置:

# ============================== Filebeat inputs ===============================
 filebeat.inputs:
    - type: log
      enabled: true
      paths:
        - /var/log/nginx/access.log
        - /var/log/nginx/error.log
      multiline.pattern: '^[[:space:]]' // these
      multiline.negate: false           // three
      multiline.match: after            // lines are important for capturing multiline logs
------------------ Logstash Output -------------------------------
output.logstash:
  # The Logstash hosts
  hosts: ["localhost:5044"]
  index: "my-index-name"

也可以从this blog获取引用

相关问题