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:
@@ -36,41 +36,44 @@ 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 export_interval_ms: u64 = std::env::var("OTEL_METRICS_EXPORT_INTERVAL")
|
|
||||||
.ok()
|
|
||||||
.and_then(|v| v.parse().ok())
|
|
||||||
.unwrap_or(5000);
|
|
||||||
|
|
||||||
// Build the gRPC OTLP exporter
|
let m = if let Ok(endpoint) = otel_endpoint {
|
||||||
let exporter = opentelemetry_otlp::MetricExporter::builder()
|
let export_interval_ms: u64 = std::env::var("OTEL_METRICS_EXPORT_INTERVAL")
|
||||||
.with_tonic()
|
.ok()
|
||||||
.with_endpoint(otel_endpoint.clone())
|
.and_then(|v| v.parse().ok())
|
||||||
.build()
|
.unwrap_or(5000);
|
||||||
.expect("Failed to create OTLP metric exporter");
|
|
||||||
|
|
||||||
let reader = PeriodicReader::builder(exporter, opentelemetry_sdk::runtime::Tokio)
|
// Build the gRPC OTLP exporter
|
||||||
.with_interval(std::time::Duration::from_millis(export_interval_ms))
|
let exporter = opentelemetry_otlp::MetricExporter::builder()
|
||||||
.build();
|
.with_tonic()
|
||||||
|
.with_endpoint(endpoint.clone())
|
||||||
|
.build()
|
||||||
|
.expect("Failed to create OTLP metric exporter");
|
||||||
|
|
||||||
let resource = Resource::new(vec![KeyValue::new("service.name", service_name.clone())]);
|
let reader = PeriodicReader::builder(exporter, opentelemetry_sdk::runtime::Tokio)
|
||||||
|
.with_interval(std::time::Duration::from_millis(export_interval_ms))
|
||||||
|
.build();
|
||||||
|
|
||||||
let provider = MeterProviderBuilder::default()
|
let resource = Resource::new(vec![KeyValue::new("service.name", service_name.clone())]);
|
||||||
.with_resource(resource)
|
|
||||||
.with_reader(reader)
|
|
||||||
.build();
|
|
||||||
|
|
||||||
// Keep a handle so we can shut it down later
|
let provider = MeterProviderBuilder::default()
|
||||||
let _ = PROVIDER.set(provider.clone());
|
.with_resource(resource)
|
||||||
|
.with_reader(reader)
|
||||||
|
.build();
|
||||||
|
|
||||||
global::set_meter_provider(provider);
|
let _ = PROVIDER.set(provider.clone());
|
||||||
|
global::set_meter_provider(provider);
|
||||||
|
|
||||||
|
tracing::info!(otel_endpoint = %endpoint, service_name, "OTel metrics initialized");
|
||||||
|
global::meter("scraper-http-server")
|
||||||
|
} else {
|
||||||
|
tracing::info!("OTEL_EXPORTER_OTLP_ENDPOINT not set — metrics disabled");
|
||||||
|
global::meter("scraper-http-server")
|
||||||
|
};
|
||||||
|
|
||||||
let m = global::meter("scraper-http-server");
|
|
||||||
let _ = METER.set(m);
|
let _ = METER.set(m);
|
||||||
|
|
||||||
tracing::info!(otel_endpoint, service_name, "OTel metrics initialized");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Shut down the global MeterProvider, flushing pending exports.
|
/// Shut down the global MeterProvider, flushing pending exports.
|
||||||
|
|||||||
Reference in New Issue
Block a user