> 백엔드 개발 > Golang > HTTP가 아닌 컨텍스트의 추적 ID에서 스팬을 구성하는 방법은 무엇입니까?

HTTP가 아닌 컨텍스트의 추적 ID에서 스팬을 구성하는 방법은 무엇입니까?

Susan Sarandon
풀어 주다: 2024-10-28 03:06:31
원래의
954명이 탐색했습니다.

How to Construct Spans from Trace IDs in Non-HTTP Contexts?

HTTP가 아닌 컨텍스트의 추적 ID에서 범위 구성

HTTP가 아닌 컨텍스트의 헤더를 사용하여 추적을 전파하는 경우 수동으로 구성해야 합니다. 제공된 추적 및 범위 ID를 사용하여 범위를 확장합니다. 이를 달성하는 방법은 다음과 같습니다.

구독자 측:

추적 및 스팬 헤더를 사용하여 수신 메시지를 처리하는 함수 내부:

  1. 추출 헤더의 추적 및 범위 ID.
  2. trace.TraceIDFromHex() 및 Trace.SpanIDFromHex() 함수를 사용하여 문자열 ID를 적절한 유형으로 변환합니다.
  3. trace.SpanContext를 다음과 같이 구성합니다. 추출된 추적 ID, 범위 ID 및 추적 플래그를 제공합니다.
  4. context.Background()와 추적.ContextWithSpanContext()를 차례로 사용하여 새로 생성된 범위 컨텍스트로 현재 컨텍스트를 강화합니다.
  5. 적절한 이름과 함께 강화된 컨텍스트를 사용하여 새 범위를 시작합니다.

예:

<code class="go">func handleIncomingMessage(request NewRequest) {
    traceID, err := trace.TraceIDFromHex(request.TraceID)
    if err != nil {
        fmt.Println("error: ", err)
        return
    }

    spanID, err := trace.SpanIDFromHex(request.SpanID)
    if err != nil {
        fmt.Println("error: ", err)
        return
    }

    spanContext := trace.NewSpanContext(trace.SpanContextConfig{
        TraceID: traceID,
        SpanID:  spanID,
        TraceFlags:   01,
        Remote:  false,
    })

    ctx := context.Background()
    ctx = trace.ContextWithSpanContext(ctx, spanContext)

    _, span := otel.Tracer("requestInLoop").Start(ctx, "requestInLoopSpan")
    span.AddEvent("processing....")
}</code>
로그인 후 복사

이 예에서 NewRequest는 다음을 포함하는 사용자 정의 유형입니다. 추적 및 범위 ID. handlerIncomingMessage 함수는 NewRequest 구조체를 입력으로 사용하고 제공된 추적 및 범위 ID를 사용하여 범위를 생성합니다.

참고: 제공된 범위의 IsRemote 필드가 있는 경우 새 범위가 생성되지 않는지 확인하세요. context는 true로 설정됩니다. 이는 해당 범위가 이미 원격으로 내보내졌음을 나타냅니다.

위 내용은 HTTP가 아닌 컨텍스트의 추적 ID에서 스팬을 구성하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿