Logstash агрегированные журналы докера (для устранения проблем с многострочным использованием)
У меня есть logentries, входящие в logstash из разных контейнеров. Каждый журнал содержит поле ContainerID
и поле Message
, Любые сообщения с тем же ContainerID
Я предполагаю, что все заказано правильно.
Я хочу объединить содержимое сообщений нескольких журналов с одним и тем же containerId следующим образом:
- ПРЕФИКС | String1
- String2
- String3
- ПРЕФИКС | String4
Так что я в конечном итоге с logentries:
- ПРЕФИКС | String1 \ n String2 \ n Строка 3
- ПРЕФИКС | 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