Spring BootでJaegerを使用してトレーシングしてみた
Spring BootでJaegerを使用してトレーシングしてみた
今回のサービスの構成
今回の構成はmainサービス、formatterサービス、publisherサービスの3つのサービスを作成します。
- formatterサービスは、クエリーパラメータで渡された文字列を"Hello, %s!"の形式に変換し返します。
- publisherサービスは、クエリーパラメータで渡された文字列をSystem.out.println(String)で標準出力します。
- mainサービスは、クエリーパラメータで渡された文字列をformatterサービスへ渡し変換します。そして、その変換後の文字列をpublisherサービスへ渡します。
formatterサービス
@RestController @RequestMapping("/formatter") public class FormatController { @RequestMapping(method = RequestMethod.GET) public String format(@RequestParam String str) { return String.format("Hello, %s!", str); } }
publisherサービス
@RestController @RequestMapping("/publisher") public class PublishController { @RequestMapping(method = RequestMethod.GET) public String publish(String str) { System.out.println(str); return "published:" + str; } }
mainサービス
@RestController @RequestMapping("/main") public class MainController { @Autowired private RestTemplate restTemplate; @RequestMapping(method = RequestMethod.GET) public String main(@RequestParam String str) { ResponseEntity<String> FormatResponse = restTemplate.getForEntity( "http://localhost:8081/formatter?str={str}", String.class, str); String formatString = FormatResponse.getBody(); ResponseEntity<String> publishResponse = restTemplate.getForEntity( "http://localhost:8082/publisher?str={str}", String.class, formatString); return publishResponse.getBody(); } }
Spring BootでJaegerを使用する方法
前回まではOpenTracingのチュートリアルに沿ってSpanコンテキストを伝播させる仕組みなどを独自に実装していきましたが、 今回のSpring Bootで作成されてたREST APIの場合は、その様にすればトレーニング出来るのかを見てみたいと思います。
まず、下記のページにOpenTracingのトレーサーの実装とその他のアドインが掲載されいますので目的に沿ったプロジェクトを探します。 github.com
今回はSpring BootでREST APIを作成するので、この中からTracerにjava-spring-jaeger - Spring starter for Jaeger
をOpenTracingの実装にjava-spring-web - Spring
を使用します。
java-spring-jaeger - Spring starter for Jaeger github.com
java-spring-web - Spring github.com
ライブラリの依存関係(pom.xml)
<!-- https://mvnrepository.com/artifact/io.opentracing.contrib/opentracing-spring-web-starter --> <dependency> <groupId>io.opentracing.contrib</groupId> <artifactId>opentracing-spring-web-starter</artifactId> <version>1.0.1</version> </dependency> <!-- https://mvnrepository.com/artifact/io.opentracing.contrib/opentracing-spring-jaeger-web-starter --> <dependency> <groupId>io.opentracing.contrib</groupId> <artifactId>opentracing-spring-jaeger-web-starter</artifactId> <version>1.0.1</version> </dependency>
行う事はこれだけです!
Spring BootでJaegerを使用したトレーシング結果
mainサービスへリクエストした際のトレーシング結果です。
こちらがトレースした結果を展開したもの
Spring BootでJaegerを使用してトレース情報を可視化は、ライブラリの追加だけで既存のソースコードに手を入れなくてもトレース情報を取得出来るのでとてもお手軽に出来ました。