|
39 | 39 | //! .build()?;
|
40 | 40 | //!
|
41 | 41 | //! // Create a tracer provider with the exporter
|
42 |
| -//! let _ = opentelemetry_sdk::trace::SdkTracerProvider::builder() |
| 42 | +//! let tracer_provider = opentelemetry_sdk::trace::SdkTracerProvider::builder() |
43 | 43 | //! .with_simple_exporter(otlp_exporter)
|
44 | 44 | //! .build();
|
45 | 45 | //!
|
| 46 | +//! // Set it as the global provider |
| 47 | +//! global::set_tracer_provider(tracer_provider); |
| 48 | +//! |
46 | 49 | //! // Get a tracer and create spans
|
47 | 50 | //! let tracer = global::tracer("my_tracer");
|
48 | 51 | //! tracer.in_span("doing_work", |_cx| {
|
|
62 | 65 | //! $ docker run -p 4317:4317 otel/opentelemetry-collector:latest
|
63 | 66 | //! ```
|
64 | 67 | //!
|
65 |
| -//! Configure your application to export traces via gRPC: |
| 68 | +//! Configure your application to export traces via gRPC (the tonic client requires a Tokio runtime): |
| 69 | +//! |
| 70 | +//! - With `[tokio::main]` |
66 | 71 | //!
|
67 | 72 | //! ```no_run
|
68 | 73 | //! # #[cfg(all(feature = "trace", feature = "grpc-tonic"))]
|
69 | 74 | //! # {
|
70 |
| -//! use opentelemetry::global; |
71 |
| -//! use opentelemetry::trace::Tracer; |
| 75 | +//! use opentelemetry::{global, trace::Tracer}; |
72 | 76 | //!
|
73 |
| -//! fn main() -> Result<(), Box<dyn std::error::Error + Send + Sync + 'static>> { |
| 77 | +//! #[tokio::main] |
| 78 | +//! async fn main() -> Result<(), Box<dyn std::error::Error + Send + Sync + 'static>> { |
74 | 79 | //! // Initialize OTLP exporter using gRPC (Tonic)
|
75 | 80 | //! let otlp_exporter = opentelemetry_otlp::SpanExporter::builder()
|
76 | 81 | //! .with_tonic()
|
77 | 82 | //! .build()?;
|
78 | 83 | //!
|
79 | 84 | //! // Create a tracer provider with the exporter
|
80 |
| -//! let _ = opentelemetry_sdk::trace::SdkTracerProvider::builder() |
| 85 | +//! let tracer_provider = opentelemetry_sdk::trace::SdkTracerProvider::builder() |
81 | 86 | //! .with_simple_exporter(otlp_exporter)
|
82 | 87 | //! .build();
|
83 | 88 | //!
|
| 89 | +//! // Set it as the global provider |
| 90 | +//! global::set_tracer_provider(tracer_provider); |
| 91 | +//! |
| 92 | +//! // Get a tracer and create spans |
| 93 | +//! let tracer = global::tracer("my_tracer"); |
| 94 | +//! tracer.in_span("doing_work", |_cx| { |
| 95 | +//! // Your application logic here... |
| 96 | +//! }); |
| 97 | +//! |
| 98 | +//! Ok(()) |
| 99 | +//! # } |
| 100 | +//! } |
| 101 | +//! ``` |
| 102 | +//! |
| 103 | +//! - Without `[tokio::main]` |
| 104 | +//! |
| 105 | +//! ```no_run |
| 106 | +//! # #[cfg(all(feature = "trace", feature = "grpc-tonic"))] |
| 107 | +//! # { |
| 108 | +//! use opentelemetry::{global, trace::Tracer}; |
| 109 | +//! |
| 110 | +//! fn main() -> Result<(), Box<dyn std::error::Error + Send + Sync + 'static>> { |
| 111 | +//! // Initialize OTLP exporter using gRPC (Tonic) |
| 112 | +//! let rt = tokio::runtime::Runtime::new()?; |
| 113 | +//! let tracer_provider = rt.block_on(async { |
| 114 | +//! let exporter = opentelemetry_otlp::SpanExporter::builder() |
| 115 | +//! .with_tonic() |
| 116 | +//! .build() |
| 117 | +//! .expect("Failed to create span exporter"); |
| 118 | +//! opentelemetry_sdk::trace::SdkTracerProvider::builder() |
| 119 | +//! .with_simple_exporter(exporter) |
| 120 | +//! .build() |
| 121 | +//! }); |
| 122 | +//! |
| 123 | +//! // Set it as the global provider |
| 124 | +//! global::set_tracer_provider(tracer_provider); |
| 125 | +//! |
84 | 126 | //! // Get a tracer and create spans
|
85 | 127 | //! let tracer = global::tracer("my_tracer");
|
86 | 128 | //! tracer.in_span("doing_work", |_cx| {
|
87 | 129 | //! // Your application logic here...
|
88 | 130 | //! });
|
89 | 131 | //!
|
| 132 | +//! // Ensure the runtime (`rt`) remains active until the program ends |
90 | 133 | //! Ok(())
|
91 | 134 | //! # }
|
92 | 135 | //! }
|
|
0 commit comments