У нас есть приложение, которое записывает три типа журналов в три отдельных файла: журналы доступа, общие журналы приложений и системные журналы. Формат (и цель) этих журналов очень разные. И у нас есть отдельные средства пересылки журналов, которые отправляют их отдельно в нашу централизованную систему ведения журналов.
Основываясь на том, что журналы рассматриваются как принцип потоков событий , мы думаем о переходе от использования файлов к стандартному выводу. Хотя мы знаем о некоторых преимуществах этого подхода, это также означает, что мы получим объединенный поток журналов с различным форматированием, который нам потребуется снова разделить, прежде чем мы сможем отправить их в нашу центральную систему (Kibana / Splunk / и т. д.) или внутри.
Нам интересно, есть ли какие-либо инструменты или рекомендации о том, как мы должны подходить к этой ситуации.
Ответы:
Я все еще ищу подход слияния / разделения, но в то же время этот подход, рекомендованный документацией Kubernetes, кажется разумным решением: используйте контейнер с коляской для каждого из ваших отдельных журналов .
«Коляска» - это любой докер-контейнер, который вы используете вместе с другим док-контейнером для некоторой работы с ним. В этом случае для каждого из трех ваших журналов у вас будет отдельный контейнер, который сканирует или привязывает журналы и выводит к stdout.
Таким образом, каждый из ваших log-sidecar-контейнеров имеет свой собственный docker-log из своего собственного stdout. Будучи отдельными, как это, вы можете использовать стандартные методы докера (и kubernetes, и т. Д.) Для разделения или агрегирования. Вот что говорит страница Kubernetes:
«Отдельные потоки журналов» происходят от встроенных тегов, которые docker применяет к журналам из разных контейнеров, описанных в документации докера здесь:
источник
Идея объединить их в один поток, чтобы потом разделить их, звучит болезненно. У меня не было причин делать это самому, но вот с чего я начну:
Чувствуется немного менее элегантно, чтобы выполнить некоторые настройки на хосте, но если вы используете что-то вроде ansible, где вы можете запустить playbook и настроить его во время развертывания на коробке, это не должно быть слишком Плохо.
источник