JavaRush /Курси /Модуль 5. Spring /Лекція 260: Як забезпечити повну спостережуваність за мік...

Лекція 260: Як забезпечити повну спостережуваність за мікросервісною системою

Модуль 5. Spring
Рівень 20 , Лекція 9
Відкрита

Давайте тепер об’єднаємо наші інструменти (Zipkin, ELK, Prometheus, Grafana), щоб створити цілісну систему для спостереження за мікросервісами.

Логування запитів за допомогою ELK

ELK-стек (Elasticsearch, Logstash, Kibana) допомагає централізувати збір логів і зробити їх доступними для аналізу. Кожен мікросервіс відправляє свої логи в Logstash, а той передає логи в базу Elasticsearch. Потім через Kibana ми можемо візуалізувати і аналізувати ці дані.

Приклад налаштування логування в Spring Boot:


# application.yml
logging:
  file:
    name: logs/microservice.log
  level:
    root: INFO
  logstash:
    appender:
      enabled: true
    destination: localhost:5000 # порт Logstash

На боці Logstash налаштування виглядає так:

input {
  tcp {
    port => 5000
    codec => json_lines
  }
}
output {
  elasticsearch {
    hosts => ["http://localhost:9200"]
    index => "app-logs-%{+YYYY.MM.dd}"
  }
}

І ось магія: ми бачимо всі логи зі всіх сервісів в одному місці! Помилки, запити, навіть відчуття сервісу, що в нього "болить голова".


Трасування запитів з Zipkin і Spring Cloud Sleuth

Розподілена трасування робить сервіси балакучими: тепер вони розповідають, хто їх покликав, а кого вони покликали у відповідь. Використовуючи Zipkin і Spring Cloud Sleuth, ви створюєте ланцюжок (trace) з "ключових подій" (spans), які виникають у процесі виконання одного запиту.

Приклад налаштування Sleuth і Zipkin:

spring:
  sleuth:
    sampler:
      probability: 1.0  # 100% запитів будуть трасуватися
  zipkin:
    base-url: http://localhost:9411 # адреса сервісу Zipkin

Приклад трасування в коді:


@RestController
@RequestMapping("/serviceA")
public class ServiceAController {
    private final RestTemplate restTemplate;

    @Autowired
    public ServiceAController(RestTemplate restTemplate) {
        this.restTemplate = restTemplate;
    }

    @GetMapping("/callB")
    public String callServiceB() {
        String response = restTemplate.getForObject("http://localhost:8081/serviceB/hello", String.class);
        return "ServiceA -> " + response;
    }
}

Тепер, дивлячись у Zipkin, ви будете бачити щасливий ланцюжок викликів і час виконання кожного з них.


Моніторинг метрик з Prometheus і Grafana

Переходимо до метрик. Вони дозволяють вимірювати стан сервісів (CPU, пам’ять, кількість запитів) або бізнес-показники (кількість успішних покупок, середня тривалість сесії).

Spring Boot Actuator вже публікує метрики, а Prometheus їх збирає. Ось як підключити Actuator для публікації метрик:


management:
  endpoints:
    web:
      exposure:
        include: '*'
  metrics:
    export:
      prometheus:
        enabled: true

Після цього ми додаємо сервіс в конфігурацію Prometheus:


# prometheus.yml
scrape_configs:
  - job_name: 'service-a'
    static_configs:
      - targets: ['localhost:8080'] # endpoint Actuator

А через Grafana легко зробити дашборд, який перетворить сухі числа на гарні графіки.


Інтеграція всього разом: ELK + Zipkin + Prometheus + Grafana

У вас є логи, трасування, графіки метрик — все є! Як же все це працює в комплексі?

  1. Запит прийшов: користувач надсилає запит на ваш мікросервіс.
  2. Логування: кожен сервіс логує свої дії. Логи йдуть в ELK.
  3. Трасування: Sleuth зв’язує виклики в єдиний trace, який зберігається в Zipkin.
  4. Моніторинг метрик: Prometheus збирає дані про продуктивність.
  5. Візуалізація: Grafana показує вам загальну картину: дашборди метрик, пошуки в логах, трасування.

Приклади використання Observability у реальних системах

Великі компанії від Netflix до Uber використовують схожі підходи для спостережуваності. Наприклад:

  • Netflix: активно застосовує розподілене трасування для аналізу своєї складної мікросервісної системи.
  • Uber: реалізує метрики і трасування для оптимізації логістичних процесів.
  • Airbnb: основний акцент на централізованому логуванні та візуалізації.

Ці інструменти роблять їхні системи стійкими, запобігаючи простоям і масштабним збоям.


Рекомендації та кращі практики

  • Зосередьтесь на ключових показниках. Наприклад, успішність запитів, латентність, використання ресурсів.
  • Автоматизуйте аналіз проблем. Метрики + трасування + логи повинні бути пов’язані. Якщо бачите спад в метриці, йдіть у трасування і знаходьте винуватця.
  • Налаштовуйте сповіщення. Додайте алерти в Prometheus, щоб одразу дізнаватися про проблеми.
  • Використовуйте профілі. Підключіть різні рівні логування для production і розробки.

Наостанок

Перед вами система, в якій Zipkin, ELK, Prometheus і Grafana працюють як єдине ціле для створення повної спостережуваності. Це не просто зручність — це обов’язковий інструмент для роботи з мікросервісами.

Ви готові справлятися навіть з найзаплутанішими проблемами у ваших системах. Так, тепер жодне раптове коло запитів не зможе вас обдурити. Ви бачите їх наскрізь. Вітаю, у вас тепер рентгенівське бачення для мікросервісів!

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