[英]Instrument library in Rust with OpenTelemetry
Im learning tracing in Rust and open-telemetry in Rust .我正在学习Rust 中的跟踪和 Rust 中的开放遥测。 I feel there are too many concepts and too many crates (at least in Rust) to see traces.
我觉得有太多的概念和太多的 crate(至少在 Rust 中)看不到痕迹。
I wrote a simple lib app that adds two u32
s.我编写了一个简单的 lib 应用程序,它添加了两个
u32
。
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)
}
And then Im using the lib in my bin app as below.然后我在我的 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();
}
The most confusing part is my apps Cargo.toml
which looks like最令人困惑的部分是我的应用
Cargo.toml
看起来像
...
tracing-subscriber = { version = "0.2.15" }
tracing-opentelemetry = { version= "0.11.0"}
opentelemetry = "0.12.0"
opentelemetry-jaeger = {version = "0.11.0" }
...
What on earth are those different crates are for?那些不同的板条箱到底是干什么用的? The only crate that makes sense is
opentelemetry-jaeger
.唯一有意义的箱子是
opentelemetry-jaeger
。 Are others even required?还需要其他人吗?
And to my main question: Im running Jaeger's all-in-one docker container.对于我的主要问题:我正在运行 Jaeger 的一体化 docker 容器。 But when I visit
http://localhost:16686
...I see no traces.但是当我访问
http://localhost:16686
...我看不到任何痕迹。 Does anyone know what's happening?有谁知道发生了什么?
Well..when I create a jaeger pipeline in setup_global_subscriber()
... the _uninstall
being returned gets dropped at the end of the method.好吧..当我在
setup_global_subscriber()
中创建一个 jaeger 管道时......返回的_uninstall
在方法结束时被删除。 And when it gets dropped, collector shuts down.当它被丢弃时,收集器会关闭。
To get traces I had to move contents of setup_global_subscriber()
in main()
.为了获得跟踪,我必须在
main()
中移动setup_global_subscriber()
的内容。
##$&@(& me. ##$&@(&我。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.