Какие типы данных собираются с помощью стека ELK (Elastic Stack)?

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

Ответ

Стек ELK (сейчас чаще Elastic Stack: Beats, Logstash, Elasticsearch, Kibana) предназначен для централизованного сбора, обработки, хранения и визуализации данных, в основном — машиночитаемых. Основные типы данных:

  1. Логи приложений и систем (Log Data): Самый частый случай.

    • Структурированные логи: JSON-логи из микросервисов (например, лог HTTP-запроса с полями timestamp, method, path, statusCode, durationMs).
    • Неструктурированные/полуструктурированные логи: Текстовые логи Nginx, Apache, системные логи (/var/log/syslog, journalctl), логи контейнеров Docker.
  2. Метрики (Metric Data): Числовые временные ряды.

    • Системные метрики: Загрузка CPU, использование памяти, дисковое I/O, сетевой трафик (собираются Metricbeat или агентами вроде node_exporter для Prometheus).
    • Метрики приложений: Количество запросов в секунду, время ответа, количество ошибок, размер очереди (часто отправляются напрямую в StatsD или экспортируются в формате для Beats).
  3. Трассировки распределённых систем (Trace Data): Данные для отслеживания пути запроса через множество сервисов (часто используется APM-агент Elastic или интеграция с Jaeger). Содержат информацию о вложенных спанах (spans), их длительности и ошибках.

  4. Данные безопасности и аудита (Security Data): События входа в систему (SSH, sudo), подозрительная сетевая активность, изменения файлов (собирается Auditbeat, Filebeat с модулями безопасности).

Пример Filebeat конфигурации для сбора логов Nginx в формате JSON:

# filebeat.yml
filebeat.inputs:
- type: filestream
  enabled: true
  paths:
    - /var/log/nginx/access-json.log
  json.keys_under_root: true
  json.add_error_key: true

output.elasticsearch:
  hosts: ["elasticsearch-host:9200"]
  indices:
    - index: "nginx-access-%{+yyyy.MM.dd}"

setup.ilm.enabled: false
setup.template.enabled: false