12Factor App: захват логов stdout/stderr с помощью Fluentd

Читая следующий пост от 12factor, я задал вопрос, который я хотел бы проверить, как вы, ребята, справляетесь с этим.

По сути, приложение должно писать напрямую в stdout / stderr. Есть ли способ перенаправить эти потоки напрямую на fluentd (не привязанный к rsyslog/syslog)? По мере того, как я становлюсь более осведомленным о fluentd, я считаю, что это был бы отличный инструмент для агрегирования журналов из нескольких приложений / платформ.

Основная причина этого заключается в том, что если приложение является кроссплатформенным, rsyslog / syslog может быть недоступен, и, как я понимаю, использование каркасов журналирования (для работы которых требуется требуемая конфигурация) было бы нарушением фактора 12.

Спасибо!

2 ответа

Решение

Вам необходимо настроить диспетчер процессов на использование fluentd.

"Процессы приложений из двенадцати факторов [...] должны полагаться на менеджер процессов операционной системы (такой как Upstart, распределенный менеджер процессов на облачной платформе или инструмент, такой как Foreman в разработке) для управления потоками вывода [...] ".

По сути, идея заключается в том, что перенаправление журналов является задачей менеджера процессов. Upstart, например, обычно полагается на регистратор, который имеет опцию (-u) для записи в Unix Domain Socket. В свою очередь, вы можете настроить fluentd для использования того же сокета в качестве входного потока.

Fluentd поддерживает множество входных потоков (они называют их источниками данных), которые должны предоставить решение практически для любой среды и менеджера процессов, которые вы можете использовать (что нам необходимо знать, чтобы предоставить более полное решение).

Это все еще экспериментальная программа, но вы можете взглянуть на stdout-hook.

Эта программа читает выходные данные STDOUT дочернего процесса и публикует записи во Fluentd.

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