August 3rd, 2015 was the date of the first commit in the internal Jaeger repository at Uber. Technically, the true birthday of the project was probably a week or so earlier, because while I was prototyping the collector service we went through a number of project names, some of them rather embarrassing to name here, and the real first commits happened in a differently named repository. Once we settled on the name Jaeger, we did not preserve the commit history and the first commit was a full snapshot (lesson: don’t do that!) Still, it’s not like we need an exact date to celebrate, so August it is.
The CNCF team recently published the Jaeger Project Journey Report, to commemorate its 5yr anniversary. The report includes many stats on the project growth and diversity, as well as quotes from happy users. I felt like I should write something less formal about our experiences with running Jaeger as an open source project, and then it occurred to me that the best thing I could write is not about the project itself, but about the people, our wonderful contributors who made Jaeger into what it is today.
I want to apologize ahead of time that I will not be able to mention every one of our hundreds of contributors. We appreciate and value all contributions, from new features to documentation & typo fixes. The list below is by no means exhaustive; I tried to include people whose contributions shaped the direction of the project (or in some cases people who just made a large number of contributions, even if the individual features were smaller in scope). Once again, if I forgot someone or something, I apologize and express our collective gratitude for everyone’s contributions.
The list is ordered alphabetically.
Annanay Agarwal (@annanay25) implemented a number of backend features, including regex support for Elasticsearch backend and a stable, gRPC-based API in the query service, which builds the foundation of the official data retrieval API. He recently published an interesting post about How Grafana Labs enables horizontally scalable tail sampling.
Behrooz Badii (@badiib) was pivotal to Jaeger’s early open source strategy. He was responsible for the initial migration of Uber’s internal Jaeger backend to GitHub, which included implementing the query service to support the new UI, and reimplementing the Cassandra storage backend to use strong schema, then advocated for investing into Elasticsearch backend to expand user options.
Benjamin Krämer (@Falco20019) is one of the original authors of Jaeger C# client and its current maintainer. The C# client (and related instrumentation) allowed Jaeger to make inroads into .NET world of applications, where the core maintainers of the project had little expertise.
Davit Yeghshatyan (@davit-y) was an intern at Uber where he worked on our integration with Kafka as a storage backend.
Everett Ross (@everett980) is the maintainer of Jaeger UI, who worked on such significant pieces as the transitive topology graphs and the UI for trace quality measures.
Gary Brown (@objectiser), in my personal view, is the main coordinator of Red Hat involvement with Jaeger. The idea of Jaeger joining CNCF was floating in my head at the time, but really became a reality through his involvement. Gary worked on many operational aspects of Jaeger backend, from security fixes to metrics normalization. He is a major contributor to jaeger-operator. He works with other projects like Kiali and Istio to enable better integration with Jaeger.
Isaac Heir (@isaachier) was the original author of Jaeger C++ client. Having a C++ SDK allows integration of Jaeger with compiled products like Envoy or HAProxy.
Joe Farro (@tiffon) is the chief architect of the current Jaeger UI. He worked on every aspect of the UI, including styling (which was cloned by other projects), performance optimizations (handling of large traces, up to 80,000 spans), rewrite of the code in Typescript, and the development of Plexus, the graph visualization plugin used for various visualizations like trace graph, graph comparisons, and transitive topology graphs.
Jon Carl (@grounded042) is one of the original authors of Jaeger C# client.
Juraci Paixão Kröhling (@jpkrohling) is a long standing member of a team at Red Hat working on tracing. He implemented numerous features aiming at stability and operational quality of the Jaeger backend and client libraries. He is the lead developer of jaeger-operator, which vastly simplifies deploying and running Jaeger on Kubernetes. Juraci is a frequent speaker at conferences, author of many blog posts about Jaeger, and a regular mentor of Jaeger’s Outreachy interns.
Kevin Earls (@kevinearls) is a member of the quality assurance team at Red Hat. He made numerous contributions improving the quality and stability of Jaeger tests.
Lev Polyakov is an award-winning animation director, creator of such wonderful animated shorts as Only Love (2008) and My Heart Belongs to You (2012) (more at polyakovproductions.com). Lev is the author of Jaeger’s awesome logo.
Mehrez Douaihy (@mdouaihy) is a recent contributor to Jaeger C++ client, where we are short on C++ experts.
Michael Burman (@burmanm) is the author of a single-node storage backend based on the embedded key-value store Badger. It replicates the Prometheus model where if your trace volume can be handled by a single server, you can run Jaeger all-in-one with Badger backend without worrying about data loss, and without the complexity of operating a distributed storage like Cassandra or Elasticsearch.
Minho Park (@mh-park) was an intern at Uber where he created the first implementation of Jaeger storage backend based on Elasticsearch.
Onwukike (Keekay) Ibe (@oibe): people often credit me with creating Jaeger, but I did not do it alone. For almost a year the tracing team at Uber consisted of just two people, myself and Keekay. He worked on the backend and was also the original author of Jaeger’s Node.js and Java clients.
Pavol Loffay (@pavolloffay) is the Strongest Avenger and a long standing member of a team at Red Hat working on tracing. It’s hard to name an area of the Jaeger project where he did not provide a major contribution. Among his recent work are: the graph-based DSL for data mining, integration with Jyputer notebooks, upgrades to Elasticsearch storage backend implementation, and the most recent — the migration of Jaeger backend components to OpenTelemetry data model and collector. Pavol is a frequent speaker at conferences and author of many blog posts on Jaeger.
Prithvi Raj (@vprithvi) is a long standing member of the tracing team at Uber and the chief architect of Jaeger’s data mining platform, from integration with Kafka (e.g. the ingester) to implementation of a series of Flink analytics jobs that aggregate data for the topology graphs, trace quality metrics, and other views.
Ruben Vargas Palma (@rubenvp8510) is a rare contributor to both the backend and the UI of Jaeger. On the UI side he implemented features like external links, display of span references, and transitive topology graphs from search results.
Ryan Burn @rnburn implemented support for dynamic loading of Jaeger C++ client, which allows integration of Jaeger SDK into projects like Envoy and HAProxy.
Shan Aminzadeh @saminzadeh was the original author of Jaeger UI, which received numerous praises from people when compared to the previous version of Zipkin UI.
Won Jun Jang @black-adder a former member of Uber’s tracing team, where he worked on various backend and client features, including developing the adaptive sampling solution.
The Jaeger project is only as strong as our community of contributors and end users. I’ve been pretty happy with the growth of this community, but there is always room for more. Distributed tracing as a discipline is still in its infancy, and there are plenty of new things and directions.
Would you like to contribute to the Jaeger project? There is no shortage of things to do, from documentation / tutorials to new and exciting ways of extracting insights from the tracing data. The easiest way to get started is to look for issues tagged “good-first-issue”, or “help-wanted” for things that are more complex. There are many of these issues not only in the main /jaeger repository (which is implemented in Go), but also in the various client libraries and data mining repos, if your strength is in another programming language. If you want to implement a new feature, you can open a new issue to discuss the design, drop into our online chat, or attend one of our by-weekly video calls. See also Get Involved and Getting in Touch.