Построение интервалов на основе идентификаторов трассировки в Opentelemetry
Распространение контекста обычно используется для получения родительских идентификаторов трассировки и создания дочерних интервалов. Однако в сценариях, где для обмена сообщениями используются заголовки, необходимы альтернативные подходы.
Чтобы создать диапазон из идентификатора строковой трассировки, вы можете выполнить следующие действия:
Создание функции для анализа идентификаторов трассировки и интервала:
func constructNewSpanContext(request NewRequest) (spanContext trace.SpanContext, err error) {
traceID, err := trace.TraceIDFromHex(request.TraceID)
if err != nil {
fmt.Println("error:", err)
}
spanID, err := trace.SpanIDFromHex(request.SpanID)
if err != nil {
fmt.Println("error:", err)
}
spanContextConfig := trace.SpanContextConfig{
TraceID: traceID,
SpanID: spanID,
TraceFlags: 01,
Remote: false,
}
spanContext = trace.NewSpanContext(spanContextConfig)
return spanContext, nil
}
Эта функция извлекает идентификаторы трассировки и диапазона из запроса и создает объект SpanContext.
Внедрить SpanContext в контекст:
spanContext, err := constructNewSpanContext(request)
if err != nil {
fmt.Println("ERROR:", err)
}
requestContext := context.Background()
requestContext = trace.ContextWithSpanContext(requestContext, spanContext)
SpanContext используется для обогащения контекста запроса, указывая на продолжение трассировки.
Создайте Новый диапазон:
var requestInLoopSpan trace.Span
childContext, requestInLoopSpan := otel.Tracer("inboundmessage").Start(requestContext, "requestInLoopSpan")
requestInLoopSpan.AddEvent("processing....")
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3