OpenTelemetry
The vendor-neutral standard for producing and shipping traces, metrics and logs, with SDKs for most languages and a Collector to route the data.
- What it is
- Observability
- Used for
- Distributed tracing,Metrics,Logs
- Type
- Open source
- Made by
- Cloud Native Computing Foundation
- License
- Apache 2.0
- Facts checked
- 5 October 2026
What it is
OpenTelemetry (OTel) is not a backend: it stores nothing and draws no dashboards. It is the plumbing in front of one. Language SDKs and auto-instrumentation libraries create spans, metrics and log records inside your code, named according to shared semantic conventions (http.request.method, db.system.name), and send them over OTLP, its wire protocol for gRPC and HTTP.
The OpenTelemetry Collector is a separate process that sits between your apps and your backends. Each pipeline chains receivers (OTLP, Prometheus scraping, Kafka and more), processors (batching, filtering, adding Kubernetes pod labels) and exporters (Prometheus, a tracing backend, a commercial vendor). Because the instrumentation is standard, switching backend means changing the Collector’s config, not re-instrumenting every service. OTel was formed in 2019 by merging OpenTracing and OpenCensus, and became a CNCF graduated project in May 2026.
Why teams pick it
- Instrument once and switch backends freely; many vendors, and Prometheus itself, accept OTLP directly
- One SDK and one set of conventions for traces, metrics and logs, so a log line can carry the trace ID of its request
- The Collector can batch, sample, redact and fan out telemetry without touching application code
- Auto-instrumentation for common frameworks in Java, Python, .NET, JavaScript and others gives traces with little or no code
Watch out for
- Maturity varies by language and signal: traces and metrics are stable in most SDKs, logs are still in development in several, and profiles are early
- You still need somewhere to store and query the data; OTel only produces and moves it
- The Collector has a long list of components and a large config surface; many contrib components are beta or alpha
- Component names change between Collector releases (for example
otlphttpis nowotlp_http), so upgrades need care
Alternatives
What all observability have in common →
Amazon CloudWatchAWSAWS’s built-in monitoring service: metrics from every AWS service, logs, alarms and dashboards, and now traces, OpenTelemetry and PromQL, billed per metric, per GB and per alarm.How it fits with other technologies
What OpenTelemetry uses
What uses OpenTelemetry
- Herokuexports Fir app telemetry withOpenTelemetry
- Envoycan export traces toOpenTelemetry
- Istiocan send traces, over OTLP, throughOpenTelemetry
- gRPCreports per-call metrics throughOpenTelemetry
- Protocol Buffersis the binary encoding of OTLP inOpenTelemetry
- Starlettehas an optional tracing middleware forOpenTelemetry
- FastAPIhas built-in tracing throughOpenTelemetry
- Bytewaxexports traces throughOpenTelemetry
- Redpanda Connectemits pipeline traces throughOpenTelemetry
- GreptimeDBingests OTLP metrics, logs and traces fromOpenTelemetry
- Elasticsearchstores APM traces and metrics sent byOpenTelemetry
- OpenSearchingests traces, via Data Prepper, fromOpenTelemetry
- Amazon CloudWatchingests OTLP metrics, logs and traces fromOpenTelemetry
- Better Stackingests OTLP traces, metrics and logs fromOpenTelemetry
- ClickStackingests OTLP through its own build ofOpenTelemetry
- Datadogaccepts OTLP traces, metrics and logs fromOpenTelemetry
- Fluentdreceives and forwards OTLP data fromOpenTelemetry
- Workers Observabilityexports logs and traces overOpenTelemetry
- Telegrafexchanges OTLP data withOpenTelemetry
- Sentryingests OTLP traces and logs fromOpenTelemetry
- RSigmareceives logs over OTLP fromOpenTelemetry
A Collector that receives OTLP and pushes metrics to Prometheus · yaml
receivers:
otlp:
protocols:
grpc: { endpoint: 0.0.0.0:4317 }
http: { endpoint: 0.0.0.0:4318 }
processors:
batch:
exporters:
otlp_http/prometheus: # Prometheus 3 started with --web.enable-otlp-receiver
metrics_endpoint: http://prometheus:9090/api/v1/otlp/v1/metrics
service:
pipelines:
metrics: { receivers: [otlp], processors: [batch], exporters: [otlp_http/prometheus] }See it in a real stack
No architecture uses OpenTelemetry yet. Drop it into the playground and wire it up yourself.Open playground →Where it came from2010–2026
Google’s 2010 Dapper paper showed how to follow a single request across thousands of machines. In the years after, tracing and monitoring vendors each shipped their own agents and libraries, so instrumenting code meant committing to one vendor, and open-source libraries had no neutral way to add tracing. Two projects set out to fix that. OpenTracing, co-created by Dapper co-author Ben Sigelman, joined the CNCF in October 2016 as a vendor-neutral tracing API. In January 2018 Google open-sourced OpenCensus, a version of its internal Census library that collected both traces and metrics.
They solved the same problem in incompatible ways. As Sigelman and Google’s Morgan McLean wrote: “The biggest problem with either project has been the fact that there were two of them.” In May 2019 the two announced they were merging into OpenTelemetry, a new CNCF sandbox project with governance from Google, LightStep, Microsoft and Uber, and bridges so existing OpenTracing and OpenCensus code would keep working.
Logs joined traces and metrics, its OTLP protocol became a common wire format, and many observability vendors, and Prometheus itself, now accept it directly. OpenTelemetry became the CNCF’s highest-velocity project after Kubernetes and graduated in May 2026.
Why it’s built this way
- Separate the API from the SDK
- Libraries and frameworks depend only on the small API, which does nothing if no SDK is installed. The application owner then picks the SDK and exporters, so instrumented libraries never force a vendor on anyone.
- Not a backend
- Storage and visualisation are deliberately left to other tools. The project describes the goal plainly: you own the data you generate, with no vendor lock-in, so you can change backends without re-instrumenting your code.
- Merge, with backward-compatible bridges
- Rather than start a third standard, the founders combined the two existing ones and promised software bridges, so code already written against either API could move over gradually.
Timeline
- 2010
Google publishes the Dapper paper on distributed tracing
- 2016
OpenTracing joins the CNCF in October
- 2018
Google open-sources OpenCensus in January
- 2019
OpenTracing and OpenCensus merge into OpenTelemetry, a CNCF sandbox project
- 2021
Moves to CNCF incubation in August
- 2026
Graduates from the CNCF in May
- CNCF blog: A brief history of OpenTelemetry (so far), 2019
- CNCF blog: OpenTracing joins the CNCF (Oct 2016)
- Google Open Source blog: OpenCensus (Jan 2018)
- CNCF blog: OpenTelemetry becomes a CNCF incubating project (Aug 2021)
- OpenTelemetry spec: Library guidelines (API and SDK)
- CNCF: OpenTelemetry graduation announcement (May 2026)
- Dapper, a large-scale distributed systems tracing infrastructure (2010)
Sources13 · facts checked 5 October 2026
- OpenTelemetry docs: What is OpenTelemetry?
- OpenTelemetry status (signal maturity per language)
- OpenTelemetry semantic conventions: HTTP spans
- OpenTelemetry semantic conventions: Database spans
- OpenTelemetry docs: Logs (TraceId and SpanId fields)
- OpenTelemetry docs: Zero-code instrumentation
- Collector docs: Configuration
- OpenTelemetry docs: Important Collector components for Kubernetes
- OTLP HTTP exporter README (`otlphttp` renamed `otlp_http`)
- Prometheus guide: Using Prometheus as your OpenTelemetry backend
- OpenTelemetry vendors that accept OTLP
- CNCF: OpenTelemetry graduation announcement (May 2026)
- CNCF blog: A brief history of OpenTelemetry (so far), 2019