Использование нескольких конвейеров в Logstash с вводом ударов

Согласно предыдущему обсуждению (определение нескольких выходов в Logstash, пока обработка потенциальной недоступности экземпляра Elasticsearch) Сейчас я использую конвейеры в Logstash для отправки входных данных (от Beats на TCP 5044) на несколько хостов Elasticsearch. Соответствующая выдержка из pipelines.yml показана ниже.

- pipeline.id: beats
  queue.type: persisted
  config.string: |
          input {
                  beats {
                        port => 5044
                        ssl => true
                        ssl_certificate_authorities => '/etc/logstash/config/certs/ca.crt'
                        ssl_key => '/etc/logstash/config/certs/forwarder-001.pkcs8.key'
                        ssl_certificate => '/etc/logstash/config/certs/forwarder-001.crt'
                        ssl_verify_mode => "force_peer"
                        }
                }
           output { pipeline { send_to => [es100, es101] } }

- pipeline.id: es100
  path.config: "/etc/logstash/pipelines/es100.conf"
- pipeline.id: es101
  path.config: "/etc/logstash/pipelines/es101.conf"

В каждом из файлов конвейера .conf у меня есть соответствующий виртуальный адрес, т.е. файл /etc/logstash/pipelines/es101.conf включает в себя следующее:

input {
  pipeline {
    address => es101
  }
}

Эта конфигурация работает хорошо, т. е. данные принимаются каждым из хостов Elasticsearch es100 и es101.

Мне нужно убедиться, что если один из этих хостов недоступен, другой все еще получает данные, и благодаря предыдущему совету я теперь использую конвейеры, которые, как я понимаю, позволяют это. Однако я явно упускаю что-то ключевое в этой конфигурации, поскольку данные не принимаются хостом, если другой недоступен. Любые предложения с благодарностью приветствуются.


person shearlynot    schedule 23.02.2021    source источник


Ответы (1)


Во-первых, вы должны настроить постоянные очереди на нижестоящих конвейерах (es100, es101) и определить их размер, чтобы они содержали все данные, поступающие во время простоя. Но даже с постоянными очередями у logstash есть модель доставки хотя бы один раз. Если постоянная очередь заполняется, то обратное давление приведет к тому, что ввод ударов перестанет принимать данные. Как говорится в документации по шаблону выходного изолятора, если какая-либо из постоянных очередей нижестоящих конвейеров... заполнится, оба выхода остановятся. Если вы действительно хотите убедиться, что вывод никогда не блокируется из-за того, что другой вывод недоступен, вам потребуется ввести некоторое программное обеспечение с другой моделью доставки. Например, настройте filebeat для записи в kafka, а затем создайте два конвейера для чтения из kafka и записи в elasticsearch. Если kafka настроена на модель доставки «не более одного раза» (по умолчанию), то она потеряет данные, если не сможет их доставить.

person Badger    schedule 23.02.2021
comment
Спасибо еще раз за помощь, @Badger. Я добавил постоянные очереди в es100, es101, и все выглядит хорошо. Это только для небольшой лабораторной среды, поэтому отставание не должно быть слишком большим, я позабочусь о наличии места на несколько часов простоя. - person shearlynot; 23.02.2021