Статьи

Трассировка микросервисов SpringBoot с помощью Zipkin и Sleuth

В этой статье мы разберемся с распределенной трассировкой микросервисов с использованием среды облачного инсталляции Zipkin и Spring.

Микросервисы — это отличная архитектура, хотя она имеет свои проблемы. Сложная архитектура микросервисов имеет нисходящие и восходящие зависимости от других микросервисов, и все взаимосвязано. Большую часть времени отдельные группы просто сосредотачиваются на своих собственных службах, поэтому в распределенной среде микросервисов очень трудно обнаружить какие-либо задержки или отследить реальные проблемы во время выполнения.

1. Распределенная трассировка

По мере увеличения сложности архитектуры микросервисов критически важна равномерная наблюдаемость между сервисами и экземплярами сервера. Каждый запрос на обслуживание проходит через уровень нескольких сервисов, выявление задержки или любых проблем во время выполнения становится все труднее с использованием традиционных методов отладки. Распределенная трассировка обеспечивает целостное представление запросов, проходящих через несколько сервисов, что позволяет немедленно идентифицировать проблемы.

1.1 Распределенный словарь трассировки

  • Интервал — интервал — это отдельная операция.
  • Трассировка . Трассировка — это график сквозной задержки, состоящий из промежутков.
  • Tracers — Tracers записывает диапазоны и передает контекст, необходимый для их соединения в трассировку.

2. Зипкин

Zipkin — это распределенная система с открытым исходным кодом, которая предоставляет механизмы для отправки, получения, хранения и визуализации деталей трассировки. Это помогает команде соотнести действия между экземплярами сервера и получить более глубокое понимание того, что именно происходит в наших сервисах. Zipkin предоставляет интерфейс пользовательского интерфейса для анализа трассировок и детализации графа вызовов между сервисами.

2.1 Установка Zipkin

Существует три способа установки zipkin-сервера.

  • Java — мы можем выполнить приведенную ниже команду wget для загрузки последней версии сервера zipkin. Если у нас не установлен wget , просто скопируйте приведенный ниже URL и вставьте его в наш браузер, чтобы загрузить последнюю версию сервера zipkin.

Для этого примера приложения я установил сервер Zipkin, используя метод Java.

2.2 Зипкин Ю.И.

Пользовательский интерфейс Zipkin предоставляет следующие функции для анализа деталей распределенной трассировки по службам:

  • Поиск трасс по названию сервиса, имени пролета и т. Д.
  • График зависимостей трассировки, показывающий поток запросов трассировки между службами
  • Предоставляет подробную информацию об общем времени трассировки для каждого отдельного промежутка

Анализируя детали, предоставленные пользовательским интерфейсом Zipkin, становится легче находить задержки или какие-либо конкретные проблемы служб в архитектуре взаимосвязанных микросервисов.

3. Весеннее Облако Слин

Spring cloud sleuth добавляет трассировки и идентификаторы промежутков в Slf4j MDC (контекст сопоставленной диагностики), чтобы извлечь журналы из заданной трассировки или промежутка. Sleuth обеспечивает абстракцию по сравнению с распространенными моделями данных распределенной трассировки, такими как трассы, интервалы, аннотации, аннотации ключ-значение. Общие точки входа и выхода Sleuth Instruments из приложений Spring ( servlet filter, rest template, scheduled actions, message channels, zuul filters, feign client ).

3.1 Конфигурация Sleuth и Zipkin в SpringBoot

Добавьте следующие зависимости в Springboot pom.xml, чтобы добавить zipkin и Spring Cloud в приложение SpringBoot.

pom.xml

1
2
3
4
5
6
7
8
9
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>
 
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>

4. Образец заявки

Для этой статьи я создал пример приложения, которое состоит из трех различных микросервисов, которые называются UserGreetingService , UserNameService , UserAddressService .

UserGreetingService UserAddressService сервисы UserNameService и UserAddressService чтобы UserAddressService полное приветственное сообщение для пользователя вместе с именем и адресом.

UserGreetingService.java

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
@SpringBootApplication
@RestController
@CrossOrigin
public class UserGreetingService {
     
    @RequestMapping("/api/user/greet")
    public String greet() {
        String greetingMsg = "Hello";
        String userName = restTemplate().getForObject("http://localhost:3001/api/user/name", String.class);
        String userAddress = restTemplate().getForObject("http://localhost:3002/api/user/address", String.class);
         
        return greetingMsg + " " + userName + "!\n\n" + userAddress;
    }
     
    @Bean
    RestTemplate restTemplate() {
        return new RestTemplate();
    }
     
    public static void main(String[] args) {
        SpringApplication.run(UserGreetingService.class,
                "--spring.application.name=user-greeting-service",
                "--server.port=3000"
        );
    }
}

Чтобы ввести задержку служб, я Thread.sleep(1000) добавил Thread.sleep(1000) и Thread.sleep(2000) в службы UserNameService и UserAddressService .

Вы можете скачать пример кода по ссылке на github — https://github.com/VishSinha/springbootzipkindemo

4.1 Запустите Zipkin Server

Чтобы запустить zipkin-сервер в нашей локальной среде, перейдите в каталог, в который мы загрузили zipkin-сервер, откройте командную строку или терминал и выполните следующую команду:

1
java -jar zipkin-server-2.5.0-exec.jar

После запуска zipkin-сервера пользовательский интерфейс Zipkin можно просматривать по URL- адресу: http: // localhost: 9411 / zipkin /

4.2 Запустить образец

Как только вы загрузите пример кода с github, запустите все три микросервиса, используя вашу любимую среду IDE, например eclipse, Intellij или командную строку.

После запуска всех трех микросервисов UserGreetingService URL-адрес конечной точки UserGreetingService http: // localhost: 3000 / api / user / greet с помощью браузера или почтальона.

В целом, вы заметите, что отправка приветствия заняла более 3 секунд. Теперь давайте откроем пользовательский интерфейс Zipkin, чтобы проанализировать, что происходит за кулисами и почему общее время отклика составляет более 3 секунд.

Откройте окно браузера и визуализируйте пользовательский интерфейс Zipkin, используя URL-адрес по умолчанию — http: // localhost: 9411 / zipkin . Это сделает страницу поиска по умолчанию zipkin.

Зипкин Ю.И.

Давайте выберем службу приветствия пользователя из названия службы и нажмем кнопку «Найти следы».

Вы увидите, что есть всего 3 диапазона услуг приветствия вместе с общим временем ответа.

Зипкин Ю.И. Найти следы

Нажмите на ссылку «3 пролета», это предоставит подробную информацию о времени ответа каждой услуги и другие детали, как показано ниже.

Зипкин Ю.И.

Кроме того, нажав на каждый диапазон служб, мы можем получить подробную информацию об идентификаторах трассировки, идентификаторах диапазонов, идентификаторах родительской трассировки, информации об экземплярах сервера и других данных трассировки для каждого запроса на услуги. Это может легко помочь нам устранить любые неисправные микросервисы или проблемы с задержкой.

Зипкин Ю.И. Span info

После того, как вы откроете раздел Зависимости пользовательского интерфейса Zipkin, будет отображен график зависимости сервисов для сервисов, как показано ниже:

Зипкин Ю.И. Граф зависимостей

5. Заключение

В целом, zipkin очень легко интегрировать в облачные приложения для микросервисов, и это дает много полезной информации и информации по всем сервисам для анализа общего состояния сервисов. Используя Zipkin, мы можем легко идентифицировать любые неисправные сервисы и корректирующие действия могут быть предприняты.

6. Ссылки