Какой экспортер используется для отправки данных из Kubernetes в Elasticsearch?

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

Ответ

Прямого "экспортера" из Kubernetes в Elasticsearch не существует. Вместо этого используется связка из агента для сбора логов и плагина для Elasticsearch. Стандартным выбором в экосистеме CNCF является Fluent Bit (легковесный) или Fluentd (более функциональный).

Типичный стек:

  1. Fluent Bit развертывается как DaemonSet на каждой ноде K8s.
  2. Он собирает логи контейнеров и системные логи с ноды.
  3. Через выходной плагин Elasticsearch (es) он отправляет структурированные логи в кластер Elasticsearch.

Пример конфигурации Fluent Bit (ConfigMap):

apiVersion: v1
kind: ConfigMap
metadata:
  name: fluent-bit-config
data:
  fluent-bit.conf: |
    [SERVICE]
        Parsers_File parsers.conf
    [INPUT]
        Name tail
        Path /var/log/containers/*.log
        Parser docker
        Tag kube.*
    [OUTPUT]
        Name es
        Match kube.*
        Host elasticsearch-logging.monitoring.svc.cluster.local
        Port 9200
        Logstash_Format On
        Logstash_Prefix fluent-bit-k8s
        Time_Key @timestamp

Альтернативы и нюансы:

  • Filebeat из стека ELK также может собирать логи через DaemonSet, но Fluent Bit стал де-факто стандартом для K8s из-за низкого потребления ресурсов.
  • Для отправки метрик из Prometheus в Elasticsearch используется отдельный инструмент — prometheus-elasticsearch-exporter, но это менее распространенная практика. Обычно метрики остаются в Prometheus, а логи идут в Elasticsearch.
  • Ключевые задачи при настройке: обеспечить правильные RBAC-права для DaemonSet, настроить буферизацию для устойчивости к сбоям Elasticsearch и определить политику индексов (ротация, шаблоны) на стороне Elasticsearch.