В кластерах 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 можно установить через панель управления кластером:
-
Перейдите во вкладку «Дополнения» и найдите дополнение Fluent Operator.
-
Нажмите на него, чтобы открыть мастер настройки.
-
Выберите «Продвинутая установка», отредактируйте конфигурацию под свои задачи и нажмите «Установить».
Параметры установки
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
и т.д.
Удаление
Удаление дополнения через панель управления не поддерживается, но его можно выполнить вручную. Для этого выполните следующие шаги:
- Удалите объект
fluent-bit
:
kubectl delete -n fluent-operator fluentbit/fluent-bit
- Удалите Helm-релиз
fluent-operator
:
helm uninstall -n fluent-operator fluent-operator
- Удалите все CRD, связанные с
fluent-operator
:
kubectl delete crd $(kubectl get crd | grep fluent | awk '{print $1}')
- Проверьте, что все связанные ресурсы и пространства имен удалены:
kubectl get namespaces
После выполнения этих шагов Fluent Operator будет полностью удален из вашего кластера.