Как вы собираете и анализируете логи в Kubernetes?

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

Ответ

В продакшене я никогда не полагаюсь только на kubectl logs. Для сбора, хранения и анализа логов со всех подов и нод кластера используется централизованное логирование.

Стек, который я чаще всего настраиваю и использую — EFK (Elasticsearch, Fluentd, Kibana):

  1. Fluentd как DaemonSet: На каждой ноде кластера запускается pod Fluentd, который:

    • Собирает логи контейнеров из /var/log/containers/.
    • Парсит их, обогащает метаданными (namespace, pod name, container name).
    • Отправляет в Elasticsearch.
      # Упрощённый пример конфигурации Fluentd для парсинга логов Docker
      <source>
      @type tail
      path /var/log/containers/*.log
      pos_file /var/log/fluentd-containers.log.pos
      tag kubernetes.*
      <parse>
      @type json
      time_format %Y-%m-%dT%H:%M:%S.%NZ
      </parse>
      </source>
  2. Elasticsearch как StatefulSet: Хранит индексированные логи, обеспечивает быстрый поиск.

  3. Kibana как Deployment: Веб-интерфейс для визуализации и анализа логов через дашборды и запросы (например, найти все ошибки 5xx за последний час).

Альтернативный легковесный стек — Loki: Для меньших кластеров или когда не нужен полнотекстовый поиск по всем полям, я выбираю Grafana Loki. Он похож на Prometheus, но для логов.

  • Promtail (аналог Fluentd) собирает логи и отправляет в Loki.
  • Loki хранит лог-потоки, индексируя только метки (labels).
  • Grafana используется для запросов через LogQL.

Для отладки и быстрых проверок использую:

# Логи конкретного пода
kubectl logs -f deployment/my-app -n production
# Логи пода с несколькими контейнерами
kubectl logs -f pod/my-pod-xyz -c my-container
# Логи за последний час
kubectl logs --since=1h deployment/my-app
# Предыдущие логи упавшего пода
kubectl logs -p deployment/my-app

Но это лишь вспомогательные инструменты. Все инциденты расследуются через Kibana или Grafana, где есть полная картина по всему кластеру.