我的这个函数在opentelemetry = { version = "0.17", features = ["tokio"] }和opentelemetry-jaeger = { version = "0.16", features = ["rt-tokio"] }中运行得非常好。
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"] },它不再编译了
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我查看了上述板条箱的更改日志,发现我应该更改哪些内容以使其再次编译,并没有发现任何明显的变化。
我该换什么?
发布于 2022-09-17 19:14:36
很简单。您正在使用追踪-opentelemetry连接追迹和蛋白石法生态系统,但是到目前为止,机箱还没有更新以支持opentelementry的0.18版本。如果没有这一层功能,除非您想放弃跟踪集成,否则您就不能更新到最新的opentelem遥测版本。
我看到了最新版本的开发人员已合并为支援,但它似乎还没有发布。耐心点。:)
https://stackoverflow.com/questions/73756524
复制相似问题