Ответ
Прямого "экспортера" из Kubernetes в Elasticsearch не существует. Вместо этого используется связка из агента для сбора логов и плагина для Elasticsearch. Стандартным выбором в экосистеме CNCF является Fluent Bit (легковесный) или Fluentd (более функциональный).
Типичный стек:
- Fluent Bit развертывается как DaemonSet на каждой ноде K8s.
- Он собирает логи контейнеров и системные логи с ноды.
- Через выходной плагин 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.