Реализация распределенной трассировки и агрегирования журналов в микросервисах с использованием Spring Sleuth и Zipkin

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

  1. Добавление зависимости Spring Sleuth:
    Для начала нам нужно добавить зависимость Spring Sleuth в наш проект микросервисов. Откройте файл pom.xmlи включите следующую зависимость:
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>
  1. Настройка Zipkin в качестве системы отслеживания.
    Далее нам нужно настроить Zipkin в качестве нашей распределенной системы отслеживания. Добавьте следующие свойства в файл application.properties:
spring.zipkin.base-url=http://localhost:9411
spring.zipkin.sender.type=web
  1. Включение Sleuth в микросервисах.
    Чтобы включить Sleuth в микросервисах, добавьте аннотацию @EnableSleuthв основной класс приложения. Эта аннотация будет автоматически создавать и распространять идентификаторы трассировки и диапазона.
import org.springframework.cloud.sleuth.annotation.EnableSleuth;
@EnableSleuth
@SpringBootApplication
public class YourMicroserviceApplication {
    public static void main(String[] args) {
        SpringApplication.run(YourMicroserviceApplication.class, args);
    }
}
  1. Инструментирование HTTP-запросов.
    Spring Sleuth автоматически инструментирует HTTP-запросы, что упрощает отслеживание запросов между микросервисами. Просто создайте HTTP-запросы, используя Spring RestTemplateили WebClient, и Sleuth добавит необходимые заголовки трассировки.
import org.springframework.web.client.RestTemplate;
@RestController
public class YourController {
    private final RestTemplate restTemplate;
    public YourController(RestTemplate restTemplate) {
        this.restTemplate = restTemplate;
    }
    @GetMapping("/example")
    public String exampleEndpoint() {
        String response = restTemplate.getForObject("http://your-other-microservice/other-endpoint", String.class);
        // Process the response
        return "Response: " + response;
    }
}

<старый старт="5">

  • Настраиваемое ведение журналов с идентификаторами трассировки.
    Чтобы улучшить агрегирование журналов, вы можете включать идентификаторы трассировки в свои операторы журнала. Spring Sleuth предоставляет для этой цели удобный Slf4jScopeDecorator. Настройте его в файле logback.xml, как показано ниже:
  • <configuration>
        <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
            <!-- ... -->
        </appender>
        <springProfile name="zipkin">
            <appender name="zipkin" class="zipkin2.log.SLF4JLoggingSpanHandler">
                <scopeDecorator class="org.springframework.cloud.sleuth.instrument.web.client.slf4j.Slf4jScopeDecorator"/>
            </appender>
        </springProfile>
        <root level="INFO">
            <appender-ref ref="CONSOLE"/>
            <appender-ref ref="zipkin"/>
        </root>
    </configuration>

    Реализуя распределенную трассировку и агрегацию журналов с помощью Spring Sleuth и Zipkin, вы можете получить ценную информацию о потоке запросов в вашей архитектуре микросервисов. С помощью предоставленных методов и примеров кода вы можете легко интегрировать эти мощные инструменты в свои проекты Spring Boot и улучшить возможности мониторинга и отладки.