- Published on
分散トレーシングシステムのZipkinをZipkin-goでtrace導入
- Authors
- Name
- よしかわ たいき
- @yoshikawataiki
ここに記載されていること一覧
- 分散トレーシングとは
- Zipkin とは
- gRPC に zipkin を導入
- Zipkin の UI
分散トレーシングとは
マイクロサービスで、従来のアプリケーションアーキテクチャと異なり、1 つのアプリケーションをビジネス機能に沿って、複数の小さなサービスに分けて構成している。
小さくサービスを分け、疎に結合しているからこそ、問題点への改善、新機能の追加を迅速に行うことが可能です。
しかしながら、小さくサービスを分けて運用することにより、アプリケーションのリクエストはエンドツーエンドで把握しないとならない問題点が浮き彫りになります。
分散トレーシングは、分散されたシステム内のリクエストを追跡し、内容を可視化することにより問題解決を簡単にかつ迅速にするための技術です。
サービス間の依存関係やサービス単位のレイテンシを可視化することによって、僕らエンジニアの問題解決の手助けをするシステムとなっています。
Zipkin とは
Zipkinは、Google のDapperを参考に、Twitter 社によって開発された OSS です。
レイテンシ問題のトラブルシューティングに必要なデータを収集する API と、そのデータを可視化や、システムの依存関係を参照するための UI を提供します。
アーキテクチャ構成
Zipkin のアーキテクチャ構成ですが、公式サイトから引用します。
参考文献: Architecture - OpenZipkin
Zipkin では大きく 5 つのコンポーネントに分けられています。
Reporter, Collector, Storage, API, UI
ついでに、Jaeger のアーキテクチャ構成も載せておきます。
参考文献: Architecture - OpenZipkin
gRPC に Zipkin を導入
今回は Go で実装されている API に対して、Zipkin を導入していきます。
openzipkin / zipkin-go | GitHubを参考に導入すれば良さそうです。
gRPC だと、grpc のハンドラに対してトレースするように追記すれば終了です。
参考文献: gRPC での Zipkin 導入
import (
"google.golang.org/grpc"
zipkingrpc "github.com/openzipkin/zipkin-go/middleware/grpc"
)
server = grpc.NewServer(grpc.StatsHandler(zipkingrpc.NewServerHandler(tracer)))
Zipkin の UI
画像の一部をモザイク処理しようとしたのですが、最近の技術で解析されるレベルになってきたので、黒塗りしてます。 参考文献: 写真のモザイクを除去して“ほぼ”復元させる AI が登場
絞り込み検索をすることにより、見たい処理を検索することが可能です。
各プロセスの処理時間、レイテンシが確認できます。
各サービスが、どれくらい通信しているかが可視化できるのはいいですね。