私は基本的に受信リクエストをインターセプトし、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 は使用できません。基本的にキーは伝達されません。