Подходы к сluster-level логированию в kubernetes

Kubernetes предоставляет ряд абстракций для управления экосистемой сервисов. С их помощью решены проблемы с виртуализацией, сетевым взаимодействием и системами хранения данных. Однако централизованное хранение и сбор журналов в этом списке отсутствуют.

Восстановление контекста, в рамках которого работало приложение, или трассировка хода обработки запроса пользователя усложняются вместе с ростом количества участников.

Подходы к cluster-level логированию

В зависимости от предъявляемых требований способ агрегации может отличаться. В общем виде журналирование может быть организовано в одном из следующих подходов, или их комбинаций:

Агент журналирования на уровне сервера

Node level agent

На каждом узле кластера запускается агент. Его задача - передача логов в хранилище. Он может быть развернут как отдельный процесс в операционной системе или запущен в контейнере, управляемом kubernetes.

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

Более простой и удобный способ запуска агента - в контейнере под управлением kubernetes. DaemonSet позволяет запускать поды в рамках выделенных узлов кластера. Таким образом достаточно настроить агента один раз: kubernetes сам запустит под на каждом новом узле кластера.

Агент журналирования на уровне пода

Pod level agent

Применяется в ситуациях, где нужен более тонкий контроль в журналировании. Например, когда сбор логов необходим лишь для некоторых приложений и требуются дополнительные манипуляции с этими логами.

Подход очень гибок в построении выделенных схем журналирования. Может паралельно существовать с другими решениями.

Его недостаток - повышенный расход ресурсов из-за необходимости запуска копии агента для каждого пода.

Прямая запись в хранилище логов из приложения

Direct logging

Применяется в ситуациях, где используются собственные решения в журналировании. Например, если сбор логов производится через специальный протокол или управляется частью экосистемы.

Выводы

Стандартная схема построения центролизованной системы журналирования строится на агентах на уровне сервера. В приложениях, к которым не может быть применен общий подход, применяется агент журналирования на уровне пода (например, они пишут свои логи в файлы, а не стандартный вывод). Прямая запись в хранилище логов из приложения может использоваться в случаях агрегации журналов в специфичных задачах.