microservicesの調査に向けて〜Dockerで初めてのOpenZipkin！

## 1. やりたいこと

oreillyの[マイクロサービスアーキテクチャ](http://www.oreilly.co.jp/books/9784873117607/)を読んで、[OpenZipkin](https://openzipkin.github.io/)を試してみたくなりました。
ドキュメントの[Quickstart](https://openzipkin.github.io/pages/quickstart.html)を読みながら、`docker-compose`で試してみようと思います！

```
Zipkin is a distributed tracing system. 
It helps gather timing data needed to troubleshoot latency problems in microservice architectures. 
It manages both the collection and lookup of this data through a Collector and a Query service. 
Zipkin’s design is based on the Google Dapper paper.
```

分散環境で、システムトレースをするために使うみたいですね。
時系列を扱うようなサービスでのlatencyのトラブルシューティングで役に立つそうです。
また、[GoogleのDapper]((http://research.google.com/pubs/pub36356.html))を参考にしているみたいです。


## 2. 手順

1. githubからdocker-compose用のプロジェクトを落としてくる
2. docker-composeでサービスを立ち上げる
3. 8080ポートでブラウザアクセスしてみる
4. `Find Trace`ボタンを押下してみる
5. `zipkin-query`というバーを押下してみる
6. さらに、`zipkin-query`バーを押下してみる

## 3. 実施事項

### 3-1. githubからdocker-compose用のプロジェクトを落としてくる 


```bash
git clone https://github.com/openzipkin/docker-zipkin.git
```

### 3-2. docker-composeでサービスを立ち上げる

```bash
cd docker-zipkin

docker-compose up
```

### 3-3. 8080ポートでブラウザアクセスしてみる

![スクリーンショット 2016-03-03 10.22.58.png](https://qiita-image-store.s3.amazonaws.com/0/49547/204399e7-d210-7847-24a8-68b3e03e9b0d.png)

これがトップ画像みたいです。

### 3-4. `Find Trace`ボタンを押下してみる

![スクリーンショット 2016-03-03 10.24.16.png](https://qiita-image-store.s3.amazonaws.com/0/49547/b99eac2e-2244-21a8-b169-622380323057.png)

### 3-5. `zipkin-query`というバーを押下してみる

![スクリーンショット 2016-03-03 10.27.43.png](https://qiita-image-store.s3.amazonaws.com/0/49547/aaa4c450-707f-515c-a3e0-7342982f32bc.png)


### 3-6. さらに、`zipkin-query`バーを押下してみる

ポップアップが出てきましたね！

![スクリーンショット 2016-03-03 10.28.33.png](https://qiita-image-store.s3.amazonaws.com/0/49547/1e7ec4d0-a85f-5d37-a9c4-2ed7bb181358.png)

## 4. 次回やること

ここに対して、ガシガシとデータを突っ込んでいけばいいわけですね！

[RubyのTracer](https://github.com/openzipkin/zipkin-tracer)が用意されていますのでこちらを試したいと思います。

また、他のTracer突っ込むサンプルのようなものは以下のとおりあるみたいです。
Golang製のもあるんですね。RPC周りの実装とかどうやってるのとか、含めて使って、かつ、見てみたいと思います！

| Language | Library | Framework | Transports Supported | Sampling Supported? | Other notes |
|:---------|:--------|:----------|:---------------------|:--------------------|:------------|
| Python | [pyramid_zipkin](https://github.com/Yelp/pyramid_zipkin) | [Pyramid](http://docs.pylonsproject.org/projects/pyramid/en/latest/) |[Kafka \| Scribe](http://pyramid-zipkin.readthedocs.org/en/latest/configuring_zipkin.html#zipkin-transport-handler) | [Yes](http://pyramid-zipkin.readthedocs.org/en/latest/configuring_zipkin.html#zipkin-tracing-percent) | py2, py3 support. |
| Java | [brave](https://github.com/openzipkin/brave) | Jersey, RestEASY, JAXRS2, Apache HttpClient, Mysql | Http, Kafka, Scribe | Yes | Java 7 or higher|
| Ruby | [zipkin-tracer](https://github.com/openzipkin/zipkin-tracer) | [Rack](http://rack.github.io/) | Http, Kafka, Scribe | Yes | lc support. Ruby 2.0 or higher|
| C# | [ZipkinTracerModule](https://github.com/mdsol/Medidata.ZipkinTracerModule) | OWIN, HttpHandler | Http | Yes | lc support. 4.5.2 or higher |
| Go | [go-zipkin](https://github.com/elodina/go-zipkin) | x/net Context | Kafka | Yes | |


---

本日はここまでとなります。

次回は[microservicesの調査に向けて〜railsのサンプルアプリにzipkinのtracerを仕込んで動作確認をしてみよう！](http://qiita.com/letusfly85/items/8dcb7511efcd42468f52)です。