🪵 ELK Stack: Гугл для ваших логов
ELK - это аббревиатура трех инструментов, которые стали стандартом индустрии:
1. Elasticsearch (База данных).
2. Logstash (Труба).
3. Kibana (Интерфейс).
В современном мире к ним часто добавляется Filebeat (или Fluentd), и стек превращается в EFK.
🏗 Как это работает? (Архитектура)
Представьте конвейер:
1. Java App: Просто пишет логи в консоль (STDOUT) в формате JSON.
2. Filebeat: Маленький агент, который стоит на каждом сервере (или в каждом Поде K8s). Он "слушает" консоль приложения, собирает строки и отправляет их дальше.
3. Logstash: (Опционально) Фильтрует и обрабатывает логи (например, скрывает пароли, парсит даты).
4. Elasticsearch: Хранит терабайты логов и позволяет искать по ним мгновенно.
5. Kibana: Сайт, на который вы заходите, чтобы увидеть графики и поиск.
📝 1. JSON Logging: Забудьте про текст
Обычные логи Java выглядят так:
Это плохо. Компьютеру сложно понять, где тут дата, а где сообщение.
В микросервисах мы пишем логи в JSON:
Как сделать в Spring Boot?
Подключаем библиотеку
🔍 2. Correlation ID (Trace ID) - Самое важное!
Представьте ситуацию:
User - Service A - Service B - Service C (Ошибка!).
Вы видите ошибку в логах Service C. Но кто её вызвал? Какой пользователь? С какого запроса всё началось? Без связующей нити вы потратите часы на расследование.
Решение: Micrometer Tracing (бывший Spring Cloud Sleuth).
Он автоматически добавляет Trace ID и Span ID в каждый лог.
• Trace ID: Одинаковый для всей цепочки запросов (от входа пользователя до базы данных).
• Теперь в Kibana вы просто вбиваете
📊 3. Kibana: Визуализация
Kibana — это не просто поиск. Это аналитика.
Вы можете построить дашборд:
• Круговая диаграмма: Распределение ошибок по типам (NPE, DatabaseTimeout).
• График: Количество логинов в минуту.
• Таблица: Топ-10 самых медленных SQL-запросов (если вы логируете время выполнения).
🛠 Pro-Tip: MDC (Mapped Diagnostic Context)
Хотите, чтобы в каждом логе автоматически писался ID текущего пользователя или IP-адрес, но не хотите передавать их в каждый метод?
Используйте MDC.
🔥 Итог
1. Приложение пишет логи в JSON в консоль.
2. Filebeat забирает их и кидает в Elasticsearch.
3. Разработчик открывает Kibana и ищет проблему за 5 секунд по Trace ID.
4. Никаких SSH и
#DevOps #ELK #Logging #Kibana #Elasticsearch
📲 Мы в MAX
👉@BookJava
ELK - это аббревиатура трех инструментов, которые стали стандартом индустрии:
1. Elasticsearch (База данных).
2. Logstash (Труба).
3. Kibana (Интерфейс).
В современном мире к ним часто добавляется Filebeat (или Fluentd), и стек превращается в EFK.
🏗 Как это работает? (Архитектура)
Представьте конвейер:
1. Java App: Просто пишет логи в консоль (STDOUT) в формате JSON.
2. Filebeat: Маленький агент, который стоит на каждом сервере (или в каждом Поде K8s). Он "слушает" консоль приложения, собирает строки и отправляет их дальше.
3. Logstash: (Опционально) Фильтрует и обрабатывает логи (например, скрывает пароли, парсит даты).
4. Elasticsearch: Хранит терабайты логов и позволяет искать по ним мгновенно.
5. Kibana: Сайт, на который вы заходите, чтобы увидеть графики и поиск.
📝 1. JSON Logging: Забудьте про текст
Обычные логи Java выглядят так:
2023-10-25 INFO [main] UserService: User createdЭто плохо. Компьютеру сложно понять, где тут дата, а где сообщение.
В микросервисах мы пишем логи в JSON:
{
"timestamp": "2023-10-25T10:00:00",
"level": "INFO",
"logger": "UserService",
"message": "User created",
"user_id": "123",
"trace_id": "abc-987"
}
Как сделать в Spring Boot?
Подключаем библиотеку
logstash-logback-encoder и настраиваем logback-spring.xml. Теперь ваши логи это структурированные данные, по которым можно фильтровать!🔍 2. Correlation ID (Trace ID) - Самое важное!
Представьте ситуацию:
User - Service A - Service B - Service C (Ошибка!).
Вы видите ошибку в логах Service C. Но кто её вызвал? Какой пользователь? С какого запроса всё началось? Без связующей нити вы потратите часы на расследование.
Решение: Micrometer Tracing (бывший Spring Cloud Sleuth).
Он автоматически добавляет Trace ID и Span ID в каждый лог.
• Trace ID: Одинаковый для всей цепочки запросов (от входа пользователя до базы данных).
• Теперь в Kibana вы просто вбиваете
trace_id="abc-987" и видите все логи всех сервисов, которые участвовали в этом конкретном запросе.📊 3. Kibana: Визуализация
Kibana — это не просто поиск. Это аналитика.
Вы можете построить дашборд:
• Круговая диаграмма: Распределение ошибок по типам (NPE, DatabaseTimeout).
• График: Количество логинов в минуту.
• Таблица: Топ-10 самых медленных SQL-запросов (если вы логируете время выполнения).
🛠 Pro-Tip: MDC (Mapped Diagnostic Context)
Хотите, чтобы в каждом логе автоматически писался ID текущего пользователя или IP-адрес, но не хотите передавать их в каждый метод?
Используйте MDC.
// В фильтре на входе запроса
MDC.put("userId", request.getHeader("X-User-ID"));
// Где-то глубоко в сервисе
log.info("Заказ создан");
// В JSON-логе автоматически появится поле "userId": "123"
// В конце
MDC.clear();
🔥 Итог
1. Приложение пишет логи в JSON в консоль.
2. Filebeat забирает их и кидает в Elasticsearch.
3. Разработчик открывает Kibana и ищет проблему за 5 секунд по Trace ID.
4. Никаких SSH и
grep.#DevOps #ELK #Logging #Kibana #Elasticsearch
📲 Мы в MAX
👉@BookJava
❤6👍1🔥1