Ответ
Прямого "экспортера" из 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.
Ответ 18+ 🔞
А, ну это же классика, ёпта! Ситуация, когда новичок гуглит "как экспортировать из кубера в эластик" и ждёт одну волшебную кнопку, а там — хуй с горы. Прямого-то экспортёра, блядь, и нету! Вообще нихуя такого.
Вот смотри, как мир устроен, ядрёна вошь. Вместо одной жирной утилиты тебе подсовывают связку: агент, который логи собирает и плагин, который их в Elasticsearch пихает. В мире облачных нанотехнологий (CNCF, блядь) все как один топят за Fluent Bit — он лёгкий, прожорливый как мартышлюшка, или за его старшего брата Fluentd, если тебе функционала овердохуища нужно.
Как это обычно выглядит, бля:
- Fluent Bit тебе на каждую ноду кубера впаивается как DaemonSet. Представь — мелкий шпион на каждой машине.
- Этот шпион сидит и смотрит в хвост всех логов контейнеров (да и системные тоже может хапнуть).
- А потом, через свой выходной плагин для Elasticsearch (просто
es), он аккуратненько эти структурированные логи отправляет прямиком в кластер эластика. Всё, доверия ебать ноль, но работает.
Вот тебе кусок конфига этого дела (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, потому что он ресурсов жрёт как хитрая жопа — мало.
- Если тебе метрики из Prometheus вдруг в Elasticsearch захотелось — это, чувак, отдельная история с prometheus-elasticsearch-exporter. Но это такой изврат, честно. Все нормальные люди метрики в Прометее оставляют, а логи уже в Эластик гонят.
- И главное, не обольщайся! Основная ебля начинается потом: настроить права (RBAC) для этого DaemonSet'а, чтобы он не слишком много мог, отказоустойчивость наладить на случай, если эластик накрылся медным тазом, и в самом Elasticsearch индексы правильно настроить, чтобы они не сожрали всё место. Вот тут-то и начинается настоящий террор, волнение ебать.