概要
zipkin はトレーシングシステムです
複数の Web アプリケーションを使っているようなシステムで 1 つのリクエストがどうのような経路を辿ったかを可視化したりすることができます
今回は Sinatra アプリケーションを使って Zipkin と連携してみました
環境
- macOS 11.1
- Ruby 3.0.0
- zipkin-tracer 0.47.3
- sinatra 2.1.0
- Zipkin 2.23
Zipkin の起動
今回は docker を使います
jar でも動かせるようですが一番簡単な docker を使います
docker run -d -p 9411:9411 openzipkin/zipkin
http://localhost:9411/zipkin/
にアクセスすると zipkin の UI が起動しているのが確認できると思います
Sinatra アプリケーションの作成
zipkin-ruby という Rack のミドルウェアとして使えるトレーサライブラリがあるのでこれを使います
使い方は簡単で Sinatra アプリ内でミドルウェアを use
するだけです
今回は zipkin に直接トレーサ情報を送信するので特に細かい設定はしていませんがエンドポイントが異なっていたり SQS や RabbitMQ に送信する場合は config を変更してください
bundle init
vim Gemfile
gem "zipkin-tracer"
gem "sinatra"
gem "thin"
bundle config path vendor
bundle install
アプリケーションを書いていきます
config.ru 内で rack のミドルウェアとして宣言します
vim config.ru
require './app'
require 'zipkin-tracer'
require 'rack'
config = {
service_name: 'zipkin-test',
json_api_host: 'http://localhost:9411',
sample_rate: 1.0,
sampled_as_boolean: false
}
use ZipkinTracer::RackHandler, config
run ZipkinTest
service_name
は必須パラメータです
UI で検索する場合に必ず必要になります
json_api_host
は先程 docker 上に構築した Zipkin のエンドポイントを指定します
sample_rate
はトレースするリクエストの割合を指定します
0 から 1 の間で指定し、1.0 の場合はすべてのリクエストが Zipkin に送信されます
アクセスが多い場合などは割合を小さくすることで HTTP 通信によるオーバヘッドも小さくすることができます
sampled_as_boolean
は false に設定しないと警告が出るので設定しておきます
vim app.rb
require 'sinatra'
class ZipkinTest < Sinatra::Base
get '/' do
'ok'
end
end
Sinatra アプリ側は特に何もしません
bundle exec rackup config.ru
これで起動しましょう
localhost:9292
でアプリが起動しているのが確認できれば OK です
動作確認
curl localhost:9292
でアプリにアクセスしてみましょう
そしてその後で Zipkin の UI から serviceName=zipkin-test
で検索すると以下のようにリクエストのトレース情報が格納されているのが確認できると思います
何かしらのクエリで検索しないと結果が表示されないので注意しましょう
最後に
Sinatra を使って Zipkin に入門してみました
主要な各言語にはライブラリが用意されているのでアプリケーションには簡単に導入することができるかなと思います
Zipkin 自体も docker で簡単に起動することができます
ただ今回は Zipkin のデータは永続化していないので永続化する場合はこの辺りを参考に格納ストレージを選択してください
あと気になったのは自分で管理できないような外部のリソースのトレースでそういった場合はどうするのか気になりました
0 件のコメント:
コメントを投稿