Ответ
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 для сбора логов на уровне нод.