Fluentd эластичный поисковый плагин, не подключающийся к Elasticsearch из Kubernetes на Raspberry Pi - PullRequest
0 голосов
/ 01 марта 2020

РЕДАКТИРОВАТЬ: я добавил новую информацию в свой комментарий в ответ на предложение Эфрата-Левитана. Вывод журнала немного отличается, так как я обновил свою версию Elasticsearch до 7.6.0, как было предложено в исходном комментарии. Чтобы помочь в отладке, я также не сразу запустил Elasticsearch. Эффект этого можно увидеть в сообщениях ECONNREFUSED в журнале. Я вызвал изменения файла журнала в резюме ниже. Большая часть оставшегося текста сообщения (т.е. не фрагментов журнала) остается такой же, как и раньше.

Я работаю над получением версии ARM (для Raspberry Pi 3 & 4), которая свободно работает с Плагин fluent-plugin -asticsearch работает в docker. Мне не удалось найти подходящее docker изображение, поэтому я построил его самостоятельно (если кто-нибудь знает, где я могу найти такое, я был бы признателен). Я начал с репо fluentd- docker -image (не включает плагины Elasticsearch) и изменил его, как мне показалось, с помощью репо fluentd-kubernetes-daemonset (включает плагины Elasticsearch). Хорошая новость заключается в том, что он отлично запускается на Raspberry Pi. Плохая новость заключается в том, что кажется, что он даже не пытается подключиться к ElasticSearch (внешнему по отношению к сети Raspberry Pi. Файл журнала выглядит следующим образом:

2020-03-02 18:13:15 +0000 [info]: parsing config file is succeeded path="/fluentd/etc/fluent.conf"
2020-03-02 18:13:16 +0000 [info]: gem 'fluent-plugin-concat' version '2.4.0'
2020-03-02 18:13:16 +0000 [info]: gem 'fluent-plugin-dedot_filter' version '1.0.0'
2020-03-02 18:13:16 +0000 [info]: gem 'fluent-plugin-detect-exceptions' version '0.0.12'
2020-03-02 18:13:16 +0000 [info]: gem 'fluent-plugin-elasticsearch' version '4.0.4'
2020-03-02 18:13:16 +0000 [info]: gem 'fluent-plugin-grok-parser' version '2.6.0'
2020-03-02 18:13:16 +0000 [info]: gem 'fluent-plugin-json-in-json-2' version '1.0.2'
2020-03-02 18:13:16 +0000 [info]: gem 'fluent-plugin-kubernetes_metadata_filter' version '2.3.0'
2020-03-02 18:13:16 +0000 [info]: gem 'fluent-plugin-multi-format-parser' version '1.0.0'
2020-03-02 18:13:16 +0000 [info]: gem 'fluent-plugin-prometheus' version '1.6.1'
2020-03-02 18:13:16 +0000 [info]: gem 'fluent-plugin-record-modifier' version '2.0.0'
2020-03-02 18:13:16 +0000 [info]: gem 'fluent-plugin-rewrite-tag-filter' version '2.2.0'
2020-03-02 18:13:16 +0000 [info]: gem 'fluent-plugin-systemd' version '1.0.1'
2020-03-02 18:13:16 +0000 [info]: gem 'fluentd' version '1.9.2'
2020-03-02 18:13:16 +0000 [warn]: define <match fluent.**> to capture fluentd logs in top level is deprecated. Use <label @FLUENT_LOG> instead
2020-03-02 18:13:16 +0000 [info]: using configuration file: <ROOT>
  <filter **>
    @type stdout
  </filter>
  <source>
    @type forward
    @label @ES
  </source>
  <label @ES>
    <match out.elasticsearch.**>
      @type elasticsearch
      @log_level "info"
      include_tag_key true
      host "10.0.0.223"
      port 9200
      path ""
      scheme http
      index_name "logstash"
      include_timestamp true
      log_es_400_reason false
      logstash_prefix "logstash"
      logstash_dateformat "%Y.%m.%d"
      logstash_format true
      ssl_verify true
      ssl_version TLSv1_2
      user
      password xxxxxx
      reload_connections false
      reconnect_on_error true
      reload_on_failure true
      request_timeout 5s
      sniffer_class_name "Fluent::Plugin::ElasticsearchSimpleSniffer"
      type_name "doc"
      template_name
      template_file
      template_overwrite false
      time_key "@timestamp"
      <buffer>
        flush_thread_count 8
        flush_interval 5s
        chunk_limit_size 2M
        queue_limit_length 32
        retry_max_interval 30
        retry_forever true
      </buffer>
    </match>
  </label>
  <label @ERROR>
    <match **>
      @type stdout
    </match>
  </label>
</ROOT>
2020-03-02 18:13:16 +0000 [info]: starting fluentd-1.9.2 pid=7 ruby="2.6.5"
2020-03-02 18:13:16 +0000 [info]: spawn command to main:  cmdline=["/usr/local/bin/ruby", "-Eascii-8bit:ascii-8bit", "/usr/local/bundle/bin/fluentd", "-c", "/fluentd/etc/fluent.conf", "-p", "/fluentd/plugins", "-r", "/usr/local/bundle/gems/fluent-plugin-elasticsearch-4.0.4/lib/fluent/plugin/elasticsearch_simple_sniffer.rb", "--under-supervisor"]
2020-03-02 18:13:20 +0000 [info]: adding match in @ES pattern="out.elasticsearch.**" type="elasticsearch"
2020-03-02 18:13:23 +0000 [warn]: #0 Could not communicate to Elasticsearch, resetting connection and trying again. Connection refused - connect(2) for 10.0.0.223:9200 (Errno::ECONNREFUSED)
2020-03-02 18:13:23 +0000 [warn]: #0 Remaining retry: 14. Retry to communicate after 2 second(s).
2020-03-02 18:13:27 +0000 [warn]: #0 Could not communicate to Elasticsearch, resetting connection and trying again. Connection refused - connect(2) for 10.0.0.223:9200 (Errno::ECONNREFUSED)
2020-03-02 18:13:27 +0000 [warn]: #0 Remaining retry: 13. Retry to communicate after 4 second(s).
2020-03-02 18:13:35 +0000 [warn]: #0 Could not communicate to Elasticsearch, resetting connection and trying again. Connection refused - connect(2) for 10.0.0.223:9200 (Errno::ECONNREFUSED)
2020-03-02 18:13:35 +0000 [warn]: #0 Remaining retry: 12. Retry to communicate after 8 second(s).
2020-03-02 18:13:51 +0000 [warn]: #0 Could not communicate to Elasticsearch, resetting connection and trying again. Connection refused - connect(2) for 10.0.0.223:9200 (Errno::ECONNREFUSED)
2020-03-02 18:13:51 +0000 [warn]: #0 Remaining retry: 11. Retry to communicate after 16 second(s).
2020-03-02 18:13:51 +0000 [warn]: #0 Detected ES 7.x: `_doc` will be used as the document `_type`.
2020-03-02 18:13:51 +0000 [info]: adding match in @ERROR pattern="**" type="stdout"
2020-03-02 18:13:51 +0000 [info]: adding filter pattern="**" type="stdout"
2020-03-02 18:13:51 +0000 [info]: adding source type="forward"
2020-03-02 18:13:51 +0000 [warn]: #0 define <match fluent.**> to capture fluentd logs in top level is deprecated. Use <label @FLUENT_LOG> instead
2020-03-02 18:13:51 +0000 [info]: #0 starting fluentd worker pid=22 ppid=7 worker=0
2020-03-02 18:13:51 +0000 [info]: #0 listening port port=24224 bind="0.0.0.0"
2020-03-02 18:13:51 +0000 [info]: #0 fluentd worker is now running worker=0
2020-03-02 18:13:51.581170450 +0000 fluent.info: {"pid":22,"ppid":7,"worker":0,"message":"starting fluentd worker pid=22 ppid=7 worker=0"}
2020-03-02 18:13:51 +0000 [warn]: #0 no patterns matched tag="fluent.info"
2020-03-02 18:13:51.585716902 +0000 fluent.info: {"port":24224,"bind":"0.0.0.0","message":"listening port port=24224 bind=\"0.0.0.0\""}
2020-03-02 18:13:51 +0000 [warn]: #0 no patterns matched tag="fluent.info"
2020-03-02 18:13:51.593737828 +0000 fluent.info: {"worker":0,"message":"fluentd worker is now running worker=0"}

Чтобы немного сузить журнал Более того, Fluentd, похоже, знает об Elasticsearch, как в конфигурации, так и в подключении:

2020-03-02 18:13:20 +0000 [info]: adding match in @ES pattern="out.elasticsearch.**" type="elasticsearch"
2020-03-02 18:13:23 +0000 [warn]: #0 Could not communicate to Elasticsearch, resetting connection and trying again. Connection refused - connect(2) for 10.0.0.223:9200 (Errno::ECONNREFUSED)

Ошибка 'ECONNREFUSED' вызвана тем, что я остановил Elasticsearch, чтобы помочь с устранением неполадок. Поэтому Fluentd пытается подключиться. как показано в следующем фрагменте, после запуска Elasticsearch он подключается и продолжает обработку:

2020-03-02 18:13:51 +0000 [warn]: #0 Detected ES 7.x: `_doc` will be used as the document `_type`.

Проблема заключается в том, что Fluentd, похоже, фактически не завершает процесс "sign" с Elasticsearch. Я ожидаю, что увидеть что-то подобное в случае успеха или какое-то сообщение об ошибке.

2020-02-28 21:56:26 +0000 [info]: #0 [out_es] Connection opened to Elasticsearch cluster => {:host=>"10.0.0.223", :port=>9200, :scheme=>"http", :path=>""}

Я бы также ожидал увидеть некоторые свидетельства в Elasticsearch, что он действительно завершил процесс "входа в систему". Например, я не я не вижу индекса "logsta sh" в Elasticsearch, и я не вижу никаких свидетельств в журнале Elasticsearch, что любой другой клиент Чем Кибана связана.

Конфигурация зарегистрирована выше и мне кажется правильной. Записанная в журнале командная строка мне тоже подходит.

/usr/local/bin/ruby -Eascii-8bit:ascii-8bit /usr/local/bundle/bin/fluentd -c /fluentd/etc/fluent.conf -p /fluentd/plugins -r /usr/local/bundle/gems/fluent-plugin-elasticsearch-4.0.4/lib/fluent/plugin/elasticsearch_simple_sniffer.rb --under-supervisor

Вход в модуль и подключение к Elasticsearch также работает:

$ ks exec -it fluentd-h2qzn sh
$ curl http://10.0.0.223:9200
{
  "name" : "Richs-MacBook.local",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "OkZ2-Lj2RjW-pVyVl0C7og",
  "version" : {
    "number" : "7.6.0",
    "build_flavor" : "default",
    "build_type" : "tar",
    "build_hash" : "7f634e9f44834fbc12724506cc1da681b0c3b1e3",
    "build_date" : "2020-02-06T00:09:00.449973Z",
    "build_snapshot" : false,
    "lucene_version" : "8.4.0",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}

Может кто-нибудь пролить свет на отсутствие подключения к хосту Elasticsearch или предоставить некоторые дополнительные действия по устранению неполадок Я могу выступить?

Спасибо, Рич

1 Ответ

0 голосов
/ 10 апреля 2020

Как отметил Эфрат Левитан , проблема действительно была не соответствующей версии. Я установил Elasticsearch 7.6.0 и соответствующий выпуск Kibana 7.6.0, и он работает. Fluentd запущен и работает, и в Кибане отображаются журналы.

...