2017-07-11 12 views
2

現在、すべてのSpanに情報を追加するスケーラブルな方法でSpring Cloud Sleuthをカスタマイズする方法を理解しようとしています。Spring Cloud Sleuthですべてのスパンに情報を追加する方法

私がこれまで試してみました:

GenericFilterBeanHandlerInterceptorAdapterの私の独自の実装を使用して、それらにコンストラクタでTracerを与え、彼らはtracer.addTag("key", "value")

と呼ばれている毎回タグを書き、私は見ていました新しい荷物情報の考え方 - しかし、私はそれをトレース全体としてグローバルに解釈しています - そして、トレースは異なるサービス/マシンにわたるいくつかのリクエストを持っているので、サービス/マシンレベルに関する情報を追加するという私の目的に合わないでしょう。

これまでフィルタとインターセプタからのタグは、いくつかのスパンのためではなく、すべてのためにセットされます、私はspring-cloud-stream-binder-kafka

を通じて私のカフカのトピックに書かれているJSONを検査する際だから私の質問は次のようになります。どのようなタイプのスパンを作成するリクエスト/アクションが存在し、スパンに何かを注入する適切な方法は何か。この実装をいくつかのマイクロサービスに配備したいので、私はそれぞれのメソッドに注釈をつけたり、同様に集中的に働き、そのためにスケーラビリティのあるアプローチをしたくありません。

答えて

1

このような場所はたくさんありますが、実際には別の角度から問題に取り組むことができます。フックを閉じることができる場所が1つあります。 https://github.com/spring-cloud/spring-cloud-sleuth/blob/master/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/SpanReporter.java - SpanReporterの独自の実装を作成して、たとえばZipkin span reporterに委任する前にタグを追加することができます。より簡単な方法は、報告される前にスパンを調整するSpanAdjuster beanを登録することだけです。そうすれば、タグを1つの場所にだけ追加できます。

+0

「SpanAdjuster」は完璧に聞こえます。しかし、@ SpinAdjusterを実装するクラスを登録しようとすると、@Configurationクラスのフィルタとインターセプタの横にトレーサの循環依存関係が発生します。フィルタとインジェクタのコンストラクタを注入する必要があります。私はそれを間違った方法で試していますか?この問題を解決するための推奨方法はありますか? – LST

+0

私はいくつかのコードを表示する必要があると思います。どこかにアップロードできますか? –

+0

しかし、トレーサーはどこにでも必要であり、別の構成で構築されています。サイクリック依存関係はありません。また、スパンがエクスポート可能かどうかをチェックするだけで、スパンに直接タグを設定することもできます。そのようなトレーサを注入する必要はありません。 –

関連する問題