首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法编译,因为opentelem遥测和opentelemetry更新

无法编译,因为opentelem遥测和opentelemetry更新
EN

Stack Overflow用户
提问于 2022-09-17 16:18:34
回答 1查看 98关注 0票数 0

我的这个函数在opentelemetry = { version = "0.17", features = ["tokio"] }opentelemetry-jaeger = { version = "0.16", features = ["rt-tokio"] }中运行得非常好。

代码语言:javascript
复制
pub fn get_subscriber(name: String, env_filter: String) -> impl Subscriber + Sync + Send {
    // Building the jaeger layer, if needed
    let telemetry = if std::env::var("JAEGER_ENABLED").is_ok() {
        let tracer = opentelemetry_jaeger::new_pipeline()
            .with_service_name(&name)
            .install_batch(opentelemetry::runtime::Tokio)
            .unwrap();
        Some(tracing_opentelemetry::layer().with_tracer(tracer))
    } else {
        None
    };

    let env_filter =
        EnvFilter::try_from_default_env().unwrap_or_else(|_| EnvFilter::new(env_filter));
    let formatting_layer = BunyanFormattingLayer::new(name, std::io::stdout);

    Registry::default()
        .with(env_filter)
        .with(JsonStorageLayer)
        .with(formatting_layer)
        .with(sentry_tracing::layer())
        .with(telemetry)
}

一切都像这样工作得很好,启用后我可以在Jaeger中找到我的跟踪。

因为我更新到opentelemetry = { version = "0.18", features = ["rt-tokio"] }opentelemetry-jaeger = { version = "0.17", features = ["rt-tokio"] },它不再编译了

代码语言:javascript
复制
   Compiling rss-common v0.1.0 (/home/eric/dev/rss-aggregator/rss-common)
error[E0277]: the trait bound `opentelemetry::sdk::trace::Tracer: opentelemetry::trace::tracer::Tracer` is not satisfied
   --> rss-common/src/observability.rs:14:57
    |
14  |         Some(tracing_opentelemetry::layer().with_tracer(tracer))
    |                                             ----------- ^^^^^^ the trait `opentelemetry::trace::tracer::Tracer` is not implemented for `opentelemetry::sdk::trace::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::sdk::trace::tracer::Tracer
              opentelemetry::trace::noop::NoopTracer
note: required by a bound in `OpenTelemetryLayer::<S, T>::with_tracer`
   --> /home/eric/.cargo/registry/src/github.com-1ecc6299db9ec823/tracing-opentelemetry-0.17.4/src/layer.rs:464:17
    |
464 |         Tracer: otel::Tracer + PreSampledTracer + 'static,
    |                 ^^^^^^^^^^^^ required by this bound in `OpenTelemetryLayer::<S, T>::with_tracer`

error[E0277]: the trait bound `opentelemetry::sdk::trace::Tracer: PreSampledTracer` is not satisfied
   --> rss-common/src/observability.rs:14:57
    |
14  |         Some(tracing_opentelemetry::layer().with_tracer(tracer))
    |                                             ----------- ^^^^^^ the trait `PreSampledTracer` is not implemented for `opentelemetry::sdk::trace::Tracer`
    |                                             |
    |                                             required by a bound introduced by this call
    |
    = help: the following other types implement trait `PreSampledTracer`:
              opentelemetry::sdk::trace::tracer::Tracer
              opentelemetry::trace::noop::NoopTracer
note: required by a bound in `OpenTelemetryLayer::<S, T>::with_tracer`
   --> /home/eric/.cargo/registry/src/github.com-1ecc6299db9ec823/tracing-opentelemetry-0.17.4/src/layer.rs:464:32
    |
464 |         Tracer: otel::Tracer + PreSampledTracer + 'static,
    |                                ^^^^^^^^^^^^^^^^ required by this bound in `OpenTelemetryLayer::<S, T>::with_tracer`

error[E0277]: the trait bound `opentelemetry::sdk::trace::Tracer: opentelemetry::trace::tracer::Tracer` is not satisfied
    --> rss-common/src/observability.rs:28:15
     |
28   |         .with(telemetry)
     |          ---- ^^^^^^^^^ the trait `opentelemetry::trace::tracer::Tracer` is not implemented for `opentelemetry::sdk::trace::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::sdk::trace::tracer::Tracer
               opentelemetry::trace::noop::NoopTracer
     = note: required because of the requirements on the impl of `__tracing_subscriber_Layer<Layered<SentryLayer<Layered<BunyanFormattingLayer<fn() -> Stdout {stdout}>, Layered<JsonStorageLayer, Layered<EnvFilter, Registry>>>>, Layered<BunyanFormattingLayer<fn() -> Stdout {stdout}>, Layered<JsonStorageLayer, Layered<EnvFilter, Registry>>>>>` for `OpenTelemetryLayer<Layered<SentryLayer<Layered<BunyanFormattingLayer<fn() -> Stdout {stdout}>, Layered<JsonStorageLayer, Layered<EnvFilter, Registry>>>>, Layered<BunyanFormattingLayer<fn() -> Stdout {stdout}>, Layered<JsonStorageLayer, Layered<EnvFilter, Registry>>>>, opentelemetry::sdk::trace::Tracer>`
     = note: 1 redundant requirement hidden
     = note: required because of the requirements on the impl of `__tracing_subscriber_Layer<Layered<SentryLayer<Layered<BunyanFormattingLayer<fn() -> Stdout {stdout}>, Layered<JsonStorageLayer, Layered<EnvFilter, Registry>>>>, Layered<BunyanFormattingLayer<fn() -> Stdout {stdout}>, Layered<JsonStorageLayer, Layered<EnvFilter, Registry>>>>>` for `Option<OpenTelemetryLayer<Layered<SentryLayer<Layered<BunyanFormattingLayer<fn() -> Stdout {stdout}>, Layered<JsonStorageLayer, Layered<EnvFilter, Registry>>>>, Layered<BunyanFormattingLayer<fn() -> Stdout {stdout}>, Layered<JsonStorageLayer, Layered<EnvFilter, Registry>>>>, opentelemetry::sdk::trace::Tracer>>`
note: required by a bound in `with`
    --> /home/eric/.cargo/registry/src/github.com-1ecc6299db9ec823/tracing-subscriber-0.3.15/src/layer/mod.rs:1440:12
     |
1440 |         L: Layer<Self>,
     |            ^^^^^^^^^^^ required by this bound in `with`

error[E0277]: the trait bound `opentelemetry::sdk::trace::Tracer: PreSampledTracer` is not satisfied
    --> rss-common/src/observability.rs:28:15
     |
28   |         .with(telemetry)
     |          ---- ^^^^^^^^^ the trait `PreSampledTracer` is not implemented for `opentelemetry::sdk::trace::Tracer`
     |          |
     |          required by a bound introduced by this call
     |
     = help: the following other types implement trait `PreSampledTracer`:
               opentelemetry::sdk::trace::tracer::Tracer
               opentelemetry::trace::noop::NoopTracer
     = note: required because of the requirements on the impl of `__tracing_subscriber_Layer<Layered<SentryLayer<Layered<BunyanFormattingLayer<fn() -> Stdout {stdout}>, Layered<JsonStorageLayer, Layered<EnvFilter, Registry>>>>, Layered<BunyanFormattingLayer<fn() -> Stdout {stdout}>, Layered<JsonStorageLayer, Layered<EnvFilter, Registry>>>>>` for `OpenTelemetryLayer<Layered<SentryLayer<Layered<BunyanFormattingLayer<fn() -> Stdout {stdout}>, Layered<JsonStorageLayer, Layered<EnvFilter, Registry>>>>, Layered<BunyanFormattingLayer<fn() -> Stdout {stdout}>, Layered<JsonStorageLayer, Layered<EnvFilter, Registry>>>>, opentelemetry::sdk::trace::Tracer>`
     = note: 1 redundant requirement hidden
     = note: required because of the requirements on the impl of `__tracing_subscriber_Layer<Layered<SentryLayer<Layered<BunyanFormattingLayer<fn() -> Stdout {stdout}>, Layered<JsonStorageLayer, Layered<EnvFilter, Registry>>>>, Layered<BunyanFormattingLayer<fn() -> Stdout {stdout}>, Layered<JsonStorageLayer, Layered<EnvFilter, Registry>>>>>` for `Option<OpenTelemetryLayer<Layered<SentryLayer<Layered<BunyanFormattingLayer<fn() -> Stdout {stdout}>, Layered<JsonStorageLayer, Layered<EnvFilter, Registry>>>>, Layered<BunyanFormattingLayer<fn() -> Stdout {stdout}>, Layered<JsonStorageLayer, Layered<EnvFilter, Registry>>>>, opentelemetry::sdk::trace::Tracer>>`
note: required by a bound in `with`
    --> /home/eric/.cargo/registry/src/github.com-1ecc6299db9ec823/tracing-subscriber-0.3.15/src/layer/mod.rs:1440:12
     |
1440 |         L: Layer<Self>,
     |            ^^^^^^^^^^^ required by this bound in `with`

error[E0277]: the trait bound `opentelemetry::sdk::trace::Tracer: opentelemetry::trace::tracer::Tracer` is not satisfied
 --> rss-common/src/observability.rs:7:60
  |
7 | pub fn get_subscriber(name: String, env_filter: String) -> impl Subscriber + Sync + Send {
  |                                                            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `opentelemetry::trace::tracer::Tracer` is not implemented for `opentelemetry::sdk::trace::Tracer`
  |
  = help: the following other types implement trait `opentelemetry::trace::tracer::Tracer`:
            opentelemetry::global::trace::BoxedTracer
            opentelemetry::sdk::trace::tracer::Tracer
            opentelemetry::trace::noop::NoopTracer
  = note: required because of the requirements on the impl of `__tracing_subscriber_Layer<Layered<SentryLayer<Layered<BunyanFormattingLayer<fn() -> Stdout {stdout}>, Layered<JsonStorageLayer, Layered<EnvFilter, Registry>>>>, Layered<BunyanFormattingLayer<fn() -> Stdout {stdout}>, Layered<JsonStorageLayer, Layered<EnvFilter, Registry>>>>>` for `OpenTelemetryLayer<Layered<SentryLayer<Layered<BunyanFormattingLayer<fn() -> Stdout {stdout}>, Layered<JsonStorageLayer, Layered<EnvFilter, Registry>>>>, Layered<BunyanFormattingLayer<fn() -> Stdout {stdout}>, Layered<JsonStorageLayer, Layered<EnvFilter, Registry>>>>, opentelemetry::sdk::trace::Tracer>`
  = note: 1 redundant requirement hidden
  = note: required because of the requirements on the impl of `__tracing_subscriber_Layer<Layered<SentryLayer<Layered<BunyanFormattingLayer<fn() -> Stdout {stdout}>, Layered<JsonStorageLayer, Layered<EnvFilter, Registry>>>>, Layered<BunyanFormattingLayer<fn() -> Stdout {stdout}>, Layered<JsonStorageLayer, Layered<EnvFilter, Registry>>>>>` for `Option<OpenTelemetryLayer<Layered<SentryLayer<Layered<BunyanFormattingLayer<fn() -> Stdout {stdout}>, Layered<JsonStorageLayer, Layered<EnvFilter, Registry>>>>, Layered<BunyanFormattingLayer<fn() -> Stdout {stdout}>, Layered<JsonStorageLayer, Layered<EnvFilter, Registry>>>>, opentelemetry::sdk::trace::Tracer>>`
  = note: required because of the requirements on the impl of `tracing::Subscriber` for `Layered<Option<OpenTelemetryLayer<Layered<SentryLayer<Layered<BunyanFormattingLayer<fn() -> Stdout {stdout}>, Layered<JsonStorageLayer, Layered<EnvFilter, Registry>>>>, Layered<BunyanFormattingLayer<fn() -> Stdout {stdout}>, Layered<JsonStorageLayer, Layered<EnvFilter, Registry>>>>, opentelemetry::sdk::trace::Tracer>>, Layered<SentryLayer<Layered<BunyanFormattingLayer<fn() -> Stdout {stdout}>, Layered<JsonStorageLayer, Layered<EnvFilter, Registry>>>>, Layered<BunyanFormattingLayer<fn() -> Stdout {stdout}>, Layered<JsonStorageLayer, Layered<EnvFilter, Registry>>>>>`

error[E0277]: the trait bound `opentelemetry::sdk::trace::Tracer: PreSampledTracer` is not satisfied
 --> rss-common/src/observability.rs:7:60
  |
7 | pub fn get_subscriber(name: String, env_filter: String) -> impl Subscriber + Sync + Send {
  |                                                            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `PreSampledTracer` is not implemented for `opentelemetry::sdk::trace::Tracer`
  |
  = help: the following other types implement trait `PreSampledTracer`:
            opentelemetry::sdk::trace::tracer::Tracer
            opentelemetry::trace::noop::NoopTracer
  = note: required because of the requirements on the impl of `__tracing_subscriber_Layer<Layered<SentryLayer<Layered<BunyanFormattingLayer<fn() -> Stdout {stdout}>, Layered<JsonStorageLayer, Layered<EnvFilter, Registry>>>>, Layered<BunyanFormattingLayer<fn() -> Stdout {stdout}>, Layered<JsonStorageLayer, Layered<EnvFilter, Registry>>>>>` for `OpenTelemetryLayer<Layered<SentryLayer<Layered<BunyanFormattingLayer<fn() -> Stdout {stdout}>, Layered<JsonStorageLayer, Layered<EnvFilter, Registry>>>>, Layered<BunyanFormattingLayer<fn() -> Stdout {stdout}>, Layered<JsonStorageLayer, Layered<EnvFilter, Registry>>>>, opentelemetry::sdk::trace::Tracer>`
  = note: 1 redundant requirement hidden
  = note: required because of the requirements on the impl of `__tracing_subscriber_Layer<Layered<SentryLayer<Layered<BunyanFormattingLayer<fn() -> Stdout {stdout}>, Layered<JsonStorageLayer, Layered<EnvFilter, Registry>>>>, Layered<BunyanFormattingLayer<fn() -> Stdout {stdout}>, Layered<JsonStorageLayer, Layered<EnvFilter, Registry>>>>>` for `Option<OpenTelemetryLayer<Layered<SentryLayer<Layered<BunyanFormattingLayer<fn() -> Stdout {stdout}>, Layered<JsonStorageLayer, Layered<EnvFilter, Registry>>>>, Layered<BunyanFormattingLayer<fn() -> Stdout {stdout}>, Layered<JsonStorageLayer, Layered<EnvFilter, Registry>>>>, opentelemetry::sdk::trace::Tracer>>`
  = note: required because of the requirements on the impl of `tracing::Subscriber` for `Layered<Option<OpenTelemetryLayer<Layered<SentryLayer<Layered<BunyanFormattingLayer<fn() -> Stdout {stdout}>, Layered<JsonStorageLayer, Layered<EnvFilter, Registry>>>>, Layered<BunyanFormattingLayer<fn() -> Stdout {stdout}>, Layered<JsonStorageLayer, Layered<EnvFilter, Registry>>>>, opentelemetry::sdk::trace::Tracer>>, Layered<SentryLayer<Layered<BunyanFormattingLayer<fn() -> Stdout {stdout}>, Layered<JsonStorageLayer, Layered<EnvFilter, Registry>>>>, Layered<BunyanFormattingLayer<fn() -> Stdout {stdout}>, Layered<JsonStorageLayer, Layered<EnvFilter, Registry>>>>>`

For more information about this error, try `rustc --explain E0277`.
error: could not compile `rss-common` due to 6 previous errors

我查看了上述板条箱的更改日志,发现我应该更改哪些内容以使其再次编译,并没有发现任何明显的变化。

我该换什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-17 19:14:36

很简单。您正在使用追踪-opentelemetry连接追迹蛋白石法生态系统,但是到目前为止,机箱还没有更新以支持opentelementry的0.18版本。如果没有这一层功能,除非您想放弃跟踪集成,否则您就不能更新到最新的opentelem遥测版本。

我看到了最新版本的开发人员已合并为支援,但它似乎还没有发布。耐心点。:)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73756524

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档