gpt4 book ai didi

rust - 为什么我在将 OpenTelemetry 发送到 Jaeger 时没有得到跟踪?

转载 作者:行者123 更新时间:2023-12-03 11:38:04 33 4
gpt4 key购买 nike

我在学习tracingopen-telemetry在 rust 中。我觉得有太多的概念和太多的 crate (至少在 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)
}

然后我在我的二进制应用程序中使用该库:

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 到底是干什么用的?唯一有意义的 crate 是 opentelemetry-jaeger。还需要其他的吗?

关于我的主要问题:我正在运行 Jaeger 的一体式 docker 容器。但是当我访问http://localhost:16686时,我没有看到任何痕迹。有谁知道发生了什么事吗?

最佳答案

事实证明,当我在 setup_global_subscriber() 中创建 Jaeger 管道时,返回的 _uninstall 在函数结束时被删除。当它被丢弃时,收集器关闭。

为了获得痕迹,我必须将 setup_global_subscriber() 的内容移动到 main() 中。

关于rust - 为什么我在将 OpenTelemetry 发送到 Jaeger 时没有得到跟踪?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66405824/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com