1

我有一个简单明了的配置,但我不确定试图让这个多线工作我做错了什么。

input {
    gelf {
        codec => multiline {
            pattern => "^%{TIMESTAMP_ISO8601} "
            negate => true
            what => "previous"
        }
    }
}

filter {}

output {
    # I have the relevant ES hosts & index here
    elasticsearch { }
    stdout {
        codec => rubydebug
    }
}

我正在测试它,如下所示,我得到单行,没有添加多行标签,我在logstash调试日志中看到事件一一通过过滤器。

docker run -it --log-driver gelf --log-opt gelf-address=udp://127.0.0.1:12201 \
    --log-opt tag=mline-test python:alpine \
    python -c 'print("[2017-10-18 00:00:00,000] Hello world");assert False'
  • 我用两个 logstash 版本 5.5.2 和 5.6.3 => elasticsearch 5.5 对此进行了测试
  • 我安装了 logstash-codec-multiline
  • 我知道我可以使用 logstash 2.4 中的(现已删除的)多行过滤器来做到这一点
4

1 回答 1

2

我发现gelf输入插件中忽略了编解码器:logstash-plugins/logstash-input-gelf#37

这意味着 gelf 的唯一多行选项是使用 logstash-2.4 并受到单线程性能的影响。

Settings: Default pipeline workers: 4
Defaulting pipeline worker threads to 1 because there are some filters that might not work with multiple worker threads {:count_was=>4, :filters=>["multiline"], :level=>:warn}
Pipeline main started
于 2017-10-18T14:46:47.957 回答