JavaRush /Курсы /Модуль 5. Spring /Лекция 255: Логирование событий в микросервисах с ELK

Лекция 255: Логирование событий в микросервисах с ELK

Модуль 5. Spring
26 уровень , 4 лекция
Открыта

Вы когда-нибудь пытались найти ошибку, просматривая уйму текстовых файлов с логами? Представьте, что таких файлов пару десятков, и они все разбросаны по разным серверам. Чтобы упростить такие вот ситуации и придумали ELK-стек. ELK — это трио инструментов: Elasticsearch, Logstash и Kibana, которые помогают собирать, хранить, анализировать и визуализировать логи.

В микросервисной архитектуре каждый сервис генерирует свои логи. Если возникнет ошибка, мы захотим быстро и легко найти, где именно она произошла, просмотреть цепочку событий, а также понять, почему всё пошло не так. Централизованное логирование позволяет:

  • Собирать логи со всех микросервисов в одном месте.
  • Удобно анализировать логи, используя запросы (а не "ручной просмотр").
  • Быстро находить взаимодействия между сервисами и выяснять причину проблем.
  • Визуализировать данные для лучшего понимания.

Что такое ELK-стек?

Давайте разберем каждую из трех букв ELK:

  1. Elasticsearch — это хранилище данных и поисковый движок. Оно находит нужные логи в огромных объемах данных за доли секунды. Также поддерживает запросы на основе языка JSON.
  2. Logstash — это обработчик данных. Он собирает логи из различных источников, фильтрует или преобразует их и отправляет в Elasticsearch. Можно сказать, что он "курьер" для логов.
  3. Kibana — это инструмент визуализации. Он берет данные из Elasticsearch и рисует графики, диаграммы и таблицы, чтобы вы могли понять происходящее без боли.

Когда эти три инструмента работают вместе, они превращают унылые текстовые логи в мощный инструмент для анализа.


Установка и настройка ELK

Elasticsearch

Начнем с установки Elasticsearch, который послужит нашим логовым хранилищем.

  1. Скачайте и установите Elasticsearch.
  2. После установки откройте файл конфигурации elasticsearch.yml, который можно найти в папке config.
  3. Проверьте, чтобы Elasticsearch был доступен локально:
    network.host: 127.0.0.1
    http.port: 9200
    
  4. Запустите Elasticsearch:
    ./bin/elasticsearch
    
    После запуска сервис будет доступен по адресу http://localhost:9200.

Logstash

Теперь настроим второй компонент — Logstash. Это мостик, который будет принимать логи от нашего Spring Boot приложения и отправлять их в Elasticsearch.

  1. Скачайте и установите Logstash.
  2. Создайте файл конфигурации logstash.conf:
    
    input {
        beats {
            port => 5044
        }
    }
    
    output {
        elasticsearch {
            hosts => ["localhost:9200"]
        }
    }
    
    • В input мы указываем, что хотим принимать логи через порт 5044.
    • В output мы настраиваем Logstash на отправку данных в Elasticsearch.
  3. Запускаем Logstash:
    ./bin/logstash -f logstash.conf
    

Kibana

Последний шаг — установка и запуск Kibana, чтобы мы могли визуализировать данные.

  1. Скачайте и установите Kibana.
  2. Настройте Kibana, отредактировав файл kibana.yml:
    server.port: 5601
    server.host: "localhost"
    elasticsearch.hosts: ["http://localhost:9200"]
    
  3. Запустите Kibana:
    ./bin/kibana
    
    Теперь интерфейс Kibana доступен по адресу http://localhost:5601.

Итак, основные компоненты установлены. Теперь мы можем интегрировать наше Spring Boot приложение с ELK.


Интеграция микросервисов с ELK

Настройка логгирования в Spring Boot

Самое время заставить ваше приложение отправлять логи прямо в Logstash.

  1. Откройте pom.xml и добавьте следующие зависимости:
    <dependency>
        <groupId>net.logstash.logback</groupId>
        <artifactId>logstash-logback-encoder</artifactId>
        <version>7.4</version>
    </dependency>
    
  2. Настройте logback-spring.xml для отправки логов в Logstash:
    
    <configuration>
        <appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
            <destination>127.0.0.1:5044</destination>
            <encoder class="net.logstash.logback.encoder.LogstashEncoder" />
        </appender>
    
        <root level="INFO">
            <appender-ref ref="LOGSTASH" />
        </root>
    </configuration>
    
  3. Перезапустите приложение. Теперь логи будут автоматически направляться в Logstash, а оттуда — в Elasticsearch.

Проверка логов

  1. Откройте интерфейс Kibana (http://localhost:5601).
  2. Перейдите в раздел Discover.
  3. Настройте индекс (например, logstash-*) и увидите логи из вашего приложения.

Практическая настройка ELK для микросервисов

Давайте представим, что у нас есть два микросервиса:

  1. User Service — отвечает за управление данными пользователей.
  2. Order Service — отвечает за обработку заказов.

Шаги:

  1. Добавьте Logstash-конфигурацию в каждый сервис, как было показано ранее.
  2. Настройте оба сервиса так, чтобы они отправляли логи в Logstash.
  3. Используйте Kibana для анализа логов:
    • Найдите запросы, проходящие через оба сервиса.
    • Если запросы связаны между собой (например, Trace ID из Sleuth), отследите их путь.

О чем стоит помнить?

Логирование — это мощный инструмент, но с ним связаны некоторые вызовы:

  • Ресурсоемкость. Генерация и обработка большого объема логов может замедлить систему.
  • Безопасность. Убедитесь, что конфиденциальные данные (например, пароли) не попадают в логи.
  • Хранение. Elasticsearch имеет ограничения на объем данных, поэтому старые логи нужно архивировать или удалять.

Теперь, когда ваши микросервисы оснащены централизованным логированием через ELK, вы сможете спать гораздо спокойнее. Ведь диагностика проблем станет вопросом секунд, а визуализация логов в Kibana обязательно вызовет восторг у вашей команды! (Или хотя бы у вашего тимлида.)

Комментарии (1)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Александр Уровень 112
25 декабря 2025
Кажется, здесь есть небольшая сложность. ELK на любую машину под Windows не поставить. Вот что говорит elastic.co: "If you’re using Microsoft Windows, then install Windows Subsystem for Linux (WSL)." WSL можно поставить если версия Windows10 1903 и выше.