最近RestyにBraveを組み込んだり、仕事でもZipkinを触っていたりするのでZipkinとBraveの概要について発表させていただきました。発表資料はこちらです。
www.slideshare.net
ZipkinはTwitter社が開発した分散トレーシングシステムで、特に多階層のマイクロサービスのボトルネックの解析に有用なツールです。BraveはJavaベースのWebアプリケーションからZipkinサーバにトレース情報を送信するためのライブラリです。
Braveは前のサービスからHTTPヘッダで渡されたトレース情報をServletFilterでThreadLocalに突っ込み、それをHTTPクライアントライブラリのInterceptorで次のサービス呼び出しのHTTPヘッダに付け加えるという感じの仕組みになっています。そのため次のサービスの呼び出しが別スレッドで行われているとトレース情報の紐付けができないという点に注意が必要です(以前Hystrixと組み合わせた時に少しハマりました)。
また、標準のZipkinサーバの代わりにGoogleがオープンソースとして公開しているstackdriver-zipkinを使うとGoogle Cloud PlatformのStackdriver Traceというモニタリングサービスにトレース情報を送信することができます。実際に運用で試したことはないのですが、これを使うと自前でZipkinサーバを運用する必要がなくなりますし、一定量であれば無料で利用することができるので便利かもしれません。
Zipkinは各種言語向けのクライアントライブラリも揃っていますし、このように外部のモニタリングサービスでもZipkinがサポートされることで、Zipkinが独自のツールとしてだけでなく、仕様としてもある種標準的な位置付けになっていく可能性があるのではないでしょうか。
今回の発表にあたり、JavaサーブレットにBraveを組み込んでZipkinでトレース情報を参照するためのミニマムなサンプルプロジェクトを以下のGitHubリポジトリで公開していますので興味のある方は是非実際に動かしてみていただければと思います。