Проброс span через HTTP в Opentelemetry

Для того чтобы пробросить span OpenTelemetry, а точнее конечно же его ID через http запрос можно использовать следующую схему.

  1. При начальной настройке объекта otel необходимо указать:
otel.SetTextMapPropagator(propagation.TraceContext{})
  1. Далее существующий контекст который содержит span необходимо завернуть в Header запроса который мы будем выполнять:
otel.GetTextMapPropagator().Inject(newCtx, propagation.HeaderCarrier(req.Header))

Где newCtx это контекст который вернулся при создании исходного span.

  1. На стороне обработчика запроса принимающей стороны необходимо распаковать контекст из пришедшего request header.
ctx := otel.GetTextMapPropagator().Extract(r.Context(), propagation.HeaderCarrier(r.Header))
_, span := tracer.Start(ctx, "remoteservice")
defer span.End()