<div><img src="https://top-fwz1.mail.ru/counter?id=3548135;js=na" style="position:absolute;left:-9999px;" alt="Top.Mail.Ru" /></div>
Бесплатный перенос IT-инфраструктуры в облако
На главную
25eb9e0a-a5a8-472a-ace7-940b8bd2adf0
Облачные сервисы

Fluent Operator

В кластерах Kubernetes приложения и системные сервисы генерируют большое количество логов. Для удобного анализа и хранения этих логов их можно собирать в системы вроде Elasticsearch, Loki, Kafka, Prometheus и других.

Fluent Bit и Fluentd — инструменты для сбора и обработки логов. Но их настройка в Kubernetes может быть сложной:

  • Необходимо вручную создавать ресурсы (DaemonSet, StatefulSet);
  • Настраивать конфигурационные файлы;
  • Учитывать особенности контейнерных рантаймов;
  • Управлять секретами для аутентификации;
  • Следить за обновлениями и совместимостью.

Fluent Operator упрощает этот процесс:

  • Автоматизирует развертывание Fluent Bit и Fluentd, создавая необходимые ресурсы.
  • Использует Custom Resource Definitions (CRD) для настройки входов, фильтров, выходов и других параметров через YAML-манифест.
  • Управляет обновлениями и масштабированием Fluent Bit/Fluentd в ответ на изменения в кластере.
  • Упрощает интеграцию с Elasticsearch, Loki, Kafka, Prometheus и другими.

Вместо ручного создания конфигурации для Fluent Bit и Fluentd, вы устанавливаете Fluent Operator и описываете настройки. Оператор приводит кластер в нужное состояние и автоматически обновляет агенты при изменении конфигурации.

Основные компоненты

  • Fluent Bit: легкий агент для сбора логов.
  • Fluentd: мощный агент, который можно использовать как DaemonSet или StatefulSet для сложной фильтрации и буферизации.
  • Fluent Operator: управляет Fluent Bit и Fluentd через CRD.

Установка

Fluent Operator можно установить через панель управления кластером:

  1. Перейдите во вкладку «Дополнения» и найдите дополнение Fluent Operator.

Selection 170

  1. Нажмите на него, чтобы открыть мастер настройки.

  2. Выберите «Продвинутая установка», отредактируйте конфигурацию под свои задачи и нажмите «Установить».

Selection 171

Параметры установки

Operator

Секция operator:

  • containerRuntime: задает используемый контейнерный рантайм. В нашем управляемом Kubernetes используется containerd. Это значение менять не нужно.
  • logPath: путь к логам. Для containerd используется /var/log.
  • disableComponentControllers: список компонентов Fluent Operator, которые нужно отключить. Возможные значения: fluent-bit и fluentd. По умолчанию устанавливаются оба компонента.

Fluent Bit

Секция input:

  • tail:

    • enable: true — включает сбор логов с файлов, находящихся по пути /var/log/containers/*.log.
    • path: "/var/log/containers/*.log" — задает путь к лог-файлам контейнеров.
    • refreshIntervalSeconds: 10 — частота обновления списка файлов логов (в секундах).
    • memBufLimit: 100MB — ограничение памяти для буфера.
    • storageType: memory — тип хранилища для буфера. Альтернативный вариант — filesystem, но перед использованием нужно подготовить том.
    • readFromHead: false — начинать читать логи с конца.
    • skipLongLines: true — пропускать слишком длинные строки.
  • systemd:

    • enable: true — включает сбор логов из journald.
    • includeKubelet: true — добавляет логи kubelet из journald.
    • storageType: memory — задает тип хранилища для буфера логов journald.

Секция output:

Здесь перечислены основные выходы. Для включения каждого достаточно выставить соответствующий ключ enable: true и задать параметры:

Elasticsearch

  es:
    enable: false
    host: "<Elasticsearch url>"
    port: 9200
    logstashPrefix: ks-logstash-log
    bufferSize: 20MB
    traceError: true
    httpUser: "<username>"
    httpPassword: "<password>"

Настройка для отправки логов в Elasticsearch. Укажите URL и порт сервиса, а также учетные данные для аутентификации.

Kafka

  kafka:
    enable: false
    brokers: "<kafka broker list>"
    topics: ks-log
    bufferSize: 20MB
    retryLimit: "10"

Настройка для отправки логов в Kafka. Укажите список брокеров через запятую и топик для логов.

Loki

  loki:
    enable: false
    retryLimit: "no_limits"
    host: 127.0.0.1
    port: 3100
    httpUser: myuser
    httpPassword: mypass
    tenantId: "<tenant>"

Позволяет отправлять логи в Loki. Укажите хост, порт, учётные данные и идентификатор тенанта.

stdout

  stdout:
    enable: true

Полезно для тестирования, так как выводит логи в стандартный вывод (stdout).

Секция filter:

  • multiline:

    • enable: false — по умолчанию мультилайн отключён.
    • Можно настроить парсеры (go, python, java и т.д.) или подключать свои кастомные.
  • kubernetes:

    • enable: true — включает фильтр Kubernetes, чтобы дописывать метаданные подов, такие как namespace, pod, labels, annotations.
    • labels: false, annotations: false — по умолчанию не добавлять эти поля.
  • containerd:

    • enable: true — включает фильтр для парсинга Containerd-логов.

  • systemd:

    • enable: true — включает фильтр для парсинга journald.

Fluentd

  • enable — если нужно использовать Fluentd (вместо или вместе с Fluent Bit), установите true.
  • mode:
    • collector — устанавливает StatefulSet.

    • agent — устанавливает DaemonSet (как Fluent Bit), то есть один агент на ноду.

  • forward:

    • port: 24224 — стандартный вход в Fluentd через форвардинг.

  • output — аналогично Fluent Bit, есть секции es, kafka, opensearch и т.д.

Удаление

Удаление дополнения через панель управления не поддерживается, но его можно выполнить вручную. Для этого выполните следующие шаги:

  1. Удалите объект fluent-bit:
kubectl delete -n fluent-operator fluentbit/fluent-bit
  1. Удалите Helm-релиз fluent-operator:
helm uninstall -n fluent-operator fluent-operator
  1. Удалите все CRD, связанные с fluent-operator:
kubectl delete crd $(kubectl get crd | grep fluent | awk '{print $1}')
  1. Проверьте, что все связанные ресурсы и пространства имен удалены:
kubectl get namespaces

После выполнения этих шагов Fluent Operator будет полностью удален из вашего кластера.

Была ли статья полезна?
Ваша оценка очень важна
Пока нет комментариев