Итак, я пытаюсь захватить вывод из 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>