Skip to content

chore(deps): update opentelemetry to 0.30.0 #2353

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

renovate[bot]
Copy link
Contributor

@renovate renovate bot commented Aug 22, 2024

This PR contains the following updates:

Package Type Update Change
opentelemetry (source) dependencies minor 0.23.0 -> 0.30.0
opentelemetry-otlp (source) dependencies minor 0.16.0 -> 0.30.0
opentelemetry-stdout (source) dependencies minor 0.4.0 -> 0.30.0
opentelemetry_sdk (source) dependencies minor 0.23.0 -> 0.30.0
tracing-opentelemetry dependencies minor 0.24.0 -> 0.30.0

Release Notes

open-telemetry/opentelemetry-rust (opentelemetry)

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 compatability
    • 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 "(),/:;<=>?@&#8203;[\]{} (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.

open-telemetry/opentelemetry-rust (opentelemetry-otlp)

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

  • 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 SpanExporterBuilder and MetricsExporterBuilder.
    • The default interval of 10 seconds is used if none is configured.

v0.27.0

Compare Source

Released 2024-Nov-11

  • Update opentelemetry dependency version to 0.27

  • Update opentelemetry_sdk dependency version to 0.27

  • Update opentelemetry-http dependency version to 0.27

  • Update opentelemetry-proto dependency version to 0.27

  • BREAKING:

    • (#​2217) Replaced: The MetricsExporterBuilder interface is modified from with_temporality_selector to with_temporality example can be seen below:
      Previous Signature:

      MetricsExporterBuilder::default().with_temporality_selector(DeltaTemporalitySelector::new())

      Updated Signature:

      MetricsExporterBuilder::default().with_temporality(opentelemetry_sdk::metrics::Temporality::Delta)
    • (#​2221) Replaced:

      • The opentelemetry_otlp::new_pipeline().{trace,logging,metrics}() interface is now replaced with {TracerProvider,SdkMeterProvider,LoggerProvider}::builder().
      • The opentelemetry_otlp::new_exporter() interface is now replaced with {SpanExporter,MetricsExporter,LogExporter}::builder().

      Pull request #​2221 has a detailed migration guide in the description. See example below,
      and basic-otlp for more details:

      Previous Signature:

      let logger_provider: LoggerProvider = opentelemetry_otlp::new_pipeline()
        .logging()
        .with_resource(RESOURCE.clone())
        .with_exporter(
            opentelemetry_otlp::new_exporter()
                .tonic()
                .with_endpoint("http://localhost:4317")
        )
        .install_batch(runtime::Tokio)?;

      Updated Signature:

      let exporter = LogExporter::builder()
          .with_tonic()
          .with_endpoint("http://localhost:4317")
          .build()?;
      
      Ok(LoggerProvider::builder()
          .with_resource(RESOURCE.clone())
          .with_batch_exporter(exporter, runtime::Tokio)
          .build())
    • Renamed

      • (#​2255): de-pluralize Metric types.
        • MetricsExporter -> MetricExporter
        • MetricsExporterBuilder -> MetricExporterBuilder
    • #​2263
      Support hyper client for opentelemetry-otlp. This can be enabled using flag hyper-client.
      Refer example: https://github.com/open-telemetry/opentelemetry-rust/tree/main/opentelemetry-otlp/examples/basic-otlp-http

v0.26.0

Compare Source

Released 2024-Sep-30

  • Update opentelemetry dependency version to 0.26
  • Update opentelemetry_sdk dependency version to 0.26
  • Update opentelemetry-http dependency version to 0.26
  • Update opentelemetry-proto dependency version to 0.26
  • Bump MSRV to 1.71.1 2140

v0.25.0

Compare Source

  • Update opentelemetry dependency version to 0.25
  • Update opentelemetry_sdk dependency version to 0.25
  • Update opentelemetry-http dependency version to 0.25
  • Update opentelemetry-proto dependency version to 0.25
  • Starting with this version, this crate will align with opentelemetry crate
    on major,minor versions.
  • Breaking
    The logrecord event-name is added as an attribute only if the feature flag
    populate-logs-event-name is enabled. The name of the attribute is changed from
    "name" to "event.name".
    1994,
    2050

v0.17.0

Compare Source

  • Add "metrics", "logs" to default features. With this, default feature list is
    "trace", "metrics" and "logs".
  • Breaking OtlpMetricPipeline.build() no longer invoke the
    global::set_meter_provider. User who setup the pipeline must do it
    themselves using global::set_meter_provider(meter_provider.clone());.
  • Add with_resource on OtlpLogPipeline, replacing the with_config method.
    Instead of using
    .with_config(Config::default().with_resource(RESOURCE::default())) users must
    now use .with_resource(RESOURCE::default()) to configure Resource when using
    OtlpLogPipeline.
  • Breaking The methods OtlpTracePipeline::install_simple() and OtlpTracePipeline::install_batch() would now return TracerProvider instead of Tracer.
    These methods would also no longer set the global tracer provider. It would now be the responsibility of users to set it by calling global::set_tracer_provider(tracer_provider.clone());. Refer to the basic-otlp and basic-otlp-http examples on how to initialize OTLP Trace Exporter.
  • Breaking Correct the misspelling of "webkpi" to "webpki" in features #​1842
  • Bump MSRV to 1.70 #​1840
  • Fixing the OTLP HTTP/JSON exporter. #​1882 - The exporter was broken in the
    previous release.
  • Breaking 1869 The OTLP logs exporter now overrides the InstrumentationScope::name field with the target from LogRecord, if target is populated.
  • Groups batch of LogRecord and Span by their resource and instrumentation scope before exporting, for better efficiency #​1873.
  • Breaking Update to http v1 and tonic v0.12 #​1674
  • Update opentelemetry dependency version to 0.24
  • Update opentelemetry_sdk dependency version to 0.24
  • Update opentelemetry-http dependency version to 0.13
  • Update opentelemetry-proto dependency version to 0.7
open-telemetry/opentelemetry-rust (opentelemetry-stdout)

v0.30.0

Compare Source

Released 2025-May-23

  • Updated opentelemetry dependency to version 0.30.0.
  • Updated opentelemetry_sdk dependency to version 0.30.0.

v0.29.0

Compare Source

Released 2025-Mar-21

  • Update opentelemetry dependency version to 0.29.
  • Update opentelemetry_sdk dependency version to 0.29.

v0.28.0

Compare Source

Released 2025-Feb-10

  • Update opentelemetry dependency version to 0.28.
  • Update opentelemetry_sdk dependency version to 0.28.
  • Bump msrv to 1.75.0.
  • Breaking time fields, StartTime and EndTime is printed on aggregation (Sum, Gauge, Histogram, ExpoHistogram) with 2 tabs, previously it was on aggregation data point, with 3 tabs, see #​2377 and #​2411.
  • Removed unused dependency on ordered-float.
  • Feature flag "populate-logs-event-name" is removed as no longer relevant.
    LogRecord's event_name() is now automatically displayed.

v0.27.0

Compare Source

Released 2024-Nov-11

  • Update opentelemetry dependency version to 0.27

  • Update opentelemetry_sdk dependency version to 0.27

  • Bump MSRV to 1.70 #​2179

  • BREAKING

    • Replaced
      • (#​2217): The MetricsExporterBuilder interface is modified from with_temporality_selector to with_temporality example can be seen below:
        Previous Signature:
      MetricsExporterBuilder::default().with_temporality_selector(DeltaTemporalitySelector::new())
      Updated Signature:
      MetricsExporterBuilder::default().with_temporality(opentelemetry_sdk::metrics::Temporality::Delta)
    • Renamed
      • (#​2255): de-pluralize Metric types.
        • MetricsExporter -> MetricExporter
        • MetricsExporterBuilder -> MetricExporterBuilder

v0.26.0

Compare Source

Released 2024-Sep-30

  • Update opentelemetry dependency version to 0.26
  • Update opentelemetry_sdk dependency version to 0.26

v0.25.0

Compare Source

  • Update opentelemetry dependency version to 0.25
  • Update opentelemetry_sdk dependency version to 0.25
  • Starting with this version, this crate will align with opentelemetry crate
    on major,minor versions.
  • Breaking 1994 The logrecord event-name is added as attribute with
    key name only if the feature flag populate-logs-event-name is enabled.
  • Breaking 2040 Simplified stdout exporter:
    • Now only supports writing to stdout, removing ability to send telemetry to other streams.
    • Output format improved for better human readability.
    • Note: This exporter is intended for learning and debugging purposes only. Not recommended for production use or automated parsing.

v0.5.0

Compare Source

  • Update opentelemetry dependency version to 0.24
  • Update opentelemetry_sdk dependency version to 0.24
open-telemetry/opentelemetry-rust (opentelemetry_sdk)

v0.30.0

Compare Source

Released 2025-May-23

  • Updated opentelemetry and opentelemetry-http dependencies to version 0.30.0.

  • It is now possible to add links to a Span via the SpanRef that you get from
    a Context. 2959

  • Feature: Added context based telemetry suppression. #​2868

    • SdkLogger, SdkTracer modified to respect telemetry suppression based on
      Context. In other words, if the current context has telemetry suppression
      enabled, then logs/spans will be ignored.
    • The flag is typically set by OTel
      components to prevent telemetry from itself being fed back into OTel.
    • BatchLogProcessor, BatchSpanProcessor, and PeriodicReader modified to set
      the suppression flag in their dedicated thread, so that telemetry generated from
      those threads will not be fed back into OTel.
    • Similarly, SimpleLogProcessor
      also modified to suppress telemetry before invoking exporters.
  • Feature: Implemented and enabled cardinality capping for Metrics by
    default. #​2901

    • The default cardinality limit is 2000 and can be customized using Views.
    • This feature was previously removed in version 0.28 due to the lack of
      configurability but has now been reintroduced with the ability to configure
      the limit.
    • Fixed the overflow attribute to correctly use the boolean value true
      instead of the string "true".
      #​2878
  • The shutdown_with_timeout method is added to SpanProcessor, SpanExporter trait and TracerProvider.

  • The shutdown_with_timeout method is added to LogExporter trait.

  • The shutdown_with_timeout method is added to LogProvider and LogProcessor trait.

  • Breaking MetricError, MetricResult no longer public (except when
    spec_unstable_metrics_views feature flag is enabled). OTelSdkResult should
    be used instead, wherever applicable. #​2906

  • Breaking change, affecting custom MetricReader authors:

    • The
      shutdown_with_timeout method is added to MetricReader trait.
    • collect
      method on MetricReader modified to return OTelSdkResult.
      #​2905
    • MetricReader
      trait, ManualReader struct, Pipeline struct, InstrumentKind enum moved
      behind feature flag "experimental_metrics_custom_reader".
      #​2928
  • Views improvements:

    • Core view functionality is now available by default—users can change the
      name, unit, description, and cardinality limit of a metric via views without
      enabling the spec_unstable_metrics_views feature flag. Advanced view
      features, such as custom aggregation or attribute filtering, still require
      the spec_unstable_metrics_views feature.
    • Removed new_view() method and View trait. Views can now be added by passing
      a function with signature Fn(&Instrument) -> Option<Stream> to the with_view
      method on MeterProviderBuilder.
  • Introduced a builder pattern for Stream creation to use with views:

    • Added StreamBuilder struct with methods to configure stream properties
    • Added Stream::builder() method that returns a new StreamBuilder
    • StreamBuilder::build() returns Result<Stream, Box<dyn Error>> enabling
      proper validation.

Example of using views to rename a metric:

let view_rename = |i: &Instrument| {
    if i.name() == "my_histogram" {
        Some(
            Stream::builder()
                .with_name("my_histogram_renamed")
                .build()
                .unwrap(),
        )
    } else {
        None
    }
};

let provider = SdkMeterProvider::builder()
    // add exporters, set resource etc.
    .with_view(view_rename)
    .build();
  • Breaking Aggregation enum moved behind feature flag
    "spec_unstable_metrics_views". This was only required when using advanced view
    capabilities.
    #​2928
  • Breaking change, affecting custom PushMetricExporter authors:
    • The export method on PushMetricExporter now accepts &ResourceMetrics
      instead of &mut ResourceMetrics.
    • ResourceMetrics no longer exposes scope_metrics field, but instead
      offers scope_metrics() method that returns an iterator over the same.
    • ScopeMetrics no longer exposes metrics field, but instead offers
      metrics() method that returns an iterator over the same.
    • Sum, Gauge, Histogram & ExponentialHistogram no longer exposes
      data_points field, but instead offers data_points() method that returns
      an iterator over the same.
    • SumDataPoint, GaugeDataPoint, HistogramDataPoint &
      ExponentialHistogramDataPoint no longer exposes attributes, exemplars
      field, but instead offers attributes(), and exemplars() method that
      returns an iterator over the same.
    • Exemplar no longer exposes filtered_attributes field, but instead
      offers filtered_attributes() method that returns an iterator over
      the same.
    • HistogramDataPoint no longer exposes bounds and bucket_counts, but
      instead offers bounds() and bucket_counts() methods that returns an
      iterator over the same.
    • Metric no longer exposes name, description, unit, data fields, but
      instead offers name(), description(), unit(), and data() accessor methods.
    • ResourceMetrics no longer exposes resource field, but instead offers
      a resource() accessor method.
    • ScopeMetrics no longer exposes scope field, but instead offers
      a scope() accessor method.

v0.29.0

Compare Source

Released 2025-Mar-21

  • Update opentelemetry dependency to 0.29.
  • Update opentelemetry-http dependency to 0.29.
  • Breaking: The Runtime trait has been simplified and refined. See the #​2641
    for the changes.
  • Removed async-std support for Runtime, as async-std crate is deprecated.
  • Calls to MeterProviderBuilder::with_resource, TracerProviderBuilder::with_resource,
    LoggerProviderBuilder::with_resource are now additive (#​2677).
  • Moved ExportError trait from opentelemetry::trace::ExportError to opentelemetry_sdk::export::ExportError
  • Moved TraceError enum from opentelemetry::trace::TraceError to opentelemetry_sdk::trace::TraceError
  • Moved TraceResult type alias from opentelemetry::trace::TraceResult to opentelemetry_sdk::trace::TraceResult
  • Breaking: Make force_flush() in PushMetricExporter synchronous
  • Breaking: Updated the SpanExporter trait method signature:
  fn export(&mut self, batch: Vec<SpanData>) -> BoxFuture<'static, OTelSdkResult>;

to

  fn export(
    &mut self,
    batch: Vec<SpanData>,
) -> impl std::future::Future<Output = OTelSdkResult> + Send;

This affects anyone who writes custom exporters, as custom implementations of SpanExporter
should now define export as an async fn:

  impl trace::SpanExporter for CustomExporter {
    async fn export(&mut self, batch: Vec<trace::SpanData>) -> OTelSdkResult {
        // Implementation here
    }
}
  • Breaking The SpanExporter::export() method no longer requires a mutable reference to self.
    Before:

      async fn export(&mut self, batch: Vec<SpanData>) -> OTelSdkResult

    After:

      async fn export(&self, batch: Vec<SpanData>) -> OTelSdkResult

    Custom exporters will need to internally synchronize any mutable state, if applicable.

  • Breaking The shutdown_with_timeout method is added to MetricExporter trait. This is breaking change for custom MetricExporter authors.

  • Bug Fix: BatchLogProcessor now correctly calls shutdown on the exporter
    when its shutdown is invoked.

  • Reduced some info level logs to debug

  • Breaking for custom LogProcessor/Exporter authors: Changed name
    parameter from &str to Option<&str> in event_enabled method on the
    LogProcessor and LogExporter traits. SdkLogger no longer passes its
    scope name but instead passes the incoming name when invoking
    event_enabled on processors.

  • Breaking for custom LogExporter authors: shutdown() method in
    LogExporter trait no longer requires a mutable ref to self. If the exporter
    needs to mutate state, it should rely on interior mutability.
    2764

  • Breaking (Affects custom Exporter/Processor authors only) Removed
    opentelelemetry_sdk::logs::error::{LogError, LogResult}. These were not
    intended to be public. If you are authoring custom processor/exporters, use
    opentelemetry_sdk::error::OTelSdkError and
    opentelemetry_sdk::error::OTelSdkResult.
    2790

  • Breaking for custom LogProcessor authors: Changed set_resource
    to require mutable ref.
    fn set_resource(&mut self, _resource: &Resource) {}

  • Breaking: InMemoryExporter's return type change.

    • TraceResult<Vec<SpanData>> to Result<Vec<SpanData>, InMemoryExporterError>
    • MetricResult<Vec<ResourceMetrics>> to Result<Vec<ResourceMetrics>, InMemoryExporterError>
    • LogResult<Vec<LogDataWithResource>> to Result<Vec<LogDataWithResource>, InMemoryExporterError>

v0.28.0

Compare Source

Released 2025-Feb-10

Note: Due to the large amount of making changes, check migration guide to
0.28
for a summary that can help majority users to
quickly migrate. The changelog below is the full list of changes.

  • Update opentelemetry dependency to 0.28.

  • Update opentelemetry-http dependency to 0.28.

  • Bump msrv to 1.75.0.

  • Bug fix: For cumulative temporality, ObservableGauge no longer export
    MetricPoints unless measurements were newly reported (in Observable callbacks)
    since last export. This bug fixes ensures ObservableGauge behaves as per OTel
    Spec. The bug is not addressed for other Observable instruments
    #​2213

  • Upgrade the tracing crate used for internal logging to version 0.1.40 or
    later. This is necessary because the internal logging macros utilize the name
    field as metadata, a feature introduced in version 0.1.40.
    #​2418

  • Feature: Introduced a new feature flag,
    experimental_metrics_disable_name_validation, which disables entire
    Instrument Name Validation. This is an experimental feature to unblock use
    cases requiring currently disallowed characters (eg: Windows Perf Counters).
    Use caution when enabling this feature as this breaks guarantees about metric
    name.

  • Bug fix: Empty Tracer names are retained as-is instead of replacing with
    "rust.opentelemetry.io/sdk/tracer"
    #​2486

  • Update EnvResourceDetector to allow resource attribute values containing
    equal signs ("=").
    #​2120

  • ResourceDetector.detect() no longer supports timeout option.

  • Breaking Resource.get() modified to require reference to Key instead of
    owned. Replace get(Key::from_static_str("key")) with
    get(&Key::from_static_str("key"))

  • Feature: Add ResourceBuilder for an easy way to create new Resources

  • Breaking: Remove

  • Resource::{new,empty,from_detectors,new_with_defaults,from_schema_url,merge,default}.
    To create Resources you should only use Resource::builder() or Resource::builder_empty(). See
    #​2322 for a migration guide.

    Example Usage:

    // old
    Resource::default().with_attributes([
        KeyValue::new("service.name", "test_service"),
        KeyValue::new("key", "value"),
    ]);
    
    // new
    Resource::builder()
        .with_service_name("test_service")
        .with_attribute(KeyValue::new("key", "value"))
        .build();
  • Breaking :
    #​2314

    • The LogRecord struct has been updated:
      • All fields are now pub(crate) instead of pub.
      • Getter methods have been introduced to access field values. This change
        impacts custom exporter and processor developers by requiring updates to
        code that directly accessed LogRecord fields. They must now use the provided
        getter methods (e.g., log_record.event_name() instead of
        log_record.event_name).
  • Breaking (Affects custom metric exporter authors only) start_time and
    time is moved from DataPoints to aggregations (Sum, Gauge, Histogram,
    ExpoHistogram) see
    #​2377 and
    #​2411, to
    reduce memory.

  • Breaking start_time is no longer optional for Sum aggregation, see
    #​2367, but
    is still optional for Gauge aggregation see
    #​2389.

  • SimpleLogProcessor modified to be generic over LogExporter to avoid
    dynamic dispatch to invoke exporter. If you were using
    with_simple_exporter to add LogExporter with SimpleLogProcessor, this is
    a transparent change.
    #​2338

  • Breaking opentelemetry::global::shutdown_tracer_provider() removed from the API,
    should now use tracer_provider.shutdown() see
    #​2369 for
    a migration example. "Tracer provider" is cheaply clonable, so users are
    encouraged to set a clone of it as the global (ex:
    global::set_tracer_provider(provider.clone())), so that instrumentations
    and other components can obtain tracers from global::tracer(). The
    tracer_provider must be kept around to call shutdown on it at the end of
    application (ex: tracer_provider.shutdown())

  • Breaking The LogExporter::export() method no longer requires a mutable
    reference to self.: Before: async fn export(&mut self, _batch: LogBatch<'_>) -> LogResult<()> After: async fn export(&self, _batch: LogBatch<'_>) -> LogResult<()> Custom exporters will need to internally synchronize any
    mutable state, if applicable.

  • Breaking Removed the following deprecated struct:

    • logs::LogData - Previously deprecated in version 0.27.1 Migration Guidance:
      This structure is no longer utilized within the SDK, and users should not have
      dependencies on it.
  • Breaking Removed the following deprecated methods:

    • Logger::provider() : Previously deprecated in version 0.27.1
    • Logger::instrumentation_scope() : Previously deprecated in version 0.27.1.
      Migration Guidance: - These methods were intended for log appender authors.
      Keep the clone of the provider handle, instead of depending on above
      methods.
  • Rename opentelemetry_sdk::logs::Builder to
    opentelemetry_sdk::logs::LoggerProviderBuilder.

  • Rename opentelemetry_sdk::trace::Builder to
    opentelemetry_sdk::trace::SdkTracerProviderBuilder.

  • Redesigned PeriodicReader, BatchSpanProcessor, BatchLogProcessor to no longer
    require an async runtime. They create its own background thread instead. When
    pairing with OTLP, grpc-tonic or reqwest-blocking-client are the only
    supported features (hyper, reqwest are not supported) These are now
    enabled by default and can be migrated to by removing the extra rt:Runtime
    argument as shown below.

    • PeriodicReader::builder(exporter,runtime::Tokio).build(); to
      PeriodicReader::builder(exporter).build();
    • .with_batch_exporter(exporter, runtime::Tokio) to
      .with_batch_exporter(exporter)

    The new implementation has following limitations:

    • Does not work if your application cannot spawn new Thread.
    • Does not support hyper, reqwest HTTP Clients
    • Does not support multiple concurrent exports (with_max_concurrent_exports
      is not supported). This existed only for traces.

    If this applies to you, you can get the old behavior back by following steps
    below:

    • Enable one or more of the feature flag from below
      experimental_metrics_periodicreader_with_async_runtime
      experimental_logs_batch_log_processor_with_async_runtime
      experimental_trace_batch_span_processor_with_async_runtime
    • Use updated namespace; i.e
      periodic_reader_with_async_runtime::PeriodicReader,
      log_processor_with_async_runtime::BatchLogProcessor and
      span_processor_with_async_runtime::BatchSpanProcessor
    • Continue using existing features flags rt-tokio,
      rt-tokio-current-thread, or rt-async-std.

    As part of the above redesign of PeriodicReader and BatchProcessors, these
    components no longer enforce timeout themselves and instead relies on
    Exporters to enforce own timeouts. In other words, the following are no longer
    supported.

    • with_max_export_timeout, with_timeout methods on BatchConfigBuilder,
      PeriodicReaderBuilder
    • OTEL_BLRP_EXPORT_TIMEOUT, OTEL_BSP_EXPORT_TIMEOUT

    Users are advised to configure timeout on the Exporters itself. For example,
    in the OTLP exporter, the export timeout can be configured using:

    • Environment variables
      • OTEL_EXPORTER_OTLP_TIMEOUT
      • OTEL_EXPORTER_OTLP_LOGS_TIMEOUT, OTEL_EXPORTER_OTLP_TRACES_TIMEOUT,
        OTEL_EXPORTER_OTLP_METRICS_TIMEOUT
    • The opentelemetry_otlp API, via .with_tonic().with_timeout() or
      .with_http().with_timeout().
  • Breaking Introduced experimental_async_runtime feature for
    runtime-specific traits.

    • Runtime-specific features (rt-tokio, rt-tokio-current-thread, and
      rt-async-std) now depend on the experimental_async_runtime feature.
    • For most users, no action is required. Enabling runtime features such as
      rt-tokio, rt-tokio-current-thread, or rt-async-std will automatically
      enable the experimental_async_runtime feature.
    • If you're implementing a custom runtime, you must explicitly enable the
      experimental_async_runtimefeature in your Cargo.toml and implement the requiredRuntime` traits.
  • Removed Metrics Cardinality Limit feature. This was originally introduced in
    #​1066 with a
    hardcoded limit of 2000 and no ability to change it. This feature will be
    re-introduced in a future date, along with the ability to change the cardinality
    limit.

  • Breaking Removed unused opentelemetry_sdk::Error enum.

  • Breaking (Affects custom Exporter authors only) Moved ExportError trait
    from opentelemetry::export::ExportError to opentelemetry_sdk::ExportError

  • Breaking (Affects custom SpanExporter, SpanProcessor authors only): Rename
    namespaces for Span exporter structs/traits before:
    opentelemetry_sdk::export::spans::{ExportResult, SpanData, SpanExporter};
    now: opentelemetry_sdk::trace::{ExportResult, SpanData, SpanExporter};

  • Breaking (Affects custom LogExporter, LogProcessor authors only): Rename
    namespaces for Log exporter structs/traits. before:
    opentelemetry_sdk::export::logs::{ExportResult, LogBatch, LogExporter}; now:
    opentelemetry_sdk::logs::{ExportResult, LogBatch, LogExporter};

  • Breaking opentelemetry_sdk::LogRecord::default() method is removed. The
    only way to create log record outside opentelemetry_sdk crate is using
    Logger::create_log_record() method.

  • Breaking: Rename namespaces for InMemoryExporters. (The module is still
    under "testing" feature flag)
    before:

    opentelemetry_sdk::testing::logs::{InMemoryLogExporter,
    InMemoryLogExporterBuilder};
    opentelemetry_sdk::testing::trace::{InMemorySpanExporter,
    InMemorySpanExporterBuilder};
    opentelemetry_sdk::testing::metrics::{InMemoryMetricExporter,
    InMemoryMetricExporterBuilder};

    now:

    opentelemetry_sdk::logs::{InMemoryLogExporter, InMemoryLogExporterBuilder};
    opentelemetry_sdk::trace::{InMemorySpanExporter,
    InMemorySpanExporterBuilder};
    opentelemetry_sdk::metrics::{InMemoryMetricExporter,
    InMemoryMetricExporterBuilder};
  • Breaking Renamed LoggerProvider, Logger and LogRecord to
    SdkLoggerProvider,SdkLogger and SdkLogRecord respectively to avoid name
    collision with public API types.
    #​2612

  • Breaking Renamed TracerProvider and Tracer to SdkTracerProvider and


Configuration

📅 Schedule: 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.

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

@renovate renovate bot force-pushed the renovate/opentelemetry branch 2 times, most recently from 38543bf to 68557be Compare September 10, 2024 00:30
@renovate renovate bot changed the title chore(deps): update opentelemetry chore(deps): update opentelemetry to 0.25.0 Sep 10, 2024
@renovate renovate bot force-pushed the renovate/opentelemetry branch from 68557be to 93e4958 Compare September 10, 2024 14:15
@renovate renovate bot changed the title chore(deps): update opentelemetry to 0.25.0 chore(deps): update opentelemetry Sep 10, 2024
@renovate renovate bot force-pushed the renovate/opentelemetry branch from 93e4958 to 5690cdb Compare October 2, 2024 00:57
@renovate renovate bot changed the title chore(deps): update opentelemetry chore(deps): update opentelemetry to 0.26.0 Oct 2, 2024
@renovate renovate bot force-pushed the renovate/opentelemetry branch from 5690cdb to 34b2c5b Compare October 9, 2024 13:11
@renovate renovate bot changed the title chore(deps): update opentelemetry to 0.26.0 chore(deps): update opentelemetry Oct 9, 2024
@renovate renovate bot changed the title chore(deps): update opentelemetry chore(deps): update opentelemetry to 0.27.0 Nov 12, 2024
@renovate renovate bot force-pushed the renovate/opentelemetry branch 2 times, most recently from 20ec3b0 to dc2bee8 Compare November 13, 2024 22:43
@renovate renovate bot changed the title chore(deps): update opentelemetry to 0.27.0 chore(deps): update opentelemetry Nov 13, 2024
@renovate renovate bot force-pushed the renovate/opentelemetry branch from dc2bee8 to f312316 Compare February 10, 2025 22:08
@renovate renovate bot changed the title chore(deps): update opentelemetry chore(deps): update opentelemetry to 0.28.0 Feb 10, 2025
@renovate renovate bot force-pushed the renovate/opentelemetry branch from f312316 to 629324e Compare February 12, 2025 19:29
@renovate renovate bot changed the title chore(deps): update opentelemetry to 0.28.0 chore(deps): update opentelemetry Feb 12, 2025
@renovate renovate bot force-pushed the renovate/opentelemetry branch from 629324e to 1d9124c Compare March 22, 2025 02:01
@renovate renovate bot changed the title chore(deps): update opentelemetry chore(deps): update opentelemetry to 0.29.0 Mar 22, 2025
@renovate renovate bot force-pushed the renovate/opentelemetry branch from 1d9124c to 18240c8 Compare March 23, 2025 18:11
@renovate renovate bot changed the title chore(deps): update opentelemetry to 0.29.0 chore(deps): update opentelemetry Mar 23, 2025
@renovate renovate bot force-pushed the renovate/opentelemetry branch from 18240c8 to 7b4a472 Compare May 24, 2025 12:15
@renovate renovate bot changed the title chore(deps): update opentelemetry chore(deps): update opentelemetry to 0.30.0 May 24, 2025
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