Logstash с кодеком свободного ввода не работает

Я уже использовал logstash с gelf и хотел проверить свободный ввод (в основном из-за драйвера журнала Docker на основе TCP для свободного доступа, а не только для 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:inat'", "/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:ineach'", "/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:inhandle_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=>:error}

Я также отключил плавный кодек и отправил туда журналы Fluent и ошибки logstash, а также анализировал Fluent msgpack как поле message обычного события TCP, как и ожидалось.

Получено событие с кодировкой символов, отличной от заданной вами. {: Текст => "\ x94 \ xABfluent-тест \ xD2X ¢ 鄣 журнал \ xD9 \\" 2017-03-10T12: 58: 17Z Привет свободно \ г \ 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
}

У меня нет других идей, кто-нибудь сталкивался с этой проблемой или есть какие-либо идеи о том, как отлаживать дальше?


person Eren Güven    schedule 10.03.2017    source источник


Ответы (2)


не могли бы вы попробовать экземпляр Fluentd?, таким образом было бы легче определить, в чем проблема. При быстром просмотре кодек Logstash Fluent работает неправильно.

person edsiper    schedule 10.03.2017
comment
Fluentd как получатель работает нормально, поэтому я не думаю, что это проблема на стороне драйвера журнала докера. Я также пробовал использовать fluentd с плагином fluentd-output-gelf в качестве пересылки для logstash-gelf, и это тоже отлично работает. Насколько я могу судить, проблема находится где-то между кодеком logstash Fluent и конвейером. - person Eren Güven; 10.03.2017
comment
мой fluentd также отлично получает и анализирует события от докера. мне кажется, что в точке входа в logstash что-то сбилось. - person cdaringe; 18.11.2017

К сожалению, вы не можете отправлять сообщения из fluentd напрямую в logstash, используя существующие плагины (это действительно позор).

Если вы хотите сделать это, используйте этот плагин с открытым исходным кодом, который отправляет данные напрямую для входа в logstash tcp (нет необходимости в свободном кодеке), а также поддерживает отправку данных по защищенному протоколу SSL/TLS.

Видно в этой ветке.

person dorony    schedule 18.11.2018