Skip to content

Update opentelemetry packages - #36

Open
renovate[bot] wants to merge 1 commit into
mainfrom
renovate/opentelemetry-packages
Open

renovate[bot] wants to merge 1 commit into
mainfrom
renovate/opentelemetry-packages

Conversation

@renovate

@renovate renovate Bot commented May 15, 2024

Copy link
Copy Markdown
Contributor

ℹ️ Note

This PR body was truncated due to platform limits.

This PR contains the following updates:

Package Type Update Change
opentelemetry (source) dependencies minor 0.220.33
opentelemetry-http (source) dependencies minor 0.110.33
opentelemetry-otlp (source) dependencies minor 0.150.33
opentelemetry_sdk (source) dependencies minor 0.220.33
tracing-opentelemetry dependencies minor 0.230.34

Release Notes

open-telemetry/opentelemetry-rust (opentelemetry)

v0.33.0

Compare Source

Released 2026-Sep-18

  • Fix TraceState accepting more than the 32 list-members the W3C trace-context
    specification allows. from_str, from_key_value and insert now keep at most
    32, dropping members from the end of the list as the specification prescribes, so
    neither a parsed nor a locally built tracestate can exceed the limit.
  • Added experimental support for a global context event observer. A
    ContextObserver can be registered via GlobalContextObserver::set to be
    notified of context transitions through the on_context_enter and
    on_context_exit callbacks. This feature is primarily intended to publish a
    different view of the current context (the ObserverContextView) through
    alternative channels that let external readers (e.g. an eBPF profiler) track
    the current context. See the associated
    OTEP.
    Gated behind the experimental_context_observer feature flag.
  • otel_info!, otel_warn!, otel_debug!, and otel_error! macros now accept quoted-key fields
    (e.g. "otel.component.type" = "value") for dotted attribute names.
  • Added BoundGauge<T> and BoundUpDownCounter<T> types (and the
    corresponding Gauge::bind() / UpDownCounter::bind() methods), completing
    the experimental bound-instrument API across all sync instruments
    (Counter, UpDownCounter, Histogram, Gauge). Gated behind the
    experimental_metrics_bound_instruments feature flag.

v0.32.0

Compare Source

Released 2026-May-08

  • Added BoundCounter<T> and BoundHistogram<T> types that cache resolved
    aggregator references for a fixed attribute set. Created via Counter::bind()
    and Histogram::bind(), bound instruments bypass per-call attribute lookup,
    providing significant performance improvements for hot paths where the same
    attributes are used repeatedly. Both types implement Clone so a single bound
    state can be shared across threads or modules without re-binding. Also adds
    the SyncInstrument::bind() trait method and BoundSyncInstrument<T> trait
    for SDK implementors; the trait method has a no-op default so custom
    SyncInstrument impls degrade gracefully without panicking. Gated behind the
    experimental_metrics_bound_instruments feature flag.
  • Add reserve method to opentelemetry::propagation::Injector to 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_result
    • with_trace_id, with_span_id, with_end_time, with_status, with_sampling_result
  • Added #[must_use] attribute to opentelemetry::metrics::AsyncInstrumentBuilder to 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::trace to opentelemetry_sdk::trace #​3277:
    • SamplingDecision, SamplingResult
    • These types are SDK implementation details and should be imported from opentelemetry_sdk::trace instead.
  • "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 tracing events emitted via the internal-logs feature
  • Fix panic when calling Context::current() from Drop implementations triggered by ContextGuard cleanup (#​3262).

v0.31.0

Compare Source

Released 2025-Sep-25

  • Breaking Change return type of opentelemetry::global::set_tracer_provider to Unit to align with metrics counterpart
  • Add get_all method to opentelemetry::propagation::Extractor to return all values of the given propagation key and provide a default implementation.
  • Add an IntoIterator implementation for opentelemetry::trace::TraceState to allow iterating through its key-value pair collection.

v0.30.0

Compare Source

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
    context
  • with_telemetry_suppressed() - Creates a new context with telemetry
    suppression enabled
  • is_current_telemetry_suppressed() - Efficiently checks if the current thread's context
    has telemetry suppressed
  • enter_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 tracing for internal-logs feature to remove the need of adding tracing as a dependency

v0.29.1

Compare Source

Release 2025-Apr-01

  • Bug Fix: Re-export WithContext at opentelemetry::trace::context::WithContext #​2879 to restore backwards compatibility
    • The new path for WithContext and FutureExt are in opentelemetry::context as they are independent of the trace signal. Users should prefer this path.

v0.29.0

Compare Source

Released 2025-Mar-21

  • Breaking Moved ExportError trait from opentelemetry::trace::ExportError to opentelemetry_sdk::export::ExportError
  • Breaking Moved TraceError enum from opentelemetry::trace::TraceError to opentelemetry_sdk::trace::TraceError
  • Breaking Moved TraceResult type alias from opentelemetry::trace::TraceResult to opentelemetry_sdk::trace::TraceResult
  • Bug Fix: InstrumentationScope implementation for PartialEq and Hash fixed to include Attributes also.
  • Breaking changes for baggage users: #​2717
    • Changed value type of Baggage from Value to StringValue
    • Updated Baggage constants 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
    • Baggage can't be retrieved from the Context directly anymore and needs to be accessed via context.baggage()
    • with_baggage() and current_with_baggage() override any existing Baggage in the Context
    • Baggage keys can't be empty and only allow ASCII visual chars, except "(),/:;<=>?@[\]{} (see RFC7230, Section 3.2.6)
    • KeyValueMetadata does not publicly expose its fields. This should be transparent change to the users.
  • Changed Context to use a stack to properly handle out of order dropping of ContextGuard. This imposes a limit of 65535 nested contexts on a single thread. See #2378 and #1887.
  • Added additional name: Option<&str> parameter to the event_enabled method
    on the Logger trait. This allows implementations (SDK, processor, exporters)
    to leverage this additional information to determine if an event is enabled.

v0.28.0

Compare Source

Released 2025-Feb-10

  • Bump msrv to 1.75.0.
  • Breaking opentelemetry::global::shutdown_tracer_provider() Removed from this crate, should now use tracer_provider.shutdown() see #​2369 for a migration example.
  • Breaking Removed unused opentelemetry::PropagationError struct.

v0.27.1

Compare Source

Released 2024-Nov-27

v0.27.0

Compare Source

Released 2024-Nov-11

  • Bump MSRV to 1.70 #​2179
  • Add LogRecord::set_trace_context; an optional method conditional on the trace feature for setting trace context on a log record.
  • Removed unnecessary public methods named as_any from AsyncInstrument trait and the implementing instruments: ObservableCounter, ObservableGauge, and ObservableUpDownCounter #​2187
  • Introduced SyncInstrument trait to replace the individual synchronous instrument traits (SyncCounter, SyncGauge, SyncHistogram, SyncUpDownCounter) which are meant for SDK implementation. #​2207
  • Ensured that observe method on asynchronous instruments can only be called inside a callback. This was done by removing the implementation of AsyncInstrument trait for each of the asynchronous instruments. #​2210
  • Removed PartialOrd and Ord implementations for KeyValue. #​2215
  • Breaking change for exporter authors: Marked KeyValue related structs and enums as non_exhaustive. #​2228
  • Breaking change for log exporter authors: Marked AnyValue enum as non_exhaustive. #​2230
  • Breaking change for Metrics users: The init method used to create instruments has been renamed to build. Also, try_init() method is removed from instrument builders. The return types of InstrumentProvider trait methods modified to return the instrument struct, instead of Result. #​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 InstrumentationLibrary to InstrumentationScope
    • Renamed InstrumentationLibraryBuilder to InstrumentationScopeBuilder
    • Removed deprecated methods LoggerProvider::versioned_logger and TracerProvider::versioned_tracer
    • Removed methods LoggerProvider::logger_builder, TracerProvider::tracer_builder and MeterProvider::versioned_meter
    • Replaced these methods with LoggerProvider::logger_with_scope, TracerProvider::logger_with_scope, MeterProvider::meter_with_scope
    • Replaced global::meter_with_version with global::meter_with_scope
    • Added global::tracer_with_scope
    • Refer to PR description for migration guide.
  • Breaking change: replaced InstrumentationScope public attributes by getters #​2275

  • Breaking change: #​2260

    • Removed global::set_error_handler and global::handle_error.
    • global::handle_error usage inside the opentelemetry crates has been replaced with global::otel_info, otel_warn, otel_debug and otel_error macros based on the severity of the internal logs.
    • The default behavior of global::handle_error was to log the error using eprintln!. With otel macros, the internal logs get emitted via tracing macros of matching severity. Users now need to configure a tracing layer/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::fmt layer.
  • Breaking change for exporter/processor authors: #​2266

    • Moved ExportError trait from opentelemetry::ExportError to opentelemetry_sdk::export::ExportError
    • Created new trait opentelemetry::trace::ExportError for trace API. This would be eventually be consolidated with ExportError in the SDK.
    • Moved LogError enum from opentelemetry::logs::LogError to opentelemetry_sdk::logs::LogError
    • Moved LogResult type alias from opentelemetry::logs::LogResult to opentelemetry_sdk::logs::LogResult
    • Moved MetricError enum from opentelemetry::metrics::MetricError to opentelemetry_sdk::metrics::MetricError
    • Moved MetricResult type alias from opentelemetry::metrics::MetricResult to opentelemetry_sdk::metrics::MetricResult
      These 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.
  • Breaking 2291 Rename logs_level_enabled flag to spec_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.

v0.26.0

Compare Source

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 existing KeyValue::new() API covers all the scenarios offered by these APIs.

    • Removed: ObjectSafeMeterProvider and GlobalMeterProvider #​2112. These APIs were unnecessary and were mainly meant for internal use.

    • Modified: MeterProvider.meter() and MeterProvider.versioned_meter() argument types have been updated to &'static str instead of impl Into<Cow<'static, str>>> #​2112. These APIs were modified to enforce the Meter name, version, and schema_url to be &'static str.

    • Renamed: NoopMeterCore to NoopMeter

  • Added with_boundaries API to allow users to provide custom bounds for Histogram instruments. #​2135

v0.25.0

Compare Source

  • 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.

v0.24.0

Compare Source

  • Add "metrics", "logs" to default features. With this, default feature list is
    "trace", "metrics" and "logs".

  • When "metrics" feature is enabled, KeyValue implements PartialEq, Eq,
    PartialOrder, Order, Hash. This is meant to be used for metrics
    aggregation purposes only.

  • Removed Unit struct 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.

v0.23.0

Compare Source

Added
  • #​1640 Add PropagationError
  • #​1701 Gauge no longer requires otel-unstable feature flag, as OpenTelemetry specification for Gauge instrument is stable.
Removed
  • Remove urlencoding crate 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
Changed
  • BREAKING Moving LogRecord implementation to the SDK. 1702.

    • Relocated LogRecord struct to SDK.
    • Introduced the LogRecord trait 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.
  • Deprecate versioned_logger() in favor of logger_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 of tracer_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();
open-telemetry/opentelemetry-rust (opentelemetry-http)

v0.33.0

Compare Source

Released 2026-Sep-18

  • Apply HyperClient's configured timeout to the complete response body, not
    only request dispatch and response headers.

  • Breaking Sealed the ResponseExt trait so it can no longer be implemented by
    downstream crates. The trait provides a blanket implementation for all
    http::Response<T> types, so calling code is unaffected -- only
    impl ResponseExt for MyType will stop compiling. If you have a custom
    implementation, remove it and rely on the blanket impl instead.

  • Breaking Removed the deprecated HttpClient::send method, which accepted
    Request<Vec<u8>>. Implement and call HttpClient::send_bytes instead,
    converting existing requests with request.map(Bytes::from) when needed.

  • Breaking: Remove opentelemetry_http::hyper::Body, which is no longer used
    by any public constructor. Use http_body_util::Full<Bytes> for custom Hyper
    client request bodies.

  • Limit HTTP response body reads to 4 MiB in built-in HTTP clients (reqwest async/blocking and hyper). Reads exceeding the limit are aborted to prevent unbounded memory allocation and return the new opaque ResponseBodyTooLarge error. Custom HTTP clients can construct this error with ResponseBodyTooLarge::new() or ResponseBodyTooLarge::default().

  • Breaking Built-in reqwest and hyper clients now return HTTP 4xx and 5xx
    responses as Ok(Response<Bytes>) instead of Err(HttpError). Here, Ok
    means that the transport completed the request and received an HTTP response;
    it does not imply a successful HTTP status. This preserves the response status
    and headers for exporter retry classification. Transport failures and timeouts
    continue to return Err.
    If your code relied on send_bytes returning Err for non-success statuses,
    call ResponseExt::error_for_status() on the response instead.

  • Breaking Removed reqwest-rustls-webpki-roots feature. The webpki-roots cargo feature was
    removed from reqwest in v0.13.0. Use reqwest-rustls instead, which now correctly enables
    reqwest/rustls (platform native trust roots). To use Mozilla's embedded CA bundle, construct a
    custom reqwest::Client with a rustls::ClientConfig containing
    rustls::RootCertStore::from_iter(webpki_roots::TLS_SERVER_ROOTS.iter().cloned()), then supply it
    to the exporter with with_http_client().

v0.32.0

Compare Source

Released 2026-May-08

  • reqwest's crypto backend has changed from ring to aws-lc-sys.

v0.31.0

Released 2025-Sep-25

  • Implementation of Extractor::get_all for HeaderExtractor
  • Support HttpClient implementation for HyperClient<C> with custom connectors beyond HttpConnector, enabling Unix Domain Socket connections and other custom transports
  • Add reqwest and reqwest-blocking features to enable async and blocking
    reqwest HTTP clients
  • Updated opentelemetry dependency to version 0.31.0.

v0.30.0

Compare Source

Released 2025-May-23

  • Updated opentelemetry dependency to version 0.30.0.

v0.29.0

Compare Source

Released 2025-Mar-21

  • Update opentelemetry dependency version to 0.29.

v0.28.0

Compare Source

Released 2025-Feb-10

  • Update opentelemetry dependency version to 0.28.
  • Bump msrv to 1.75.0.
  • Add "internal-logs" feature flag (enabled by default), and emit internal logs via tracing crate.
  • Add HttpClient::send_bytes with bytes::Bytes request payload and deprecate old HttpClient::send function.

v0.27.0

Compare Source

Released 2024-Nov-08

  • Update opentelemetry dependency version to 0.27

  • Bump MSRV to 1.70 #​2179

v0.26.0

Compare Source

Released 2024-Sep-30

  • Update opentelemetry dependency version to 0.26

v0.25.0

Compare Source

  • Update opentelemetry dependency version to 0.25
  • Starting with this version, this crate will align with opentelemetry crate
    on major,minor versions.

v0.13.0

Compare Source

  • Breaking Correct the misspelling of "webkpi" to "webpki" in features #​1842
  • Breaking Remove support for the isahc HTTP client #​1924
  • Update to http v1 #​1674
  • Update opentelemetry dependency version to 0.24

v0.12.0

Compare Source

  • Add reqwest-rustls-webpki-roots feature flag to configure reqwest to use embedded webpki-roots.
  • Update opentelemetry dependency version to 0.23
open-telemetry/opentelemetry-rust (opentelemetry-otlp)

v0.33.0

Compare Source

Released 2026-Sep-18

  • Exporter builder usage and environment configuration are unchanged.
    Breaking for callers parsing compression strings: Compression::from_str
    (including .parse::<Compression>()) now returns the opaque ParseConfigError
    instead of ExporterBuildError. Update explicit result types and error handling
    that expects ExporterBuildError::UnsupportedCompressionAlgorithm. The new error
    implements Display and std::error::Error; its message is for diagnostics.
    Accepted strings and parsing behavior are unchanged.

    // Before:
    let result: Result<Compression, ExporterBuildError> = value.parse();
    
    // After:
    let result: Result<Compression, ParseConfigError> = value.parse();
    if let Err(error) = result {
        eprintln!("invalid compression configuration: {error}");
    }
  • Interpret protocol, compression, and metrics temporality environment values
    case-insensitively. Treat empty values as unset, and warn and ignore invalid,
    non-Unicode, or feature-unavailable enum values so resolution can continue
    to the next environment variable or default. Compression none explicitly
    disables compression, including when a generic compression value is set.
    Programmatic configuration remains strict.

Retry
  • Retries are now enabled by default for OTLP/HTTP and OTLP/gRPC. The default
    policy uses exponential backoff and jitter with up to 3 retries (4 attempts
    total). Use .with_retry_policy(RetryPolicy::disabled()) to disable retries,
    or provide a custom RetryPolicy to change the behavior.
  • Migration for users of the experimental retry features: If your
    Cargo.toml enables experimental-grpc-retry or
    experimental-http-retry, remove those feature flags. No migration action is
    required for users who did not enable them.
    #​3621
  • Breaking Make the retry and retry_classification modules crate-private,
    removing their retry engine, error type, and protocol classifiers from the
    public API. RetryPolicy remains available from the crate root with private
    fields and fluent configuration methods. Replace imports from
    opentelemetry_otlp::retry with opentelemetry_otlp::RetryPolicy, and replace
    struct literals with its with_* methods.
    #​3672
Retry fixes

The following fixes apply to retry behavior that was experimental before this
release:

  • Retry only HTTP status codes 429, 502, 503, and 504, as required by the OTLP
    specification. The exporter now also honors Retry-After on 503 responses.
  • Honor positive gRPC RetryInfo delays returned with Unavailable responses.
  • Continue exponential backoff from server-provided RetryInfo and
    Retry-After delays when subsequent export attempts fail.
Other changes
  • Exporter compression configuration and behavior are unchanged; users of
    .with_compression(...) need no changes. Breaking only for direct conversion
    callers:
    removed TryFrom<Compression> for
    tonic::codec::CompressionEncoding. Code explicitly converting between these
    enums must map the variants itself.

  • Return an exporter build error when construction of a built-in reqwest HTTP
    client fails instead of silently falling back to a client without the
    exporter-configured timeout. Failure to spawn the blocking client's setup
    thread, or a panic in that thread, is also returned instead of panicking.

  • Breaking Removed Default from the TonicExporterBuilderSet and
    HttpExporterBuilderSet typestate markers. This also removes Default from
    the transport-selected exporter builders (e.g.
    SpanExporterBuilder<TonicExporterBuilderSet>). Use the intended builder
    flow instead:

    // Before (no longer compiles):
    let exporter = SpanExporterBuilder::<TonicExporterBuilderSet>::default().build()?;
    
    // After (use the builder entry point):
    let exporter = SpanExporter::builder().with_tonic().build()?;

    Also removed the unused #[doc(hidden)] NoExporterConfig type.

  • Breaking Mark Protocol and Compression as non-exhaustive so new OTLP
    protocols, encodings, and compression algorithms can be added without
    breaking downstream users. External exhaustive matches must add a wildcard
    arm. Constructing existing variants and passing them to exporter builders is
    unchanged.

    let protocol_name = match protocol {
        Protocol::Grpc => "grpc",
        Protocol::HttpBinary => "http/protobuf",
        Protocol::HttpJson => "http/json",
        _ => "unknown", // Required because Protocol is non-exhaustive.
    };
  • Breaking Make Protocol::from_env() crate-private. Exporter builders
    already resolve OTEL_EXPORTER_OTLP_PROTOCOL when built; applications that
    need to inspect the raw environment setting should read the variable
    directly.

  • Breaking Remove OTEL_EXPORTER_OTLP_ENDPOINT_DEFAULT, which always held
    the HTTP default (http://localhost:4318) despite gRPC using
    http://localhost:4317. Omit .with_endpoint(...) to let the selected
    transport use its correct default, or provide the appropriate URL explicitly.
    #​3690

  • Breaking Restrict MetricExporterBuilder::with_http() and with_tonic()
    to builders where no transport has been selected, matching the span and log
    exporter builders. Select a transport once; with_temporality() remains
    available before or after transport selection.

  • Breaking Remove the public HttpExporterBuilder and
    TonicExporterBuilder transport-first APIs. Configure transports through the
    signal builders instead:

    • Replace HttpExporterBuilder::default() with the corresponding signal
      exporter builder followed by .with_http(), then replace
      .build_span_exporter() or .build_log_exporter() with .build().
    • Replace .build_metrics_exporter(temporality) with
      .with_temporality(temporality).build().
    • Replace TonicExporterBuilder::default() with the corresponding signal
      exporter builder followed by .with_tonic().
      Transport-specific configuration methods remain available after
      .with_http() or .with_tonic().
  • Breaking Removed the deprecated tls feature alias. Replace tls with
    tls-ring, or select tls-aws-lc or tls-provider-agnostic explicitly.

  • Exporter builder usage is unchanged. Breaking for code matching or constructing
    removed error variants:
    Simplified ExporterBuildError to the exhaustive
    InvalidConfiguration(String) and InternalFailure(String) variants.
    The enum is no longer marked #[non_exhaustive].
    Configuration errors such as invalid endpoints, missing HTTP clients,
    transport/protocol mismatches, and missing compression features now use
    InvalidConfiguration. Replace implementation-specific, non-exhaustive
    matches such as:

    match error {
        ExporterBuildError::InvalidUri(_, _)
        | ExporterBuildError::InvalidConfig { .. }
        | ExporterBuildError::NoHttpClient => {
            eprintln!("fix the exporter configuration");
        }
        ExporterBuildError::InternalFailure(message) => {
            eprintln!("exporter initialization failed: {message}");
        }
        _ => {}
    }

    with an exhaustive match over the two stable categories:

    match error {
        ExporterBuildError::InvalidConfiguration(message) => {
            eprintln!("fix the exporter configuration: {message}");
        }
        ExporterBuildError::InternalFailure(message) => {
            eprintln!("exporter initialization failed: {message}");
        }
    }

    Code that propagates build errors with ? without inspecting their variants
    needs no changes.
    Tonic endpoint errors identify the originating environment variable when
    validating the URI or reporting endpoint-related TLS setup failures.
    #​3691

  • Return an exporter build error for invalid OTLP/HTTP endpoint environment
    variables instead of silently falling back to another endpoint or localhost.
    Empty endpoint environment variables are now treated as unset.

  • Return an exporter build error for invalid OTLP/gRPC endpoint environment
    variables instead of silently falling back to another endpoint or localhost.
    Empty endpoint environment variables are now treated as unset.

  • Add WithHttpConfig::with_max_request_body_size to configure the HTTP request
    body limit. OTLP/HTTP request bodies are now limited to 64 MiB by default, before and
    after compression; oversized requests are discarded without being sent or
    retried.

  • Breaking Seal WithExportConfig, WithHttpConfig, and
    WithTonicConfig. These traits remain public for calling configuration
    methods on OTLP builders, but can no longer be implemented for external
    types.

  • Add support for INSECURE environment variables for gRPC (env-var-only, no builder method, per spec):
    OTEL_EXPORTER_OTLP_INSECURE (generic), OTEL_EXPORTER_OTLP_TRACES_INSECURE,
    OTEL_EXPORTER_OTLP_METRICS_INSECURE, OTEL_EXPORTER_OTLP_LOGS_INSECURE.
    Per the spec, these only apply to gRPC connections. When an endpoint has no explicit scheme,
    INSECURE=true uses http://, INSECURE=false (default) uses https:// with auto-TLS.
    Breaking: Schemeless endpoints (e.g., collector.example.com:4317) now default to https://
    instead of being passed as-is. Set OTEL_EXPORTER_OTLP_INSECURE=true for plaintext connections.
    Endpoints with an explicit scheme (e.g., http://, https://, unix://) are unaffected.
    #​774
    #​984

  • Breaking Removed the serialize feature flag and its implicit serde
    dependency. This feature gated Serialize/Deserialize derives on
    Protocol and Compression, but the derived representations were incorrect
    (Rust variant names instead of spec values) and the feature only covered
    these two enums. The equivalent feature was removed from the core
    opentelemetry crate in 2022.
    Migration: Remove serialize (and serde, if listed) from your feature
    list. If these values are part of serialisable app config, define a local
    config enum or wrapper and convert it to Protocol or Compression when
    building the exporter.
    #​3711

  • Breaking Removed reqwest-rustls-webpki-roots feature. The webpki-roots cargo feature was
    removed from reqwest in v0.13.0, making this feature broken for anyone resolving reqwest >= 0.13.0.
    Migration: Use reqwest-rustls instead (now correctly uses reqwest/rustls with platform native
    trust roots). If you specifically need Mozilla's embedded CA bundle, construct a custom client:

    let root_store = rustls::RootCertStore::from_iter(
        webpki_roots::TLS_SERVER_ROOTS.iter().cloned(),
    );
    let tls_config = rustls::ClientConfig::builder()
        .with_root_certificates(root_store)
        .with_no_client_auth();
    let client = reqwest::Client::builder()
        .tls_backend_preconfigured(tls_config)
        .build()?;
    exporter_builder.with_http_client(client)
  • Allow to provide http client wrapped in Arc when configuring HTTP exporter. 3468

v0.32.0

Compare Source

Released 2026-May-08

  • Add tls-provider-agnostic feature flag for environments that require a custom crypto backend (e.g., OpenSSL for FIPS compliance). Enables TLS code paths without bundling ring or aws-lc-rs.
  • Add build() directly on SpanExporterBuilder, MetricExporterBuilder, and LogExporterBuilder
    (before selecting a transport), which auto-selects the transport based on the
    OTEL_EXPORTER_OTLP_PROTOCOL environment variable or enabled features.
    #​3394
  • Breaking Removed ExportConfig, HasExportConfig, with_export_config(), HasTonicConfig, HasHttpConfig, TonicConfig, and HttpConfig from public API.
    Use the public WithExportConfig, WithTonicConfig, and WithHttpConfig trait methods instead, which remain unchanged.
  • The gRPC/tonic OTLP exporter's build method now returns an error for all signals (traces, metrics, logs) when
    an https:// endpoint is configured but no TLS feature (tls-ring or tls-aws-lc) is enabled, instead of
    silently sending unencrypted traffic. When a TLS feature is enabled and an https:// endpoint is used without
    an explicit .with_tls_config(), a default ClientTlsConfig is automatically applied.
    #​3182
  • Prevent auth tokens from leaking in export error messages. gRPC and HTTP
    exporter errors no longer include potentially sensitive server responses
    (e.g., authentication tokens echoed back). Error messages returned to SDK
    processors contain only the gRPC status code or HTTP status code. Full
    details are logged at DEBUG level only.
    #​3021
  • Surface pre-flight transport error details at ERROR level when grpc-tonic
    OTLP export fails due to a local misconfiguration. When the returned
    tonic::Status wraps a local transport error (invalid URL, connect failure,
    DNS), its source chain (e.g., "transport error: invalid URI") is appended
    to the returned error so SDK processors surface it at ERROR without
    requiring DEBUG logging. Server-returned gRPC status messages remain
    DEBUG-only to preserve the auth-token leak safeguards from
    #​3021.
    #​3331
  • Add support for per-signal protocol environment variables:
    OTEL_EXPORTER_OTLP_TRACES_PROTOCOL, OTEL_EXPORTER_OTLP_METRICS_PROTOCOL,
    OTEL_EXPORTER_OTLP_LOGS_PROTOCOL. These allow configuring different transport protocols
    per signal type. Signal-specific vars take precedence over generic OTEL_EXPORTER_OTLP_PROTOCOL.
    The auto-select build() method on each exporter builder now respects the full priority chain:
    signal-specific env var > generic env var > feature-based default.
  • Transport/protocol mismatch validation: HTTP transport returns InvalidConfig when gRPC protocol
    is requested; gRPC transport returns InvalidConfig when an HTTP protocol is requested.
  • Breaking: Protocol::default() no longer consults the OTEL_EXPORTER_OTLP_PROTOCOL
    environment variable. It now returns only the feature-based default (http-json > http-proto >
    grpc-tonic). Protocol resolution from environment variables is handled internally by the
    exporter builders. Users who relied on Protocol::default() to read env vars should use
    Protocol::from_env() instead.
  • Add support for OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE environment variable
    to configure metrics temporality. Accepted values: cumulative (default), delta,
    lowmemory (case-insensitive). Programmatic .with_temporality() overrides the env var.
  • Fix NoHttpClient error when multiple HTTP client features are enabled by using priority-based selection (reqwest-client > hyper-client > reqwest-blocking-client). #​2994
  • Add partial success response handling for OTLP exporters (traces, metrics, logs) per OTLP spec. Exporters now log warnings when the server returns partial success responses with rejected items and error messages. #​865
  • Refactor internal-logs feature in opentelemetry-otlp to reduce unnecessary dependencies3191
  • Fixed [#​2777](https://github.com/open-telemetry/opentelemetry rust/issues/2777) to properly handle shutdown_with_timeout() when using grpc-tonic.
  • Deprecate tls feature in favor of explicit tls-ring and tls-aws-lc features.
    Migration: Replace tls with tls-ring (or tls-aws-lc). Users of tls-roots or tls-webpki-roots must now also enable one of these.
  • Prevent logging of header values in OTLP tonic exporter #​3465

v0.31.1: opentelemetry-otlp 0.31.1

Compare Source

What's Changed

  • feat(OTLP): add tls-ring, tls-aws-lc, and tls-provider-agnostic feature flags [patch release v0.31.1] by @​lalitb in #​3426

Full Changelog: open-telemetry/opentelemetry-rust@v0.31.0...opentelemetry-otlp-0.31.1

v0.31.0

Compare Source

Released 2025-Sep-25

  • Update opentelemetry-proto and opentelemetry-http dependency version to 0.31.0
  • Add HTTP compression support with gzip-http and zstd-http feature flags
  • Add retry with exponential backoff and throttling support for HTTP and gRPC exporters
    This behaviour is opt in via the experimental-grpc-retry and experimental-http-retry flags on this crate. You can customize the retry policy using the with_retry_policy on the exporter builders.

v0.30.0

Compare Source

Released 2025-May-23

  • Update opentelemetry dependency version to 0.30
  • Update opentelemetry_sdk dependency version to 0.30
  • Update opentelemetry-http dependency version to 0.30
  • Update opentelemetry-proto dependency version to 0.30
  • Update tonic dependency version to 0.13
  • Re-export tonic types under tonic_types
    2898
  • Publicly re-exported MetricExporterBuilder, SpanExporterBuilder, and
    LogExporterBuilder types, enabling users to directly reference and use these
    builder types for metrics, traces, and logs exporters.
    2966

v0.29.0

Compare Source

Released 2025-Mar-21

  • Update opentelemetry dependency version to 0.29

  • Update opentelemetry_sdk dependency version to 0.29

  • Update opentelemetry-http dependency version to 0.29

  • Update opentelemetry-proto dependency version to 0.29

  • The OTEL_EXPORTER_OTLP_TIMEOUT, OTEL_EXPORTER_OTLP_TRACES_TIMEOUT, OTEL_EXPORTER_OTLP_METRICS_TIMEOUT and OTEL_EXPORTER_OTLP_LOGS_TIMEOUT are changed from seconds to milliseconds.

  • Fixed .with_headers() in HttpExporterBuilder to correctly support multiple key/value pairs. #​2699

  • Fixed
    #​2770
    partially to properly handle shutdown() when using http. (tonic still
    does not do proper shutdown)

  • Breaking
    ExporterBuilder's build() method now Result with ExporterBuildError being the
    Error variant. Previously it returned signal specific errors like LogError
    from the opentelemetry_sdk, which are no longer part of the sdk. No changes
    required if you were using unwrap/expect. If you were matching on the returning
    Error enum, replace with the enum ExporterBuildError. Unlike the previous
    Error which contained many variants unrelated to building an exporter, the
    new one returns specific variants applicable to building an exporter. Some
    variants might be applicable only on select features.
    Also, now unused Error enum is removed.

  • Breaking ExportConfig's timeout field is now optional(Option<Duration>)

  • Breaking Export configuration done via code is final. ENV variables cannot be used to override the code config.
    Do not use code based config, if there is desire to control the settings via ENV variables.
    List of ENV variables and corresponding setting being affected by this change.

    • OTEL_EXPORTER_OTLP_ENDPOINT -> ExportConfig.endpoint
    • OTEL_EXPORTER_OTLP_TIMEOUT -> ExportConfig.timeout

v0.28.0

Compare Source

Released 2025-Feb-10

  • Update opentelemetry dependency version to 0.28.
  • Update opentelemetry_sdk dependency version to 0.28.
  • Update opentelemetry-http dependency version to 0.28.
  • Update opentelemetry-proto dependency version to 0.28.
  • Bump msrv to 1.75.0.
  • Feature flag "populate-logs-event-name" is removed as no longer relevant.
    LogRecord's event_name() is now automatically populated on the newly added
    "event_name" field in LogRecord proto definition.
  • Remove "grpc-tonic" feature from default, and instead add "http-proto" and
    "reqwest-blocking-client" features as default, to align with the
    specification.
    2516
  • Remove unnecessarily public trait opentelemetry_otlp::metrics::MetricsClient
    and MetricExporter::new(..) method. Use
    MetricExporter::builder()...build() to obtain MetricExporter.
  • The HTTP clients (reqwest, reqwest-blocking, hyper) now support the
    export timeout interval configured in below order
    • Signal specific env variable OTEL_EXPORTER_OTLP_TRACES_TIMEOUT,
      OTEL_EXPORTER_OTLP_LOGS_TIMEOUT or OTEL_EXPORTER_OTLP_TIMEOUT.
    • OTEL_EXPORTER_OTLP_TIMEOUT env variable.
    • with_http().with_timeout() API method of
      LogExporterBuilder and `SpanEx

Important

✂ PR body was truncated to here.


Configuration

📅 Schedule: (UTC)

  • Branch creation
    • At any time (no schedule defined)
  • Automerge
    • At any time (no schedule defined)

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

👻 Immortal: This PR will be recreated if closed unmerged. Get config help if that's undesired.


  • If you want to rebase/retry this PR, check this box

This PR was generated by Mend Renovate. View the repository job log.

@renovate
renovate Bot force-pushed the renovate/opentelemetry-packages branch from d8fc64b to 9bfb182 Compare May 29, 2024 10:03
@renovate
renovate Bot force-pushed the renovate/opentelemetry-packages branch 2 times, most recently from 82543fa to 99f59c6 Compare July 21, 2024 17:26
@renovate
renovate Bot force-pushed the renovate/opentelemetry-packages branch from 99f59c6 to d6fe3b7 Compare September 10, 2024 01:01
@renovate renovate Bot changed the title fix(deps): update opentelemetry packages fix(deps): update opentelemetry packages to 0.25 Sep 10, 2024
@renovate renovate Bot changed the title fix(deps): update opentelemetry packages to 0.25 fix(deps): update opentelemetry packages Sep 10, 2024
@renovate
renovate Bot force-pushed the renovate/opentelemetry-packages branch from d6fe3b7 to 7bb85fd Compare September 10, 2024 11:20
@renovate
renovate Bot force-pushed the renovate/opentelemetry-packages branch from 7bb85fd to 14ae7b9 Compare October 2, 2024 00:57
@renovate renovate Bot changed the title fix(deps): update opentelemetry packages fix(deps): update opentelemetry packages to 0.26 Oct 2, 2024
@renovate renovate Bot changed the title fix(deps): update opentelemetry packages to 0.26 fix(deps): update opentelemetry packages Oct 9, 2024
@renovate
renovate Bot force-pushed the renovate/opentelemetry-packages branch from 14ae7b9 to a19b405 Compare October 9, 2024 11:31
@renovate
renovate Bot force-pushed the renovate/opentelemetry-packages branch from a19b405 to a595839 Compare November 12, 2024 04:19
@renovate renovate Bot changed the title fix(deps): update opentelemetry packages fix(deps): update opentelemetry packages to 0.27 Nov 12, 2024
@renovate
renovate Bot force-pushed the renovate/opentelemetry-packages branch from a595839 to c303e06 Compare November 13, 2024 22:54
@renovate renovate Bot changed the title fix(deps): update opentelemetry packages to 0.27 fix(deps): update opentelemetry packages Nov 13, 2024
@renovate renovate Bot changed the title fix(deps): update opentelemetry packages fix(deps): update opentelemetry packages to 0.28 Feb 10, 2025
@renovate
renovate Bot force-pushed the renovate/opentelemetry-packages branch 2 times, most recently from 196689b to 15dc640 Compare February 12, 2025 16:24
@renovate renovate Bot changed the title fix(deps): update opentelemetry packages to 0.28 fix(deps): update opentelemetry packages Feb 12, 2025
@renovate
renovate Bot force-pushed the renovate/opentelemetry-packages branch from 15dc640 to 673c8af Compare March 22, 2025 02:34
@renovate renovate Bot changed the title fix(deps): update opentelemetry packages fix(deps): update opentelemetry packages to 0.29 Mar 22, 2025
@renovate
renovate Bot force-pushed the renovate/opentelemetry-packages branch from 673c8af to 149bf20 Compare March 23, 2025 18:57
@renovate renovate Bot changed the title fix(deps): update opentelemetry packages to 0.29 fix(deps): update opentelemetry packages Mar 23, 2025
@renovate
renovate Bot force-pushed the renovate/opentelemetry-packages branch from 149bf20 to a087643 Compare May 23, 2025 19:41
@renovate renovate Bot changed the title fix(deps): update opentelemetry packages fix(deps): update opentelemetry packages to 0.30 May 23, 2025
@renovate
renovate Bot force-pushed the renovate/opentelemetry-packages branch from a087643 to 3306bae Compare June 2, 2025 11:11
@renovate renovate Bot changed the title fix(deps): update opentelemetry packages to 0.30 fix(deps): update opentelemetry packages Jun 2, 2025
@renovate
renovate Bot force-pushed the renovate/opentelemetry-packages branch 2 times, most recently from 5191dd2 to 9b28ff2 Compare September 26, 2025 01:14
@renovate renovate Bot changed the title fix(deps): update opentelemetry packages fix(deps): update opentelemetry packages to 0.31 Sep 26, 2025
@renovate
renovate Bot force-pushed the renovate/opentelemetry-packages branch from 9b28ff2 to 52ff67f Compare September 30, 2025 18:41
@renovate renovate Bot changed the title fix(deps): update opentelemetry packages to 0.31 fix(deps): update opentelemetry packages Sep 30, 2025
@renovate renovate Bot changed the title fix(deps): update opentelemetry packages Update opentelemetry packages Apr 8, 2026
@renovate
renovate Bot force-pushed the renovate/opentelemetry-packages branch from 52ff67f to 734677d Compare May 9, 2026 01:41
@renovate renovate Bot changed the title Update opentelemetry packages Update opentelemetry packages to 0.32 May 9, 2026
@renovate
renovate Bot force-pushed the renovate/opentelemetry-packages branch from 734677d to 49c1de1 Compare May 19, 2026 02:01
@renovate renovate Bot changed the title Update opentelemetry packages to 0.32 Update opentelemetry packages May 19, 2026
@renovate
renovate Bot force-pushed the renovate/opentelemetry-packages branch from 49c1de1 to d3ca8ad Compare September 18, 2026 20:10
@renovate renovate Bot changed the title Update opentelemetry packages Update opentelemetry packages to 0.33 Sep 18, 2026
@renovate
renovate Bot force-pushed the renovate/opentelemetry-packages branch from d3ca8ad to 4e53be1 Compare September 23, 2026 20:08
@renovate renovate Bot changed the title Update opentelemetry packages to 0.33 Update opentelemetry packages Sep 23, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants