В архитектуре микросервисов крайне важно иметь представление о потоке запросов между различными службами и объединять журналы для эффективного мониторинга и отладки. В этом сообщении блога мы рассмотрим, как реализовать распределенную трассировку и агрегацию журналов в микросервисах с помощью Spring Sleuth и Zipkin. Мы рассмотрим различные методы и предоставим примеры кода, которые помогут вам начать работу.
- Добавление зависимости Spring Sleuth:
Для начала нам нужно добавить зависимость Spring Sleuth в наш проект микросервисов. Откройте файлpom.xmlи включите следующую зависимость:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>
- Настройка Zipkin в качестве системы отслеживания.
Далее нам нужно настроить Zipkin в качестве нашей распределенной системы отслеживания. Добавьте следующие свойства в файлapplication.properties:
spring.zipkin.base-url=http://localhost:9411
spring.zipkin.sender.type=web
- Включение 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);
}
}
- Инструментирование HTTP-запросов.
Spring Sleuth автоматически инструментирует HTTP-запросы, что упрощает отслеживание запросов между микросервисами. Просто создайте HTTP-запросы, используя SpringRestTemplateили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 и улучшить возможности мониторинга и отладки.