Ответ
Мы строим pipeline на основе ELK/EFK стека.
-
Агенты: На клиентских машинах (виртуальные машины, bare-metal) и в качестве DaemonSet в Kubernetes мы ставим Fluent Bit. Это легковесный агент на C с минимальным потреблением ресурсов, который парсит логи из файлов (
/var/log/) или журналов systemd и обогащает их метаданными (имя хоста, теги). -
Транспорт и обработка: Fluent Bit отправляет логи в Fluentd агрегатор (можно пропустить этот шаг для простых сетапов). Fluentd выступает как буфер и роутер, может выполнять более сложную фильтрацию, парсинг и трансформацию данных перед отправкой в хранилище.
-
Хранилище и анализ: Обработанные логи индексируются в Elasticsearch.
-
Визуализация: Для поиска, анализа и создания дашбордов используем Kibana.
Пример конфигурации Fluent Bit для отправки логов приложения в Elasticsearch:
[INPUT]
Name tail
Path /var/log/myapp/*.log
Tag app.prod
Parser json # если логи в JSON формате
[FILTER]
Name kubernetes # Для K8s: обогащение логов метаданными Pod
Match kube.*
[OUTPUT]
Name es
Match *
Host elasticsearch-cluster.internal
Port 9200
Logstash_Format On
Logstash_Prefix logs
Retry_Limit False
Ключевые преимущества такого подхода:
- Надежность: Агенты буферизуют данные на диске при недоступности Elasticsearch.
- Гибкость: Легко добавить новые источники логов или направить копию логов, например, в S3 для долгосрочного архивирования.
- Производительность: Разделение обязанностей: легкий сбор на edge (Fluent Bit) и тяжелая обработка в центральном компоненте (Fluentd/Elasticsearch).