Skip to content

Commit 616d076

Browse files
committed
✨ use OTEL_EXPORTER_OTLP_... environment variable to init tracer for otlp
1 parent 1745c1c commit 616d076

File tree

1 file changed

+20
-9
lines changed

1 file changed

+20
-9
lines changed

src/tools/otlp.rs

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,27 +2,38 @@ use opentelemetry::sdk::Resource;
22
use opentelemetry::{
33
global, sdk::propagation::TraceContextPropagator, sdk::trace as sdktrace, trace::TraceError,
44
};
5+
use opentelemetry_otlp::SpanExporterBuilder;
56

67
pub fn identity(v: opentelemetry_otlp::OtlpTracePipeline) -> opentelemetry_otlp::OtlpTracePipeline {
78
v
89
}
910

11+
// see https://opentelemetry.io/docs/reference/specification/protocol/exporter/
1012
pub fn init_tracer<F>(resource: Resource, transform: F) -> Result<sdktrace::Tracer, TraceError>
1113
where
1214
F: FnOnce(opentelemetry_otlp::OtlpTracePipeline) -> opentelemetry_otlp::OtlpTracePipeline,
1315
{
1416
use opentelemetry_otlp::WithExportConfig;
1517

1618
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+
2637
let mut pipeline = opentelemetry_otlp::new_pipeline()
2738
.tracing()
2839
.with_exporter(exporter)

0 commit comments

Comments
 (0)