Skip to content

Instantly share code, notes, and snippets.

@wperron
Created December 14, 2022 15:08
Show Gist options
  • Save wperron/c90c945e8803a8b36c184a44675429fc to your computer and use it in GitHub Desktop.
Save wperron/c90c945e8803a8b36c184a44675429fc to your computer and use it in GitHub Desktop.
Breaking OpenTelemetry `global::shutdown_tracer_provider`
[package]
name = "tokio-lifetime"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
opentelemetry = { version = "0.18.0", features = ["rt-tokio"] }
opentelemetry-otlp = "0.11.0"
tokio = { version = "1.23.0", features = ["full"] }
use std::time::Duration;
use opentelemetry::{
global, runtime as otel_runtime,
sdk::{self, trace},
trace::{Tracer, TracerProvider},
};
use opentelemetry_otlp::WithExportConfig;
fn main() {
do_work();
global::shutdown_tracer_provider();
std::thread::sleep(Duration::from_millis(100));
}
fn do_work() {
println!("==> setting up runtime <==");
let rt = tokio::runtime::Builder::new_multi_thread()
.enable_all()
.build()
.expect("failed to build tokio multi-thread runtime");
let _guard = rt.enter();
println!("==> setting up tracer <==");
let tracer = init_tracing();
println!("==> creating a span and shutting down provider <==");
tracer.in_span("demo", |_cx| {
std::thread::sleep(Duration::from_millis(5));
});
}
fn init_tracing() -> trace::Tracer {
let mut tracer_provider_builder = sdk::trace::Builder::default();
let exporter_builder: opentelemetry_otlp::SpanExporterBuilder =
opentelemetry_otlp::new_exporter().tonic().with_env().into();
tracer_provider_builder = tracer_provider_builder.with_batch_exporter(
exporter_builder
.build_span_exporter()
.expect("failed to build span exporter"),
otel_runtime::Tokio,
);
let provider = tracer_provider_builder.build();
let tracer = provider.versioned_tracer("tokio-lifetime", Some("0.1.0"), None);
global::set_tracer_provider(provider);
tracer
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment