簡體   English   中英

帶有 OpenTelemetry 的 Rust 中的儀器庫

[英]Instrument library in Rust with OpenTelemetry

我正在學習Rust 中的跟蹤和 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)
}

然后我在我的 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在方法結束時被刪除。 當它被丟棄時,收集器會關閉。

為了獲得跟蹤,我必須在main()中移動setup_global_subscriber()的內容。

##$&@(&我。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM