Published on

分散トレーシングシステムのZipkinをZipkin-goでtrace導入

Authors

ここに記載されていること一覧

  • 分散トレーシングとは
  • Zipkin とは
  • gRPC に zipkin を導入
  • Zipkin の UI

分散トレーシングとは

マイクロサービスで、従来のアプリケーションアーキテクチャと異なり、1 つのアプリケーションをビジネス機能に沿って、複数の小さなサービスに分けて構成している。

小さくサービスを分け、疎に結合しているからこそ、問題点への改善、新機能の追加を迅速に行うことが可能です。

しかしながら、小さくサービスを分けて運用することにより、アプリケーションのリクエストはエンドツーエンドで把握しないとならない問題点が浮き彫りになります。

分散トレーシングは、分散されたシステム内のリクエストを追跡し、内容を可視化することにより問題解決を簡単にかつ迅速にするための技術です。

サービス間の依存関係やサービス単位のレイテンシを可視化することによって、僕らエンジニアの問題解決の手助けをするシステムとなっています。

Zipkin とは

Zipkinは、Google のDapperを参考に、Twitter 社によって開発された OSS です。

レイテンシ問題のトラブルシューティングに必要なデータを収集する API と、そのデータを可視化や、システムの依存関係を参照するための UI を提供します。

アーキテクチャ構成

Zipkin のアーキテクチャ構成ですが、公式サイトから引用します。

Zipkin architecture

参考文献: 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 が登場

絞り込み検索をすることにより、見たい処理を検索することが可能です。

find trace

各プロセスの処理時間、レイテンシが確認できます。

process latency

各サービスが、どれくらい通信しているかが可視化できるのはいいですね。

Zipkin grpah

参考文献

OpenZipkin

zipkin - GoDoc

GitHub - openzipkin/zipkin-go

分散トレーシングシステムの Zipkin を使ってみた話

LINE のマイクロサービス環境における分散トレーシング

クックパッドと分散トレーシング

合わせて読みたい

楽天 インターンに参加しました

サイバーエージェント インターンに参加しました

マネーフォワードのインターンでコンテナイメージ脆弱性検査