В кластерах Kubernetes приложения и системные сервисы генерируют большое количество логов. Для удобного анализа и хранения этих логов их можно собирать в системы вроде Elasticsearch, Loki, Kafka, Prometheus и других.
Fluent Bit и Fluentd — инструменты для сбора и обработки логов. Но их настройка в Kubernetes может быть сложной:
Fluent Operator упрощает этот процесс:
Вместо ручного создания конфигурации для Fluent Bit и Fluentd, вы устанавливаете Fluent Operator и описываете настройки. Оператор приводит кластер в нужное состояние и автоматически обновляет агенты при изменении конфигурации.
Fluent Operator можно установить через панель управления кластером:
Перейдите во вкладку «Дополнения» и найдите дополнение Fluent Operator.
Нажмите на него, чтобы открыть мастер настройки.
Выберите «Продвинутая установка», отредактируйте конфигурацию под свои задачи и нажмите «Установить».
Секция operator:
containerd
. Это значение менять не нужно.containerd
используется /var/log
.fluent-bit
и fluentd
. По умолчанию устанавливаются оба компонента.Секция 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
— по умолчанию мультилайн отключён.kubernetes:
enable: true
— включает фильтр Kubernetes, чтобы дописывать метаданные подов, такие как namespace
, pod
, labels
, annotations
.labels: false
, annotations: false
— по умолчанию не добавлять эти поля.containerd:
enable: true
— включает фильтр для парсинга Containerd-логов.
systemd:
enable: true
— включает фильтр для парсинга journald
.
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
fluent-operator
:helm uninstall -n fluent-operator fluent-operator
fluent-operator
:kubectl delete crd $(kubectl get crd | grep fluent | awk '{print $1}')
kubectl get namespaces
После выполнения этих шагов Fluent Operator будет полностью удален из вашего кластера.