A distributed tracing system
Zipkin relies on Cassandra for storage. So you will need to bring up a Cassandra cluster.
bin/cassandra-cli -host localhost -port 9160 -f zipkin-cassandra/src/schema/cassandra-schema.txtZipkin uses ZooKeeper for coordination. That's where we store the server side sample rate and register the servers.
Scribe is the logging framework we use to transport the trace data. You need to set up a network store that points to the Zipkin collector daemon. If you are just trying out Zipkin you can skip this step entirely and point the ZipkinTracer directly at the collector.
A Scribe store for Zipkin might look something like this.
<store>
category=zipkin
type=network
remote_host=123.123.123.123
remote_port=9410
use_conn_pool=yes
default_max_msg_before_reconnect=50000
allowable_delta_before_reconnect=12500
must_succeed=no
</store>
If you don't want to hardcode the IP address of your collector there are a few options.
You can use an internal DNS entry for the collectors, that way you only have one place to change the addresses when you add or remove collectors.
If you want to get all fancy you can use a modified version of Scribe that picks up the collectors via ZooKeeper. When each collector starts up it adds itself to ZooKeeper and when a collector shuts down it is automatically removed. The modified Scribe gets notified when the set of collectors change. To use this mode you change remote_host in the configuration to zk://zookeeper-hostname:2181/scribe/zipkin or something similar.
We're hoping that others might add non-Scribe transports for the tracing data; there is no reason why Scribe has to be the only one.
We've developed Zipkin with Scala 2.9.1, SBT 0.11.2, and JDK7.
git clone https://github.com/twitter/zipkin.gitcd zipkincp zipkin-collector-service/config/collector-dev.scala zipkin-collector-service/config/collector-prod.scalacp zipkin-query-service/config/query-dev.scala zipkin-query-service/config/query-prod.scalabin/sbt update package-dist (This downloads SBT 0.11.2 if it doesn't already exist)scp dist/zipkin*.zip [server]ssh [server]unzip zipkin*.zipmkdir -p /var/log/zipkinzipkin-collector-service/src/scripts/collector.sh -f zipkin-collector-service/config/collector-prod.scalazipkin-query-service/src/scripts/query.sh -f zipkin-query-service/config/query-prod.scalaYou can also run the collector and query services through SBT.
To run the Scribe collector service: bin/sbt 'project zipkin-collector-service' 'run -f zipkin-collector-service/config/collector-dev.scala' or bin/collector
To run the query service: bin/sbt 'project zipkin-query-service' 'run -f zipkin-query-service/config/query-dev.scala' or bin/query
The UI is a standard Rails 3 app.
bundle install &&
bundle exec rails server.
The zipkin-tracer gem adds tracing to a Rails application through the use of a Rack Handler.
In config.ru:
use ZipkinTracer::RackHandler
run <YOUR_APPLICATION>
If the application's static assets are served through Rails, those requests will be traced.