Observability
Monitoring & Logging Plane
A Distributed Tracing System for an accurate picture of interactions between microservices.
What is Jaeger?
Jaeger is a Distributed Tracing System and claims to help you build a more accurate big picture by enhancing observability. Its distributed tracing adheres to the OpenTracing standard to give you uniform insights via a web UI.
Profile
Jaeger is a multi-component system. Once instrumented, your applications will feed clients that generate and transmit span data as tasks occur and evolve. From there, the architecture collects the data via UDP, processes its findings, and houses the results in your choice of Elasticsearch, Kafka, or Cassandra storage implementations.
Jaeger is highly configurable. For instance, it supports probabilistic, constant, rate limited, and remotely configured sampling modes that give you some flexibility to manage overhead and maintain statistical data quality. If the UDP format doesn't suit your needs, you can also use gRPC or HTTP with formats like JSON and Thrift.
Proponents seem to like the fact that this open-source tool works with open tracing standards. One possible sticking point, however, is that Jaeger predates OpenTelemetry, supporting its predecessor, OpenTracing, instead. Although you can upgrade to OpenTelemetry collectors to enjoy the latest and greatest today, it might be worth waiting for official support since OpenTelemetry is backward compatible with OpenTracing.
Focus
Jaeger strives to unify tracing across the entire scope of your ecosystem. This requires close integration with your project: Instrumenting an application involves writing interface code in your preferred language.
The instrumentation process typically takes just a few minutes, but it's wise to plan things out if you prefer to keep diagnostics separate from app code. Also bear in mind that this tool doesn't officially support as many languages as some other open-source tracing options, like Zipkin, do.
Jaeger ships with a web-based UI. Users can view execution times, identify calls, examine HTTP status codes, and really dive into their tracing information. One nice aspect of the do-it-yourself instrumentation approach is that you don't have to settle for predefined feedback.
Getting started with Jaeger is fairly simple: You can just use one of the executable binaries. New users, however, may want to start with the provided Docker images, which clarify how to customize the system – This could be particularly helpful when using custom storage or alternative collectors.
Background
Uber Technologies built the first iteration of Jaeger around 2015. Over the next couple of years, the company adopted it on a massive scale. Taking inspiration from tools like Dapper, the company's engineers built Jaeger to improve interoperability and consistency while meeting the firm's need for situationally configurable tracing.
Jaeger went open-source in April 2017, entering the Cloud Native Computing Foundation incubator later that year. It became a graduated project in 2019.
Jaeger main features
Capable UI
The Jaeger UI lays system topologies out in a clear, navigable format. It's also configurable via a JSON file. You can adjust which types of dependencies Jaeger displays, enable third-party app analytics tracking, or even set up your own menus with custom functionalities.
Distributed tracing
Jaeger's claim to fame is that its architecture propagates context and monitors transactions in a distributed fashion. Uber Technologies built the tool from the ground up to support cloud environments, and its simple instrumentation workflows make it compatible with Kubernetes.
Tunable performance
When Jaeger's data buffering and batching aren't working hard enough to keep your application snappy, you can fine-tune the instance for better performance. Some of these tweaks, like scaling your collectors, are automatic. Others, such as reconfiguring your storage and troubleshooting UDP packet loss, might take a bit more doing.