Поддержка @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:

Я просмотрел следующие документы на наличие упоминаний @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.
Другие вопросы по тегам