1. Обзор
Logging operator решает задачи логирования в среде Kubernetes, автоматизируя развертывание и настройку конвейера логирования.
-
Logging operator развертывает и конфигурирует на каждом узле сборщик логов (Fluent Bit DaemonSet) для сбора логов контейнеров и приложений из файловой системы узла.
-
Fluent Bit отправляет запрос на API Kubernetes, добавляет метаданные о pod’ах к логам и передает их в экземпляр форвардера логов.
-
Экземпляр форвардера логов получает, фильтрует и преобразует входящие логи и передает их на одну или несколько точек выхода. Logging operator поддерживает Fluentd и syslog-ng (через AxoSyslog syslog-ng distribution) в качестве форвардеров логов.
2. Основные характеристики
-
Изоляция Namespace.
-
Встроенные селекторы меток Kubernetes.
-
Защищенная связь (TLS).
-
Проверка конфигурации.
-
Поддержка нескольких потоков (несколько логов для разных преобразований).
-
Поддержка нескольких выходов (хранение одних и тех же логов в нескольких хранилищах: S3, GCS, ES, Loki и других).
-
Поддержка нескольких систем логирования (развертывание нескольких экземпляров Fluentd, Fluent Bit в одном кластере).
-
Поддержка syslog-ng и Fluentd в качестве центрального компонента маршрутизации логов.
3. Архитектура
Logging operator управляет сборщиками и форвардерами логов в инфраструктуре логирования, а также правилами маршрутизации, которые определяют адресатов различных логов.
Сборщики логов — это агенты конечных устройств, которые собирают логи с узлов Kubernetes и отправляют их форвардерам логов. Logging operator использует Fluent Bit в качестве агентов сборщика логов.
Экземпляр форвардера логов (он же агрегатор логов) получает, фильтрует и преобразует входящие логи и передает их на одну или несколько точек выхода. Logging operator использует Fluentd и syslog-ng в качестве форвардеров логов. Выбор форвардера зависит от ваших требований к логированию.
Фильтровать и обрабатывать входящие логи можно с помощью пользовательского ресурса flow (поток) форвардера логов и направлять их на соответствующий output (выход). Выходы — это пункты назначения для логов, например, OpenSearch или сервер Syslog. Можно настроить выходы и потоки на уровне кластера, например, использовать общий выход для всех пользователей в Namespace, но ограничить права на его изменение. У каждого типа форвардера (Fluentd или syslog-ng) свои потоки и выходы.
Для настройки Logging operator используются следующие пользовательские определения ресурсов (CRD / Custom Resource Definitions):
-
Logging: ресурс logging определяет инфраструктуру логирования (сборщики и форвардеры логов) в кластере Kubernetes. В нем также содержатся конфигурации для Fluent Bit, Fluentd и syslog-ng.
-
CRDs для Fluentd:
-
Output: Определяет выход для потока логов, куда Fluentd отправляет логи. Это ресурс в Namespace.
-
Flow: Фильтрует и обрабатывает поток логов Fluentd. Потоки задают маршруты для выбранных логов к указанным выходам. Это ресурс Namespace.
-
ClusterOutput: определяет выход Fluentd, доступный для всех потоков кластера. Logging operator работает с этим выходом кластера в Namespace, заданном в
controlNamespace, только если в параметреallowClusterResourcesFromAllNamespacesне установлено значениеtrue. -
ClusterFlow: определяет поток логов Fluentd, который собирает логи из всех Namespace. Logging operator работает с этим потоком в Namespace, заданном в
controlNamespace, только если в параметреallowClusterResourcesFromAllNamespacesне установлено значениеtrue.
-
-
CRDs для Syslog-ng (эти ресурсы аналогичны соответствующим ресурсам Fluentd, но адаптированы к функциям, доступным через syslog-ng):
-
SyslogNGOutput: Определяет выход syslog-ng для потока логов, куда логи отправляются с помощью Fluentd Это ресурс в Namespace.
-
SyslogNGFlow: Фильтрует и обрабатывает поток логов syslog-ng. Потоки задают маршруты для выбранных логов к указанным выходам. Это ресурс Namespace.
-
SyslogNGClusterOutput: определяет выход syslog-ng, доступный для всех потоков кластера. Logging operator работает с этим выходом кластера в Namespace, заданном в
controlNamespace, только если в параметреallowClusterResourcesFromAllNamespacesне установлено значениеtrue. -
SyslogNGClusterFlow: определяет поток логов syslog-ng, который по умолчанию собирает логи из всех Namespace. Logging operator работает с этим потоком в Namespace, заданном в
controlNamespace, только если в параметреallowClusterResourcesFromAllNamespacesне установлено значениеtrue.
-
4. Особенности работы
При установке форвардера логов (Fluentd или Syslog-ng) автоматически создаются Fluent Bit агенты, которые начинают собирать и отправлять логи в форвардер. Однако, поскольку выход (Output) и поток (Flow) не настроены, логи не передаются дальше.
|
Можно настроить выход (Output) и поток (Flow) сразу при создании форвардера логов, чтобы логи отправлялись в указанное место по умолчанию. |
При создании Output задаётся точка выхода, т.е.место, куда будут отправляться логи.
При создании Flow задаётся фильтр логов, что позволяет отправлять в Output только те события, которые соответствуют заданным параметрам.
Output и Flow не применяются сразу. Сначала выполняется проверка на соответствие структуры кода. За это отвечает pod с именем configcheck, который запускается каждый раз при изменении настроек. Если этот pod не запускается или возникает ошибка, это указывает на наличие проблемы с настройкой Output или Flow.
Далее конфигурация передаётся форвардеру логов (Fluentd или Syslog-ng). Изменения не применяются сразу, а вступают в силу через некоторое время.
|
Компоненты Syslog-ng и FluentD должны находиться в разных Пример
Устанавливаем Syslog-ng и FluentD в одно |
Если после настройки видно, что configcheck запускался недавно и форвардер логов работает, а также в консоли логов отсутствуют ошибки, можно зайти в консоль контейнера, чтобы проверить текущие настройки. Возможно, что применился только Output, в результате чего возникла проблема с настройкой Flow.
|
При удалении компонентов Syslog-ng и FluentD — Fluent Bit Agent не удаляется автоматически. Нужно удалить DaemonSet. |