open-telemetry / opentelemetry-rust

The Rust OpenTelemetry implementation
https://opentelemetry.io
Apache License 2.0
1.85k stars 434 forks source link

Build Errors with recent OpenTelemetry SDK update 0.26.0 with the trait `opentelemetry::trace::tracer::Tracer' #2167

Closed douggynix closed 3 weeks ago

douggynix commented 3 weeks ago

Opentelemetry SDK recent update seems breaking some features provided in the documentation itself. For example, this one below is giving errors about Traits not implemented. Is there a pending fix for this issue? This recent update is breaking code that was working before as stated being correct by the official documentation.

----------- ^^^^^^ the trait `opentelemetry::trace::tracer::Tracer` is not implemented for `opentelemetry_sdk::trace::tracer::Tracer`
let otel_layer = tracing_opentelemetry::layer().with_tracer(tracer);
                                                       |required by a bound introduced by this call

    = help: the following other types implement trait `opentelemetry::trace::tracer::Tracer`:
              opentelemetry::global::trace::BoxedTracer
              opentelemetry::trace::noop::NoopTracer
              opentelemetry_sdk::trace::tracer::Tracer
note: required by a bound in `OpenTelemetryLayer::<S, T>::with_tracer`
   --> /home/douggy/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tracing-opentelemetry-0.26.0/src/layer.rs:591:17
    |
589 |     pub fn with_tracer<Tracer>(self, tracer: Tracer) -> OpenTelemetryLayer<S, Tracer>
    |            ----------- required by a bound in this associated function
590 |     where
591 |         Tracer: otel::Tracer + PreSampledTracer + 'static,
    |                 ^^^^^^^^^^^^ required by this bound in `OpenTelemetryLayer::<S, T>::with_tracer`
use tracing_subscriber::layer::SubscriberExt;
use tracing_subscriber::Registry;
use opentelemetry::trace::TracerProvider;

fn main(){
    let otlp_exporter = opentelemetry_otlp::new_exporter().tonic();
    let tracer = opentelemetry_otlp::new_pipeline()
        .tracing()
        .with_exporter(otlp_exporter)
        .install_simple()
        .unwrap()
        .tracer("trace_demo");

    // Create a layer with the configured tracer
    let otel_layer = tracing_opentelemetry::layer().with_tracer(tracer);
}
lalitb commented 3 weeks ago

What is the version of tracing_opentelemetry you are using? I don't think there is a version available supporting otel v26. refer - https://github.com/tokio-rs/tracing-opentelemetry/pull/169

douggynix commented 3 weeks ago

@lalitb From my Cargo.toml, i am using these dependencies. and the tracing version is

opentelemetry = "0.26.0" opentelemetry-otlp = { version = "0.26.0", features = ["reqwest-client"] } opentelemetry-semantic-conventions = "0.26.0" opentelemetry_sdk = { version = "0.26.0", features = ["tokio", "rt-tokio"] }

tracing = { version = "0.1.40", features = ["log"] } tracing-actix-web = "0.7.13" tracing-bunyan-formatter = "0.3.9" tracing-log = "0.2.0" tracing-opentelemetry = "0.26.0" tracing-subscriber = { version = "0.3.18", features = ["registry", "env-filter"] }

However I am seeing both version from Cargo.lock :

[[package]] name = "tracing-opentelemetry" version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a9784ed4da7d921bc8df6963f8c80a0e4ce34ba6ba76668acadd3edbd985ff3b" dependencies = [ "js-sys", "once_cell", "opentelemetry 0.24.0", "opentelemetry_sdk 0.24.1", "smallvec", "tracing", "tracing-core", "tracing-log 0.2.0", "tracing-subscriber", "web-time", ]

[[package]] name = "tracing-opentelemetry" version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5eabc56d23707ad55ba2a0750fc24767125d5a0f51993ba41ad2c441cc7b8dea" dependencies = [ "js-sys", "once_cell", "opentelemetry 0.25.0", "opentelemetry_sdk 0.25.0", "smallvec", "tracing", "tracing-core", "tracing-log 0.2.0", "tracing-subscriber", "web-time", ]

lalitb commented 3 weeks ago

@douggynix This won't work, you need to wait for tracing-opentelemetry v0.27.0, which will bring the support for otel v0.26.

douggynix commented 3 weeks ago

I have 'reqwest' crate with tracing feature enabled. It seems pointing to the older version of the tracing crate: [[package]] name = "reqwest-tracing" version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bfdd9bfa64c72233d8dd99ab7883efcdefe9e16d46488ecb9228b71a2e2ceb45" dependencies = [ "anyhow", "async-trait", "getrandom", "http 1.1.0", "matchit 0.8.4", "opentelemetry 0.24.0", "reqwest", "reqwest-middleware", "tracing", "tracing-opentelemetry 0.25.0", ]

douggynix commented 3 weeks ago

You would suggest me to downgrade opentelemetry sdk. Thanks for your suggestion. I am going to undo all these updates

lalitb commented 3 weeks ago

Closing this issue as the error is caused by incompatible OpenTelemetry versions across other crates that are bringing OpenTelemetry as a dependency.