Использование единого источника в fluentd с разными типами соответствия - PullRequest
0 голосов
/ 04 августа 2020

Итак, я пытаюсь захватить вывод из docker контейнеров, работающих на хосте, но после изменения разработчиками использовать json в качестве вывода журнала для контейнеров, которые мне не хватает в сообщении о запуске контейнеров, которое происходят в точке входа. sh. Я вижу, что кто-то добавил в конфигурационный файл новый раздел фильтра, который отлично работает для захвата вывода json, но только вывода json.

Вот используемый шаблон:

<source>
  @type forward
  port 24224
  bind 0.0.0.0
  tag GELF_TAG
</source>

<filter GELF_TAG.**>
  @type parser
  key_name log
  reserve_data false
  <parse>
    @type json
  </parse>
</filter>

<match GELF_TAG.**>
  @type copy
  <store>
    @type gelf
    host {{ graylog_server_fqdn }}
    port 12201
    protocol tcp
    flush_interval 5s
  </store>
  <store>
    @type stdout
  </store>
</match>

Как мне настроить конфигурацию, чтобы иметь возможность захватывать точку входа. sh вывод и json вывод из контейнеров после их запуска?

EDIT.

Фильтр отклоняет сообщения, отправленные в стандартный вывод контейнеров docker до тех пор, пока приложение не начнет входить в систему json.

[warn]: #0 dump an error event: error_class=Fluent::Plugin::Parser::ParserError error="pattern not matched with data

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

# Ansible
<source>
  @type forward
  port 24224
  bind 0.0.0.0
  tag GELF_TAG
</source>

<filter GELF_TAG.**>
  @type parser
  emit_invalid_record_to_error true
  key_name log
  reserve_data false
  <parse>
    @type json
  </parse>
</filter>

<match {GELF_TAG.**,@ERROR}>
  @type copy
  <store>
    @type gelf
    host {{ graylog_server_fqdn }}
    port 12201
    protocol tcp
    flush_interval 5s
  </store>
  <store>
    @type stdout
  </store>
</match>

1 Ответ

0 голосов
/ 07 августа 2020

Установить многоформатный парсер:

td-agent-gem install fluent-plugin-multi-format-parser -v 1.0.0

# Ansible
<source>
  @type forward
  port 24224
  bind 0.0.0.0
  tag GELF_TAG
</source>

<filter GELF_TAG.**>
  @type parser
  key_name log
  reserve_data false
  <parse>
    @type multi_format
    <pattern>
      format json
      time_key timestamp
    </pattern>
    <pattern>
      format none
    </pattern>
  </parse>
</filter>

<match GELF_TAG.**>
  @type copy
  <store>
    @type gelf
    host {{ graylog_server_fqdn }}
    port 12201
    protocol tcp
    flush_interval 5s
  </store>
  <store>
    @type stdout
  </store>
</match>
...