具有流畅输入编解码器的Logstash无效

时间:2017-03-10 13:08:13

标签: docker logstash jruby fluentd

我一直在使用带有gelf的logstash,并希望检查流畅的输入(主要是由于基于TCP的docker log-driver为流畅而不是仅UDP的gelf)。我的测试配置如下:

input {
  gelf {
    port => 12345
  }
  tcp {
    codec => fluent
    port => 23456
  }
}

filter {
}

output {
  stdout { codec => rubydebug { metadata => true } }
}

我可以使用以下方式发送gelf日志

docker run -it \
           --log-driver gelf \
           --log-opt gelf-address=udp://localhost:12345 \
           --log-opt tag=gelf-test \
        ubuntu:16.04 /bin/bash -c 'echo $(date -u +"%Y-%m-%dT%H:%M:%SZ") Hello gelf'

然而流畅版本不起作用

docker run -it \
           --log-driver fluentd \
           --log-opt fluentd-address=localhost:23456 \
           --log-opt tag=fluent-test \
        ubuntu:16.04 /bin/bash -c 'echo $(date -u +"%Y-%m-%dT%H:%M:%SZ") Hello fluent'

我可以验证logstash是否正在接收输入:

echo 'Hello TCP' | nc localhost 23456
  

发生错误。关闭连接{:client =>“172.17.0.1:42012”,:exception =>#,:backtrace => [“org / jruby / RubyTime.java:1073:in at'", "/opt/logstash/vendor/bundle/jruby/1.9/gems/logstash-core-event-2.4.0-java/lib/logstash/timestamp.rb:32:in at'”, “/opt/logstash/vendor/bundle/jruby/1.9/gems/logstash-codec-fluent-2.0.4-java/lib/logstash/codecs/fluent.rb:41:in decode'", "org/msgpack/jruby/MessagePackLibrary.java:195:in each'”, “/opt/logstash/vendor/bundle/jruby/1.9/gems/logstash-codec-fluent-2.0.4-java/lib/logstash/codecs/fluent.rb:40:in decode'", "/opt/logstash/vendor/bundle/jruby/1.9/gems/logstash-input-tcp-3.0.6/lib/logstash/inputs/tcp.rb:153:in handle_socket'”, “/opt/logstash/vendor/bundle/jruby/1.9/gems/logstash-input-tcp-3.0.6/lib/logstash/inputs/tcp.rb:143:in`server_connection_thread'”],:level => :错误}

我还禁用了流畅的编解码器并发送了流畅的日志并在那里正确记录了错误,并按照预期将流畅的msgpack解析为常规TCP事件的message字段。

  

收到的字符编码与您的字符编码不同   配置。   {:文本=> “中\ X94 \ xABfluent测试\ xD2X¢鄣LOG \ xD9 \\” 2017-03-10T12:58:17Z   你好   流利\ r \ xACcontainer_id \ xD9 @ 9cbd13eb83a02a1a4d4f83ff063d4e40b4419b7dcbcef960e4689495caa5c132 \ xAEcontainer_name \ XAF / ecstatic_kilby \ xA6source \ xA6stdout \ XC0" ,   :expected_charset =>“UTF-8”,:level =>:warn}

{
       "message" => "\\x94\\xABfluent-test\\xD2X¢鄣log\\xD9\\\"2017-03-10T12:58:17Z Hello fluent\\r\\xACcontainer_id\\xD9@9cbd13eb83a02a1a4d4f83ff063d4e40b4419b7dcbcef960e4689495caa5c132\\xAEcontainer_name\\xAF/ecstatic_kilby\\xA6source\\xA6stdout\\xC0",
      "@version" => "1",
    "@timestamp" => "2017-03-10T12:58:18.069Z",
          "host" => "172.17.0.1",
          "port" => 42016
}

我没有其他想法,有没有人遇到过这个问题,或者对如何进一步调试有任何想法?

2 个答案:

答案 0 :(得分:0)

请你试试一个Fluentd实例吗?通过这种方式可以更容易地确定问题所在。快速浏览看起来像Logstash Fluent编解码器无法正常工作。

答案 1 :(得分:0)

不幸的是,您无法使用现有插件将消息从fluentd直接发送到logstash(确实很遗憾)。

如果希望这样做,请使用此open-source plugin,它将数据直接发送到logstash tcp输入(不需要流利的编解码器),并且还支持通过安全的SSL / TLS协议发送数据。

见过此thread