2017-08-17 22:43:05 +00:00
|
|
|
== Jaeger
|
|
|
|
|
|
|
|
*Name of project:* Jaeger
|
|
|
|
|
|
|
|
*Description:*
|
|
|
|
|
|
|
|
Jaeger, inspired by Dapper (https://research.google.com/pubs/pub36356.html) and OpenZipkin (http://zipkin.io/),
|
|
|
|
is a distributed tracing system that can be used for monitoring microservice-based architectures, including
|
|
|
|
distributed context propagation, distributed transaction monitoring, root cause analysis, service dependency
|
|
|
|
analysis and performance / latency optimization.
|
|
|
|
|
|
|
|
*Sponsor / Advisor from TOC:* Bryan Cantrill
|
|
|
|
|
|
|
|
*Preferred maturity level:* incubating
|
|
|
|
|
|
|
|
*Unique identifier:* jaeger
|
|
|
|
|
|
|
|
*License:* Apache 2.0 (tentative)
|
|
|
|
|
|
|
|
*Source control repositories:*
|
|
|
|
|
2017-08-17 22:46:56 +00:00
|
|
|
* https://github.com/uber/jaeger
|
|
|
|
* https://github.com/jaegertracing
|
|
|
|
* https://github.com/uber/jaeger-lib
|
|
|
|
* https://github.com/uber/jaeger-ui
|
|
|
|
* https://github.com/uber/jaeger-client-go
|
|
|
|
* https://github.com/uber/jaeger-client-java
|
|
|
|
* https://github.com/uber/jaeger-client-node
|
|
|
|
* https://github.com/uber/jaeger-client-python
|
2017-08-17 22:43:05 +00:00
|
|
|
|
|
|
|
*Initial Committers:* https://github.com/uber/jaeger/blob/master/CODEOWNERS
|
|
|
|
|
|
|
|
*Infrastructure requirements (CI / CNCF Cluster):* https://travis-ci.org/uber/jaeger
|
|
|
|
|
|
|
|
*Issue tracker:* https://github.com/uber/jaeger/issues
|
|
|
|
|
2017-08-30 00:06:01 +00:00
|
|
|
*Mailing list:* https://groups.google.com/forum/#!forum/jaeger-tracing
|
2017-08-17 22:43:05 +00:00
|
|
|
|
2017-08-30 00:06:01 +00:00
|
|
|
*Online chat:* https://gitter.im/jaegertracing/
|
2017-08-17 22:43:05 +00:00
|
|
|
|
|
|
|
*Website:* https://uber.github.io/jaeger/ (soon jaegertracing.io)
|
|
|
|
|
2017-08-30 00:06:01 +00:00
|
|
|
*Documentation:* http://jaeger.readthedocs.io/
|
|
|
|
|
2017-08-17 22:43:05 +00:00
|
|
|
*Release methodology and mechanics:*
|
|
|
|
|
|
|
|
At the moment, releases happen in an ad hoc fashion, when the maintainers and core contributors think
|
|
|
|
there are sufficient number of features or bug fixes to warrant a new release. For the main repo (Jaeger backend),
|
|
|
|
the release is tagged on GitHub and it triggers a build of docker images that are auto-uploaded to Docker Hub.
|
|
|
|
The releases for instrumentation libraries follow a similar process, and the artifacts are pushed to respective
|
|
|
|
repositories for the language, i.e. Maven Central, npm, and pypi.
|
|
|
|
|
2017-09-01 21:54:50 +00:00
|
|
|
*Roadmap:* http://jaeger.readthedocs.io/en/latest/roadmap/
|
|
|
|
|
2017-08-17 22:43:05 +00:00
|
|
|
*Existing sponsorship:* Uber has 7 full time maintainers and Red Hat has 4 full time maintainers
|
|
|
|
|
|
|
|
*Contributor statistics:* 1000+ stars and 30+ contributors https://github.com/uber/jaeger/graphs/contributors
|
|
|
|
|
|
|
|
*Adopters:* https://github.com/uber/jaeger/blob/master/ADOPTERS.md
|
|
|
|
|
2017-09-03 21:10:50 +00:00
|
|
|
*Community involvement:*
|
|
|
|
|
|
|
|
Some features added recently in response to community requests or as community contributions:
|
|
|
|
|
|
|
|
* Support Elasticsearch as a storage backend - https://github.com/uber/jaeger/issues/140
|
|
|
|
* Deployment templates for Kubernetes - https://github.com/jaegertracing/jaeger-kubernetes
|
|
|
|
* Jaeger as a drop-in replacement for Zipkin - https://github.com/uber/jaeger/milestone/2
|
|
|
|
* Allow Istio/Envoy to report span data to Jaeger - https://github.com/uber/jaeger/issues/225
|
|
|
|
* Add health checks for better intergation with Kubernetes - https://github.com/uber/jaeger/pull/280
|
|
|
|
* Use cpf13/cobra for flexible configuration under Kubernetes - https://github.com/uber/jaeger/issues/233
|
|
|
|
|
|
|
|
*Social media accounts:*
|
|
|
|
|
|
|
|
* Blog: https://medium.com/jaegertracing/
|
|
|
|
* Twitter: https://twitter.com/JaegerTracing
|
|
|
|
|
2017-08-17 22:43:05 +00:00
|
|
|
*External Dependencies:*
|
|
|
|
|
2017-08-17 22:46:56 +00:00
|
|
|
* https://github.com/uber/jaeger
|
|
|
|
** https://github.com/pkg/errors - BSD-2
|
|
|
|
** https://github.com/uber-go/zap - MIT
|
|
|
|
** https://github.com/apache/thrift - AL2
|
|
|
|
** https://github.com/opentracing/opentracing-go - MIT
|
|
|
|
** golang.org/x/net - BSD-3
|
|
|
|
** https://github.com/uber/tchannel-go - MIT
|
|
|
|
** https://github.com/gorilla/ - BSD-3
|
|
|
|
** https://github.com/kr/pretty - MIT
|
|
|
|
** https://github.com/go-kit/kit - MIT
|
|
|
|
** http://github.com/olivere/elastic - MIT
|
|
|
|
* https://github.com/jaegertracing
|
|
|
|
** Apache-2.0
|
|
|
|
* https://github.com/uber/jaeger-lib
|
|
|
|
** https://github.com/codahale/hdrhistogram - MIT
|
|
|
|
** https://github.com/go-kit/kit - MIT
|
|
|
|
** https://github.com/uber-go/tally - MIT
|
|
|
|
** https://github.com/prometheus/client_golang - AL2
|
|
|
|
* https://github.com/uber/jaeger-ui
|
|
|
|
** Many (see full list - https://gist.github.com/yurishkuro/273b5c0ed3556dfb84a095002f7dc40c)
|
|
|
|
** "(GPL-2.0 OR MIT)"
|
|
|
|
** "Apache-2.0"
|
|
|
|
** "BSD"
|
|
|
|
** "BSD*"
|
|
|
|
** "BSD-2-Clause"
|
|
|
|
** "BSD-3-Clause"
|
|
|
|
** "ISC"
|
|
|
|
** "MIT"
|
|
|
|
** "MIT*"
|
|
|
|
* https://github.com/uber/jaeger-client-go
|
|
|
|
** https://github.com/apache/thrift - AL2
|
|
|
|
** https://github.com/opentracing/opentracing-go - MIT
|
|
|
|
** golang.org/x/net - BSD-3
|
|
|
|
** https://github.com/uber/tchannel-go - MIT
|
|
|
|
* https://github.com/uber/jaeger-client-java
|
|
|
|
** https://mvnrepository.com/artifact/org.apache.thrift/libthrift - AL2
|
|
|
|
** https://mvnrepository.com/artifact/io.opentracing/opentracing-api - AL2
|
|
|
|
** https://mvnrepository.com/artifact/com.google.code.gson/gson - AL2
|
|
|
|
** https://mvnrepository.com/artifact/org.slf4j/slf4j-api - MIT
|
|
|
|
* https://github.com/uber/jaeger-client-node
|
|
|
|
** https://www.npmjs.com/package/node-int64 - MIT
|
|
|
|
** https://www.npmjs.com/package/thriftrw - MIT
|
|
|
|
** https://www.npmjs.com/package/xorshift - MIT
|
|
|
|
** https://www.npmjs.com/package/opentracing - MIT
|
|
|
|
* https://github.com/uber/jaeger-client-python
|
|
|
|
** https://pypi.python.org/pypi/futures - PSF
|
|
|
|
** https://pypi.python.org/pypi/threadloop - MIT
|
|
|
|
** https://pypi.python.org/pypi/thrift - AL2
|
|
|
|
** https://pypi.python.org/pypi/tornado - AL2
|
|
|
|
** https://pypi.python.org/pypi/opentracing - MIT
|
|
|
|
** https://pypi.python.org/pypi/future - MIT
|
2017-08-17 22:43:05 +00:00
|
|
|
|
|
|
|
*Statement on alignment with CNCF mission:*
|
|
|
|
|
|
|
|
A challenging part of cloud native computing is managing microservices and especially debugging the situation
|
|
|
|
when things go awry. Furthermore, distributed tracing instrumentation has been fragmented traditionally until
|
|
|
|
CNCF efforts like the OpenTracing specification came to existence to help unify existing tracing implementations
|
|
|
|
out there.
|
|
|
|
|
|
|
|
Jaeger is a battle tested distributing system that takes advantage of OpenTracing and advances the state
|
|
|
|
of open source distributed tracing.
|
2017-08-30 00:00:34 +00:00
|
|
|
|
|
|
|
*Comparison with Zipkin*
|
|
|
|
|
2017-08-30 00:06:01 +00:00
|
|
|
Zipkin is another popular open source distributed tracing system originally released by Twitter in 2012
|
|
|
|
(https://blog.twitter.com/engineering/en_us/a/2012/distributed-systems-tracing-with-zipkin.html).
|
2017-08-30 00:00:34 +00:00
|
|
|
Jaeger and Zipkin provide roughly similar functionality today; in fact the earlier versions of Jaeger relied on some of Zipkin
|
2017-08-30 00:06:01 +00:00
|
|
|
components as explained in the Uber Eng blog post (https://eng.uber.com/distributed-tracing/). Listed below are some differences
|
2017-08-30 00:00:34 +00:00
|
|
|
between Jaeger and Zipkin, along with how they can interoperate:
|
|
|
|
|
|
|
|
* *OpenTracing Instrumentation Libraries*. All Jaeger instrumentation libraries are built to support the OpenTracing standard.
|
|
|
|
Zipkin ecosystem has a couple of OpenTracing compatible libraries, but most of them do not support it, instead requiring the
|
|
|
|
applications to use bespoke APIs and Zipkin-only semantic annotations.
|
|
|
|
* *OpenTracing Compatible Backend and UI*. Jaeger is built with OpenTracing standard in mind from the ground up, including the
|
|
|
|
backend, the data models, and the UI. Zipkin backend does not support all of the features of OpenTracing, specifically
|
|
|
|
structured k-v span logs and multi-parent spans / DAGs (which are possible in OpenTracing via span references).
|
|
|
|
* *Instrumentation Libraries Maintenance*. Jaeger instrumentation libraries are officially part of the project and undergo
|
|
|
|
continuous integration testing against each other and against the backend. Zipkin instrumentation libraries are not officially
|
|
|
|
part of the project, often not even located in the openzipkin Github org, and rarely integration-tested against each other.
|
|
|
|
On the other hand, Zipkin libraries exist in more languages. Today Jaeger supports Go, Java, Python, and Javascript,
|
|
|
|
with Ruby and C++ implementation on the way.
|
|
|
|
* *Distributed Context Propagation*. General purpose context propagation is extremely useful in microservices based systems.
|
|
|
|
In addition to tracing it can support many other applications, including resource attribution / chargebacks, capacity planning,
|
|
|
|
chaos engineering, security. All Jaeger libraries support context propagation via OpenTracing feature called “baggage”.
|
|
|
|
Most Zipkin libraries do not support propagation of custom context metadata.
|
|
|
|
* *Storage Backends*. Zipkin supports more storage backends since it has been around a lot longer. Jaeger currently supports
|
|
|
|
Cassandra and Elasticsearch as production quality storage backends.
|
|
|
|
* *Interoperability*. Jaeger backend can be used as a replacement for Zipkin backend in organizations that already invested
|
|
|
|
in Zipkin instrumentation. Jaeger instrumentation libraries can also be configured to interoperate with Zipkin libraries
|
|
|
|
via Zipkin wire format (B3 headers), that allows new services to be instrumented with OpenTracing.
|