chore(deps): update opentelemetry-rust monorepo to 0.33 - autoclosed
This PR contains the following updates:
| Package | Type | Update | Change | Pending |
|---|---|---|---|---|
| opentelemetry (source) | workspace.dependencies | minor | 0.32 → 0.33 | 0.33.1 |
| opentelemetry-appender-tracing (source) | workspace.dependencies | minor | 0.32 → 0.33 | 0.33.1 |
| opentelemetry-http (source) | workspace.dependencies | minor | 0.32 → 0.33 | 0.33.1 |
| opentelemetry-otlp (source) | workspace.dependencies | minor | 0.32 → 0.33 | 0.33.1 |
| opentelemetry-semantic-conventions (source) | workspace.dependencies | minor | 0.32 → 0.33 | 0.33.1 |
| opentelemetry_sdk (source) | workspace.dependencies | minor | 0.32 → 0.33 | 0.33.1 |
Release Notes
open-telemetry/opentelemetry-rust (opentelemetry)
v0.33.0
Released 2026-Sep-18
- Fix
TraceStateaccepting more than the 32 list-members the W3C trace-context
specification allows.from_str,from_key_valueandinsertnow keep at most
32, dropping members from the end of the list as the specification prescribes, so
neither a parsed nor a locally builttracestatecan exceed the limit. - Added experimental support for a global context event observer. A
ContextObservercan be registered viaGlobalContextObserver::setto be
notified of context transitions through theon_context_enterand
on_context_exitcallbacks. This feature is primarily intended to publish a
different view of the current context (theObserverContextView) through
alternative channels that let external readers (e.g. an eBPF profiler) track
the current context. See the associated
OTEP.
Gated behind theexperimental_context_observerfeature flag. otel_info!,otel_warn!,otel_debug!, andotel_error!macros now accept quoted-key fields
(e.g."otel.component.type" = "value") for dotted attribute names.- Added
BoundGauge<T>andBoundUpDownCounter<T>types (and the
correspondingGauge::bind()/UpDownCounter::bind()methods), completing
the experimental bound-instrument API across all sync instruments
(Counter,UpDownCounter,Histogram,Gauge). Gated behind the
experimental_metrics_bound_instrumentsfeature flag.
open-telemetry/opentelemetry-rust (opentelemetry-appender-tracing)
v0.33.0
Released 2026-Sep-18
- Add custom instrumentation scope attributes support via
OpenTelemetryTracingBridge::builder_with_scope_attributes(..).
3415
open-telemetry/opentelemetry-rust (opentelemetry-http)
v0.33.0
Released 2026-Sep-18
-
Apply
HyperClient's configured timeout to the complete response body, not
only request dispatch and response headers. -
Breaking Sealed the
ResponseExttrait 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 MyTypewill stop compiling. If you have a custom
implementation, remove it and rely on the blanket impl instead. -
Breaking Removed the deprecated
HttpClient::sendmethod, which accepted
Request<Vec<u8>>. Implement and callHttpClient::send_bytesinstead,
converting existing requests withrequest.map(Bytes::from)when needed. -
Breaking: Remove
opentelemetry_http::hyper::Body, which is no longer used
by any public constructor. Usehttp_body_util::Full<Bytes>for custom Hyper
client request bodies. -
Limit HTTP response body reads to 4 MiB in built-in HTTP clients (
reqwestasync/blocking andhyper). Reads exceeding the limit are aborted to prevent unbounded memory allocation and return the new opaqueResponseBodyTooLargeerror. Custom HTTP clients can construct this error withResponseBodyTooLarge::new()orResponseBodyTooLarge::default(). -
Breaking Built-in reqwest and hyper clients now return HTTP 4xx and 5xx
responses asOk(Response<Bytes>)instead ofErr(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 returnErr.
If your code relied onsend_bytesreturningErrfor non-success statuses,
callResponseExt::error_for_status()on the response instead. -
Breaking Removed
reqwest-rustls-webpki-rootsfeature. Thewebpki-rootscargo feature was
removed fromreqwestin v0.13.0. Usereqwest-rustlsinstead, which now correctly enables
reqwest/rustls(platform native trust roots). To use Mozilla's embedded CA bundle, construct a
customreqwest::Clientwith arustls::ClientConfigcontaining
rustls::RootCertStore::from_iter(webpki_roots::TLS_SERVER_ROOTS.iter().cloned()), then supply it
to the exporter withwith_http_client().
open-telemetry/opentelemetry-rust (opentelemetry-otlp)
v0.33.0
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 opaqueParseConfigError
instead ofExporterBuildError. Update explicit result types and error handling
that expectsExporterBuildError::UnsupportedCompressionAlgorithm. The new error
implementsDisplayandstd::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. Compressionnoneexplicitly
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 customRetryPolicyto change the behavior. - Migration for users of the experimental retry features: If your
Cargo.tomlenablesexperimental-grpc-retryor
experimental-http-retry, remove those feature flags. No migration action is
required for users who did not enable them.
#3621 - Breaking Make the
retryandretry_classificationmodules crate-private,
removing their retry engine, error type, and protocol classifiers from the
public API.RetryPolicyremains available from the crate root with private
fields and fluent configuration methods. Replace imports from
opentelemetry_otlp::retrywithopentelemetry_otlp::RetryPolicy, and replace
struct literals with itswith_*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 honorsRetry-Afteron 503 responses. - Honor positive gRPC
RetryInfodelays returned withUnavailableresponses. - Continue exponential backoff from server-provided
RetryInfoand
Retry-Afterdelays 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: removedTryFrom<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
Defaultfrom theTonicExporterBuilderSetand
HttpExporterBuilderSettypestate markers. This also removesDefaultfrom
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)]NoExporterConfigtype. -
Breaking Mark
ProtocolandCompressionas 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 resolveOTEL_EXPORTER_OTLP_PROTOCOLwhen 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()andwith_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
HttpExporterBuilderand
TonicExporterBuildertransport-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().
- Replace
-
Breaking Removed the deprecated
tlsfeature alias. Replacetlswith
tls-ring, or selecttls-aws-lcortls-provider-agnosticexplicitly. -
Exporter builder usage is unchanged. Breaking for code matching or constructing
removed error variants: SimplifiedExporterBuildErrorto the exhaustive
InvalidConfiguration(String)andInternalFailure(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_sizeto 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=trueuseshttp://,INSECURE=false(default) useshttps://with auto-TLS.
Breaking: Schemeless endpoints (e.g.,collector.example.com:4317) now default tohttps://
instead of being passed as-is. SetOTEL_EXPORTER_OTLP_INSECURE=truefor plaintext connections.
Endpoints with an explicit scheme (e.g.,http://,https://,unix://) are unaffected.
#774
#984 -
Breaking Removed the
serializefeature flag and its implicitserde
dependency. This feature gatedSerialize/Deserializederives on
ProtocolandCompression, 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
opentelemetrycrate in 2022.
Migration: Removeserialize(andserde, 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 toProtocolorCompressionwhen
building the exporter.
#3711 -
Breaking Removed
reqwest-rustls-webpki-rootsfeature. Thewebpki-rootscargo feature was
removed fromreqwestin v0.13.0, making this feature broken for anyone resolvingreqwest >= 0.13.0.
Migration: Usereqwest-rustlsinstead (now correctly usesreqwest/rustlswith 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
open-telemetry/opentelemetry-rust (opentelemetry_sdk)
v0.33.0
Released 2026-Sep-18
- Publicly export the
OTEL_*/OTEL_*_DEFAULTenvironment variable name and
default value constants forBatchSpanProcessor(opentelemetry_sdk::trace),
BatchLogProcessor(opentelemetry_sdk::logs), andPeriodicReader
(opentelemetry_sdk::metrics), so downstream configuration systems can read
the SDK's spec-defined defaults programmatically instead of duplicating
them. As part of this,PeriodicReader's previously-private
DEFAULT_INTERVAL/METRIC_EXPORT_INTERVAL_NAMEconstants were renamed
toOTEL_METRIC_EXPORT_INTERVAL_DEFAULT/OTEL_METRIC_EXPORT_INTERVALto
match the naming convention already used elsewhere.
(#3623) - Added SDK self-observability metrics, feature-gated behind
experimental_metrics_bound_instruments:otel.sdk.log.createdcounts log
records submitted to the SDK;otel.sdk.processor.log.processedand
otel.sdk.processor.span.processedcount records and spans submitted to an
exporter by batch and simple processors, witherror.typereporting items
dropped before submission; andotel.sdk.processor.log.queue.capacity
reports the configuredBatchLogProcessorqueue capacity.
(#3514,
#3608,
#3609,
#3611) - Made
futures-channel,futures-executor,futures-util, andthiserror
optional, enabling a minimal SDK build. Withdefault-features = false, the
SDK's only dependency is theopentelemetryAPI crate.
(#3593) - Bound instruments are now available for
GaugeandUpDownCountervia the
newBoundGauge<T>andBoundUpDownCounter<T>types exposed by the
opentelemetrycrate. Requires theexperimental_metrics_bound_instruments
feature. - Fixed a race in
BatchSpanProcessorandBatchLogProcessorwhere a
span/log enqueued just beforeforce_flush()orshutdown()could be
missed by the flush and dropped at shutdown: the pending-item counter is
now incremented before enqueueing (and reverted if the queue is full), so
the worker's counter snapshot can no longer under-count items already in
the queue (#3453). - Default SDK Resource construction now falls back to
unknown_serviceunder
Miri instead of callingstd::env::current_exe(), avoiding an abort in Miri
isolation mode while preserving the normal
unknown_service:<process.executable.name>fallback outside Miri. - Fixed asynchronous counters (
ObservableCounter,ObservableUpDownCounter)
using delta temporality reporting incorrect deltas when observed attributes
were recorded in an unsorted key order.
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 is behind base branch, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about these updates again.
- If you want to rebase/retry this PR, check this box
This PR was generated by Mend Renovate. View the repository job log.