Проброс span через HTTP в Opentelemetry
Для того чтобы пробросить Span OpenTelemetry, а точнее конечно же его ID через http запрос можно использовать следующую схему.
- При начальной настройке объекта otel необходимо указать:
otel.SetTextMapPropagator(propagation.TraceContext{})
- Далее существующий контекст который содержит span необходимо завернуть в Header запроса который мы будем выполнять:
otel.GetTextMapPropagator().Inject(newCtx, propagation.HeaderCarrier(req.Header))
Где newCtx
это контекст который вернулся при создании исходного span.
- На стороне обработчика запроса принимающей стороны необходимо распаковать контекст из пришедшего request header.
ctx := otel.GetTextMapPropagator().Extract(r.Context(), propagation.HeaderCarrier(r.Header))
_, span := tracer.Start(ctx, "remoteservice")
defer span.End()
- Проверить. Наверное можно не распаковывать если настроено инструментирование http