ZipkinのReadmeを読んでる(クライアント周りについて)(Jugemより移植)

Posted by johtani on Friday, June 15, 2012

目次

ZipkinのGithubにあるReadmeを読んでます。 せっかくというか、頭が悪いので読みながら内容をメモ。 まずは、アーキテクチャとトレースデータ送信のためのクライアント側あたりです。 (誤訳とかおかしいだろというツッコミ大歓迎です。) あとで、リンク貼ったり絵を入れたりするかもしれませんが、とりあえず。

◯アーキテクチャ(図はこちら


 ・対象とするサービスからScribeでデータを収集し、ZipkinのCollectorに投げる
 ・CollectorはCassandraにデータを格納
 ・WebUIからはQueryでCassandraに問い合わせを行なってデータ取得
 ・Scripe、CollectorはZookeeperと連携している(妄想)

◯計測用ライブラリ(図はこちら。図のSと書かれた青い箱)


 ・各ホストの計測用ライブラリがトレースデータを集めてZipkinに送信する。
 ・ホストは他のサービスへリクエストを飛ばすときに、リクエストにトレース用のIDを付与してます
  こうすることで、データをあとで、束ねることが可能となります。

◯計測ライブラリの利用方法  ・Finagle


  JVMのための非同期ネットワークスタックである。
  それは、JVMベース言語(JavaやScalaなど)で非同期RPCのクライアント・サーバを構築するのに利用できる。
 
 FinagleはTwitterの内部ですごく利用されていて、トレースサポートを実現するのに当然のポイントです。
 現時点で(Finagleは)ThriftやHTTP、Memcache、Redisのクライアント・サーバサポートも持っています。

 ScalaでFinagleサーバをセットアップするのはつぎのようなコードになります。

 トレースを追加するには、finagle-zipkinを追加して、ServerBuilderのtraceFactory関数を呼ぶだけです。


ServerBuilder()
  .codec(ThriftServerFramedCodec())
  .bindTo(serverAddr)
  .name("servicename")
  .tracerFactory(ZipkinTracer())
  .build(new SomeService.FinagledService(queryService, new TBinaryProtocol.Factory()))

 クライアント側も同様です。
 上記のようにサンプリングしたリクエストにZipkinトレーサーを指定することで
 自動的にトレースできるようになります。
 サービスやホストでのリクエストの開始と終了を記録できます。

 さらに付加的な情報を記録したい場合は、つぎのようなコードを追加します。

Trace.record("starting that extremely expensive computation")


 上記コードは、上記コードが実行された時間に文字列を付加できます。
 キーバリュー情報を付加したい場合は次のようになります。

Trace.recordBinary("http.response.code", "500")

 Ruby Thrift


 リクエストのトレースに利用できるgemもあります。
 リクエストに対してトレースIDを生成し、リクエストに付与し、トレーサーにプッシュするのにRackHandlerのgemを利用できます。

 トレーサをトレースするサンプルはzipkin-webを参照。

 Rubyからトレースクライアントをコールするのに、Twitter Ruby Thrift clientを使います。  つぎのようなコードを書きます。


client = ThriftClient.new(SomeService::Client, '127.0.0.1:1234')
client_id = FinagleThrift::ClientId.new(:name => "service_example.sample_environment")
FinagleThrift.enable_tracing!(client, client_id), "service_name")

 Querulous


 QuerulousはScala用のSQLデータベースのインタフェースライブラリです。
 SQLクエリの実行のタイミング情報をトレースに追加できます。

 Cassie


 CassieはFinagleベースのCassandraクライアントライブラリです。
 CassieのトレーサーはFinagleの例とほぼ一緒ですが、
 CassieではKeyspaceBuilderに設定します。

cluster.keyspace(keyspace).tracerFactory(ZipkinTracer())

とりあえず、ここまで。___ 2012/06/22 リンクを貼って体裁を修正


comments powered by Disqus

See Also by Hugo


Related by prelims-cli