0

camel-zipkin コンポーネントを使用して、2 つの異なるサービス間を流れるリクエストを追跡しています。

service-a: Spring Boot で実行される Camel アプリケーションで、単純な HTTP プロキシとして機能します (この概念実証の目的で)。camel-zipkin モジュールによって提供される Zipkin サポート。ルート:

    from("servlet:service-a?matchOnUriPrefix=true")
      .routeId("service-a-to-b")
      .delay(2000)
      .to("http://service-b?bridgeEndpoint=true");

service-b: REST コントローラーを使用する Spring Boot アプリケーション。Spring Cloud の spring-cloud-starter-kubernetes-zipkin モジュールによって提供される Zipkin サポート。


service-a にリクエストを送信すると、Zipkin にトレースの一部が表示されます。service-a からのクライアント リクエストが表示され、service-b にサーバー リクエストが表示され、そこに追加したスパンも表示されます。リクエストパスのさまざまな部分を計測します。ただし、キャメル部分からのサーバー要求は表示されません。これには、ルートに加えた遅延によって発生した追加の 2 秒が含まれます。

camel-zipkin コードをトレースすると、次の行により、トレース ID ヘッダーが既に存在する場合にのみサーバー リクエストがトレースされることがわかりました 。 /camel-zipkin/src/main/java/org/apache/camel/zipkin/ZipkinTracer.java#L753

この知識があれば、独自のトレース ヘッダー (X-B3-TraceId、X-B3-Sampled、および X-B3-SpanId) を手動で指定すると、期待どおりにトレース全体を取得できます。ただし、クライアントがトレースを指定していなくてもトレースを開始できるようにしたいと考えています。

camel-zipkin コードの読み取りに基づいて、望ましい動作を誘導する PR を作成できると思います。ただし、その前に、いくつかのことを確認したいと思います。

  1. クライアントからトレース ヘッダーが提供されない場合に、トレースが自動的に開始されることを期待するのは妥当ですか?
  2. camel-zipkin 構成で何か不足していますか?

ありがとう!

4

0 に答える 0