- Add
reservemethod toopentelemetry::propagation::Injectorto hint at the number of elements that will be added to avoid multiple resize operations of the underlying data structure. Has an empty default implementation. - Breaking Removed the following public fields and methods from the
SpanBuilder#3227:trace_id,span_id,end_time,status,sampling_resultwith_trace_id,with_span_id,with_end_time,with_status,with_sampling_result
- Added
#[must_use]attribute toopentelemetry::metrics::AsyncInstrumentBuilderto add compile time warning when.build()is not called on observable instrument builders, preventing silent failures where callbacks are never registered and metrics are never reported. - Breaking Moved the following SDK sampling types from
opentelemetry::tracetoopentelemetry_sdk::trace#3277:SamplingDecision,SamplingResult- These types are SDK implementation details and should be imported from
opentelemetry_sdk::traceinstead.
- "spec_unstable_logs_enabled" feature flag is removed. The capability (and the backing specification) is now stable and is enabled by default. 3278
- Remove the empty "message" field from
tracingevents emitted via theinternal-logsfeature - Fix panic when calling
Context::current()fromDropimplementations triggered byContextGuardcleanup (#3262).
Released 2025-Sep-25
- Breaking Change return type of
opentelemetry::global::set_tracer_providerto Unit to align with metrics counterpart - Add
get_allmethod toopentelemetry::propagation::Extractorto return all values of the given propagation key and provide a default implementation. - Add an
IntoIteratorimplementation foropentelemetry::trace::TraceStateto allow iterating through its key-value pair collection.
Released 2025-May-23
#2821 Context based suppression capabilities added: Added the ability to prevent recursive telemetry generation through new context-based suppression mechanisms. This feature helps prevent feedback loops and excessive telemetry when OpenTelemetry components perform their own operations.
New methods added to Context:
is_telemetry_suppressed()- Checks if telemetry is suppressed in this contextwith_telemetry_suppressed()- Creates a new context with telemetry suppression enabledis_current_telemetry_suppressed()- Efficiently checks if the current thread's context has telemetry suppressedenter_telemetry_suppressed_scope()- Convenience method to enter a scope where telemetry is suppressed
These methods allow SDK components, exporters, and processors to temporarily disable telemetry generation during their internal operations, ensuring more predictable and efficient observability pipelines.
- re-export
tracingforinternal-logsfeature to remove the need of addingtracingas a dependency
Release 2025-Apr-01
- Bug Fix: Re-export
WithContextatopentelemetry::trace::context::WithContext#2879 to restore backwards compatibility- The new path for
WithContextandFutureExtare inopentelemetry::contextas they are independent of the trace signal. Users should prefer this path.
- The new path for
Released 2025-Mar-21
- Breaking Moved
ExportErrortrait fromopentelemetry::trace::ExportErrortoopentelemetry_sdk::export::ExportError - Breaking Moved
TraceErrorenum fromopentelemetry::trace::TraceErrortoopentelemetry_sdk::trace::TraceError - Breaking Moved
TraceResulttype alias fromopentelemetry::trace::TraceResulttoopentelemetry_sdk::trace::TraceResult - Bug Fix:
InstrumentationScopeimplementation forPartialEqandHashfixed to include Attributes also. - Breaking changes for baggage users: #2717
- Changed value type of
BaggagefromValuetoStringValue - Updated
Baggageconstants to reflect latest standard (MAX_KEY_VALUE_PAIRS- 180 -> 64,MAX_BYTES_FOR_ONE_PAIR- removed) and increased insert performance see #2284. - Align
Baggage.remove()signature with.get()to take the key as a reference Baggagecan't be retrieved from theContextdirectly anymore and needs to be accessed viacontext.baggage()with_baggage()andcurrent_with_baggage()override any existingBaggagein theContextBaggagekeys can't be empty and only allow ASCII visual chars, except"(),/:;<=>?@[\]{}(see RFC7230, Section 3.2.6)KeyValueMetadatadoes not publicly expose its fields. This should be transparent change to the users.
- Changed value type of
- Changed
Contextto use a stack to properly handle out of order dropping ofContextGuard. This imposes a limit of65535nested contexts on a single thread. See #2378 and #1887. - Added additional
name: Option<&str>parameter to theevent_enabledmethod on theLoggertrait. This allows implementations (SDK, processor, exporters) to leverage this additional information to determine if an event is enabled.
Released 2025-Feb-10
- Bump msrv to 1.75.0.
- Breaking
opentelemetry::global::shutdown_tracer_provider()Removed from this crate, should now usetracer_provider.shutdown()see #2369 for a migration example. - Breaking Removed unused
opentelemetry::PropagationErrorstruct.
Released 2024-Nov-27
Released 2024-Nov-11
- Bump MSRV to 1.70 #2179
- Add
LogRecord::set_trace_context; an optional method conditional on thetracefeature for setting trace context on a log record. - Removed unnecessary public methods named
as_anyfromAsyncInstrumenttrait and the implementing instruments:ObservableCounter,ObservableGauge, andObservableUpDownCounter#2187 - Introduced
SyncInstrumenttrait to replace the individual synchronous instrument traits (SyncCounter,SyncGauge,SyncHistogram,SyncUpDownCounter) which are meant for SDK implementation. #2207 - Ensured that
observemethod on asynchronous instruments can only be called inside a callback. This was done by removing the implementation ofAsyncInstrumenttrait for each of the asynchronous instruments. #2210 - Removed
PartialOrdandOrdimplementations forKeyValue. #2215 - Breaking change for exporter authors: Marked
KeyValuerelated structs and enums asnon_exhaustive. #2228 - Breaking change for log exporter authors: Marked
AnyValueenum asnon_exhaustive. #2230 - Breaking change for Metrics users: The
initmethod used to create instruments has been renamed tobuild. Also,try_init()method is removed from instrument builders. The return types ofInstrumentProvidertrait methods modified to return the instrument struct, instead ofResult. #2227
Before:
let counter = meter.u64_counter("my_counter").init();Now:
let counter = meter.u64_counter("my_counter").build();-
Breaking change: #2220
- Removed deprecated method
InstrumentationLibrary::new - Renamed
InstrumentationLibrarytoInstrumentationScope - Renamed
InstrumentationLibraryBuildertoInstrumentationScopeBuilder - Removed deprecated methods
LoggerProvider::versioned_loggerandTracerProvider::versioned_tracer - Removed methods
LoggerProvider::logger_builder,TracerProvider::tracer_builderandMeterProvider::versioned_meter - Replaced these methods with
LoggerProvider::logger_with_scope,TracerProvider::logger_with_scope,MeterProvider::meter_with_scope - Replaced
global::meter_with_versionwithglobal::meter_with_scope - Added
global::tracer_with_scope - Refer to PR description for migration guide.
- Removed deprecated method
-
Breaking change: replaced
InstrumentationScopepublic attributes by getters #2275 -
Breaking change: #2260
- Removed
global::set_error_handlerandglobal::handle_error. global::handle_errorusage inside the opentelemetry crates has been replaced withglobal::otel_info,otel_warn,otel_debugandotel_errormacros based on the severity of the internal logs.- The default behavior of
global::handle_errorwas to log the error usingeprintln!. With otel macros, the internal logs get emitted viatracingmacros of matching severity. Users now need to configure atracinglayer/subscriber to capture these logs. - Refer to PR description for migration guide. Also refer to self-diagnostics example to learn how to view internal logs in stdout using
tracing::fmtlayer.
- Removed
-
Breaking change for exporter/processor authors: #2266
- Moved
ExportErrortrait fromopentelemetry::ExportErrortoopentelemetry_sdk::export::ExportError - Created new trait
opentelemetry::trace::ExportErrorfor trace API. This would be eventually be consolidated with ExportError in the SDK. - Moved
LogErrorenum fromopentelemetry::logs::LogErrortoopentelemetry_sdk::logs::LogError - Moved
LogResulttype alias fromopentelemetry::logs::LogResulttoopentelemetry_sdk::logs::LogResult - Moved
MetricErrorenum fromopentelemetry::metrics::MetricErrortoopentelemetry_sdk::metrics::MetricError - Moved
MetricResulttype alias fromopentelemetry::metrics::MetricResulttoopentelemetry_sdk::metrics::MetricResultThese changes shouldn't directly affect the users of OpenTelemetry crate, as these constructs are used in SDK and Exporters. If you are an author of an sdk component/plug-in, like an exporter etc. please use these types from sdk. Refer CHANGELOG.md for more details, under same version section.
- Moved
-
Breaking 2291 Rename
logs_level_enabled flagtospec_unstable_logs_enabled. Please enable this updated flag if the feature is needed. This flag will be removed once the feature is stabilized in the specifications.
Released 2024-Sep-30
-
BREAKING Public API changes:
-
Removed:
Key.bool(),Key.i64(),Key.f64(),Key.string(),Key.array()#2090. These APIs were redundant as they didn't offer any additional functionality. The existingKeyValue::new()API covers all the scenarios offered by these APIs. -
Removed:
ObjectSafeMeterProviderandGlobalMeterProvider#2112. These APIs were unnecessary and were mainly meant for internal use. -
Modified:
MeterProvider.meter()andMeterProvider.versioned_meter()argument types have been updated to&'static strinstead ofimpl Into<Cow<'static, str>>>#2112. These APIs were modified to enforce the Metername,version, andschema_urlto be&'static str. -
Renamed:
NoopMeterCoretoNoopMeter
-
-
Added
with_boundariesAPI to allow users to provide custom bounds for Histogram instruments. #2135
- BREAKING #1993 Box complex types in AnyValue enum Before:
#[derive(Debug, Clone, PartialEq)]
pub enum AnyValue {
/// An integer value
Int(i64),
/// A double value
Double(f64),
/// A string value
String(StringValue),
/// A boolean value
Boolean(bool),
/// A byte array
Bytes(Vec<u8>),
/// An array of `Any` values
ListAny(Vec<AnyValue>),
/// A map of string keys to `Any` values, arbitrarily nested.
Map(HashMap<Key, AnyValue>),
}After:
#[derive(Debug, Clone, PartialEq)]
pub enum AnyValue {
/// An integer value
Int(i64),
/// A double value
Double(f64),
/// A string value
String(StringValue),
/// A boolean value
Boolean(bool),
/// A byte array
Bytes(Box<Vec<u8>>),
/// An array of `Any` values
ListAny(Box<Vec<AnyValue>>),
/// A map of string keys to `Any` values, arbitrarily nested.
Map(Box<HashMap<Key, AnyValue>>),
}So the custom log appenders should box these types while adding them in message body, or attribute values. Similarly, the custom exporters should dereference these complex type values before serializing.
Breaking :
#2015 Removed
the ability to register callbacks for Observable instruments on Meter directly.
If you were using meter.register_callback to provide the callback, provide
them using with_callback method, while creating the Observable instrument
itself.
1715
shows the exact changes needed to make this migration. If you are starting new,
refer to the
examples
to learn how to provide Observable callbacks.
-
Add "metrics", "logs" to default features. With this, default feature list is "trace", "metrics" and "logs".
-
When "metrics" feature is enabled,
KeyValueimplementsPartialEq,Eq,PartialOrder,Order,Hash. This is meant to be used for metrics aggregation purposes only. -
Removed
Unitstruct for specifying Instrument units. Unit is treated as an opaque string. Migration: Replace.with_unit(Unit::new("myunit"))with.with_unit("myunit"). -
1869 Introduced the
LogRecord::set_target()method in the log bridge API. This method allows appenders to set the target/component emitting the logs.
- #1640 Add
PropagationError - #1701
Gaugeno longer requiresotel-unstablefeature flag, as OpenTelemetry specification forGaugeinstrument is stable.
- Remove
urlencodingcrate dependency. #1613 - Remove global providers for Logs $1691 LoggerProviders are not meant for end users to get loggers from. It is only required for the log bridges. Below global constructs for the logs are removed from API: - opentelemetry::global::logger - opentelemetry::global::set_logger_provider - opentelemetry::global::shutdown_logger_provider - opentelemetry::global::logger_provider - opentelemetry::global::GlobalLoggerProvider - opentelemetry::global::ObjectSafeLoggerProvider For creating appenders using Logging bridge API, refer to the opentelemetry-tracing-appender example
-
BREAKING Moving LogRecord implementation to the SDK. 1702.
- Relocated
LogRecordstruct to SDK. - Introduced the
LogRecordtrait in the API for populating log records. This trait is implemented by the SDK. This is the breaking change for the authors of Log Appenders. Refer to the opentelemetry-appender-tracing for more details.
- Relocated
-
Deprecate
versioned_logger()in favor oflogger_builder()1567.
Before:
let logger = provider.versioned_logger(
"my-logger-name",
Some(env!("CARGO_PKG_VERSION")),
Some("https://opentelemetry.io/schemas/1.0.0"),
Some(vec![KeyValue::new("key", "value")]),
);After:
let logger = provider
.logger_builder("my-logger-name")
.with_version(env!("CARGO_PKG_VERSION"))
.with_schema_url("https://opentelemetry.io/schemas/1.0.0")
.with_attributes(vec![KeyValue::new("key", "value")])
.build();- Deprecate
versioned_tracer()in favor oftracer_builder()1567.
Before:
let tracer = provider.versioned_tracer(
"my-tracer-name",
Some(env!("CARGO_PKG_VERSION")),
Some("https://opentelemetry.io/schemas/1.0.0"),
Some(vec![KeyValue::new("key", "value")]),
);After:
let tracer = provider
.tracer_builder("my-tracer-name")
.with_version(env!("CARGO_PKG_VERSION"))
.with_schema_url("https://opentelemetry.io/schemas/1.0.0")
.with_attributes(vec![KeyValue::new("key", "value")])
.build();-
#1410 Add experimental synchronous gauge. This is behind the feature flag, and can be enabled by enabling the feature
otel_unstablefor opentelemetry crate. -
#1410 Guidelines to add new unstable/experimental features.
- Modified
AnyValue.Mapto be backed byHashMapinstead of customOrderMap, which internally usedIndexMap. There was no requirement to maintain the order of entries, so moving fromIndexMaptoHashMapoffers slight performance gains, and avoidsIndexMapdependency. This affectsbodyandattributesofLogRecord. #1353 - Add
TextMapCompositePropagator#1373 - Turned off events for
NoopLoggerto save on operations #1455
- Removed
OrderMaptype as there was no requirement to use this over regularHashMap. #1353 - Remove API for Creating Histograms with signed integers. #1371
- Remove
global::shutdown_meter_provider, useSdkMeterProvider::shutdowndirectly instead #1412.
This release should been seen as 1.0-rc4 following 1.0-rc3 in v0.20.0. Refer to CHANGELOG.md in individual creates for details on changes made in different creates.
- Bump MSRV to 1.65 #1318
- Bump MSRV to 1.64 #1203
opentelemetrycrate now only carries the API types #1186. Use theopentelemetry_sdkcrate for the SDK types.trace::noop::NoopSpanno longer implementsDefaultand instead exposes aconst DEFAULTvalue. #1270- Updated crate documentation and examples. #1256
- Breaking
SpanBuilderattributes changed fromOrderMap<Key, Value>toVec<KeyValue>andwith_attributes_mapmethod is removed fromSpanBuilder. This implies that OpenTelemetry API will no longer perform de-dup of attribute Keys. #1293. Please share feedback here, if you are affected.
This release should been seen as 1.0-rc3 following 1.0-rc2 in v0.19.0. Refer to CHANGELOG.md in individual creates for details on changes made in different creates.
- Add
newmethod toBoxedTracer#1009 - Add js-sys as dependency for api crate when building wasm targets #1078
- Create tracer using a shared instrumentation library #1129
- Add
Context::map_current#1140 - Add unit/doc tests for metrics #1213
- Add
opentelemetry::sdk::logs::config()for parity withopentelemetry::sdk::trace::config()(#1197)
OtelString::OwnedcarriesBox<str>instead ofString#1096
- Drop include_trace_context parameter from Logs API/SDK. #1133
- Synchronous instruments no longer accepts
Contextwhile reporting measurements. #1076. - Fallible conversions from
futures-channelerror types toLogErrorandTraceErrorremoved. #1201
- Fix
SpanRef::set_attributesmutability requirement. #1038 - Move OrderMap module to root of otel-api crate. #1061
- Use the browser-only js-sys workaround only when actually targeting a browser #1008
This release should been seen as 1.0-rc2 following 1.0-rc1 in v0.18.0. Refer to CHANGELOG.md in individual creates for details on changes made in different creates.
- Implement
DisplayonBaggage#921. - Bump MSRV to 1.57 #953.
- Update dependencies and bump MSRV to 1.60 #969.
This release is the first beta release of the trace API and SDK. If no other
breaking changes are necessary, the next release will be 1.0. The metrics API
and SDK are still unstable.
- Pull sampling probability from
OTEL_TRACES_SAMPLER_ARGin default sdk config #737 - Add
schema_urltoTracer#743 - Add
schema_urltoResource#775 - Add
Span::set_attributes#638 - Support concurrent exports #781
- Add jaeger remote sampler #797
- Allow Custom Samplers #833
- Add
SpanExporter::force_flushand default implementation #845
- Deprecate metrics
ValueRecorderin favor ofHistogram#728 - Move
IdGeneratorto SDK, rename toRandomIdGenerator#742 meter_with_versionaccepts optional parameter forversionandschema_url#752- Unify
EventandLinkaccess patterns #757 - move
SpanKinddisplay format impl to jaeger crate #758 - make
TraceStateErrorprivate #755 - rename
Span::record_exceptiontoSpan::record_error#756 - Replace
StatusCodeandmessagewithStatus#760 - Move
TracerProvider::force_flushto SDK #658 - Switch to static resource references #790
- Allow O(1) get operations for
SpanBuilder::attributes[breaking] #799 - Allow ref counted keys and values #821
- Bump MSRV from 1.49 to 1.55 #811
- bump MSRV to 1.56 #866
- Update metrics API and SDK for latest spec #819
- Switch to
pin-project-lite#830
- Update dashmap to avoid soundness hole #818
- Perform sampling as explained in the specification #839
- Remove internal message queue between exporter and exporting tasks #848
- Fix span processor exporting unsampled spans #871
- Remove
serializefeature #738 - Remove
StatusCode::as_str#741 - Remove
Tracer::with_span#746
- Implement
Serialize&DeserializeforSampler,SpanLimits#622, #626 - Allow
&'static strandstringin span methods #654 - Allow
Stringdata in instrumentation library. #670 - Remove
std::fmt::Debugand'staticrequirements fromTracerProvider,Tracer, andSpan#664 - Remove unused
Tracer::invalidmethod #683 - Split
TracerProvider::tracerandTracerProvider::versioned_tracermethods #682 - Reduce dependency on
futurescrate #684 - Switch to parent context references #687
- Spec-compliant trace and span ids #689
- Optimize span creation internals #693
- Add instrumentation library to
ShouldSampleparameters #695
- Fix default resource detection for tracer provider #641
- Detect
service.namefromOTEL_SERVICE_NAMEandOTEL_RESOURCE_ATTRIBUTES#662 - Fix
TraceState::valid_keycrashes #665
- Add default resource in
TracerProvider#571 - Rename
get_tracertotracer#586 - Extract
trace::noopmodule and update docs #587 - Add
Hashimpl for span context and allow spans to clone and export current state #592 - Enforce span status code's order #593
- Make
SpanRefpublic #600 - Make
SpanProcessor::on_starttake a mutable span #601 - Renamed
labeltoattributeto align with otel specification #609
- Small performance boost for
Resource::get#579
- More resource detectors #573
- Expose the Error type to allow users to set custom error handlers #551
- Allow users to use different channels based on runtime in batch span processor #560
- Move
Unitintometricsmodule #564 - Update trace flags to match spec #565
- Fix debug loop, add notes for
#[tokio::test]#552 TraceStatecannot insert new key-value pairs #567
- Adding a dynamic dispatch to Aggregator Selector #497
- Add
global::force_flush_tracer_provider#512 - Add config
max_attributes_per_eventandmax_attributes_per_link#521 - Add dropped attribute counts to events and links #529
- Remove unnecessary clone in
Keytype #491 - Remove
#[must_use]fromset_tracer_provider#501 - Rename remaining usage of
default_samplertosampler#509 - Use current span for SDK-less context propagation #510
- Always export span batch when limit reached #519
- Rename message events to events #530
- Update resource merge behavior #537
- Ignore links with invalid context #538
- Remove remote span context #508
- Remove metrics quantiles #525
- Allow users to use custom export kind selector #526
- Improve simple span processor performance #502
- Local span perf improvements #505
- Reduce string allocations where possible #506
Upgrade note: exporter pipelines do not return an uninstall guard as of #444,
use opentelemetry::global::shutdown_tracer_provider explicitly instead.
- Pull configurations from environment variables by default when creating BatchSpanProcessor #445
- Convert doc links to intra-doc #466
- Switch to Cow for event names #471
- Use API to configure async runtime instead of features #481
- Rename trace config with_default_sampler to with_sampler #482
- Removed tracer provider guard #444
- Removed
from_envand use environment variables to initialize the configurations by default #459
- Instrumentation library support #402
- Batch observer support #429
with_unitmethods in metrics #431- Clone trait for noop tracer/tracer provider/span #479
- Abstracted traits for different runtimes #480
- Dependencies updates #410
- Add
Send,SynctoAsyncInstrumentin metrics #422 - Add
Send,SynctoInstrumentCorein metrics #423 - Replace regex with custom logic #411
- Update tokio to v1 #421
- Moved
httpdependencies into a new opentelemetry-http crate #415 - Remove
tonicdependency #414
- Fix possible deadlock when dropping metric instruments #407
- Fix remote implicit builder context sampling #405
- Add
force_flushmethod to span processors #358 - Add timeout for
force_flushandshutdown#362
- Implement Display trait for Key and Value types #353
- Remove Option from Array values #359
- Update
ShouldSample's parent parameter to beContext#368 - Consolidate error types in
tracemodule intoTraceError#371 - Add
#[must_use]to uninstall structs #372 - Move 3rd party propagators and merge exporter into
sdk::export#375 - Add instrumentation version to instrument config #392
- Use instrumentation library in metrics #393
start_from_contextrenamed tostart_with_context#399- Removed
build_with_contextas full context is now stored in builder #399 - SpanBuilder's
with_parentrenamed towith_parent_context#399
- Fix parent based sampling in tracer #354
- StatusCode enum value ordering #377
- Counter adding the delta from last collection #395
HistogramAggregatorreturning sum vs count #398
- Add support for baggage metadata #287
- Remove
apiprefix from modules #305 - Move
mark_as_active_spanandget_active_spanfunctions into trace module #310 - Revert renaming of
SpanContexttoSpanReference#299 - Default trace propagator is now a no-op #329
- Return references to span contexts instead of clones #325
- Update exporter errors to be
Box<dyn Error + Send + Sync + 'static>#284 - Rename
GenericProvidertoGenericTracerProvider#313 - Reduce
SpanStatusenum toOk,Error, andUnsetvariants #315 - update B3 propagator to more closely match spec #319
- Export missing pub global trace types #313
- Ensure kv array values are homogeneous #333
- Implement
Displaytrait forKeyandValuetypes #353 - Move
SpanProcessortrait intosdkmodule #334 - Ensure
is_recordingisfalseand span is no-op afterend#341 - Move binary propagator and base64 format to contrib #343
- Ensure metrics noop types go through constructors #345
- Change
ExportResultto usestd::result::Result#347 - Change
SpanExporter::exportto take&mut selfinstead of&self#350 - Add MSRV 1.42.0 #296
- Fix parent based sampling #354
- Remove support for
u64andbyteskv values #323 - Remove kv value conversion from
&str#332
- Allow metric instruments to be cloned #280
- Fix single threaded runtime tokio feature bug #278
- Add resource detector #174
- Add
fieldsmethod to TextMapFormat #178 - Add support for
tracestateinTraceContextPropagator#191 - Propagate valid span context in noop tracer #197
- Add end_with_timestamp method for trace span #199
- Add ID methods for hex and byte array formatting #200
- Add AWS X-Ray ID Generator #201
- AWS X-Ray Trace Context Propagator #202
- Add instrumentation library information to spans #207
- Add keys method to extractors #209
- Add
TraceStatetoSpanContext#217 - Add
from_envconfig option forBatchSpanProcessor#228 - Add pipeline uninstall mechanism to shut down trace pipelines #229
- Re-write metrics sdk to be spec compliant #179
- Rename
Sampler::ProbabilitytoSampler::TraceIdRatioBased#188 - Rename
HTTPTextPropagatortoTextMapPropagator#192 - Ensure extractors are case insensitive #193
- Rename
ProvidertoTracerProvider#206 - Rename
CorrelationContextintoBaggage#208 - Pipeline builder for stdout trace exporter #224
- Switch to async exporters #232
- Allow
ShouldSampleimplementation to modify trace state #237 - Ensure context guard is
!Send#239 - Ensure trace noop structs use
newconstructor #240 - Switch to w3c
baggageheader #246 - Move trace module imports from
apitoapi::trace#255 - Update
tonicfeature to use version0.3.x#258 - Update exporters to receive owned span data #264
- Move propagators to
sdk::propagation#266 - Rename SpanContext to SpanReference #270
- Rename
SamplingDecision'sNotRecord,RecordandRecordAndSampledtoDropRecordOnlyandRecordAndSample#247
- Add custom span processors to
Provider::Builder#166
- Separate
CarrierintoInjectorandExtractor#164 - Change the default sampler to be
ParentOrElse(AlwaysOn)#163 - Move the
Samplerinterface to the SDK #169
- New
ParentOrElsesampler for fallback logic if parent is not sampled. #128 - Attributes can now have array values #146
- Added
record_exceptionandrecord_exception_with_stacktracemethods toSpan#152
- Update sampler types #128
Alwaysis nowAlwaysOn.Neveris nowAlwaysOff.Probabilitynow ignores parent sampled state.
base64andbinary_propagatorhave been moved toexperimentalmodule. #134Correlation-Contextheader has been updated tootcorrelations#145B3Propagatorhas been updated to more closely follow the spec #148
- Add
httpandtonicfeatures to implCarrierfor common types.
- Removed
span_idfrom sampling parameters when implementing custom samplers.
- Make
ContextSend + Syncin #127
- Derive
CloneforB3Propagator,SamplingResult, andSpanBuilder - Ability to configure the span id / trace id generator
- impl
From<T>for commonKeyandValuetypes - Add global
tracermethod - Add
ResourceAPI - Add
ContextAPI - Add
CorrelationsAPI - Add
HttpTextCompositePropagatorfor composingHttpTextPropagators - Add
GlobalPropagatorfor globally configuring a propagator - Add
TraceContextExtto provide methods for working with trace data in a context - Expose
EvictedQueueconstructor
- Ensure that impls of
SpanareSendandSyncwhen used inglobal - Changed
KeyandValuemethod signatures to removeCowreferences - Tracer's
startnow uses the implicit current context instead of an explicit span context.start_with_contextmay be used to specify a context if desired. with_spannow accepts a span for naming consistency and managing the active state of a more complex span (likely produced by a builder), and the previous functionality that accepts a&strhas been renamed toin_span, both of which now yield a context to the provided closure.- Tracer's
get_active_spannow accepts a closure - The
Instrumenttrait has been renamed toFutureExtto avoid clashing with metric instruments, and instead accepts contexts viawith_context. - Span's
get_contextmethod has been renamed tospan_contextto avoid ambiguity. HttpTextPropagatorsinject the current context instead of an explicit span context. The context can be specified withinject_context.SpanData'scontexthas been renamed tospan_context
- Update the probability sampler to match the spec
- Rename
Traceparentheader totraceparent
TracerGenericsmethods have been folded in to theTracertrait so it is longer needed- Tracer's
mark_span_as_inactivehas been removed - Exporters no longer require an
as_anymethod - Span's
mark_as_active,mark_as_inactive, andas_anyhave been removed
- New async batch span processor
- New stdout exporter
- Add
trace_idtoSpanBuilder
- Add
attributestoEvents. - Update
Span'sadd_eventandadd_event_with_timestampto accept attributes. - Record log fields in jaeger exporter
- Properly export span kind in jaeger exporter
- Add support for
Links - Add
status_messagetoSpanandSpanData - Rename
SpanStatustoStatusCode - Update
EvictedQueueinternals from LIFO to FIFO - Switch span attributes to
EvictedHashMap
- Call
shutdowncorrectly when span processors and exporters are dropped
- New Base64 propagator
- New SpanBuilder api
- Zipkin Exporter crate
- Switch to
SpanIdandTraceIdfromu64andu128 - Remove
&mut selfrequirements forSpanAPI
- circular Tracer debug impl
- Make trace and metrics features optional
- ExportResult as specified in the specification
- Add Futures compatibility API
- Added serde serialize support to SpanData
- Separate OpenTelemetry Jaeger crate
- Rename HttpTraceContextPropagator to TraceContextPropagator
- Rename HttpB3Propagator to B3Propagator
- Switch to Apache 2 license
- Resolve agent addresses to allow non-static IP
- Remove tracer name prefix from span name
- Remove add_link from spans
- trace-context propagator
- Prometheus API cleanup
- Parent option for default sampler
- SDK tracer default span id
- Ensure spans are always send and sync
- Allow static lifetimes for span names
- Improve KeyValue ergonomics
- Implement global provider
- Documentation and API cleanup
- Tracking of active spans via thread local span stack
Initial debug alpha