Как вы собираете логи с клиентских машин и сервисов?

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

Ответ

Мы строим pipeline на основе ELK/EFK стека.

  1. Агенты: На клиентских машинах (виртуальные машины, bare-metal) и в качестве DaemonSet в Kubernetes мы ставим Fluent Bit. Это легковесный агент на C с минимальным потреблением ресурсов, который парсит логи из файлов (/var/log/) или журналов systemd и обогащает их метаданными (имя хоста, теги).

  2. Транспорт и обработка: Fluent Bit отправляет логи в Fluentd агрегатор (можно пропустить этот шаг для простых сетапов). Fluentd выступает как буфер и роутер, может выполнять более сложную фильтрацию, парсинг и трансформацию данных перед отправкой в хранилище.

  3. Хранилище и анализ: Обработанные логи индексируются в Elasticsearch.

  4. Визуализация: Для поиска, анализа и создания дашбордов используем 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).