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.

Tracing

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.

Metrics

API: draft
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.

Baggage

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.

Logging

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 OpTelemetry 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.

Instrumentation

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


.NET

1.0.0 non-core packages

Go

Experimental Metrics Release v0.22.0

## [Experimental Metrics v0.22.0] - 2021-07-19

### Added

- Adds HTTP support for OTLP metrics exporter. (#2022)

### Removed

- Removed the deprecated package `go.opentelemetry.io/otel/exporters/metric/prometheus`. (#2020)

JavaScript

v0.23.0

### :rocket: (Enhancement)

* `opentelemetry-shim-opentracing`
  * [#2282](https://github.com/open-telemetry/opentelemetry-js/pull/2282) feat(shim-opentracing): update logging based on new spec ([@vreynolds](https://github.com/vreynolds))
* `opentelemetry-exporter-collector-grpc`
  * [#2304](https://github.com/open-telemetry/opentelemetry-js/pull/2304) feat: otlp-grpc exporter uses headers environment variables ([@vreynolds](https://github.com/vreynolds))
* `opentelemetry-propagator-b3`
  * [#2285](https://github.com/open-telemetry/opentelemetry-js/pull/2285) fix(propagator-b3): update extract to check for array ([@jordanworner](https://github.com/jordanworner))
* `opentelemetry-core`, `opentelemetry-instrumentation-fetch`, `opentelemetry-instrumentation-xml-http-request`, `opentelemetry-web`
  * [#2226](https://github.com/open-telemetry/opentelemetry-js/pull/2226) fix(xhr): make performance observer work with relative urls ([@mhennoch](https://github.com/mhennoch))

### :books: (Refine Doc)

* Other
  * [#2306](https://github.com/open-telemetry/opentelemetry-js/pull/2306) chore: update the website getting started docs ([@dyladan](https://github.com/dyladan))
  * [#2283](https://github.com/open-telemetry/opentelemetry-js/pull/2283) Module opentelemetry/instrumentation-grpc required ([@pramodsreek](https://github.com/pramodsreek))
* `opentelemetry-sdk-node`
  * [#2300](https://github.com/open-telemetry/opentelemetry-js/pull/2300) chore(README): update link to BatchSpanProcessor in sdk node ([@pragmaticivan](https://github.com/pragmaticivan))
* `opentelemetry-exporter-jaeger`, `opentelemetry-exporter-zipkin`, `opentelemetry-sdk-node`
  * [#2290](https://github.com/open-telemetry/opentelemetry-js/pull/2290) fix: service.name resource attribute ([@OmkarKirpan](https://github.com/OmkarKirpan))
* `opentelemetry-resources`
  * [#2289](https://github.com/open-telemetry/opentelemetry-js/pull/2289) docs(opentelemetry-resources): fix wrong sample code in readme ([@alisabzevari](https://github.com/alisabzevari))

### :house: (Internal)

* `opentelemetry-context-async-hooks`, `opentelemetry-context-zone-peer-dep`, `opentelemetry-web`
  * [#2247](https://github.com/open-telemetry/opentelemetry-js/pull/2247) feat: unify the signatures of bind and with ([@Rauno56](https://github.com/Rauno56))
* Other
  * [#2296](https://github.com/open-telemetry/opentelemetry-js/pull/2296) chore: do not upgrade backwards compatibility ([@dyladan](https://github.com/dyladan))
  * [#2302](https://github.com/open-telemetry/opentelemetry-js/pull/2302) chore: use setup-node ([@dyladan](https://github.com/dyladan))

### Committers: 9

* Ali Sabzevari ([@alisabzevari](https://github.com/alisabzevari))
* Daniel Dyla ([@dyladan](https://github.com/dyladan))
* Ivan Santos ([@pragmaticivan](https://github.com/pragmaticivan))
* Jordan Worner ([@jordanworner](https://github.com/jordanworner))
* MartenH ([@mhennoch](https://github.com/mhennoch))
* Omkar Kirpan ([@OmkarKirpan](https://github.com/OmkarKirpan))
* Pramod ([@pramodsreek](https://github.com/pramodsreek))
* Rauno Viskus ([@Rauno56](https://github.com/Rauno56))
* Vera Reynolds ([@vreynolds](https://github.com/vreynolds))

Java

Version 1.4.1

- Fill labels in addition to attributes during OTLP metrics export to support versions of the
OpenTelemetry Collector which do not support the new protocol yet.

Python

opentelemetry v1.4.0 & v0.23b0

### Added
- `opentelemetry-semantic-conventions` Generate semconv constants update for OTel Spec 1.5.0 ([#1946](https://github.com/open-telemetry/opentelemetry-python/pull/1946))
- Moved `opentelemetry-instrumentation` to core repository. ([#1959](https://github.com/open-telemetry/opentelemetry-python/pull/1959))
- Dropped attributes/events/links count available exposed on ReadableSpans. ([#1893](https://github.com/open-telemetry/opentelemetry-python/pull/1893))
- Added dropped count to otlp, jaeger and zipkin exporters. ([#1893](https://github.com/open-telemetry/opentelemetry-python/pull/1893))

### Changed
- Updated `opentelemetry-opencensus-exporter` to use `service_name` of spans instead of resource ([#1897](https://github.com/open-telemetry/opentelemetry-python/pull/1897))
- Added descriptions to the env variables mentioned in the opentelemetry-specification ([#1898](https://github.com/open-telemetry/opentelemetry-python/pull/1898))
- Ignore calls to `Span.set_status` with `StatusCode.UNSET` and also if previous status already had `StatusCode.OK`. ([#1902](https://github.com/open-telemetry/opentelemetry-python/pull/1902))
- Attributes for `Link` and `Resource` are immutable as they are for `Event`, which means any attempt to modify attributes directly will result in a `TypeError` exception. ([#1909](https://github.com/open-telemetry/opentelemetry-python/pull/1909))
- Added `BoundedAttributes` to the API to make it available for `Link` which is defined in the API. Marked `BoundedDict` in the SDK as deprecated as a result. ([#1915](https://github.com/open-telemetry/opentelemetry-python/pull/1915))
- Fix OTLP SpanExporter to distinguish spans based off Resource and InstrumentationInfo ([#1927](https://github.com/open-telemetry/opentelemetry-python/pull/1927))
- Updating dependency for opentelemetry api/sdk packages to support major version instead of pinning to specific versions. ([#1933](https://github.com/open-telemetry/opentelemetry-python/pull/1933))

### Fixed
- Updated `opentelementry-opentracing-shim` `ScopeShim` to report exceptions in opentelemetry specification format, rather than opentracing spec format. ([#1878](https://github.com/open-telemetry/opentelemetry-python/pull/1878))

PHP

This version of OpenTelemetry PHP will;

Make HTTP exporters require Client, StreamFactory and RequestFactory parameters, as part of PSR flexibility improvements.
Implement use of IdGenerator to generate trace ids instead of randomHex.
Update the README.md to ease contributions.
Update automated collector example to be cache independent and add children spans to example.
Fix trace context key extraction .
Change default port for GRPC exporter from 55680 to 55681.
Include OTLP/GRPC Exporter Implementation. 
Fix the wrong variable in Otlp Exporter. 
Have guides for integrating OpenTelemetry with Laravel and Symfony applications.
Include W3c trace context test service. 
Update components of automated examples. 
Add website documentation update action.
Fix ParentBased spans for remote requests  appearing as root spans.
Update general sampling behaviour.
Fix tracecontext header extraction.
Include experimental new Relic exporter, span converter, example, and tests. 
Update SpanProcessor parameters onStart .
Fix memory leak in Exporter.
Add additional code owners to the project.
Add ContextValueTrait and Scope to store in Context.
Update namespace for CorrelationContext class .
Add Basic example to send zipkin style data to a New Relic backend. 
Propagate SpanKind to Span constructor.
Modified SpanStatus to conform with the feature-freeze specs.  
Add recordException from specs.
Add an UpDownSumObserver Instrument for the Metrics API.
Add IdGenerator interface . 
Add Trace Context Tracestate header propagation.
Rename SpanContext methods isValidContext and isRemoteContext to be aligned with specification.
Include TraceProvider lookups tracers only by name, instead of name and version.
Change master to main in CI.
Update PHP CS Fixer for PHP 8.0 support.
Add semantic versioning rationale.
Include PHP 8 Compatibility trials.
Add  proto folder to the project.
Associate Spans with their TracerProvider.
Add OTLP/HTTP JSON exporter . 
Add static analysis for tests and examples.
Bump PHPStan to level 5, Psalm to level 3.
Implement the sampler into the tracer and trace provider.

Ruby

opentelemetry-instrumentation-active_record 0.1.0

### v0.1.0 / 2021-07-08

* Initial release, adds instrumentation patches to querying and persistence methods.

Erlang

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 

Collector

Release version 0.30.1

This release is a no-op compare to v0.30.0, it is just tagged on a main brach commit, instead of a release branch commit. This solves a dependency update issue in the contrib repo, when upgrading to the latest main commit.

Users of the pre-built binaries can ignore this.