Specificationv1.54.0
since v1.53.011 breaking34 notable45 editorial
From the upstream release notes
- Deprecate Jaeger propagator and make propagator implementation optional.
- Deprecate OT Trace propagator and make propagator implementation optional.
- Add normative language to the Metrics API/SDK spec concurrency requirements.
- Add optional Exception parameter to Emit LogRecord.
- Add normative language to the Logging API/SDK spec concurrency requirements.
- Refine the handling of OTEL_RESOURCE_ATTRIBUTES.
- Add string representation guidance for complex attribute value types (byte arrays,
- Stabilize Prometheus Counter to OTLP Sum transformation.
- Stabilize Prometheus Gauge to OTLP Gauge transformation.
- Swap Tracer/Meter/LoggerConfig disabled for enabled to avoid double negatives
Breaking11
Requirements added to, removed from, or restrengthened in a document marked Stable.
- new rulerequirementlogs/api.md#concurrency-requirementsMUST added: LoggerProvider - all methods MUST be documented that implementations need to be safe for concurrent use by default.
- new rulerequirementlogs/api.md#concurrency-requirementsMUST added: Logger - all methods MUST be documented that implementations need to be safe for concurrent use by default.
- new rulerequirementlogs/sdk.md#concurrency-requirementsMUST added: LoggerProvider - Logger creation,
ForceFlushandShutdownMUST be safe to be called concurrently. - new rulerequirementlogs/sdk.md#concurrency-requirementsMUST added: Logger - all methods MUST be safe to be called concurrently.
- new rulerequirementlogs/sdk.md#concurrency-requirementsMUST added: LogRecordExporter -
ForceFlushandShutdownMUST be safe to be called concurrently. - new rulerequirementlogs/sdk.md#emit-a-logrecordMUST added: Status: Development - If an Exception is provided, the SDK MUST by default set attributes from the exception on the
LogRecordwith the conventions outlined in the exception semantic conventions. - new rulerequirementlogs/sdk.md#emit-a-logrecordMUST NOT added: User-provided attributes MUST take precedence and MUST NOT be overwritten by exception-derived attributes.
- new rulerequirementmetrics/api.md#concurrency-requirementsMUST added: MeterProvider - all methods MUST be documented that implementations need to be safe for concurrent use by default.
- new rulerequirementmetrics/api.md#concurrency-requirementsMUST added: Meter - all methods MUST be documented that implementations need to be safe for concurrent use by default.
- new rulerequirementmetrics/api.md#concurrency-requirementsMUST added: Instrument - all methods MUST be documented that implementations need to be safe for concurrent use by default.
- new rulerequirementresource/sdk.md#specifying-resource-information-via-an-environment-variableMUST added: The
,and=characters in keys and values MUST be percent encoded.
Notable34
- rule droppedrequirementconfiguration/sdk.md#componentsprovider-operationsMUST removed: The
ComponentsProviderMUST provide the following functions: - rule droppedrequirementconfiguration/sdk.md#register-componentproviderMUST removed: The SDK MUST provide a mechanism to register
ComponentProvider. - strengthrequirementconfiguration/api.md#get-instrumentation-configMUST relaxed to SHOULD: If the
.instrumentationnode is not set, get instrumentation config SHOULD return an emptyConfigProperties(as if.instrumentation: {}was set). - stabilitydocumentcompatibility/prometheus_and_openmetrics.mdStatus changed from Development to Mixed.
- new rulerequirementcommon/README.md#anyvalue-representation-for-non-otlp-protocolsSHOULD added: For protocols that do not natively support some of the AnyValue types, those values SHOULD be represented as strings following the encoding rules below.
- new rulerequirementcommon/README.md#arraysSHOULD added: Arrays, except for byte arrays, SHOULD be represented as JSON arrays.
- new rulerequirementcommon/README.md#arraysSHOULD added: Nested byte arrays SHOULD be represented as Base64-encoded JSON strings.
- new rulerequirementcommon/README.md#arraysSHOULD added: Nested empty values SHOULD be represented as JSON null.
- new rulerequirementcommon/README.md#arraysSHOULD added: The special floating point values NaN and Infinity SHOULD be represented as JSON strings
"NaN","Infinity", and"-Infinity". - new rulerequirementcommon/README.md#booleansSHOULD added: Booleans SHOULD be represented as JSON booleans.
- new rulerequirementcommon/README.md#byte-arraysSHOULD added: Byte arrays SHOULD be Base64-encoded.
- new rulerequirementcommon/README.md#byte-arraysSHOULD NOT added: They SHOULD NOT be encoded as JSON strings (with explicit surrounding quotes).
- new rulerequirementcommon/README.md#empty-valuesSHOULD added: Empty values SHOULD be represented as the empty string.
- new rulerequirementcommon/README.md#empty-valuesSHOULD NOT added: They SHOULD NOT be encoded as a JSON string (with explicit surrounding quotes).
- new rulerequirementcommon/README.md#floating-point-numbersSHOULD added: Floating point numbers SHOULD be represented as JSON numbers.
- new rulerequirementcommon/README.md#floating-point-numbersSHOULD added: The special floating point values NaN and Infinity SHOULD be represented as
NaN,Infinity, and-Infinity. - new rulerequirementcommon/README.md#floating-point-numbersSHOULD NOT added: They SHOULD NOT be encoded as JSON strings (with explicit surrounding quotes).
- new rulerequirementcommon/README.md#integersSHOULD added: Integers SHOULD be represented as JSON numbers.
- new rulerequirementcommon/README.md#mapsSHOULD added: Maps SHOULD be represented as JSON objects.
- new rulerequirementcommon/README.md#mapsSHOULD added: Nested byte arrays SHOULD be represented as Base64-encoded JSON strings.
- new rulerequirementcommon/README.md#mapsSHOULD added: Nested empty values SHOULD be represented as JSON null.
- new rulerequirementcommon/README.md#mapsSHOULD added: The special floating point values NaN and Infinity SHOULD be represented as JSON strings
"NaN","Infinity", and"-Infinity". - new rulerequirementcommon/README.md#stringsSHOULD added: Strings SHOULD be represented as-is without any additional encoding.
- new rulerequirementcommon/README.md#stringsSHOULD NOT added: They SHOULD NOT be encoded as JSON strings (with explicit surrounding quotes).
- new rulerequirementconfiguration/sdk.md#plugincomponentprovider-operationsMUST added: The
PluginComponentProviderMUST provide the following functions: - new rulerequirementconfiguration/sdk.md#register-plugincomponentproviderMUST added: The SDK MUST provide a mechanism to register
PluginComponentProvider. - new rulerequirementlogs/api.md#emit-a-logrecordMAY added: Status: Development - The API MAY accept the following parameter:
- new rulerequirementlogs/sdk.md#emit-a-logrecordMAY added: Note: For performance optimization, SDKs MAY take the configured attribute limits into consideration when generating large exception attributes (e.g.,
exception.stacktrace). - new rulerequirementmetrics/sdk.md#concurrency-requirementsMUST added: MeterProvider - Meter creation,
ForceFlushandShutdownMUST be safe to be called concurrently. - new rulerequirementmetrics/sdk.md#concurrency-requirementsMUST added: ExemplarReservoir - all methods MUST be safe to be called concurrently.
- new rulerequirementmetrics/sdk.md#concurrency-requirementsMUST added: MetricReader -
Collect,ForceFlush(for periodic exporting MetricReader) andShutdownMUST be safe to be called concurrently. - new rulerequirementmetrics/sdk.md#concurrency-requirementsMUST added: MetricExporter -
ForceFlushandShutdownMUST be safe to be called concurrently. - new rulerequirementresource/sdk.md#specifying-resource-information-via-an-environment-variableMAY added: Other characters MAY be percent-encoded, e.g. values outside the ANSI characters set.
- new rulerequirementresource/sdk.md#specifying-resource-information-via-an-environment-variableSHOULD added: In case of any error, e.g. failure during the decoding process, the entire environment variable value SHOULD be discarded and an error SHOULD be reported following the Error Handling principles.
Editorial45
- removedsectionconfiguration/sdk.md#componentproviderSection "ComponentProvider" removed.
- removedsectionconfiguration/sdk.md#componentsprovider-operationsSection "ComponentsProvider operations" removed.
- removedsectionconfiguration/sdk.md#create-pluginSection "Create Plugin" removed.
- removedsectionconfiguration/sdk.md#register-componentproviderSection "Register ComponentProvider" removed.
- removedsectionconfiguration/sdk.md#supported-sdk-extension-pluginsSection "Supported SDK extension plugins" removed.
- rule droppedrequirementcommon/README.md#anyvalueSHOULD removed: For protocols that do not natively support some of the value types, corresponding values SHOULD be represented as JSON-encoded strings.
- rule droppedrequirementconfiguration/sdk.md#supported-sdk-extension-pluginsSHOULD removed: The configuration data model SHOULD support configuration of all SDK extension plugin interfaces.
- rule droppedrequirementconfiguration/sdk.md#supported-sdk-extension-pluginsSHOULD removed: SDKs SHOULD support registration of custom implementations of SDK extension plugin interfaces via the
ComponentProvidermechanism. - new rulerequirementconfiguration/sdk.md#sdk-extension-componentsSHOULD added: The configuration data model SHOULD define specific types for built-in implementations of these plugin components.
- rewordedrequirementcompatibility/opencensus.md#opencensus-binary-context-propagationMUST reworded: This adapter MUST provide an implementation of OpenCensus
BinaryPropagatorto write OpenCensus binary format using OpenTelemetry's context. - rewordedrequirementcompatibility/opentracing.md#start-a-new-spanMUST reworded: If no such list of references is specified, the current
BaggageMUST be used as the initial value of the newly createdSpan. - rewordedrequirementconfiguration/sdk.md#createMUST reworded: When encountering a reference to an SDK plugin component which is not built in to the SDK, Create MUST resolve the component using Create Component of the
PluginComponentProviderof the correspondi... - rewordedrequirementconfiguration/sdk.md#createSHOULD reworded: If no
PluginComponentProvideris registered with thetypeandname, Create SHOULD return an error. - rewordedrequirementconfiguration/sdk.md#createSHOULD reworded: If Create Component returns an error, Create SHOULD propagate the error.
- rewordedrequirementconfiguration/sdk.md#parseMUST reworded: When encountering a reference to a SDK extension component which is not built in to the SDK, Parse MUST resolve corresponding configuration to a generic ConfigProperties representation as described i...
- rewordedrequirementconfiguration/sdk.md#sdk-extension-componentsSHOULD reworded: The schema SHOULD support the ability to specify custom implementations of plugin components defined by libraries or users.
- rewordedrequirementlogs/sdk.md#loggerconfigSHOULD reworded: If not explicitly set, the
enabledparameter SHOULD default totrue( i.e.Loggers are enabled by default). - rewordedrequirementmetrics/sdk.md#meterconfigSHOULD reworded: If not explicitly set, the
enabledparameter SHOULD default totrue( i.e.Meters are enabled by default). - rewordedrequirementmetrics/sdk.md#meterconfigMUST reworded: The value of
enabledMUST be used to resolve whether an instrument is Enabled. - rewordedrequirementresource/sdk.md#specifying-resource-information-via-an-environment-variableMUST reworded: All attribute values MUST be considered strings.
- rewordedrequirementtrace/sdk.md#tracerconfigSHOULD reworded: If not explicitly set, the
enabledparameter SHOULD default totrue( i.e.Tracers are enabled by default). - rewordedrequirementtrace/sdk.md#tracerconfigMUST reworded: The value of
enabledMUST be used to resolve whether aTraceris Enabled. - movedrequirementconfiguration/sdk.md#create-componentMAY moved here from "create-plugin": The plugin component MAY have properties which are optional or required, and have specific requirements around type or format.
- movedrequirementconfiguration/sdk.md#create-componentSHOULD moved here from "create-plugin": A
PluginComponentProviderSHOULD document its configuration schema and include examples. - movedrequirementconfiguration/sdk.md#create-componentSHOULD moved here from "create-plugin": If this fails (e.g. a required property is not present, a type is mismatches, etc.), Create Component SHOULD return an error.
- movedrequirementconfiguration/sdk.md#plugincomponentproviderMAY moved here from "componentprovider": This MAY be done automatically or require manual intervention by the user based on what is possible and idiomatic in the language ecosystem.
- movedrequirementconfiguration/sdk.md#register-plugincomponentproviderMAY moved here from "register-componentprovider": The mechanism MAY be language-specific and automatic.
- movedrequirementconfiguration/sdk.md#register-plugincomponentproviderMUST moved here from "register-componentprovider": Register MUST return an error if it is called multiple times with the same
typeandnamecombination. - movedrequirementconfiguration/sdk.md#register-plugincomponentproviderSHOULD moved here from "register-componentprovider": SDKs SHOULD represent
typein a manner that is idiomatic for their language. - addedsectioncommon/README.md#anyvalue-representation-for-non-otlp-protocolsNew section "AnyValue representation for non-OTLP protocols".
- addedsectioncommon/README.md#arraysNew section "Arrays".
- addedsectioncommon/README.md#booleansNew section "Booleans".
- addedsectioncommon/README.md#byte-arraysNew section "Byte Arrays".
- addedsectioncommon/README.md#empty-valuesNew section "Empty Values".
- addedsectioncommon/README.md#floating-point-numbersNew section "Floating Point Numbers".
- addedsectioncommon/README.md#integersNew section "Integers".
- addedsectioncommon/README.md#mapsNew section "Maps".
- addedsectioncommon/README.md#stringsNew section "Strings".
- addedsectionconfiguration/sdk.md#create-componentNew section "Create Component".
- addedsectionconfiguration/sdk.md#plugincomponentproviderNew section "PluginComponentProvider".
- addedsectionconfiguration/sdk.md#plugincomponentprovider-operationsNew section "PluginComponentProvider operations".
- addedsectionconfiguration/sdk.md#register-plugincomponentproviderNew section "Register PluginComponentProvider".
- addedsectionconfiguration/sdk.md#supported-sdk-plugin-componentsNew section "Supported SDK plugin components".
- addedsectionlogs/sdk.md#concurrency-requirementsNew section "Concurrency requirements".
- rewrittensectionlogs/sdk.md#emit-a-logrecord"Emit a LogRecord" substantially rewritten (843 to 1606 characters).