Поддержка @NewSpan и @ContinueSpan в Spring Boot 3
Я создал демонстрационное приложение, в котором хотел посмотреть, как настроить трассировку в Spring Boot 2 и Spring Boot 3: https://github.com/Compile-Time/demo-tracing-in-spring-boot-2-and-3
В демонстрации используются следующие зависимости трассировки для проекта Spring Boot 3.
implementation 'io.micrometer:micrometer-tracing-bridge-brave'
implementation 'io.zipkin.reporter2:zipkin-reporter-brave'
И соответствующий код вот этот.
import io.micrometer.tracing.annotation.NewSpan;
import io.micrometer.tracing.annotation.SpanTag;
@Service
@RequiredArgsConstructor
public class NewSpanUserCreationService {
private final UserCreationService userCreationService;
@Transactional
@NewSpan("create new user and group (@NewSpan)")
public UserGroup create(
@SpanTag("user.creation.request") final UserCreationRequest creationRequest
) {
return userCreationService.create(creationRequest);
}
}
Основываясь на руководстве по миграции в репозитории Micrometer Tracing, кажется, что все, что необходимо, — это изменить имена пакетов Spring Cloud Sleuth на имена пакетов Micrometer Tracing: https://github.com/micrometer-metrics/tracing/wiki/Spring . -Cloud-Sleuth-3.1-Migration-Guide#async-instrumentation
Однако при демонстрации аннотаций @NewSpan и @ContinueSpan в Spring Boot 3 я не вижу никаких новых дочерних диапазонов или модификаций существующих диапазонов. Это заставляет меня задаться вопросом, поддерживаются ли вообще «старые» аннотации Sleuth. Поскольку в документации по трассировке микрометров не упоминается о существовании аннотаций @NewSpan и @ContinueSpan: https://micrometer.io/docs/tracing. Кроме того, я не нашел в документации Spring Boot 3 подсказок, которые предлагали бы поддержку «старых» аннотаций.
Однако внутри репозитория трассировки микрометров присутствуют аннотации: https://github.com/micrometer-metrics/tracing/tree/main/micrometer-tracing/src/main/java/io/micrometer/tracing/annotation .
Так что теоретически кто-то может предоставить реализацию, которая заставит работать аннотации @NewSpan и @ContinueSpan.
Это оставляет меня со следующими предположениями:
- Spring Boot 3 официально не поддерживает старые аннотации
- Если кто-то хочет, он может заставить работать старые аннотации, реализуя инструментарий/АОП-аспект вручную для старых аннотаций.
- API наблюдения Micrometer является предпочтительным подходом на будущее
Буду рад, если кто-нибудь сможет подтвердить или опровергнуть некоторые или все мои предположения. Возможно, я просто где-то что-то пропустил.
Я искал в следующих репозиториях намеки на поддержку @NewSpan или @ContinueSpan:
- https://github.com/микрометр-метрика/трассировка
- https://github.com/spring-projects/весенняя загрузка
Я просмотрел следующие документы на наличие упоминаний @NewSpan и @ContinueSpan: (я не могу предоставить ссылки здесь, потому что это новая учетная запись без репутации...)
- Документация по микрометру — отслеживание микрометра
- Spring Boot 3 — Готовые к производству функции — Метрики
- Spring Boot 3 — Готовые к производству функции — Трассировка
2 ответа
Согласно документации микрометра , они добавили поддержку@NewSpan
,@ContinueSpan
и@SpanTag
аннотации из Micrometer Tracing 1.1.0.
Micrometer Tracing 1.1.0 доступен вместе с Springboot 3.1.0, который в настоящее время находится на стадии ключевого выпуска.
Мне удалось создать два решения, чтобы заставить работать старые аннотации. Первый копирует код проекта Sleuth и модифицирует его, а второй реализуется вручную.
В целом, я призываю всех использовать новый@Observed
аннотацию, поскольку, насколько я могу судить, старые аннотации не являются приоритетом для Spring Boot 3 (из-за отсутствия упоминания в документации Spring Boot 3).
Однако, если вам любопытно или у вас есть веская причина повторно реализовать старые аннотации, вы можете взглянуть на эти две ветки на моем GitHub:
Обратите внимание, что приведенные выше реализации не являются полными:
- Ни один из них не работает для Spring Reactive.
- Ручная реализация не поддерживает
@SpanName
.