0

私は基本的に受信リクエストをインターセプトし、traceId、spanId などをログに記録するフィルター (OncePerRequestFilter) を持っています。 、ライブラリとして作成した理由は、ライブラリへの変更はすべてのモジュールに共通であるためです。ここで、HttpTracing から現在のスパンを抽出し、それにバゲージ キーを追加したため、trace や spanId などの http ヘッダーを介してすべてのサービスに伝達する必要がある新しい伝達キーを追加する必要があります (以下を参照)。

 Span span = httpTracing.tracing().tracer().currentSpan();
    String corelationId =
        StringUtils.isEmpty(request.getHeader(CORELATION_ID))
            ? "n/a"
            : request.getHeader(CORELATION_ID);
    ExtraFieldPropagation.set(CUSTOM_TRACE_ID_MDC_KEY_NAME, corelationId);
    span.annotate("baggage_set");
    span.tag(CUSTOM_TRACE_ID_MDC_KEY_NAME, corelationId);

以下のように、propagation-keys と whitelisted-mdc-keys を application.yml (ライブラリを含む) ファイルに追加しました。

spring:
  sleuth:
    propagation-keys:
      - x-corelationId
    log:
      slf4j:
        whitelisted-mdc-keys:
          - x-corelationId

フィルターでこの変更を行った後、同じアプリで別のサービスに http 呼び出しを行うと、corelationId は使用できません。基本的にキーは伝達されません。

4

3 に答える 3