OpenTelemetry Tracing Specification now 1.0!

Our goal is to provide a generally available, production quality release for the tracing data source across most OpenTelemetry components in the first half of 2021. Several components have already reached this milestone! We expect metrics to reach the same status in the second half of 2021 and are targeting logs in 2022.

Project Overview

OpenTelemetry is developed on a signal by signal basis. Tracing, metrics, baggage, and logging are examples of signals. Signals are built on top of context propagation, a shared mechanism for correlating data across distributed systems.

Each signal consists of four core components: APIs, SDKs, the OTLP protocol, and the Collector. Signals also have contrib components, an ecosystem of plugins and instrumentation. All instrumentation shares the same semantic conventions, to ensure that they produce the same data when observing common operations, such as HTTP requests.

A detailed overview of signals and components can be found here.

Component Lifecycle

Components follow a development lifecycle: Draft, Experimental, Stable, Deprecated, Removed.

Draft components are under design, and have not been added to the specification.
Experimental components are released and available for beta testing.
Stable components are backwards compatible and covered under long term support.
Deprecated components are stable, but may eventually be removed.

The complete definitions for lifecycles and long term support can be found here.

Current Status

The following is a high level status report for currently available signals. Note that while the OpenTelemetry clients conform to a shared specification, they are developed independently.

Checking the current status for each client in the README of its github repo is recommended. Client support for specific features can be found in the specification compliance tables.


API: stable
SDK: stable
Protocol: stable
Collector: experimental

  • The tracing specification is now completely stable, and covered by long term support.
  • The tracing specification is still extensible, but only in a backwards compatible manner.
  • OpenTelemetry clients are versioned to v1.0 once their tracing implementation is complete.


API: feature-freeze
SDK: draft
Protocol: stable
Collector: experimental

  • OpenTelemetry Metrics is currently under active development.
  • The data model is stable and released as part of the OTLP protocol.
  • Experimental support for metric pipelines are available in the Collector.
  • Collector support for Prometheus is under developemnet, in collaboration with the Prometheus community.
  • The metric API and SDK specification is currently being protoypted in Java, .NET, and Python.


API: stable
SDK: stable
Protocol: N/A
Collector: N/A

  • OpenTelemetry Baggage is now completely stable.
  • Baggage is not an observability tool, it is a system for attaching arbitratry keys and values to a transaction, so that downstream services may access them. As such, there is no OTLP or Collector component to baggage.


API: draft
SDK: draft
Protocol: experimental
Collector: experimental

  • OpenTelemetry Logging is currently under active development.
  • The data model is experimental and released as part of the OTLP protocol.
  • Log processing for many data formats has been added to the Collector, thanks to the donation of Stanza to the the OpenTelemetry project.
  • Log appenders are currently under develop in many languages. Log appenders allow OpenTelemetry tracing data, such as trace and span IDs, to be appended to existing logging systems.
  • An OpenTelemetry logging SDK is currently under development. This allows OpenTelemetry clients to injest logging data from existing logging systems, outputting logs as part of OTLP along with tracing and metrics.
  • An OpenTelemetry logging API is not currently under development. We are focusing first on integration with existing logging systems. When metrics is complete, focus will shift to development of an OpenTelemetry logging API.


An effort to expand the availability and quality of OpenTelemetry instrumentation is scheduled for this summer.

  • Stabilize and define long term support for instrumentation
  • Provide instrumentation for a wider variety of important libraries
  • Provide testing and CICD tools for writing and verifying instrumentation quality.

Latest Releases


1.2.0-alpha3 of Core Components

Improved Metrics support - higher performance, bug fixes for Histogram, bug fixes for OTLP, Prometheus Metric exporters.
Refer to changelog for individual components for detailed changelog.


Release v1.0.0-RC3

## 1.0.0-RC3 - 2021-09-03

### Added

- Added `ErrorHandlerFunc` to use a function as an `"".ErrorHandler`. (#2149)
- Added `"".WithStackTrace` option to add a stack trace when using `span.RecordError` or when panic is handled in `span.End`. (#2163)
- Added typed slice attribute types and functionality to the `` package to replace the existing array type and functions. (#2162)
  - `BoolSlice`, `IntSlice`, `Int64Slice`, `Float64Slice`, and `StringSlice` replace the use of the `Array` function in the package.
- Added the `` example package.
  Included is an example application that computes Fibonacci numbers. (#2203)

### Changed

- Metric instruments have been renamed to match the (feature-frozen) metric API specification:
  - ValueRecorder becomes Histogram
  - ValueObserver becomes Gauge
  - SumObserver becomes CounterObserver
  - UpDownSumObserver becomes UpDownCounterObserver
  The API exported from this project is still considered experimental. (#2202)
- Metric SDK/API implementation type `InstrumentKind` moves into `sdkapi` sub-package. (#2091)
- The Metrics SDK export record no longer contains a Resource pointer, the SDK `"".Exporter.Export()` function for push-based exporters now takes a single Resource argument, pull-based exporters use `"".Controller.Resource()`. (#2120)
- The JSON output of the `` is harmonized now such that the output is "plain" JSON objects after each other of the form `{ ... } { ... } { ... }`. Earlier the JSON objects describing a span were wrapped in a slice for each `Exporter.ExportSpans` call, like `[ { ... } ][ { ... } { ... } ]`. Outputting JSON object directly after each other is consistent with JSON loggers, and a bit easier to parse and read. (#2196)
- Update the `NewTracerConfig`, `NewSpanStartConfig`, `NewSpanEndConfig`, and `NewEventConfig` function in the `` package to return their respective configurations as structs instead of pointers to the struct. (#2212)

### Deprecated

- The `` package is deprecated.
  All functionality from this package now exists in the `` package.
  The functions from that package should be used instead. (#2166)
- The `"".Array` function and the related `ARRAY` value type is deprecated.
  Use the typed `*Slice` functions and types added to the package instead. (#2162)
- The `"".Any` function is deprecated.
  Use the typed functions instead. (#2181)
- The `` package is deprecated.
  The `"".SpanRecorder` can be registered with the default SDK (``) as a `SpanProcessor` and used as a replacement for this deprecated package. (#2188)

### Removed

- Removed metrics test package ``. (#2105)

### Fixed

- The `fromEnv` detector no longer throws an error when `OTEL_RESOURCE_ATTRIBUTES` environment variable is not set or empty. (#2138)
- Setting the global `ErrorHandler` with `"".SetErrorHandler` multiple times is now supported. (#2160, #2140)
- The `"".Any` function now supports `int32` values. (#2169)
- Multiple calls to `"".WithResource()` are handled correctly, and when no resources are provided `"".Default()` is used. (#2120)
- The `WithoutTimestamps` option for the `` exporter causes the exporter to correctly ommit timestamps. (#2195)
- Fixed typos in resources.go. (#2201)



### :boom: Breaking Change

* `opentelemetry-api-metrics`, `opentelemetry-context-zone-peer-dep`, `opentelemetry-context-zone`, `opentelemetry-core`, `opentelemetry-exporter-collector-grpc`, `opentelemetry-exporter-collector-proto`, `opentelemetry-exporter-collector`, `opentelemetry-exporter-jaeger`, `opentelemetry-exporter-prometheus`, `opentelemetry-exporter-zipkin`, `opentelemetry-instrumentation-fetch`, `opentelemetry-instrumentation-grpc`, `opentelemetry-instrumentation-http`, `opentelemetry-instrumentation-xml-http-request`, `opentelemetry-instrumentation`, `opentelemetry-propagator-jaeger`, `opentelemetry-sdk-metrics-base`, `opentelemetry-sdk-node`, `opentelemetry-sdk-trace-base`, `opentelemetry-sdk-trace-node`, `opentelemetry-sdk-trace-web`, `opentelemetry-shim-opentracing`
  * [#2340]( chore: rename sdks to better represent what they are [#2146] ([@vmarchaud](

### :rocket: (Enhancement)

* `opentelemetry-exporter-collector-grpc`, `opentelemetry-exporter-collector-proto`, `opentelemetry-exporter-collector`, `opentelemetry-exporter-zipkin`
  * [#1775]( fix(@opentelemetry/exporter-collector): remove fulfilled promises cor… ([@aabmass](
* `opentelemetry-exporter-collector`
  * [#2336]( feat: use Blob in sendBeacon to add application/json type ([@jufab](

### :bug: (Bug Fix)

* `opentelemetry-instrumentation-fetch`
  * [#2411]( fix(instrumentation-fetch): `fetch(string, Request)` silently drops request body ([@t2t2](
* `opentelemetry-sdk-trace-base`
  * [#2396]( fix: respect sampled flag in Span Processors, fix associated tests ([@quickgiant](

### :books: (Refine Doc)

* Other
  * [#2412]( docs: fix examples in website_docs/ ([@svrnm](
  * [#2400]( Website docs update 0821 ([@svrnm](
* `opentelemetry-resources`, `opentelemetry-semantic-conventions`
  * [#2399]( chore: update doc identifier names in readme ([@lonewolf3739](

### :house: (Internal)

* `opentelemetry-core`, `opentelemetry-exporter-collector-grpc`, `opentelemetry-exporter-collector-proto`, `opentelemetry-instrumentation-http`, `opentelemetry-sdk-trace-node`
  * [#2416]( chore: hoist dependencies to speed up ci ([@dyladan](
* `opentelemetry-propagator-b3`, `opentelemetry-propagator-jaeger`, `opentelemetry-resources`, `opentelemetry-sdk-metrics-base`
  * [#2406]( chore: Fix lint warnings in propagator-jaeger, propagator-b3, resources, and sdk-metrics-base packages ([@alisabzevari](
* `opentelemetry-core`
  * [#2405]( chore: Fix lint warnings in core package ([@alisabzevari](
* `opentelemetry-resource-detector-aws`, `opentelemetry-resource-detector-gcp`, `opentelemetry-sdk-node`
  * [#2392]( refactor: move detectors to opentelemetry-js-contrib repo ([@legendecas](
* `opentelemetry-exporter-collector-grpc`, `opentelemetry-exporter-collector-proto`, `opentelemetry-exporter-collector`, `opentelemetry-exporter-jaeger`, `opentelemetry-exporter-zipkin`, `opentelemetry-instrumentation-fetch`, `opentelemetry-instrumentation-grpc`, `opentelemetry-instrumentation-http`, `opentelemetry-instrumentation-xml-http-request`, `opentelemetry-sdk-node`, `opentelemetry-sdk-trace-node`, `opentelemetry-sdk-trace-web`, `opentelemetry-shim-opentracing`
  * [#2402]( chore: sort entries in tsconfig ([@Flarna](
* `opentelemetry-api-metrics`, `opentelemetry-context-zone-peer-dep`
  * [#2390]( chore: fix Lint warnings in api-metrics and context-zone-peer-dep ([@alisabzevari](
* Other
  * [#2397]( chore: change codeowners to point to team ([@dyladan](
  * [#2385]( chore: move api into dependencies in integration tests ([@Flarna](

### Committers: 11

* Aaron Abbott ([@aabmass](
* Ali Sabzevari ([@alisabzevari](
* Clark Jacobsohn ([@quickgiant](
* Daniel Dyla ([@dyladan](
* Gerhard Stöbich ([@Flarna](
* Julien Fabre ([@jufab](
* Severin Neumann ([@svrnm](
* Srikanth Chekuri ([@lonewolf3739](
* Valentin Marchaud ([@vmarchaud](
* legendecas ([@legendecas](
* t2t2 ([@t2t2](


Version 1.6.0

### API

- Various performance optimizations
  - 1 and 2 element Attributes instances now bypass some logic to reduce object allocations.
  - The result of `hashCode()` of `AttributeKey` is now cached.
  - Checks for base-16 validity of TraceId and SpanId have been optimized.
  - Internally created `SpanContext` instances now bypass unneeded validation.

### Semantic Conventions (alpha)

- The `SemanticAttributes` and `ResourceAttributes` classes have been updated to match the semantic
  conventions as of specification release `1.6.1`.

### SDK

- The `io.opentelemetry.sdk.trace.ReadableSpan` interface has been expanded to include
  a `getAttribute(AttributeKey)` method.
- The `io.opentelemetry.sdk.trace.SpanLimits` class now supports enforcing a maximum Span attribute
  length (measured in characters) on String and String-array values.

#### Exporters

- The OTLP exporters have been undergone a significant internal rework. Various performance
  optimizations have been done on process of converting to the OTLP formats. Because of this, the exporter libraries
  no longer have a runtime dependency on the `opentelemetry-proto` artifact, or transitively `protobuf`. If you were
  using code from these libraries through these transitive dependencies, you will need to add them directly to your
- The OTLP metric exporter no longer exports the deprecated metric `Labels`, only `Attributes`. This
  means that your collector MUST support at least OTLP version `0.9.0` to properly ingest metric
- BREAKING CHANGE: The `OtlpHttpMetricExporter` class has been moved into
  the `io.opentelemetry.exporter.otlp.http.metrics` package.
- BUGFIX: The `OtlpGrpcSpanExporter` and `OtlpGrpcMetricExporter` will now wait for the underlying
  grpc channel to be terminated when shutting down.
- The OTLP exporters now optionally support `gzip` compression. It is not enabled by default.

#### SDK Extensions

- The `AwsXrayIdGenerator` in the `opentelemetry-sdk-extension-aws` module has been deprecated. This
  implementation has been superseded by the one in
  the [opentelemetry-java-contrib](
  project and will not be maintained here going forward.

### Auto-configuration (alpha)

- The `otel.traces.exporter`/`OTEL_TRACES_EXPORTER` option now supports a comma-separated list of
- The Metrics SDK will no longer be configured by default. You must explicitly request an exporter
  configuration in order to have a Metrics SDK configured.
- BREAKING CHANGE: All SPI interfaces are now in a separate module from the autoconfiguration
  module: `opentelemetry-sdk-extension-autoconfigure-spi`.
- BREAKING CHANGE: `ConfigProperties` and `ConfigurationException` have been moved to a new
  package (`io.opentelemetry.sdk.autoconfigure.spi`) and
  module (`opentelemetry-sdk-extension-autoconfigure-spi`).
- BREAKING CHANGE: All SPI interfaces now take a `ConfigProperties` instance on their methods.
- BUGFIX: Exceptions thrown during the loading of an SPI implementation class are now handled more
  gracefully and will not bubble up unless you have explicitly requested the bad implementation as
  the one to use.
- You can now specify `gzip` compress for the OTLP exporters via the `otel.exporter.otlp.compression`
  /`OTEL_EXPORTER_OTLP_COMPRESSION` configuration option.
- You can now specify maximum Span attribute length via the `otel.span.attribute.value.length.limit`

### Metrics (alpha)

- BREAKING CHANGES: The metrics SDK has numerous breaking changes, both behavioral and in the SDK's
  configuration APIs.
  - The default aggregation for a `Histogram` instrument has been changed to be a Histogram, rather than a Summary.
  - Registration of Views has undergone significant rework to match the current state of the SDK specification. Please reach out on CNCF slack in the [#otel-java]( channel, or in a [github discussion]( if you need assistance with converting to the new Views API.
  - The OTLP exporter no longer exports the deprecated metric `Labels`, only `Attributes`. This means that your collector MUST support at least OTLP version `0.9.0` to properly ingest metric data.
  - It is no longer possible to provide custom aggregations via a View. This feature will return in the future.


opentelemetry v1.5.0 & v0.24b0

### Added
- Add Trace ID validation to meet [TraceID spec]( ([#1992](
- `opentelemetry-sdk` added support for `OTEL_SPAN_ATTRIBUTE_VALUE_LENGTH_LIMIT` ([#2044](
- `opentelemetry-sdk` Add support for `OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT` env var ([#2056](

### Changed
- `opentelemetry-sdk` `get_aggregated_resource()` returns default resource and service name
  whenever called ([#2013](
- `opentelemetry-distro` & `opentelemetry-sdk` Moved Auto Instrumentation Configurator code to SDK
  to let distros use its default implementation ([#1937](
- `opentelemetry-sdk` Treat limit even vars set to empty values as unset/unlimited. ([#2054](
- `opentelemetry-api` Attribute keys must be non-empty strings. ([#2057](

### Fixed
- Fix documentation on well known exporters and variable OTEL_TRACES_EXPORTER which were misnamed ([#2023](
- Fixed Python 3.10 incompatibility in `opentelemetry-opentracing-shim` tests ([#2018](
- `opentelemetry-sdk` Fixed bugs (#2041, #2042 & #2045) in Span Limits ([#2044](


0.0.3 Release

45b7750 (HEAD -> main, upstream/main) Remove STDOUT output in Newrelic exporter (#404)
04f84d7 Add ReadableSpan/ReadWriteSpan interfaces (#403)
e5e8b74 Revert "change OTLP/HTTP port (#389) (#398)" (#401)
98fcced remove Fahmy as an approver (#399)
587b086 Make span.recordException accept Throwable (#390)
8e64874 change OTLP/HTTP port (#389) (#398)
f9948ef update dependencies (#397)
87cab2d Add InstrumentationLibrary in OTLP exporter (#395)
4a08e01 Update Tracer.php (#396)
44b09b3 Reintroduce InstrumentationLibrary (#392)
74b77ec chore: Force otel-collector to use linux/amd64 image in local dev (#394)
15d67d7 Add alternative stacktrace function (#391)
a325989 Feature - Implemented exporter factory and added unit tests (#351)
942b7f7 Update php.yml (#387)
546f4c3 Fix merging of attributes provided within SamplingResult in Tracer (#384)
1a1e0bd Update php-cs-fixer (#385)
c07dee2 OTLP/HTTP First Pass (#352)
236e228 Fixed idgenerator issues in SpanOptions and Tracer (#381)
48b98fb SpanContext Issue Temporary Fix (#380)
0003c75 New resource constants (#375)
c3c14b9 Span context trace context update (#374)
75c37cd Change random Hex generator to public function (#373)
f3db21c ensure insecure variable is converted to bool (#369)
7a484c9 fix dockerfile spacing (#372)
578d05c fix metadataFromHeaders parsing bug (#367)
d908922 Remove Tracer::endActiveSpan() (#365)
7c5d861 Remove not required, not implemented tracer methods (#364)
8f2c077 Update laravel guide for v.0.0.2 (#361)
fb83f2e Fix jaeger zipkin-port environment variable (#359)
e2d8725 Propagate ::startSpan() attributes to created span (#353)
b42895a Add attributes parameter to ::recordException() (#355)
c2a52e6 Fix span processors being called twice on ::endActiveSpan() (#354)
142e665 (prondubuisi/main, alex/main) Remove morrisonlevi as code owner (#349)
e20956f CorrelationContext to Baggage (#346)


opentelemetry-instrumentation-que 0.1.0

### v0.1.0 / 2021-09-15

* Initial release.


OpenTelemetry API v0.3.2

* `create_span` has been renamed `start_inactive_span` (#53)
* Fix `add_event` Elixir function (#56)
* Add accessors to deconstruct Span (#54)
* Attributes and events that aren't a list are now silently dropped (#51)
* Fix bug where there is no current span ctx and update_name is called (#52)
* Readme, typespec and doc fixes #45 #46 #50 #59 


## v0.35.0 Beta

## 🛑 Breaking changes 🛑

- Remove the legacy gRPC port(`55680`) support in OTLP receiver (#3966)
- Rename configparser.Parser to configparser.ConfigMap (#3964)
- Remove obsreport.ScraperContext, embed into StartMetricsOp (#3969)
- Remove dependency on deprecated (#3979)
- Remove deprecated pdata.AttributeValueToString (#3953)
- Remove deprecated pdata.TimestampFromTime. Closes: #3925 (#3935)

## 💡 Enhancements 💡

- Add TelemetryCreateSettings (#3984)
- Only initialize collector telemetry once (#3918)
- Add trace context info to LogRecord log (#3959)
- Add new view for AWS ECS health check extension. (#3776)