@@ -18,16 +18,13 @@ use opentelemetry::{
1818 global,
1919 propagation:: { TextMapCompositePropagator , TextMapPropagator } ,
2020 trace:: TracerProvider as _,
21- KeyValue ,
21+ InstrumentationScope , KeyValue ,
2222} ;
23- use opentelemetry_otlp:: MetricsExporterBuilder ;
23+ use opentelemetry_otlp:: { WithExportConfig , WithHttpConfig } ;
2424use opentelemetry_prometheus:: PrometheusExporter ;
2525use opentelemetry_sdk:: {
2626 self ,
27- metrics:: {
28- reader:: { DefaultAggregationSelector , DefaultTemporalitySelector } ,
29- ManualReader , PeriodicReader , SdkMeterProvider ,
30- } ,
27+ metrics:: { ManualReader , PeriodicReader , SdkMeterProvider } ,
3128 propagation:: { BaggagePropagator , TraceContextPropagator } ,
3229 trace:: { Sampler , Tracer , TracerProvider } ,
3330 Resource ,
@@ -41,16 +38,6 @@ static METER_PROVIDER: OnceCell<SdkMeterProvider> = OnceCell::const_new();
4138static PROMETHEUS_REGISTRY : OnceCell < Registry > = OnceCell :: const_new ( ) ;
4239
4340pub fn setup ( config : & TelemetryConfig ) -> anyhow:: Result < Option < Tracer > > {
44- global:: set_error_handler ( |e| {
45- // Don't log the propagation errors, else we'll log an error on each request if
46- // the propagation errors aren't there
47- if matches ! ( e, opentelemetry:: global:: Error :: Propagation ( _) ) {
48- return ;
49- }
50-
51- tracing:: error!( error = & e as & dyn std:: error:: Error ) ;
52- } ) ?;
53-
5441 let propagator = propagator ( & config. tracing . propagators ) ;
5542
5643 // The CORS filter needs to know what headers it should whitelist for
@@ -96,22 +83,22 @@ fn stdout_tracer_provider() -> TracerProvider {
9683}
9784
9885fn otlp_tracer_provider ( endpoint : Option < & Url > ) -> anyhow:: Result < TracerProvider > {
99- use opentelemetry_otlp:: WithExportConfig ;
100-
101- let mut exporter = opentelemetry_otlp:: new_exporter ( )
102- . http ( )
86+ let mut exporter = opentelemetry_otlp:: SpanExporter :: builder ( )
87+ . with_http ( )
10388 . with_http_client ( mas_http:: reqwest_client ( ) ) ;
10489 if let Some ( endpoint) = endpoint {
10590 exporter = exporter. with_endpoint ( endpoint. to_string ( ) ) ;
10691 }
107-
108- let tracer = opentelemetry_otlp:: new_pipeline ( )
109- . tracing ( )
110- . with_exporter ( exporter)
111- . with_trace_config ( trace_config ( ) )
112- . install_batch ( opentelemetry_sdk:: runtime:: Tokio )
92+ let exporter = exporter
93+ . build ( )
11394 . context ( "Failed to configure OTLP trace exporter" ) ?;
11495
96+ let tracer = opentelemetry_sdk:: trace:: TracerProvider :: builder ( )
97+ . with_batch_exporter ( exporter, opentelemetry_sdk:: runtime:: Tokio )
98+ . with_resource ( resource ( ) )
99+ . with_sampler ( Sampler :: AlwaysOn )
100+ . build ( ) ;
101+
115102 Ok ( tracer)
116103}
117104
@@ -122,37 +109,35 @@ fn tracer(config: &TracingConfig) -> anyhow::Result<Option<Tracer>> {
122109 TracingExporterKind :: Otlp => otlp_tracer_provider ( config. endpoint . as_ref ( ) ) ?,
123110 } ;
124111
125- let tracer = tracer_provider
126- . tracer_builder ( env ! ( "CARGO_PKG_NAME" ) )
112+ let scope = InstrumentationScope :: builder ( env ! ( "CARGO_PKG_NAME" ) )
127113 . with_version ( env ! ( "CARGO_PKG_VERSION" ) )
128114 . with_schema_url ( semcov:: SCHEMA_URL )
129115 . build ( ) ;
130116
117+ let tracer = tracer_provider. tracer_with_scope ( scope) ;
118+
131119 global:: set_tracer_provider ( tracer_provider) ;
132120
133121 Ok ( Some ( tracer) )
134122}
135123
136124fn otlp_metric_reader ( endpoint : Option < & url:: Url > ) -> anyhow:: Result < PeriodicReader > {
137- use opentelemetry_otlp:: WithExportConfig ;
138-
139- let mut exporter = opentelemetry_otlp:: new_exporter ( )
140- . http ( )
125+ let mut exporter = opentelemetry_otlp:: MetricExporter :: builder ( )
126+ . with_http ( )
141127 . with_http_client ( mas_http:: reqwest_client ( ) ) ;
142128 if let Some ( endpoint) = endpoint {
143129 exporter = exporter. with_endpoint ( endpoint. to_string ( ) ) ;
144130 }
131+ let exporter = exporter
132+ . build ( )
133+ . context ( "Failed to configure OTLP metric exporter" ) ?;
145134
146- let exporter = MetricsExporterBuilder :: from ( exporter) . build_metrics_exporter (
147- Box :: new ( DefaultTemporalitySelector :: new ( ) ) ,
148- Box :: new ( DefaultAggregationSelector :: new ( ) ) ,
149- ) ?;
150-
151- Ok ( PeriodicReader :: builder ( exporter, opentelemetry_sdk:: runtime:: Tokio ) . build ( ) )
135+ let reader = PeriodicReader :: builder ( exporter, opentelemetry_sdk:: runtime:: Tokio ) . build ( ) ;
136+ Ok ( reader)
152137}
153138
154139fn stdout_metric_reader ( ) -> PeriodicReader {
155- let exporter = opentelemetry_stdout:: MetricsExporter :: default ( ) ;
140+ let exporter = opentelemetry_stdout:: MetricExporter :: builder ( ) . build ( ) ;
156141 PeriodicReader :: builder ( exporter, opentelemetry_sdk:: runtime:: Tokio ) . build ( )
157142}
158143
@@ -230,12 +215,6 @@ fn init_meter(config: &MetricsConfig) -> anyhow::Result<()> {
230215 Ok ( ( ) )
231216}
232217
233- fn trace_config ( ) -> opentelemetry_sdk:: trace:: Config {
234- opentelemetry_sdk:: trace:: Config :: default ( )
235- . with_resource ( resource ( ) )
236- . with_sampler ( Sampler :: AlwaysOn )
237- }
238-
239218fn resource ( ) -> Resource {
240219 let resource = Resource :: new ( [
241220 KeyValue :: new ( semcov:: resource:: SERVICE_NAME , env ! ( "CARGO_PKG_NAME" ) ) ,
0 commit comments