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

Лекція 255: Логування подій у мікросервісах з ELK

Модуль 5. Spring
Рівень 20 , Лекція 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 точно викличе захоплення в твоєї команди! (Або хоча б у твого тимліда.)

Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ