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 and Zipkin), implementing at least one of the supported
formats is required. Implementing more than one format is optional.
Feature | Optional | Go | Java | JS | Python | Ruby | Erlang | PHP | Rust | C++ | .NET | Swift |
---|---|---|---|---|---|---|---|---|---|---|---|---|
TracerProvider | Optional | Go | Java | JS | Python | Ruby | Erlang | PHP | Rust | C++ | .NET | Swift |
Create TracerProvider | + | + | + | + | + | + | + | + | + | + | + | |
Get a Tracer | + | + | + | + | + | + | + | + | + | + | + | |
Get a Tracer with schema_url | + | + | + | + | + | |||||||
Get a Tracer with scope attributes | + | + | + | |||||||||
Associate Tracer with InstrumentationScope | + | + | ||||||||||
Safe for concurrent calls | + | + | + | + | + | + | + | + | + | + | + | |
Shutdown (SDK only required) | + | + | + | + | + | + | + | + | + | + | + | |
ForceFlush (SDK only required) | + | + | - | + | + | + | + | + | + | + | + | |
Trace / Context interaction | Optional | Go | Java | JS | Python | Ruby | Erlang | PHP | Rust | C++ | .NET | Swift |
Get active Span | N/A | + | + | + | + | + | + | + | + | + | + | |
Set active Span | N/A | + | + | + | + | + | + | + | + | + | + | |
Tracer | Optional | Go | Java | JS | Python | Ruby | Erlang | PHP | Rust | C++ | .NET | Swift |
Create a new Span | + | + | + | + | + | + | + | + | + | + | + | |
Documentation defines adding attributes at span creation as preferred | + | + | + | + | ||||||||
Get active Span | N/A | + | + | + | + | + | + | + | + | + | + | |
Mark Span active | N/A | + | + | + | + | + | + | + | + | + | + | |
Safe for concurrent calls | + | + | + | + | + | + | + | + | + | + | + | |
SpanContext | Optional | Go | Java | JS | Python | Ruby | Erlang | PHP | Rust | C++ | .NET | Swift |
IsValid | + | + | + | + | + | + | + | + | + | + | + | |
IsRemote | + | + | + | + | + | + | + | + | + | + | + | |
Conforms to the W3C TraceContext spec | + | + | + | + | + | + | + | + | + | + | + | |
Span | Optional | Go | Java | JS | Python | Ruby | Erlang | PHP | Rust | C++ | .NET | Swift |
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 | + | + | + | + | + | + | + | + | - | - | + | |
SpanProcessor.OnEnding | X | - | - | - | - | - | - | - | - | - | - | - |
Span attributes | Optional | Go | Java | JS | Python | Ruby | Erlang | PHP | Rust | C++ | .NET | Swift |
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 | Optional | Go | Java | JS | Python | Ruby | Erlang | PHP | Rust | C++ | .NET | Swift |
Links can be recorded on span creation | + | + | + | + | + | + | + | + | + | |||
Links can be recorded after span creation | + | + | + | + | ||||||||
Links order is preserved | + | + | + | + | + | + | + | + | + | |||
Span events | Optional | Go | Java | JS | Python | Ruby | Erlang | PHP | Rust | C++ | .NET | Swift |
AddEvent | + | + | + | + | + | + | + | + | + | + | + | |
Add order preserved | + | + | + | + | + | + | + | + | + | + | + | |
Safe for concurrent calls | + | + | + | + | + | + | + | + | + | + | + | |
Span exceptions | Optional | Go | Java | JS | Python | Ruby | Erlang | PHP | Rust | C++ | .NET | Swift |
RecordException | - | + | + | + | + | + | + | + | - | + | - | |
RecordException with extra parameters | - | + | + | + | + | + | + | + | - | + | - | |
Sampling | Optional | Go | Java | JS | Python | Ruby | Erlang | PHP | Rust | C++ | .NET | Swift |
Allow samplers to modify tracestate | + | + | + | + | + | + | + | + | + | + | ||
ShouldSample gets full parent Context | + | + | + | + | + | + | + | + | + | - | + | |
Sampler: JaegerRemoteSampler | + | + | + | |||||||||
New Span ID created also for non-recording Spans | + | + | + | + | + | + | + | + | - | + | ||
IdGenerators | + | + | + | + | + | + | + | + | + | |||
SpanLimits | X | + | + | + | + | + | + | - | + | |||
Built-in SpanProcessor s implement ForceFlush spec |
+ | + | + | + | + | + | + | + | ||||
Attribute Limits | X | + | + | + | + | + | ||||||
Fetch InstrumentationScope from ReadableSpan | + | + | + |
Feature | Optional | Go | Java | JS | Python | Ruby | Erlang | PHP | Rust | C++ | .NET | Swift |
---|---|---|---|---|---|---|---|---|---|---|---|---|
Basic support | + | + | + | + | + | + | + | + | + | + | + | |
Use official header name baggage |
+ | + | + | + | + | + | + | + | + | + | + |
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 . |
X | + | + | + | + | + | + | + | + | - | ||
It is possible to create any number of MeterProvider s. |
X | + | + | + | + | + | + | + | + | + | ||
MeterProvider provides a way to get a Meter . |
+ | + | + | + | + | + | + | + | - | |||
get_meter accepts name, version and schema_url . |
+ | + | + | + | + | + | + | + | - | |||
get_meter accepts attributes . |
+ | + | + | + | ||||||||
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. |
X | - | - | + | + | + | + | - | - | |||
Associate Meter with InstrumentationScope . |
+ | + | + | + | + | + | ||||||
Counter instrument is supported. |
+ | + | + | + | + | + | + | + | + | |||
AsynchronousCounter instrument is supported. |
+ | + | + | + | + | + | + | + | + | |||
Histogram instrument is supported. |
+ | + | + | + | + | + | + | + | + | |||
AsynchronousGauge instrument is supported. |
+ | + | + | + | + | + | + | + | + | |||
Gauge instrument is supported. |
- | - | - | + | - | - | + | - | - | |||
UpDownCounter instrument is supported. |
+ | + | + | + | + | + | + | + | + | |||
AsynchronousUpDownCounter instrument is supported. |
+ | + | + | + | + | + | + | + | + | |||
Instruments have name |
+ | + | + | + | + | + | + | + | + | |||
Instruments have kind. | + | + | + | + | + | + | + | + | + | |||
Instruments have an optional unit of measure. | + | + | + | + | + | + | + | + | + | |||
Instruments have an optional description. | + | + | + | + | + | + | + | + | + | |||
A valid instrument MUST be created and warning SHOULD be emitted when multiple instruments are registered under the same Meter using the same name . |
+ | + | + | + | ||||||||
Duplicate instrument registration name conflicts are resolved by using the first-seen for the stream name. | + | + | ||||||||||
It is possible to register two instruments with same name under different Meter s. |
+ | + | + | + | + | + | + | + | ||||
Instrument names conform to the specified syntax. | + | + | + | + | + | + | ||||||
Instrument units conform to the specified syntax. | - | + | + | - | + | + | + | |||||
Instrument descriptions conform to the specified syntax. | - | + | - | - | - | + | ||||||
Instrument supports the advisory ExplicitBucketBoundaries parameter. | + | + | ||||||||||
Instrument supports the advisory Attributes parameter. | + | - | ||||||||||
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 . |
+ | - | + | + | + | - | ||||||
The supplied name , version and schema_url arguments passed to the MeterProvider are used to create an InstrumentationScope instance stored in the Meter . |
+ | + | + | + | + | + | + | |||||
Configuration is managed solely by the MeterProvider . |
+ | + | + | + | + | + | + | + | + | |||
The MeterProvider provides methods to update the configuration |
X | - | - | - | + | - | - | + | ||||
The updated configuration applies to all already returned Meter s. |
if above | - | - | - | - | - | - | + | ||||
There is a way to register View s with a MeterProvider . |
- | + | + | + | + | + | + | + | + | |||
The View instrument selection criteria is as specified. |
+ | + | + | + | + | + | + | + | ||||
The View instrument selection criteria supports wildcards. |
X | + | + | + | - | + | + | + | ||||
The View instrument selection criteria supports the match-all wildcard. |
+ | + | + | + | + | + | + | |||||
The name of the View can be specified. |
+ | + | + | + | + | + | + | |||||
The View allows configuring the name, description, attributes keys and aggregation of the resulting metric stream. |
+ | + | + | + | + | + | + | - | ||||
The View allows configuring excluded attribute keys of resulting metric stream. |
+ | |||||||||||
The View allows configuring the exemplar reservoir of resulting metric stream. |
X | - | - | - | - | |||||||
The SDK allows more than one View to be specified per instrument. |
X | + | + | + | + | + | + | + | ||||
The Drop aggregation is available. |
+ | + | + | + | + | + | + | + | ||||
The Default aggregation is available. |
+ | + | + | + | + | + | + | + | ||||
The Default aggregation uses the specified aggregation by instrument. |
+ | + | + | + | + | + | + | + | ||||
The Sum aggregation is available. |
+ | + | + | + | + | + | + | + | + | |||
The LastValue aggregation is available. |
+ | + | + | + | + | + | + | + | + | |||
The ExplicitBucketHistogram aggregation is available. |
- | + | + | + | + | + | + | + | + | |||
The ExponentialBucketHistogram aggregation is available. |
+ | + | ||||||||||
The metrics Reader implementation supports registering metric Exporters | + | + | + | + | + | + | + | + | ||||
The metrics Reader implementation supports configuring the default aggregation on the basis of instrument kind. | + | + | + | - | - | |||||||
The metrics Reader implementation supports configuring the default temporality on the basis of instrument kind. | + | + | + | + | + | + | ||||||
The metrics Exporter has access to the aggregated metrics data (aggregated points, not raw measurements). | + | + | + | + | + | + | + | + | ||||
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 whether it succeeded, failed or timed out. |
+ | + | + | + | + | + | + | |||||
The metrics Exporter provides a shutdown function. |
+ | + | + | + | + | + | + | + | + | |||
The metrics Exporter shutdown function do not block indefinitely. |
+ | + | + | - | + | + | + | |||||
The metrics SDK samples Exemplar s from measurements. |
+ | - | + | + | ||||||||
Exemplar sampling can be disabled. | - | - | + | + | ||||||||
The metrics SDK supports SDK-wide exemplar filter configuration | + | - | + | + | ||||||||
The metrics SDK supports TraceBased exemplar filter |
+ | - | + | + | ||||||||
The metrics SDK supports AlwaysOn exemplar filter |
+ | - | + | + | ||||||||
The metrics SDK supports AlwaysOff exemplar filter |
+ | - | + | + | ||||||||
Exemplars retain any attributes available in the measurement that are not preserved by aggregation or view configuration. | + | - | + | + | ||||||||
Exemplars contain the associated trace id and span id of the active span in the Context when the measurement was taken. | + | - | + | + | ||||||||
Exemplars contain the timestamp when the measurement was taken. | + | - | + | + | ||||||||
The metrics SDK provides an ExemplarReservoir interface or extension point. |
- | - | + | + | - | |||||||
An ExemplarReservoir has an offer method with access to the measurement value, attributes, Context and timestamp. |
- | - | + | + | - | |||||||
The metrics SDK provides a SimpleFixedSizeExemplarReservoir that is used by default for all aggregations except ExplicitBucketHistogram . |
+ | - | + | + | - | |||||||
The metrics SDK provides an AlignedHistogramBucketExemplarReservoir that is used by default for ExplicitBucketHistogram aggregation. |
+ | - | + | - | ||||||||
A metric Producer accepts an optional metric Filter | - | |||||||||||
The metric Reader implementation supports registering metric Filter and passing them its registered metric Producers | - | |||||||||||
The metric SDK's metric Producer implementations uses the metric Filter | - |
Features for the Logging SDK. 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 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
LoggerProvider.Get Logger | + | + | + | + | - | |||||||
LoggerProvider.Get Logger accepts attributes | + | + | + | |||||||||
LoggerProvider.Shutdown | + | + | + | + | - | |||||||
LoggerProvider.ForceFlush | + | + | + | + | - | |||||||
Logger.Emit(LogRecord) | + | + | + | + | - | |||||||
Logger.Enabled | X | + | + | + | ||||||||
SimpleLogRecordProcessor | + | + | + | + | ||||||||
BatchLogRecordProcessor | + | + | + | + | ||||||||
Can plug custom LogRecordProcessor | + | + | + | + | ||||||||
OTLP/gRPC exporter | + | + | + | + | + | |||||||
OTLP/HTTP exporter | + | + | + | + | + | |||||||
OTLP File exporter | - | - | + | - | ||||||||
Can plug custom LogRecordExporter | + | + | + | + | ||||||||
Trace Context Injection | + | + | + | + | + |
Features for the Events API and the Events SDK. Disclaimer: Events are currently in Development status - work in progress.
Feature | Optional | Go | Java | JS | Python | Ruby | Erlang | PHP | Rust | C++ | .NET | Swift |
---|---|---|---|---|---|---|---|---|---|---|---|---|
EventLoggerProvider | Optional | Go | Java | JS | Python | Ruby | Erlang | PHP | Rust | C++ | .NET | Swift |
Get EventLogger | ||||||||||||
Get EventLogger accepts version | X | |||||||||||
Get EventLogger accepts schema_url | X | |||||||||||
Get EventLogger accepts attributes | X | |||||||||||
EventLogger | Optional | Go | Java | JS | Python | Ruby | Erlang | PHP | Rust | C++ | .NET | Swift |
Emit event accepts name | ||||||||||||
Emit event accepts AnyValue body | X | |||||||||||
Emit event accepts severity | X | |||||||||||
Emit event accepts timestamp | X | |||||||||||
Emit event accepts attributes | X | |||||||||||
Emit event accepts context | X |
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 | + | + | - | + | - |
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 | + | + | + | + | + | + | + | + | + | + | + | |
Global Propagator | + | + | + | + | + | + | + | + | + | + | + | |
TraceContext Propagator | + | + | + | + | + | + | + | + | + | + | + | |
B3 Propagator | + | + | + | + | + | + | + | + | + | + | + | |
Jaeger Propagator | + | + | + | + | + | + | + | + | + | - | + | |
OT Propagator | + | + | + | + | ||||||||
OpenCensus Binary 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 | + | - | + |
Note: Support for environment variables is optional.
Feature | Go | Java | JS | Python | Ruby | Erlang | PHP | Rust | C++ | .NET | Swift |
---|---|---|---|---|---|---|---|---|---|---|---|
OTEL_SDK_DISABLED | - | + | - | + | - | - | + | - | - | - | - |
OTEL_RESOURCE_ATTRIBUTES | + | + | + | + | + | + | + | + | + | + | - |
OTEL_SERVICE_NAME | + | + | + | + | + | + | + | + | + | ||
OTEL_LOG_LEVEL | - | - | + | - | + | - | + | - | - | - | |
OTEL_PROPAGATORS | - | + | + | + | + | + | - | - | - | - | |
OTEL_BSP_* | + | + | + | + | + | + | + | + | - | + | - |
OTEL_BLRP_* | + | + | - | + | |||||||
OTEL_EXPORTER_OTLP_* | + | + | + | + | + | + | + | + | + | - | |
OTEL_EXPORTER_ZIPKIN_* | - | + | + | + | - | + | - | - | + | - | |
OTEL_TRACES_EXPORTER | - | + | + | + | + | + | + | - | - | - | |
OTEL_METRICS_EXPORTER | - | + | + | - | - | + | - | - | - | - | |
OTEL_LOGS_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_LOGRECORD_ATTRIBUTE_COUNT_LIMIT | + | - | |||||||||
OTEL_LOGRECORD_ATTRIBUTE_VALUE_LENGTH_LIMIT | + | - | |||||||||
OTEL_TRACES_SAMPLER | + | + | + | + | + | + | + | - | - | - | |
OTEL_TRACES_SAMPLER_ARG | + | + | + | + | + | + | + | - | - | - | |
OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT | + | + | + | + | + | - | + | - | + | ||
OTEL_ATTRIBUTE_COUNT_LIMIT | + | + | + | + | + | - | + | - | + | ||
OTEL_METRIC_EXPORT_INTERVAL | - | + | + | + | - | + | |||||
OTEL_METRIC_EXPORT_TIMEOUT | - | - | + | + | - | + | |||||
OTEL_METRICS_EXEMPLAR_FILTER | - | + | + | - | + | ||||||
OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE | + | + | + | + | + | - | + | ||||
OTEL_EXPORTER_OTLP_METRICS_DEFAULT_HISTOGRAM_AGGREGATION | + | + | - | ||||||||
OTEL_EXPERIMENTAL_CONFIG_FILE | - |
See declarative configuration for details. Disclaimer: Declarative configuration is currently in Development status - work in progress.
Feature | Go | Java | JS | Python | Ruby | Erlang | PHP | Rust | C++ | .NET | Swift |
---|---|---|---|---|---|---|---|---|---|---|---|
Parse a configuration file |
|||||||||||
The Parse operation accepts the configuration YAML file format |
|||||||||||
The Parse operation performs environment variable substitution |
|||||||||||
The Parse operation returns configuration model |
|||||||||||
The Parse operation resolves extension component configuration to properties |
|||||||||||
Create SDK components |
|||||||||||
The Create operation accepts configuration model |
|||||||||||
The Create operation returns TracerProvider |
|||||||||||
The Create operation returns MeterProvider |
|||||||||||
The Create operation returns LoggerProvider |
|||||||||||
The Create operation returns Propagators |
|||||||||||
The Create operation calls CreatePlugin of corresponding ComponentProvider when encountering extension components |
|||||||||||
Register a ComponentProvider |
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 | Optional | Go | Java | JS | Python | Ruby | Erlang | PHP | Rust | C++ | .NET | Swift |
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 ScopeSpans | + | + | + | + | + | - | ||||||
SchemaURL in ResourceMetrics and ScopeMetrics | + | + | - | + | - | |||||||
SchemaURL in ResourceLogs and ScopeLogs | + | + | - | + | - | |||||||
Honors the user agent spec | + | + | ||||||||||
Partial Success messages are handled and logged for OTLP/gRPC | X | + | + | |||||||||
Partial Success messages are handled and logged for OTLP/HTTP | X | + | + | |||||||||
Metric Exporter configurable temporality preference | + | + | ||||||||||
Metric Exporter configurable default aggregation | + | + | ||||||||||
Zipkin | Optional | Go | Java | JS | Python | Ruby | Erlang | PHP | Rust | C++ | .NET | Swift |
Zipkin V1 JSON | X | - | + | + | - | - | - | - | - | - | - | |
Zipkin V1 Thrift | X | - | + | - | - | - | - | - | - | - | - | |
Zipkin V2 JSON | * | + | + | + | + | - | + | + | + | + | + | |
Zipkin V2 Protobuf | * | - | + | + | - | + | - | - | - | - | - | |
Service name mapping | + | + | + | + | + | + | + | + | + | + | + | |
SpanKind mapping | + | + | + | + | + | + | + | + | + | + | + | |
InstrumentationLibrary mapping | + | + | - | + | + | - | + | + | + | + | + | |
InstrumentationScope mapping | + | |||||||||||
Boolean attributes | + | + | + | + | + | + | + | + | + | + | + | |
Array attributes | + | + | + | + | + | + | + | + | + | + | + | |
Status mapping | + | + | + | + | + | + | + | + | + | + | + | |
Error Status mapping | + | + | + | + | - | + | + | + | + | - | ||
Event attributes mapping to Annotations | + | + | + | + | + | + | + | + | + | + | + | |
Integer microseconds in timestamps | N/A | + | + | + | - | + | + | + | + | + | ||
Prometheus | Optional | Go | Java | JS | Python | Ruby | Erlang | PHP | Rust | C++ | .NET | Swift |
Metadata Deduplication | + | + | - | - | - | - | - | + | - | - | - | |
Name Sanitization | + | + | + | + | - | - | - | + | + | + | + | |
UNIT Metadata | X | - | - | + | + | - | - | - | - | - | + | - |
Unit Suffixes | X | + | + | - | + | - | - | - | + | + | + | - |
Unit Full Words | X | + | + | - | - | - | - | - | + | - | - | - |
HELP Metadata | + | + | + | + | - | - | - | + | + | + | + | |
TYPE Metadata | + | + | + | + | - | - | - | + | + | + | + | |
otel_scope_name and otel_scope_version labels on all Metrics | + | + | - | - | - | - | - | + | - | - | - | |
otel_scope_info metric | X | + | + | - | - | - | - | - | + | - | - | - |
otel_scope_info and labels can be disabled | X | + | - | - | - | - | - | - | + | - | - | - |
Gauges become Prometheus Gauges | + | + | + | + | - | - | - | + | + | + | - | |
Cumulative Monotonic Sums become Prometheus Counters | + | + | + | + | - | - | - | + | + | + | + | |
Prometheus Counters have _total suffix by default | + | + | + | + | - | - | - | + | - | - | - | |
Prometheus Counters _total suffixing can be disabled | X | + | - | - | - | - | - | - | - | - | - | - |
Cumulative Non-Monotonic Sums become Prometheus Gauges | + | + | + | + | - | - | - | + | + | + | - | |
Delta Non-Monotonic Sums become Cumulative Prometheus Counters | X | - | - | - | - | - | - | - | - | - | - | - |
Cumulative Histograms become Prometheus Histograms | + | + | + | + | - | - | - | + | + | + | + | |
Delta Histograms become Cumulative Prometheus Histograms | X | - | - | - | - | - | - | - | - | - | - | - |
Attributes Keys are Sanitized | + | + | + | + | - | - | - | + | + | + | + | |
Colliding sanitized attribute keys are merged | + | + | - | - | - | - | - | + | - | - | - | |
Exemplars for Histograms and Monotonic sums | X | - | - | - | - | - | - | - | - | - | - | - |
target_info metric from Resource |
X | + | + | + | + | - | - | - | + | - | - | - |
Languages not covered by the OpenCensus project, or that did not reach Alpha, are not listed here.
Feature | Go | Java | JS | Python | C++ | .NET | Erlang |
---|---|---|---|---|---|---|---|
Trace Bridge | + | + | + | + | - | - | - |
Metric Bridge | + | + | - | - | - | - | - |
Languages not covered by the OpenTracing project do not need to be listed here, e.g. Erlang.
Feature | Go | Java | JS | Python | Ruby | PHP | Rust | C++ | .NET | Swift |
---|---|---|---|---|---|---|---|---|---|---|
Create OpenTracing Shim | + | |||||||||
Tracer | + | |||||||||
Span | + | |||||||||
SpanContext | + | |||||||||
ScopeManager | + | |||||||||
Error mapping for attributes/events | + | |||||||||
Migration to OpenTelemetry guide |