Concepts

Telemetry

Telemetry refers to the data emitted by systems and their behaviors, including traces, metrics, and logs.

OpenTelemetry

OpenTelemetry is an observability framework and toolkit designed to create and manage telemetry data such as traces, metrics, and logs. Importantly, OpenTelemetry is vendor-agnostic, meaning it can work with various observability backends, including open-source tools like Jaeger and Prometheus as well as commercial products.

Span

Span is the fundamental building block of distributed tracing, representing a specific operation or work unit. Each span records specific actions within a request, helping us understand the details of what occurred during the operation's execution.

A span contains a name, time-related data, structured log messages, and other metadata (attributes) that collectively illustrate the complete picture of the operation.

Trace

Trace records the path of a request (whether from an application or end-user) as it propagates through a multi-service architecture (such as microservices and serverless applications).

A trace consists of one or more spans. The first span is known as the root span, which represents the entire lifecycle of a request from start to finish. Child spans beneath the root span provide more detailed contextual information about the request process (or the various steps that constitute the request).

Without traces, identifying the root cause of performance issues in distributed systems would be quite challenging. Traces make it easier to debug and understand distributed systems by breaking down the flow of requests through them.

Instrumentation

To enable observability, a system needs to undergo Instrumentation: that is, the component code of the system must emit traces, metrics, and logs.

With OpenTelemetry, you can instrument your code in two primary ways:

  1. Code-based solutions: Using the official APIs and SDKs for most languages
  2. Zero-instrumentation solutions

Code-based solutions provide deeper insights and richer telemetry data from within your application. You can generate telemetry data in your application using the OpenTelemetry API, which is an important complement to the telemetry data generated by zero-instrumentation solutions.

Zero-instrumentation solutions are great for quickly getting started or when you cannot modify the application from which you need telemetry data. They can provide rich telemetry data via the libraries or runtime environment you are using. Another way to understand them is that they deliver information about events occurring at the boundaries (Edges) of the application.

These two solutions can be used simultaneously.

OpenTelemetry Collector

OpenTelemetry Collector is a vendor-agnostic agent that can receive, process, and export telemetry data. It supports receiving telemetry data in various formats (such as OTLP, Jaeger, Prometheus, and many commercial/proprietary tools) and sending that data to one or more backends. It also supports processing and filtering telemetry data before exporting.

For more information, see Collector.

Jaeger

Jaeger is an open-source distributed tracing system. It is designed to monitor and diagnose complex distributed systems based on microservices architecture, helping developers visualize request traces, analyze performance bottlenecks, and troubleshoot anomalies. Jaeger is compatible with the OpenTracing standard (now part of OpenTelemetry), supports multiple programming languages and storage backends, and is a key observability tool in the cloud-native space.