如何解决带有 OpenTelemetry 的 Rust 仪器库
我正在学习 tracing in Rust 和 open-telemetry in Rust。感觉概念太多,板条箱太多(至少在 Rust 中)看不到痕迹。
use std::ops::Add;
pub fn add(f: u32,s: u32) -> u32 {
let span = tracing::info_span!("Add function",?f,?s);
let _guard = span.enter();
tracing::info!("Info event");
f.add(s)
}
然后我在我的 bin 应用程序中使用 lib,如下所示。
use TracedLibrary::add;
use tracing_opentelemetry::OpenTelemetryLayer;
use tracing_subscriber::util::SubscriberInitExt;
use opentelemetry::{global,sdk::propagation::TraceContextPropagator};
use tracing_subscriber::layer::SubscriberExt;
use tracing_subscriber::Registry;
fn main() {
setup_global_subscriber();
let sum = add::add(1,2);
}
fn setup_global_subscriber() {
global::set_text_map_propagator(TraceContextPropagator::new());
let (tracer,_uninstall) = opentelemetry_jaeger::new_pipeline()
.with_service_name("trace_demo_2")
.install().expect("Error initializing Jaeger exporter");
let telemetry = tracing_opentelemetry::layer().with_tracer(tracer);
Registry::default()
.with(telemetry).init();
}
最令人困惑的部分是我的应用Cargo.toml
,它看起来像
...
tracing-subscriber = { version = "0.2.15" }
tracing-opentelemetry = { version= "0.11.0"}
opentelemetry = "0.12.0"
opentelemetry-jaeger = {version = "0.11.0" }
...
这些不同的板条箱到底是干什么用的?唯一有意义的板条箱是 opentelemetry-jaeger
。其他人还需要吗?
对于我的主要问题:我正在运行 Jaeger 的一体式 Docker 容器。但是当我访问 http://localhost:16686
时......我看不到任何痕迹。
有谁知道发生了什么?
解决方法
好吧..当我在 setup_global_subscriber()
中创建一个 jaeger 管道时......返回的 _uninstall
在方法结束时被丢弃。
当它掉落时,收集器关闭。
为了获得跟踪,我必须将 setup_global_subscriber()
的内容移动到 main()
中。
##$&@(& 我。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。