先にジャンプ
VMware は、あなたの進歩を加速させるトレーニングと認定を提供します。
さらに学習したい方に (英語)Spring Cloud Sleuth の最後のマイナーバージョンは 3.1 です。最新のコミットについては、3.1.x [GitHub] (英語) ブランチを確認できます。このプロジェクトのコアは Micrometer トレース (英語) プロジェクトに移動され、インストルメンテーションは Micrometer (英語) とそれぞれのすべてのプロジェクトに移動されます (すべてのインストルメンテーションが 1 つのリポジトリで行われることはなくなりました)。
Spring Cloud Sleuth は、分散トレースのための Spring Boot 自動構成を提供します。
Sleuth は、開始するために必要なすべてを構成します。これには、トレースデータ(スパン)が報告される場所、保持するトレースの数(サンプリング)、リモートフィールド(バゲッジ)が送信されるかどうか、およびトレースされるライブラリが含まれます。
具体的には、Spring Cloud スルース…
トレース ID とスパン ID を Slf4J MDC に追加します。これにより、ログアグリゲーターの特定のトレースまたはスパンからすべてのログを抽出できます。
Spring アプリケーション(サーブレットフィルター、REST テンプレート、スケジュールされたアクション、メッセージチャネル、Feign クライアント)からの一般的な入力ポイントと出力ポイントを計測します。
spring-cloud-sleuth-zipkin
が利用可能な場合、アプリは HTTP 経由で Zipkin (英語) -compatible トレースを生成し、報告します。デフォルトでは、それらはローカルホスト (ポート 9411) 上の Zipkin コレクターサービスに送信されます。spring.zipkin.baseUrl
を使用してサービスの場所を構成します。
Sleuth をクラスパスに追加します。
Maven
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${release.train.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>
</dependencies>
Gradle
buildscript {
dependencies {
classpath "io.spring.gradle:dependency-management-plugin:0.5.2.RELEASE"
}
}
apply plugin: "io.spring.dependency-management"
dependencyManagement {
imports {
mavenBom "org.springframework.cloud:spring-cloud-dependencies:${releaseTrainVersion}"
}
}
dependencies {
compile 'org.springframework.cloud:spring-cloud-starter-sleuth'
}
Spring Cloud Sleuth がクラスパス上にある限り、Spring Boot アプリケーションはトレースデータを生成します。
@SpringBootApplication
@RestController
public class Application {
private static Logger log = LoggerFactory.getLogger(DemoController.class);
@RequestMapping("/")
public String home() {
log.info("Handling home");
return "Hello World";
}
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
このアプリを実行してから、ホームページにアクセスします。ログに traceId と spanId が入力されているのがわかります。このアプリが別のアプリを呼び出すと (例: RestTemplate
を使用)、ヘッダーにトレースデータが送信され、受信側が別の Sleuth アプリの場合は、そこでトレースが続行されます。
ハンドラーでリクエストを明示的に記録する代わりに、logging.level.org.springframework.web.servlet.DispatcherServlet=DEBUG
を設定できます
Sleuth のデフォルトは、レート制限されたサンプラーです。つまり、1 秒あたり最大 1000 件のトランザクションをサンプリングします。
(たとえば) spring.application.name=bar
を設定して、サービス名とトレース ID およびスパン ID を表示します。
Spring Initializr でプロジェクトのひな形を生成します。