1. やりたいこと
以前の投稿でdocker-compose
を利用して、OpenZipkinのサービスをシングルインスタンスで構築しました。
どうやって、ここにtrace対象のアプリケーションの情報を登録していくのかな、というところが気になったので、Rubyのgemを利用してみることにしました。
2. 利用してみたリポジトリ
zipkin tracerのIPをconfig/application.rb
に記載しているので、application.rb
はコミットしていないです。マスキングして後述します。
3. 実施手順
3-1. railsアプリを作成
rails new app
cd app
3-2. Gemfileを編集してbundle installを実行
vim Gemfile
bundle install
Gemfile
には以下の2行を追加しました。
gem 'zipkin-tracer'
gem 'faraday', '~> 0.8'
3-3. config/application.rbにzipkin用に、service_name, service_port, json_api_hostを登録する
service_name
は [ hoge app ] としました。
module App
class Application < Rails::Application
# Settings in config/environments/* take precedence over those specified here.
# Application configuration should go into files in config/initializers
# -- all .rb files in that directory are automatically loaded.
# Set Time.zone default to the specified zone and make Active Record auto-convert to this zone.
# Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC.
# config.time_zone = 'Central Time (US & Canada)'
zipkin_tracer_config = {service_name: 'hoge app', service_port: 3000, sample_rate: 1, json_api_host: 'http://*.*.*.*:9411'}
config.middleware.use ZipkinTracer::RackHandler, zipkin_tracer_config
# The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded.
# config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s]
# config.i18n.default_locale = :de
# Do not swallow errors in after_commit/after_rollback callbacks.
config.active_record.raise_in_transactional_callbacks = true
end
end
ここがちょっとわかりづらかったのですが、
json_api_port
の9411は、zipkin docker-compose.yml にある、zipkin-query
が提供しているサービスのポートになります。
query:
image: openzipkin/zipkin-query:1.33.2
environment:
# Remove TRANSPORT_TYPE to disable tracing
- TRANSPORT_TYPE=http
- STORAGE_TYPE=cassandra
expose:
# The http api is mounted at /api/v1
- 9411
# Admin interface is under the http path /admin
# https://twitter.github.io/twitter-server/Features.html#http-admin-interface
- 9901
ports:
- 9411:9411
- 9901:9901
links:
- cassandra:storage
service_port
は、trace対象のサービスのポートになります。
rails s
で起動させるので、3000を指定しました。
3-4. rails s でデバッギングモードでrailsアプリを起動する
rails s
3-5. ウェブブラウザで、localhost:3000 にアクセスする
railsのウェルカムページが表示されます。
3-6. zipkinの8080ポートのWebUIを見てみる。
[ hoge app ]が登録されました。
こちらを選択して、Find Tracesボタンを押下します。
レコードが登録されているようです。一つを選択して表示させてみました。
実行時間も表示されてますね!
4. 所感
- Rails以外のweb frameworkでも利用できるのか確認してみたい。play, akkaといったscala系はGitHubにサンプル等ありそうだった。Golangはどうだろ。go-kitを使ったサンプルがあるかもしれないから探してみる
- http以外のプロトコルで提供している自前サービスに対してHandler実装できるのかな
- 複数サービスが跨って連携した時のtraceってどうやるんだろうか
- elixirのphoenixとかdynamoでも使えないのかしら
- cassandraの内部のデータ構造どうなってるんだろ
面白そうなネタがまだまだありそうな印象です^^
本日は以上となります。