Compliance of Implementations with Specification
The following tables show which features are implemented by each OpenTelemetry
language implementation.
+
means the feature is supported, -
means it is not supported, N/A
means
the feature is not applicable to the particular language, blank cell means the
status of the feature is not known.
Feature
Go
Java
JS
Python
Ruby
Erlang
PHP
Rust
C++
.Net
Swift
TracerProvider
Create TracerProvider
+
+
+
+
+
+
+
+
+
+
+
Get a Tracer
+
+
+
+
+
+
+
+
+
+
+
Safe for concurrent calls
+
+
+
+
+
+
+
+
+
+
+
Shutdown (SDK only required)
+
+
+
+
-
+
+
-
Trace / Context interaction
Get active Span
+
+
+
+
N/A
+
+
+
Set active Span
+
+
+
+
N/A
+
+
+
Tracer
Create a new Span
+
+
+
+
+
+
+
+
+
+
+
Get active Span
+
+
+
+
+
+
+
+
+
+
+
Mark Span active
+
+
+
+
+
+
+
+
-
+
-
Safe for concurrent calls
+
+
+
+
+
+
+
+
+
+
+
SpanContext
IsValid
+
+
+
+
+
+
+
+
+
+
+
IsRemote
-
+
+
+
+
+
+
+
+
+
+
Conforms to the W3C TraceContext spec
+
+
+
+
+
+
+
+
+
+
Span
Create root span
+
+
+
+
+
+
+
+
+
+
+
Create with default parent (active span)
+
+
+
+
+
+
+
+
+
+
+
Create with parent from Context
+
+
+
+
+
+
+
+
+
+
+
No explicit parent Span/SpanContext allowed
+
+
+
+
+
+
+
SpanProcessor.OnStart receives parent Context
+
+
+
+
+
+
-
UpdateName
+
+
+
+
+
+
+
+
-
+
+
User-defined start timestamp
+
+
+
+
+
+
+
+
+
+
+
End
+
+
+
+
+
+
+
+
+
+
+
End with timestamp
+
+
+
+
+
+
+
+
+
+
+
IsRecording
+
+
+
+
+
+
+
+
+
+
+
IsRecording becomes false after End
+
+
+
+
-
Set status with StatusCode (Unset, Ok, Error)
+
+
+
+
-
+
+
+
Safe for concurrent calls
+
+
+
+
+
+
+
+
+
+
+
events collection size limit
+
+
+
+
-
+
-
+
attribute collection size limit
+
+
+
+
-
+
-
+
links collection size limit
+
+
+
+
-
+
-
+
Span attributes
SetAttribute
+
+
+
+
+
+
+
+
+
+
+
Set order preserved
+
-
+
+
+
+
+
+
+
+
+
String type
+
+
+
+
+
+
+
+
+
+
+
Boolean type
+
+
+
+
+
+
+
+
+
+
+
Double floating-point type
+
+
+
+
+
+
-
+
+
+
+
Signed int64 type
+
+
+
+
+
+
-
+
+
+
+
Array of primitives (homogeneous)
+
+
+
+
+
+
+
+
+
+
+
null
values documented as invalid/undefined
+
+
+
N/A
N/A
Unicode support for keys and string values
+
+
+
+
+
+
+
+
+
+
+
Span linking
AddLink
+
+
+
+
+
+
+
+
-
+
+
Safe for concurrent calls
+
+
+
+
+
+
+
+
-
+
+
Span events
AddEvent
+
+
+
+
+
+
+
+
-
+
+
Add order preserved
+
+
+
+
+
+
+
+
-
+
+
Safe for concurrent calls
+
+
+
+
+
+
+
+
-
+
+
Span exceptions
RecordException
-
+
+
+
+
-
+
-
+
-
RecordException with extra parameters
-
+
+
+
-
-
+
-
+
-
Sampling
Allow samplers to modify tracestate
+
+
+
+
+
ShouldSample gets full parent Context
+
+
+
+
+
New Span ID created also for non-recording Spans
+
+
SDK Trace & Span ID generation is customizable
+
+
+
+
+
Feature
Go
Java
JS
Python
Ruby
Erlang
PHP
Rust
C++
.Net
Swift
Basic support
+
+
+
+
+
+
+
+
Use official header name baggage
+
+
+
+
+
+
+
-
Feature
Go
Java
JS
Python
Ruby
Erlang
PHP
Rust
C++
.Net
Swift
TBD
Feature
Go
Java
JS
Python
Ruby
Erlang
PHP
Rust
C++
.Net
Swift
Create from Attributes
+
+
+
+
+
+
+
+
+
Create empty
+
+
+
+
+
+
+
+
+
Merge
+
+
+
+
+
+
+
+
+
Retrieve attributes
+
+
+
+
+
+
+
+
+
Default value for service.name
Feature
Go
Java
JS
Python
Ruby
Erlang
PHP
Rust
C++
.Net
Swift
Create Context Key
+
+
+
+
+
+
+
+
Get value from Context
+
+
+
+
+
+
+
+
Set value for Context
+
+
+
+
+
+
+
+
Attach Context
+
+
+
+
+
+
+
-
Detach Context
+
+
+
+
+
+
+
-
Get current Context
+
+
+
+
+
+
+
+
Composite Propagator
+
+
+
+
N/A
+
+
+
Global Propagator
+
+
+
+
+
+
+
+
TraceContext Propagator
+
+
+
+
+
+
+
+
B3 Propagator
+
+
+
+
+
+
+
+
Jaeger Propagator
-
+
+
+
+
-
TextMapPropagator
Fields
+
+
+
+
+
+
+
Setter argument
+
+
+
+
+
+
Getter argument
+
+
+
+
+
+
Getter argument returning Keys
+
+
+
+
-
-
Feature
Go
Java
JS
Python
Ruby
Erlang
PHP
Rust
C++
.Net
Swift
OTEL_RESOURCE_ATTRIBUTES
+
+
+
+
+
-
-
+
-
+
-
OTEL_LOG_LEVEL
-
+
-
+
-
-
-
-
-
OTEL_PROPAGATORS
-
+
-
-
-
-
-
OTEL_BSP_*
+
+
+
-
-
+
-
-
-
OTEL_EXPORTER_OTLP_*
+
+
+
-
-
-
-
-
OTEL_EXPORTER_JAEGER_*
+
+
+
-
-
+
-
-
-
OTEL_EXPORTER_ZIPKIN_*
+
+
-
-
-
-
-
OTEL_EXPORTER
-
+
-
-
OTEL_SPAN_ATTRIBUTE_COUNT_LIMIT
+
+
-
-
OTEL_SPAN_EVENT_COUNT_LIMIT
+
+
-
-
OTEL_SPAN_LINK_COUNT_LIMIT
+
+
-
-
OTEL_TRACE_SAMPLER
-
-
-
OTEL_TRACE_SAMPLER_ARG
-
-
Feature
Go
Java
JS
Python
Ruby
Erlang
PHP
Rust
C++
.Net
Swift
Standard output (logging)
+
+
+
+
+
+
-
+
+
+
+
In-memory (mock exporter)
+
+
+
+
+
+
-
-
-
+
+
OTLP
OTLP/gRPC Exporter
+
+
+
+
+
+
+
+
+
OTLP/HTTP binary Protobuf Exporter
-
-
+
-
+
+
+
-
-
OTLP/HTTP JSON Protobuf Exporter
-
-
+
-
-
-
-
OTLP/HTTP gzip Content-Encoding support
-
-
+
+
-
-
-
Concurrent sending
-
+
-
-
+
-
-
Honors retryable responses with backoff
+
+
+
+
-
-
-
Honors non-retryable responses
+
-
+
+
-
-
-
Honors throttling response
+
-
+
+
-
-
-
Multi-destination spec compliance
-
-
-
-
-
Zipkin
Zipkin V1 JSON
-
-
-
-
-
-
Zipkin V1 Thrift
-
-
-
-
-
-
Zipkin V2 JSON
+
+
-
+
+
+
+
Zipkin V2 Protobuf
+
+
-
-
-
Service name mapping
+
+
+
+
+
+
+
+
+
SpanKind mapping
+
+
+
+
+
+
+
+
+
InstrumentationLibrary mapping
+
-
+
-
-
+
+
+
Boolean attributes
+
+
+
+
+
+
+
+
+
Array attributes
+
+
+
-
+
+
+
+
+
Status mapping
+
+
+
+
+
+
+
+
+
Error Status mapping
+
-
Event attributes mapping to Annotations
+
+
+
+
+
+
+
+
+
Integer microseconds in timestamps
+
+
+
+
Jaeger
Jaeger Thrift over UDP
+
+
+
Jaeger Protobuf via gRPC
-
-
-
Jaeger Thrift over HTTP
+
-
-
Service name mapping
+
+
+
Resource to Process mapping
-
+
-
InstrumentationLibrary mapping
+
+
-
Status mapping
+
+
Error Status mapping
+
-
Events converted to Logs
+
+
+
OpenCensus
TBD
Prometheus
TBD