rust 为什么我在向Jaeger发送OpenTelemetry时没有跟踪?

uinbv5nw  于 12个月前  发布在  其他
关注(0)|答案(2)|浏览(91)

我正在学习Rust中的tracingopen-telemetry。我觉得有太多的概念和太多的板条箱(至少在Rust中),看不到痕迹。
我写了一个简单的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)
}

然后我在我的二进制应用程序中使用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" }

这些不同的箱子到底是干什么用的唯一有意义的crate是opentelemetry-jaeger。其他人也需要吗?
至于我的主要问题:我在运行耶格的一体化码头集装箱但是当我访问http://localhost:16686时,我看不到任何痕迹。有人知道发生了什么吗?

xienkqul

xienkqul1#

当我在setup_global_subscriber()中创建Jaeger管道时,返回的_uninstall在函数的末尾被删除。当它掉下来的时候,收集器就关闭了。
为了获得跟踪,我必须将setup_global_subscriber()的内容移动到main()中。

v7pvogib

v7pvogib2#

我想这就是你需要的。

tracing::subscriber::set_global_default(subscriber);

这将设置一个全局Dispatcher,其中Dispatcher.inner是您的subscriber

相关问题