Ти коли-небудь намагався знайти помилку, переглядаючи купу текстових файлів з логами? Уяви, що таких файлів кілька десятків, і вони всі розкидані по різних серверах. Щоб спростити такі ситуації, придумали ELK-стек. ELK — це тріо інструментів: Elasticsearch, Logstash і Kibana, які допомагають збирати, зберігати, аналізувати і візуалізувати логи.
У мікросервісній архітектурі кожен сервіс генерує свої логи. Якщо виникне помилка, ми захочемо швидко й легко знайти, де саме вона сталася, переглянути ланцюжок подій, а також зрозуміти, чому все пішло не так. Централізоване логування дозволяє:
- Збирати логи з усіх мікросервісів в одному місці.
- Зручно аналізувати логи, використовуючи запити (а не "ручний перегляд").
- Швидко знаходити взаємодії між сервісами і з'ясовувати причину проблем.
- Візуалізувати дані для кращого розуміння.
Що таке ELK-стек?
Розберімося з кожною з трьох літер ELK:
- Elasticsearch — це сховище даних і пошуковий двигун. Воно знаходить потрібні логи в величезних обсягах даних за долі секунди. Також підтримує запити на основі мови JSON.
- Logstash — це обробник даних. Він збирає логи з різних джерел, фільтрує або перетворює їх і відправляє в Elasticsearch. Можна сказати, що він "кур'єр" для логів.
- Kibana — це інструмент візуалізації. Він бере дані з Elasticsearch і малює графіки, діаграми і таблиці, щоб ти міг зрозуміти, що відбувається без болю.
Коли ці три інструменти працюють разом, вони перетворюють нудні текстові логи на потужний інструмент для аналізу.
Встановлення та налаштування ELK
Elasticsearch
Почнемо з встановлення Elasticsearch, який слугуватиме нашим сховищем логів.
- Завантаж і встанови Elasticsearch.
- Після встановлення відкрий файл конфігурації
elasticsearch.yml, який можна знайти в папціconfig. - Перевір, щоб Elasticsearch був доступний локально:
network.host: 127.0.0.1 http.port: 9200 - Запусти Elasticsearch:
Після запуску сервіс буде доступний за адресою http://localhost:9200.
./bin/elasticsearch
Logstash
Тепер налаштуємо другий компонент — Logstash. Це місток, який прийматиме логи від нашого Spring Boot додатка і відправлятиме їх в Elasticsearch.
- Завантаж і встанови Logstash.
- Створи файл конфігурації
logstash.conf:input { beats { port => 5044 } } output { elasticsearch { hosts => ["localhost:9200"] } }- В input ми вказуємо, що хочемо приймати логи через порт
5044. - В output ми налаштовуємо Logstash на відправку даних в Elasticsearch.
- В input ми вказуємо, що хочемо приймати логи через порт
- Запускаємо Logstash:
./bin/logstash -f logstash.conf
Kibana
Останній крок — встановлення і запуск Kibana, щоб ми могли візуалізувати дані.
- Завантаж і встанови Kibana.
- Налаштуй Kibana, відредагувавши файл
kibana.yml:server.port: 5601 server.host: "localhost" elasticsearch.hosts: ["http://localhost:9200"] - Запусти Kibana:
Тепер інтерфейс Kibana доступний за адресою http://localhost:5601.
./bin/kibana
Отже, основні компоненти встановлені. Тепер можемо інтегрувати наш Spring Boot додаток з ELK.
Інтеграція мікросервісів з ELK
Налаштування логування в Spring Boot
Саме час змусити твій додаток відправляти логи прямо в Logstash.
- Відкрий
pom.xmlі додай такі залежності:<dependency> <groupId>net.logstash.logback</groupId> <artifactId>logstash-logback-encoder</artifactId> <version>7.4</version> </dependency> - Налаштуй
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> Перезапусти додаток. Тепер логи автоматично підуть у Logstash, а звідти — в Elasticsearch.
Перевірка логів
- Відкрий інтерфейс Kibana (http://localhost:5601).
- Перейдіть у розділ Discover.
- Налаштуй індекс (наприклад,
logstash-*) і побачиш логи з твого додатка.
Практичне налаштування ELK для мікросервісів
Уявімо, що в нас є два мікросервіси:
- User Service — відповідає за управління даними користувачів.
- Order Service — відповідає за обробку замовлень.
Кроки:
- Додай конфігурацію Logstash у кожен сервіс, як було показано раніше.
- Налаштуй обидва сервіси так, щоб вони надсилали логи в Logstash.
- Використай Kibana для аналізу логів:
- Знайди запити, які проходять через обидва сервіси.
- Якщо запити пов'язані між собою (наприклад, Trace ID із Sleuth), відстеж їх шлях.
Про що варто пам'ятати?
Логування — це потужний інструмент, але з ним пов'язані деякі виклики:
- Ресурсоємність. Генерація та обробка великого обсягу логів можуть уповільнити систему.
- Безпека. Переконайся, що конфіденційні дані (наприклад, паролі) не потрапляють у логи.
- Зберігання. Elasticsearch має обмеження на обсяг даних, тому старі логи потрібно архівувати або видаляти.
Тепер, коли твої мікросервіси оснащені централізованим логуванням через ELK, ти зможеш спати значно спокійніше. Адже діагностика проблем стане питанням секунд, а візуалізація логів у Kibana точно викличе захоплення в твоєї команди! (Або хоча б у твого тимліда.)
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ