Zipkin is a distributed tracing system. It helps gather timing data needed to troubleshoot latency problems in microservice architectures. The front end is a "waterfall" style graph of service calls showing call durations as horizontal bars:
Zipkin minimally needs a datastore, query and UI server. Some architectures also include a collection tier (ex polling Kafka).
If you are familiar with Docker, the
quickest way to get started quickly is to use the
Docker Zipkin project,
which (in addition to being able to build docker images) provides
scripts and a
docker-compose.yml
for launching pre-built images, e.g.
$ git clone https://github.com/openzipkin/docker-zipkin
$ cd docker-zipkin
$ docker-compose up
If you are happy building from source you can use the scripts in the
bin
directory of this repository.
Here's how to start zipkin using the default file-based backend and view traces.
# get the zipkin source and change to its directory
$ git clone https://github.com/openzipkin/zipkin; cd zipkin
# start the query server in a new terminal session or tab
$ ./bin/query
# start the collector server in a new terminal session or tab
$ ./bin/collector
# start the web server in a new terminal session or tab
$ ./bin/web
# create dummy traces
$ ./bin/tracegen
# open the ui and look at them!
$ open http://localhost:8080/
Language | Library | Framework | Transports Supported | Sampling Supported? | Other notes |
---|---|---|---|---|---|
Python | pyramid_zipkin | Pyramid | Kafka | Scribe | Yes | py2, py3 support. |
Java | brave | Jersey, RestEASY, JAXRS2, Apache HttpClient, Mysql | Http, Kafka, Scribe | Yes | Java 7 or higher |
Ruby | zipkin-tracer | Rack | Http, Kafka, Scribe | Yes | lc support. Ruby 2.0 or higher |
C# | ZipkinTracerModule | OWIN, HttpHandler | Http | Yes | lc support. 4.5.2 or higher |
Go | go-zipkin | x/net Context | Kafka | Yes |
See http://twitter.github.com/zipkin
Join the openzipkin/zipkin gitter chat for questions and to talk with the developers. Otherwise, there are two mailing lists you can use to get in touch with other users and developers.
Users: https://groups.google.com/group/zipkin-user
Developers: https://groups.google.com/group/zipkin-dev
Noticed a bug? Please file an issue
If you can't use a release or snapshot build, you can build zipkin's service jars directly from your fork using gradle.
$ git clone https://github.com/YOUR_USER/zipkin.git
$ cd zipkin/
$ ./gradlew shadowJar
$ ls */build/libs/*all.jar
See zipkin-web/README.md if you experience issues from npm.
The most reliable way to import zipkin is to use the Gradle command-line and open the resulting project into Intellij.
Note Do not import as a Gradle project. If you do, you'll likely see classpath or other build related problems. That's why we use the command-line.
To build the project file, close any open window for zipkin and (re)generate the content like so:
$ ./gradlew cleanIdea idea
Import the the result via File, Open, (path you invoked gradlew). Dismiss any pop-ups about unlinked Gradle projects, as clicking those will likely break your project.
See CONTRIBUTING.md for guidelines.
Areas where we'd love to see contributions:
- adding tracing to more libraries and protocols
- interesting reports generated with Hadoop from the trace data
- extending collection to more transports and storage systems
- trace data visualizations in the web UI