|
1 | 1 | use hello_world::greeter_client::GreeterClient; |
2 | 2 | use hello_world::HelloRequest; |
3 | 3 | use opentelemetry::{global, propagation::Injector}; |
4 | | -use opentelemetry_sdk::{ |
5 | | - propagation::TraceContextPropagator, runtime::Tokio, trace::TracerProvider, |
6 | | -}; |
| 4 | +use opentelemetry_sdk::{propagation::TraceContextPropagator, runtime::Tokio, trace as sdktrace}; |
7 | 5 | use opentelemetry_stdout::SpanExporter; |
8 | 6 |
|
9 | 7 | use opentelemetry::{ |
10 | 8 | trace::{SpanKind, TraceContextExt, Tracer}, |
11 | 9 | Context, KeyValue, |
12 | 10 | }; |
13 | 11 |
|
14 | | -fn init_tracer() { |
| 12 | +fn init_tracer() -> sdktrace::TracerProvider { |
15 | 13 | global::set_text_map_propagator(TraceContextPropagator::new()); |
16 | 14 | // Install stdout exporter pipeline to be able to retrieve the collected spans. |
17 | | - let provider = TracerProvider::builder() |
| 15 | + let provider = sdktrace::TracerProvider::builder() |
18 | 16 | .with_batch_exporter(SpanExporter::default(), Tokio) |
19 | 17 | .build(); |
20 | 18 |
|
21 | | - global::set_tracer_provider(provider); |
| 19 | + global::set_tracer_provider(provider.clone()); |
| 20 | + provider |
22 | 21 | } |
23 | 22 |
|
24 | 23 | struct MetadataMap<'a>(&'a mut tonic::metadata::MetadataMap); |
@@ -75,9 +74,10 @@ async fn greet() -> Result<(), Box<dyn std::error::Error + Send + Sync + 'static |
75 | 74 |
|
76 | 75 | #[tokio::main] |
77 | 76 | async fn main() -> Result<(), Box<dyn std::error::Error + Send + Sync + 'static>> { |
78 | | - init_tracer(); |
| 77 | + let provider = init_tracer(); |
79 | 78 | greet().await?; |
80 | | - opentelemetry::global::shutdown_tracer_provider(); |
| 79 | + |
| 80 | + provider.shutdown()?; |
81 | 81 |
|
82 | 82 | Ok(()) |
83 | 83 | } |
0 commit comments