diff --git a/src/kwaak_tracing.rs b/src/kwaak_tracing.rs index 47beb03..def3980 100644 --- a/src/kwaak_tracing.rs +++ b/src/kwaak_tracing.rs @@ -93,6 +93,8 @@ use opentelemetry_sdk::trace::TracerProvider; #[cfg(feature = "otel")] fn init_otel() -> TracerProvider { + use std::collections::HashMap; + use opentelemetry_sdk::runtime; use opentelemetry_sdk::trace::TracerProvider; @@ -101,10 +103,27 @@ fn init_otel() -> TracerProvider { .build() .expect("failed to create otlp exporter"); + let service_name = if let Ok(service_name) = std::env::var("OTEL_SERVICE_NAME") { + service_name + } else { + let resource_attributes = std::env::var("OTEL_RESOURCE_ATTRIBUTES") + .unwrap_or_default() + .split(',') + .filter(|s| !s.is_empty()) + .map(|s| s.split_once('=').expect("invalid OTEL_RESOURCE_ATTRIBUTES")) + .map(|(key, value)| (key.to_string(), value.to_string())) + .collect::>(); + if let Some(service_name) = resource_attributes.get("service.name") { + service_name.to_string() + } else { + "kwaak".to_string() + } + }; + TracerProvider::builder() .with_batch_exporter(exporter, runtime::Tokio) .with_resource(opentelemetry_sdk::Resource::new(vec![ - opentelemetry::KeyValue::new("service.name", "kwaak"), + opentelemetry::KeyValue::new("service.name", service_name), ])) .build() }