Ответ
ELK — это классический стек для централизованного логирования, с которым я работал. Сейчас он часто расширяется до Elastic Stack и включает:
1. Основные компоненты:
- Elasticsearch: Распределенная поисковая NoSQL-база, где индексируются и хранятся логи. Мы настраивали шаблоны индексов, политики жизненного цикла (ILM) для ротации (hot/warm/cold tiers) и шардинг для производительности.
- Logstash: Серверный процессор конвейеров данных. Принимает, фильтрует (парсит, обогащает) и отправляет логи в Elasticsearch. Ресурсоемкий, поэтому сейчас часто заменяется на более легкие варианты.
- Kibana: Веб-интерфейс для визуализации (дашборды, графики) и анализа данных из Elasticsearch. Создавал дашборды для мониторинга ошибок приложений и аудита безопасности.
2. Современная архитектура (с Beats): Вместо тяжелого Logstash на каждой ноде теперь часто ставят легкие агенты Beats, которые отправляют данные напрямую в Elasticsearch или через Ingest Nodes.
- Filebeat: Самый частый гость. Собирает логи с файлов и отправляет их. Пример конфигурации для сбора логов Nginx и парсинга с помощью встроенных процессоров:
# filebeat.yml
filebeat.inputs:
- type: filestream
paths:
- /var/log/nginx/access.log
processors:
- dissect:
tokenizer: "%{clientip} %{ident} %{auth} [%{@timestamp}] "%{verb} %{request} HTTP/%{httpversion}" %{status} %{size}"
field: "message"
output.elasticsearch:
hosts: ["elasticsearch-host:9200"]
indices:
- index: "nginx-access-%{+yyyy.MM.dd}"
- Metricbeat: Собирает системные и сервисные метрики (CPU, память, Docker, Nginx stats).
- Auditbeat: Для сбора аудитных логов.
3. Дополнительные элементы в продакшене:
- Message Queue (Kafka/Redis): Как буфер между Beats и Elasticsearch на случай пиковой нагрузки или недоступности Elasticsearch.
- Индекс-менеджер и ILM: Для автоматического управления жизненным циклом индексов (создание, ротация, удаление).