diff --git a/opentelemetry-otlp/src/lib.rs b/opentelemetry-otlp/src/lib.rs index 05c84744cc..7cb37a1780 100644 --- a/opentelemetry-otlp/src/lib.rs +++ b/opentelemetry-otlp/src/lib.rs @@ -39,10 +39,13 @@ //! .build()?; //! //! // Create a tracer provider with the exporter -//! let _ = opentelemetry_sdk::trace::SdkTracerProvider::builder() +//! let tracer_provider = opentelemetry_sdk::trace::SdkTracerProvider::builder() //! .with_simple_exporter(otlp_exporter) //! .build(); //! +//! // Set it as the global provider +//! global::set_tracer_provider(tracer_provider); +//! //! // Get a tracer and create spans //! let tracer = global::tracer("my_tracer"); //! tracer.in_span("doing_work", |_cx| { @@ -62,31 +65,71 @@ //! $ docker run -p 4317:4317 otel/opentelemetry-collector:latest //! ``` //! -//! Configure your application to export traces via gRPC: +//! Configure your application to export traces via gRPC (the tonic client requires a Tokio runtime): +//! +//! - With `[tokio::main]` //! //! ```no_run //! # #[cfg(all(feature = "trace", feature = "grpc-tonic"))] //! # { -//! use opentelemetry::global; -//! use opentelemetry::trace::Tracer; +//! use opentelemetry::{global, trace::Tracer}; //! -//! fn main() -> Result<(), Box> { +//! #[tokio::main] +//! async fn main() -> Result<(), Box> { //! // Initialize OTLP exporter using gRPC (Tonic) //! let otlp_exporter = opentelemetry_otlp::SpanExporter::builder() //! .with_tonic() //! .build()?; //! //! // Create a tracer provider with the exporter -//! let _ = opentelemetry_sdk::trace::SdkTracerProvider::builder() +//! let tracer_provider = opentelemetry_sdk::trace::SdkTracerProvider::builder() //! .with_simple_exporter(otlp_exporter) //! .build(); //! +//! // Set it as the global provider +//! global::set_tracer_provider(tracer_provider); +//! +//! // Get a tracer and create spans +//! let tracer = global::tracer("my_tracer"); +//! tracer.in_span("doing_work", |_cx| { +//! // Your application logic here... +//! }); +//! +//! Ok(()) +//! # } +//! } +//! ``` +//! +//! - Without `[tokio::main]` +//! +//! ```no_run +//! # #[cfg(all(feature = "trace", feature = "grpc-tonic"))] +//! # { +//! use opentelemetry::{global, trace::Tracer}; +//! +//! fn main() -> Result<(), Box> { +//! // Initialize OTLP exporter using gRPC (Tonic) +//! let rt = tokio::runtime::Runtime::new()?; +//! let tracer_provider = rt.block_on(async { +//! let exporter = opentelemetry_otlp::SpanExporter::builder() +//! .with_tonic() +//! .build() +//! .expect("Failed to create span exporter"); +//! opentelemetry_sdk::trace::SdkTracerProvider::builder() +//! .with_simple_exporter(exporter) +//! .build() +//! }); +//! +//! // Set it as the global provider +//! global::set_tracer_provider(tracer_provider); +//! //! // Get a tracer and create spans //! let tracer = global::tracer("my_tracer"); //! tracer.in_span("doing_work", |_cx| { //! // Your application logic here... //! }); //! +//! // Ensure the runtime (`rt`) remains active until the program ends //! Ok(()) //! # } //! }