Skip to content

Latest commit

 

History

History
299 lines (278 loc) · 51.1 KB

spec-compliance-matrix.md

File metadata and controls

299 lines (278 loc) · 51.1 KB

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.

For the Optional column, X means the feature is optional, blank means the feature is required, and columns marked with * mean that for each type of exporter (OTLP, Zipkin, and Jaeger), implementing at least one of the supported formats is required. Implementing more than one format is optional.

Traces

Feature Optional Go Java JS Python Ruby Erlang PHP Rust C++ .NET Swift
TracerProvider
Create TracerProvider + + + + + + + + + + +
Get a Tracer + + + + + + + + + + +
Get a Tracer with schema_url + +
Safe for concurrent calls + + + + + + + + + + +
Shutdown (SDK only required) + + + + + - + + + +
ForceFlush (SDK only required) + + - + + - + + + +
Trace / Context interaction
Get active Span N/A + + + + + + + + +
Set active Span N/A + + + + + + + + +
Tracer
Create a new Span + + + + + + + + + + +
Get active Span N/A + + + + + + + + + +
Mark Span active N/A + + + + + + + + + +
Safe for concurrent calls + + + + + + + + + + +
SpanContext
IsValid + + + + + + + + + + +
IsRemote + + + + + + + + + + +
Conforms to the W3C TraceContext spec + + + + + + + + + +
Span
Create root span + + + + + + + + + + +
Create with default parent (active span) N/A + + + + + + + + + +
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 X + - + + + + + + + + +
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
Links can be recorded on span creation + + + +
Links order is preserved + + + +
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 + + + + + + + - +
IdGenerators + + + + + + +
SpanLimits X + + + + - +
Built-in SpanProcessors implement ForceFlush spec + + + +
Attribute Limits X

Baggage

Feature Optional Go Java JS Python Ruby Erlang PHP Rust C++ .NET Swift
Basic support + + + + + + + + + +
Use official header name baggage + + + + + + + + + +

Metrics

Status: Experimental

Disclaimer: this list of features is still a work in progress, please refer to the specification if in any doubt.

Feature Optional Go Java JS Python Ruby Erlang PHP Rust C++ .NET Swift
The API provides a way to set and get a global default MeterProvider.
It is possible to create any number of MeterProviders.
MeterProvider provides a way to get a Meter.
get_meter accepts name, version and schema_url.
When an invalid name is specified a working Meter implementation is returned as a fallback.
The fallback Meter name property keeps its original invalid value.
New configuration applies to previously returned Meters.
The meter provides functions to create a new Counter.
The meter provides functions to create a new AsynchronousCounter.
The meter provides functions to create a new Histogram.
The meter provides functions to create a new AsynchronousGauge.
The meter provides functions to create a new UpDownCounter.
The meter provides functions to create a new AsynchronousUpDownCounter.
Instruments have name
Instruments have kind.
Instruments have an optional unit of measure.
Instruments have an optional description.
An error is returned when multiple instruments are registered under the same Meter using the same name.
It is possible to register two instruments with same name under different Meters.
Instrument names conform to the specified syntax.
Instrument units conform to the specified syntax.
Instrument descriptions conform to the specified syntax.
create_counter returns a Counter object.
The API for Counter accepts the name of the instrument.
The API for Counter accepts the unit of the instrument.
The API for Counter accepts the description of the instrument.
Counter has an add method.
The add method returns null (this can vary depending on the language).
The add method accepts optional attributes.
The add method accepts the increment amount.
The add method of Counter accepts only positive amounts.
create_asynchronous_counter returns an AsynchronousCounter object.
The API for AsynchronousCounter accepts the name of the instrument.
The API for AsynchronousCounter accepts the unit of the instrument.
The API for AsynchronousCounter accepts the description of the instrument.
The API for AsynchronousCounter accepts a callback.
AsynchronousCounter has an add method.
The add method does not return a value or returns a null value.
The add method accepts optional attributes.
The add method accepts the increment amount.
The add method accepts only positive amounts.
The callback function of an Asynchronous instrument does not block indefinitely.
The callback function reports Measurements.
There is a way to pass state to the callback.
All methods of MeterProvider are safe to be called concurrently.
All methods of Meter are safe to be called concurrently.
All methods of any instrument are safe to be called concurrently.
MeterProvider allows a Resource to be specified.
A specified Resource can be associated with all the produced metrics from any Meter from the MeterProvider.
The supplied name, version and schema_url arguments passed to the MeterProvider are used to create an InstrumentationLibrary instance stored in the Meter.
Configuration can be managed by the MeterProvider.
The MeterProvider provides methods to update the configuration
The updated configuration applies to all already returned Meters.
There is a way to register Views with a MeterProvider.
The View instrument selection criteria is as specified.
The name of the View can be specified.
The configuration for the metrics stream is as specified.
The specified logic is used to process Measurements made by an instrument.
The None aggregation is available.
The None aggregation drops all measurements.
The Default aggregation is available.
The Default aggregation uses the specified aggregation.
The Sum aggregation is available.
The Sum aggregation performs as specified.
The LastValue aggregation is available.
The LastValue aggregation performs as specified.
The Histogram aggregation is available.
The Histogram aggregation performs as specified.
The explicit bucket Histogram aggregation is available.
The explicit bucket Histogram aggregation performs as specified.
A MeasurementProcessor allows hooks when a Measurement is recorded by an instrument.
A MeasurementProcessor has access to The Measurement, Instrument and Resource.
If a Measurement is reported by a synchronous Instrument, Then a MeasurementProcessor has access to the Baggage, Context and Span associated with the Measurement.
The metrics exporter has access to the pre aggregated metrics data.
The metrics exporter export function can not be called concurrently from the same exporter instance.
The metrics exporter export function does not block indefinitely.
The metrics exporter export function receives a batch of metrics.
The metrics exporter export function returns Success or Failure.
The metrics exporter provides a ForceFlush function.
The metrics exporter ForceFlush can inform the caller wether it succeeded, failed or timed out.
The metrics exporter provides a shutdown function.
The metrics exporter shutdown function do not block indefinitely.

Resource

Feature Optional Go Java JS Python Ruby Erlang PHP Rust C++ .NET Swift
Create from Attributes + + + + + + + + + +
Create empty + + + + + + + + + +
Merge (v2) + + + + + + + +
Retrieve attributes + + + + + + + + + +
Default value for service.name + + + + + + +
Resource detector interface/mechanism + + + + + + - + + + +
Resource detectors populate Schema URL +

Context Propagation

Feature Optional Go Java JS Python Ruby Erlang PHP Rust C++ .NET Swift
Create Context Key + + + + + + + + + + +
Get value from Context + + + + + + + + + + +
Set value for Context + + + + + + + + + + +
Attach Context N/A + + + + + + + + - -
Detach Context N/A + + + + + + + + - -
Get current Context N/A + + + + + + + + + +
Composite Propagator + + + + + N/A + + + +
Global Propagator + + + + + + + + + +
TraceContext Propagator + + + + + + + + + +
B3 Propagator + + + + + + + + + +
Jaeger Propagator + + + + + + + + - -
TextMapPropagator +
Fields + + + + + + + + + +
Setter argument X N/A + + + + + N/A + + +
Getter argument X N/A + + + + + N/A + + +
Getter argument returning Keys X N/A + + + + + N/A + - +

Environment Variables

Note: Support for environment variables is optional.

Feature Go Java JS Python Ruby Erlang PHP Rust C++ .NET Swift
OTEL_RESOURCE_ATTRIBUTES + + + + + + - + + + -
OTEL_SERVICE_NAME +
OTEL_LOG_LEVEL - - + - + + - - - -
OTEL_PROPAGATORS - + + + + - - - - -
OTEL_BSP_* - + + + + - + - - -
OTEL_EXPORTER_OTLP_* + + + + - - + + - -
OTEL_EXPORTER_JAEGER_* + - - - + -
OTEL_EXPORTER_ZIPKIN_* - - - - - - -
OTEL_TRACES_EXPORTER - + + + + - -
OTEL_METRICS_EXPORTER - + + - - - - - -
OTEL_SPAN_ATTRIBUTE_COUNT_LIMIT - + + + - + -
OTEL_SPAN_ATTRIBUTE_VALUE_LENGTH_LIMIT
OTEL_SPAN_EVENT_COUNT_LIMIT - + + + - + -
OTEL_SPAN_LINK_COUNT_LIMIT - + + + - + -
OTEL_EVENT_ATTRIBUTE_COUNT_LIMIT
OTEL_LINK_ATTRIBUTE_COUNT_LIMIT
OTEL_TRACES_SAMPLER - + + + + - -
OTEL_TRACES_SAMPLER_ARG - + + + + - -
OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT
OTEL_ATTRIBUTE_COUNT_LIMIT

Exporters

Feature Optional Go Java JS Python Ruby Erlang PHP Rust C++ .NET Swift
Exporter interface + + + + +
Exporter interface has ForceFlush + - + -
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 X + + + + + - - - -
Concurrent sending - + + - - + - - -
Honors retryable responses with backoff X + + + + - - - -
Honors non-retryable responses X + - + + - - - -
Honors throttling response X + - + + - - - -
Multi-destination spec compliance X + - - - - -
SchemaURL in ResourceSpans and InstrumentationLibrarySpans +
SchemaURL in ResourceMetrics and InstrumentationLibraryMetrics
SchemaURL in ResourceLogs and InstrumentationLibraryLogs
Zipkin
Zipkin V1 JSON X - + + - - - - - - -
Zipkin V1 Thrift X - + - - - - - - - -
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 N/A + + + + + + +
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