Spring Cloud - услуги по отслеживанию с помощью Zipkin

1. Обзор

В этой статье мы собираемся добавить Zipkin к нашей ссылке:/spring-cloud-security-services[spring cloud project]. Zipkin - это проект с открытым исходным кодом, который предоставляет механизмы для отправки, получения, хранения и визуализации трасс. Это позволяет нам соотносить активность между серверами и получать более четкое представление о том, что именно происходит в наших сервисах.

Эта статья не является вводной статьей для распределенной трассировки или весеннего облака. Если вам нужна дополнительная информация о распределенной трассировке, прочитайте наше введение по ссылке:/spring-cloud-sleuth-single-application[spring sleuth].

2. Зипкин Сервис

Наш сервис Zipkin будет служить хранилищем для всех наших пролетов. Каждый промежуток отправляется в эту службу и собирается в следы для дальнейшей идентификации.

2.1. Настроить

Создайте новый проект Spring Boot и добавьте эти зависимости в pom.xml:

<dependency>
    <groupId>io.zipkin.java</groupId>
    <artifactId>zipkin-server</artifactId>
</dependency>
<dependency>
    <groupId>io.zipkin.java</groupId>
    <artifactId>zipkin-autoconfigure-ui</artifactId>
    <scope>runtime</scope>
</dependency>

Для справки: вы можете найти последнюю версию на Maven Central ( https://search.maven.org/classic/#search%7Cgav%7C1%7Cg%3A%22io.zipkin.java%22%20AND%20a%3A% 22zipkin-сервер% 22[zipkin-сервер], https://search.maven.org/classic/#search%7Cgav%7C1%7Cg%3A%22io.zipkin.java%22%20AND%20a%3A%22zipkin- Автоконфигурирование-щ% 22[Зипкин-Автоконфигурирование-Ui]).

Версии зависимостей унаследованы от spring-boot-starter-parent .

2.2. Включение Zipkin Server

Чтобы включить сервер Zipkin , мы должны добавить несколько аннотаций к основному классу приложения:

@SpringBootApplication
@EnableZipkinServer
public class ZipkinApplication {...}

Новая аннотация @ EnableZipkinServer настроит этот сервер для прослушивания входящих диапазонов и будет действовать как наш интерфейс для запросов.

2.3. Конфигурация

Сначала давайте создадим файл с именем bootstrap.properties в src/main/resources . Помните, что этот файл необходим для получения нашей конфигурации с сервера конфигурации.

Давайте добавим эти свойства к нему:

spring.cloud.config.name=zipkin
spring.cloud.config.discovery.service-id=config
spring.cloud.config.discovery.enabled=true
spring.cloud.config.username=configUser
spring.cloud.config.password=configPassword

eureka.client.serviceUrl.defaultZone=
  http://discUser:[email protected]:8082/eureka/----

Теперь давайте добавим файл конфигурации в наше конфигурационное хранилище, расположенное по адресу __c: \ Users \\ {username} \ __ в Windows или __/Users/\ {username}/__ в **  nix.

В этом каталоге давайте добавим файл с именем __zipkin.properties__ и добавим следующее содержимое:

[source,text,gutter:,true]

spring.application.name=zipkin server.port=9411 eureka.client.region=default eureka.client.registryFetchIntervalSeconds=5 logging.level.org.springframework.web=debug

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

====  **  2.4. Бежать**

Теперь давайте запустим наше приложение и перейдем по адресу http://localhost: 9411. Нас должны приветствовать на домашней странице __Zipkin's__:

ссылка:/uploads/zipkinhomepage-1-1.png%201595w[]

Большой! Теперь мы готовы добавить некоторые зависимости и настройки в наши сервисы, которые мы хотим отслеживать.

===  **  3. Настройка сервиса **

Настройка для серверов ресурсов почти такая же. В следующих разделах мы подробно расскажем, как настроить __book-сервис. Мы рассмотрим это, объяснив изменения, необходимые для применения этих обновлений к __rating-service__ и __gateway-service ** ** . ** **  __

====  **  3.1. Настроить**

Чтобы начать отправку диапазонов на наш __Zipkin__ сервер, мы добавим эту зависимость в наш __pom.xml__ файл:

[source,xml,gutter:,true]

<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-zipkin</artifactId> </dependency>

Для справки: вы можете найти последнюю версию на __Maven Central__ (https://search.maven.org/classic/#search%7Cgav%7C1%7Cg%3A%22org.springframework.cloud%22%20AND%20a%3A% 22spring-облако стартер-Зипкин% 22[пружинно-облако-стартер-Зипкин]).

====  **  3.2. Spring Config **

Нам нужно добавить некоторые настройки, чтобы **  book-service **  использовал __Eureka__, чтобы найти наш __Zipkin__ сервис. Откройте __BookServiceApplication.java__ и добавьте этот код в файл:

[source,java,gutter:,true]

@Autowired private EurekaClient eurekaClient;

@Autowired private SpanMetricReporter spanMetricReporter;

@Autowired private ZipkinProperties zipkinProperties;

@Value("${spring.sleuth.web.skipPattern}") private String skipPattern;

@Bean public ZipkinSpanReporter makeZipkinSpanReporter() { return new ZipkinSpanReporter() { private HttpZipkinSpanReporter delegate; private String baseUrl;

@Override
public void report(Span span) {
InstanceInfo instance = eurekaClient
  .getNextServerFromEureka("zipkin", false);
if (!(baseUrl != null &&
  instance.getHomePageUrl().equals(baseUrl))) {
    baseUrl = instance.getHomePageUrl();
    delegate = new HttpZipkinSpanReporter(baseUrl,
      zipkinProperties.getFlushInterval(),
      zipkinProperties.getCompression().isEnabled(),
      spanMetricReporter);
                if (!span.name.matches(skipPattern)) delegate.report(span);
            }
        }
    };
}
Приведенная выше конфигурация регистрирует пользовательский __ZipkinSpanReporter__, который получает свой URL от eureka. Этот код также отслеживает существующий URL и обновляет __HttpZipkinSpanReporter__ только при изменении URL. Таким образом, независимо от того, где мы развернем наш сервер Zipkin, мы всегда сможем найти его без перезапуска службы.

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

====  **  3.3. Конфигурация **

Теперь давайте добавим некоторую конфигурацию в наш файл __book-service.properties__ в репозитории config:

[source,text,gutter:,true]

spring.sleuth.sampler.percentage=1.0 spring.sleuth.web.skipPattern=(^cleanup.** )

__Zipkin__ работает путем выборки действий на сервере. Установив для __spring.sleuth.sampler.percentage__ значение 1,0, мы устанавливаем частоту дискретизации 100%. Шаблон пропуска - это просто регулярное выражение, используемое для исключения диапазонов, чье имя совпадает.

Шаблон пропуска заблокирует сообщение о всех промежутках, начинающихся со слова «очистка». Это должно остановить промежутки, происходящие из базы кода весенней сессии.

====  **  3.4. Рейтинговая служба **

Выполните те же действия, что и в разделе «Обслуживание книг», выше, применяя изменения к эквивалентным файлам для сервиса оценки.

====  **  3.5. Шлюз Сервис **

Выполните те же действия **  book-service ** . Но при добавлении конфигурации к шлюзу ____. Properties____ добавьте их:

[source,text,gutter:,true]

spring.sleuth.sampler.percentage=1.0 spring.sleuth.web.skipPattern=(^cleanup. |.+favicon. )

Это настроит службу шлюза так, чтобы она не отправляла промежутки о фавиконе или весеннем сеансе.

====  **  3.6. Бежать**

Если вы этого еще не сделали, запустите службы **  config ** , **  discovery ** , **  gateway ** , **  book ** , **  rating **  и **  zipkin ** .

Перейдите по адресу http://localhost: 8080/book-service/books.

Откройте новую вкладку и перейдите по адресу http://localhost: 9411. Выберите книжный сервис и нажмите кнопку «Найти следы». Вы должны увидеть след в результатах поиска. Нажмите на этот след, чтобы открыть его:

ссылка:/uploads/zipkintrace-1-1-1024x110.png%201024w[]

На странице трассировки мы можем увидеть запрос с разбивкой по сервисам. Первые два пролета создаются __gateway__, а последний - __book-service.__ Это показывает нам, сколько времени запрос потратил на обработку __ __-service, __ 18,379 мс и __gateway, __ 87,961 мс ,

===  **  4. Заключение**

Мы видели, как легко интегрировать __Zipkin__ в наше облачное приложение.

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

Как всегда, вы можете найти исходный код https://github.com/eugenp/tutorials/tree/master/spring-cloud/spring-cloud-bootstrap[over на Github].