@@ -25,6 +25,9 @@ use opentelemetry_sdk::{
2525 trace:: { BatchSpanProcessor , SdkTracerProvider } ,
2626} ;
2727
28+ const EXPORTER_OTLP_ENDPOINT : & str = "OTEL_EXPORTER_OTLP_ENDPOINT" ;
29+ const EXPORTER_OTLP_PROTOCOL : & str = "OTEL_EXPORTER_OTLP_PROTOCOL" ;
30+
2831/// Initialise an OTLP tracer provider.
2932///
3033/// **Required env var:**
@@ -48,10 +51,10 @@ use opentelemetry_sdk::{
4851pub fn init_otel_tracer ( ) -> Option < SdkTracerProvider > {
4952 // Only used to decide whether OTEL is enabled; the SDK reads it again
5053 // from env to build the exporter (which also appends /v1/traces for HTTP).
51- std:: env:: var ( "OTEL_EXPORTER_OTLP_ENDPOINT" ) . ok ( ) ?;
54+ std:: env:: var ( EXPORTER_OTLP_ENDPOINT ) . ok ( ) ?;
5255
5356 let protocol =
54- std:: env:: var ( "OTEL_EXPORTER_OTLP_PROTOCOL" ) . unwrap_or_else ( |_| "http/json" . to_string ( ) ) ;
57+ std:: env:: var ( EXPORTER_OTLP_PROTOCOL ) . unwrap_or_else ( |_| "http/json" . to_string ( ) ) ;
5558
5659 // Build the exporter using the SDK's env-var-aware builders.
5760 // We intentionally do NOT call .with_endpoint() / .with_headers() /
@@ -69,10 +72,18 @@ pub fn init_otel_tracer() -> Option<SdkTracerProvider> {
6972 // ── HTTP/JSON (default) ──────────────────────────────────────────────
7073 // Default when OTEL_EXPORTER_OTLP_PROTOCOL is unset.
7174 // Required for Parseable OSS — it only accepts application/json.
72- _ => SpanExporter :: builder ( )
75+ "http/json" => SpanExporter :: builder ( )
7376 . with_http ( )
7477 . with_protocol ( Protocol :: HttpJson )
7578 . build ( ) ,
79+ other => {
80+ tracing:: warn!(
81+ "Unknown OTEL_EXPORTER_OTLP_PROTOCOL value '{}'; disabling OTEL tracing. \
82+ Supported values: grpc, http/protobuf, http/json",
83+ other
84+ ) ;
85+ return None ;
86+ }
7687 } ;
7788
7889 let exporter = exporter
0 commit comments