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

Лекция 260: Как обеспечить полную наблюдаемость за микросервисной системой

Модуль 5. Spring
26 уровень , 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 работают как единое целое для создания полной наблюдаемости. Это не просто удобство — это обязательный инструмент для работы с микросервисами.

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

Комментарии
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ