@@ -2,27 +2,38 @@ use opentelemetry::sdk::Resource;
2
2
use opentelemetry:: {
3
3
global, sdk:: propagation:: TraceContextPropagator , sdk:: trace as sdktrace, trace:: TraceError ,
4
4
} ;
5
+ use opentelemetry_otlp:: SpanExporterBuilder ;
5
6
6
7
pub fn identity ( v : opentelemetry_otlp:: OtlpTracePipeline ) -> opentelemetry_otlp:: OtlpTracePipeline {
7
8
v
8
9
}
9
10
11
+ // see https://opentelemetry.io/docs/reference/specification/protocol/exporter/
10
12
pub fn init_tracer < F > ( resource : Resource , transform : F ) -> Result < sdktrace:: Tracer , TraceError >
11
13
where
12
14
F : FnOnce ( opentelemetry_otlp:: OtlpTracePipeline ) -> opentelemetry_otlp:: OtlpTracePipeline ,
13
15
{
14
16
use opentelemetry_otlp:: WithExportConfig ;
15
17
16
18
global:: set_text_map_propagator ( TraceContextPropagator :: new ( ) ) ;
17
- // TODO try to autodetect if http or grpc should be used (eg based on env variable, port ???)
18
- //endpoint (default = 0.0.0.0:4317 for grpc protocol, 0.0.0.0:4318 http protocol):
19
- //.http().with_endpoint(collector_url),
20
- let endpoint_grpc = std:: env:: var ( "OTEL_EXPORTER_OTLP_ENDPOINT" )
21
- . or_else ( |_| std:: env:: var ( "OTEL_EXPORTER_OTLP_TRACES_ENDPOINT" ) )
22
- . unwrap_or_else ( |_| "http://127.0.0.1:4317" . to_string ( ) ) ;
23
- let exporter = opentelemetry_otlp:: new_exporter ( )
24
- . tonic ( )
25
- . with_endpoint ( endpoint_grpc) ;
19
+ let protocol = std:: env:: var ( "OTEL_EXPORTER_OTLP_TRACES_PROTOCOL" )
20
+ . or_else ( |_| std:: env:: var ( "OTEL_EXPORTER_OTLP_PROTOCOL" ) )
21
+ . unwrap_or_else ( |_| "http/protobuf" . to_string ( ) ) ;
22
+ let endpoint = std:: env:: var ( "OTEL_EXPORTER_OTLP_TRACES_ENDPOINT" )
23
+ . or_else ( |_| std:: env:: var ( "OTEL_EXPORTER_OTLP_ENDPOINT" ) )
24
+ . ok ( ) ;
25
+
26
+ let exporter: SpanExporterBuilder = match protocol. as_str ( ) {
27
+ "http/protobuf" => opentelemetry_otlp:: new_exporter ( )
28
+ . http ( )
29
+ . with_endpoint ( endpoint. unwrap_or_else ( || "http://localhost:4318" . to_string ( ) ) ) //Devskim: ignore DS137138
30
+ . into ( ) ,
31
+ _ => opentelemetry_otlp:: new_exporter ( )
32
+ . tonic ( )
33
+ . with_endpoint ( endpoint. unwrap_or_else ( || "http://localhost:4317" . to_string ( ) ) ) //Devskim: ignore DS137138
34
+ . into ( ) ,
35
+ } ;
36
+
26
37
let mut pipeline = opentelemetry_otlp:: new_pipeline ( )
27
38
. tracing ( )
28
39
. with_exporter ( exporter)
0 commit comments