TGViewer
Библиотека Java разработчика Библиотека Java разработчика @bookjava · 10.1K subscribers
Post #4180 1.29K
🪵 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 выглядят так:
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
  • 👍 2
  • 🔥 1
More from @bookjava
  1. Sep 27, 2026🧠 Ленивая инициализация через Supplier — элегантная альтернатива double-checked locking К…
  2. Sep 23, 2026Что такое механизм try-with-resources? Механизм try-with-resources в Java — это конструкци…
  3. Sep 21, 2026📌 picocli — это современная библиотека для создания CLI-приложений на Java. Она упрощает…
  4. Sep 18, 2026Double-brace инициализация в Java — это идиома, которая используется для инициализации кол…
  5. Sep 16, 2026🧠@Value vs @ConfigurationProperties — не выбирай наобум Оба способа хороши для конфигурац…
  6. Sep 14, 2026🧠 Трюк с @EventListener в Spring — убираем лишний @TransactionalEventListener Когда тебе…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →