fix: only connect OTLP metrics when OTEL_EXPORTER_OTLP_ENDPOINT is set

When unset, use a no-op meter provider instead of defaulting to
http://localhost:4317 and spamming connection errors every 5s.
This commit is contained in:
asepharyana
2026-07-22 13:03:03 +07:00
parent 1b195ac3f6
commit 562ada69ec
+11 -8
View File
@@ -36,9 +36,10 @@ pub fn init_otel_metrics() {
return; return;
} }
let otel_endpoint = std::env::var("OTEL_EXPORTER_OTLP_ENDPOINT") let otel_endpoint = std::env::var("OTEL_EXPORTER_OTLP_ENDPOINT");
.unwrap_or_else(|_| "http://localhost:4317".into());
let service_name = std::env::var("OTEL_SERVICE_NAME").unwrap_or_else(|_| "scraper-api".into()); let service_name = std::env::var("OTEL_SERVICE_NAME").unwrap_or_else(|_| "scraper-api".into());
let m = if let Ok(endpoint) = otel_endpoint {
let export_interval_ms: u64 = std::env::var("OTEL_METRICS_EXPORT_INTERVAL") let export_interval_ms: u64 = std::env::var("OTEL_METRICS_EXPORT_INTERVAL")
.ok() .ok()
.and_then(|v| v.parse().ok()) .and_then(|v| v.parse().ok())
@@ -47,7 +48,7 @@ pub fn init_otel_metrics() {
// Build the gRPC OTLP exporter // Build the gRPC OTLP exporter
let exporter = opentelemetry_otlp::MetricExporter::builder() let exporter = opentelemetry_otlp::MetricExporter::builder()
.with_tonic() .with_tonic()
.with_endpoint(otel_endpoint.clone()) .with_endpoint(endpoint.clone())
.build() .build()
.expect("Failed to create OTLP metric exporter"); .expect("Failed to create OTLP metric exporter");
@@ -62,15 +63,17 @@ pub fn init_otel_metrics() {
.with_reader(reader) .with_reader(reader)
.build(); .build();
// Keep a handle so we can shut it down later
let _ = PROVIDER.set(provider.clone()); let _ = PROVIDER.set(provider.clone());
global::set_meter_provider(provider); global::set_meter_provider(provider);
let m = global::meter("scraper-http-server"); tracing::info!(otel_endpoint = %endpoint, service_name, "OTel metrics initialized");
let _ = METER.set(m); global::meter("scraper-http-server")
} else {
tracing::info!("OTEL_EXPORTER_OTLP_ENDPOINT not set — metrics disabled");
global::meter("scraper-http-server")
};
tracing::info!(otel_endpoint, service_name, "OTel metrics initialized"); let _ = METER.set(m);
} }
/// Shut down the global MeterProvider, flushing pending exports. /// Shut down the global MeterProvider, flushing pending exports.