Logstash агрегированные журналы докера (для устранения проблем с многострочным использованием)

У меня есть logentries, входящие в logstash из разных контейнеров. Каждый журнал содержит поле ContainerID и поле Message, Любые сообщения с тем же ContainerID Я предполагаю, что все заказано правильно.

Я хочу объединить содержимое сообщений нескольких журналов с одним и тем же containerId следующим образом:

  1. ПРЕФИКС | String1
  2. String2
  3. String3
  4. ПРЕФИКС | String4

Так что я в конечном итоге с logentries:

  1. ПРЕФИКС | String1 \ n String2 \ n Строка 3
  2. ПРЕФИКС | String4

Можно ли это сделать с помощью плагина фильтра агрегирования logstash?

В частности, будут ли возникать проблемы, если сообщения с другим идентификатором контейнера будут получены между 1., 2., 3. и 4. сверху?


Фон:

У меня есть несколько Docker-контейнеров, генерирующих записи журнала, которые отправляются в logstash с помощью драйвера журнала Docker Gelf от нескольких Docker-демонов (в рое).

Все это работает, и logstash получает и фильтрует logentries.

Docker рассматривает каждую строку как отдельный журнал и перенаправляет ее в logstash. В случае многострочных входов в систему это является проблемой. Я хочу "объединить" много журналов, которые соответствуют одному многострочному сообщению, в одно. Я знаю, когда "логическая" логентрия заканчивается, потому что следующая запись будет начинаться с PREFIX, поэтому я предлагаю решение выше.

1 ответ

Я предлагаю использовать Filebeat для этого. Он имеет многострочную поддержку, и с последней версией вы можете использовать функцию автообнаружения для Docker.

Я рекомендую прочитать обсуждение в: https://github.com/elastic/beats/issues/918

Другие вопросы по тегам