Spring Boot Jaeger создает новый Span для заданного TraceId - PullRequest
0 голосов
/ 12 марта 2020

, поэтому я играю с Jaeger и OpenTracing, чтобы отслеживать запросы между моими микросервисами Spring Boot. Я настроил все необходимые конфигурации и добавил зависимость:

<dependency>
    <groupId>io.opentracing.contrib</groupId>
    <artifactId>opentracing-spring-jaeger-web-starter</artifactId>
    <version>2.0.3</version>
</dependency>

Пока все работает нормально. Я вижу все следы и пролеты в моем Jaeger UI, никаких проблем.

Но теперь у меня есть задача добавить новые промежутки к указанной c трассе, которая уже завершена. Думайте об этом так. Клиент вызывает одну из служб, и начинается отслеживание. После того, как работа сделана, я вижу след в моем пользовательском интерфейсе Jaeger. Но теперь вызывающие клиенты хотят добавить некоторые дополнительные данные трассировки в указанную c трассировку. Как и отслеживание информации из других служб, которые не входят в сферу моих микросервисов. Я добавил фильтр, чтобы можно было извлечь идентификатор трассировки и отправить его клиенту. Теперь клиент выполняет запрос, содержащий дополнительную информацию о трассировке и идентификатор трассировки. Затем эту информацию следует добавить в качестве дополнительного отрезка в уже законченную трассировку.

Теперь к моему вопросу. Есть ли способ создать диапазон и добавить его к трассе, используя только идентификатор трассы в виде строки?

Я попробовал Zipkin, и я мог бы просто сделать:

Span span = new SpanBuilder()
                .name(someName)
                .traceId(traceId)
                .parentId(traceId)
                .id(someId)
                .kind(Kind.CLIENT)
                .build()

Этот промежуток можно затем добавить, выполнив POST-запрос к моему zipkin-серверу через порт 9411, который выполнил magi c добавления этого промежутка к трассе с заданным идентификатором.

Используя OpenTracing, я могу сделать:

Span span = tracer.buildSpan(someName)
                .asChildOf(**traceSpan**)
                .withStartTimestamp(someTime)
                .ignoreActiveSpan()
                .start();

К сожалению, для этого подхода требуется трассировка в форме промежутка для создания нового промежутка. как дитя этого следа. Учитывая тот факт, что я могу предоставить только идентификатор трассы, я не знаю, как получить необходимый диапазон этой трассы. Мне действительно нужно позвонить на мой Jaeger-запрос, чтобы получить необходимый диапазон трассировки, или есть другой подход, о котором я не думал?

Действительно хотел бы получить некоторую помощь по этому вопросу.

Ура!

...