Что такое Fluentd?

«Что такое Fluentd?» — вопрос из категории Мониторинг и логирование, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Fluentd — это open-source сборщик и агрегатор логов, написанный на Ruby. Его основная задача — унифицировать сбор данных логирования из различных источников (приложения, серверы, контейнеры) и их маршрутизацию в системы хранения и анализа, такие как Elasticsearch, S3, Kafka или базы данных.

Ключевые принципы и особенности:

  • Унификация данных: Fluentd структурирует все логи в формате JSON, что упрощает их последующую обработку и анализ.
  • Гибкость за счет плагинов: Существует более 500 плагинов для источников (input), буферизации, фильтрации и вывода (output), что позволяет интегрироваться практически с любой инфраструктурой.
  • Надежность: Использует буферизацию на диске и механизмы повторных попыток (retry) для предотвращения потери данных при сбоях в системах-приемниках.
  • Производительность: Критичные участки кода написаны на C (в компоненте fluent-bit), что обеспечивает низкое потребление ресурсов.

Типичный сценарий использования: Сбор логов доступа и ошибок с веб-серверов (Nginx/Apache) и их отправка в Elasticsearch для визуализации в Kibana.

Пример конфигурации (td-agent.conf) для сбора логов Nginx:

# Источник: чтение лог-файла Nginx
<source>
  @type tail
  path /var/log/nginx/access.log
  pos_file /var/log/td-agent/nginx-access.log.pos
  tag nginx.access
  <parse>
    @type nginx # Используется встроенный парсер для формата Nginx
  </parse>
</source>

# Фильтр: можно добавить поля или преобразовать данные
<filter nginx.access>
  @type record_transformer
  <record>
    hostname "#{Socket.gethostname}"
    environment "production"
  </record>
</filter>

# Выход: отправка в кластер Elasticsearch
<match nginx.access>
  @type elasticsearch
  host elasticsearch-logging.prod.svc
  port 9200
  logstash_format true
  logstash_prefix fluentd-nginx
  buffer_chunk_limit 1m
  buffer_queue_limit 32
  flush_interval 5s
  num_threads 2
</match>

В DevOps-стеке Fluentd часто выступает надежным и гибким "логическим роутером" в пайплайне обработки логов, особенно в Kubernetes-средах, где его используют вместе с Fluent Bit для сбора логов на уровне нод.