Spring CloudとZipkinを利用した
分散トレーシング
Spring I/O 2016 報告会
Tommy Ludwig
@TommyLudwig
Travel Service Development Department, Rakuten Inc.
元のセッション
• Distributed Tracing: how to find Latency in
Production Systems
– 分散トレーシング:本番でのレイテンシーの探り方
• 講演者: Dr. Dave Syer
2
分散システムの例
3
ログでリクエストの追跡
Log correlation
4
Log correlation
• 分散されたシステム(マイクロサービスなど)で、リク
エストの追跡が難しい
– 各サーバにSSHし、ログを確認するか(しないよね?!)
– あるリクエストのstartからendまでの全サービスのログが見たい
• MDCというログの機能を利用し、ユニークIDを追加
• そのIDをリクエストと一緒にサービスからサービスへ渡す
5
トレーシング用語
• Span – ひとつのサービス(境界)内の処理
• Trace – リクエストのstartからendまで含むSpan
• Tags – 好きな追加情報をリクエストに付与する
– Key/value: ビジネスイベント種類、URL、IPアドレスなど
• http://opentracing.io/
6
Spring Cloud Sleuthで実現
• Spring Bootが前提条件
• spring-cloud-sleuthを
追加するだけ
• ELK・Splunkなどで収
集されたログの分析が
できる
7
Integrations
• HTTP
– 呼ばれた時はFilterで
– 呼ぶ時はRestTemplate
• @Beanで指定を忘れずに
• @Async
• @Scheduled
• Messaging
– Spring Integrationで
• Zuul
• Hystrix
• Feign
• RxJava
• Documentation
8
レイテンシー分析
Latency analysis
9
レイテンシー分析
• システムのどこがなぜ遅かったかを容易に特定する
のが目的
• 一つのユーザリクエストの中、どのサービスがどれく
らい時間かかったか
• 見える化し、ドリルダウンもできると、未知の問題に
気づき、レイテンシー問題に対する自発的なカル
チャーになる
10
Zipkin
• Sleuthが付与するデータを見える化
• UIもAPIも提供し、データを様々なデータストアに保
存できる – Cassandra, Elasticsearch, MySQL
11
サンプルで見てみましょう
Live demo
12
参考
• Spring Cloud Sleuth
• Zipkin
• サンプルコード
• 元のスライド
13
エンジニア採用
http://corp.rakuten.co.jp/careers/engineering/
14

Spring CloudとZipkinを利用した分散トレーシング