From f28eaaf8bbb2f23e05f96bdaa210cb76af1630e4 Mon Sep 17 00:00:00 2001 From: Tuan Vuong Date: Thu, 6 Nov 2025 11:48:23 +0700 Subject: [PATCH] feat: adding configurable deployment.name in otel --- server/svix-server/src/cfg.rs | 2 ++ server/svix-server/src/lib.rs | 53 ++++++++++++++++++++++++----------- 2 files changed, 38 insertions(+), 17 deletions(-) diff --git a/server/svix-server/src/cfg.rs b/server/svix-server/src/cfg.rs index 6962dc39e..85d3810c6 100644 --- a/server/svix-server/src/cfg.rs +++ b/server/svix-server/src/cfg.rs @@ -149,6 +149,8 @@ pub struct ConfigurationInner { pub opentelemetry_sample_ratio: Option, /// The service name to use for OpenTelemetry. If not provided, it defaults to "svix_server". pub opentelemetry_service_name: String, + /// The deployment environment to use for OpenTelemetry. It will be translated to "deployment.environment" resource if provided + pub opentelemetry_deployment_env: Option, /// Whether to enable the logging of the databases at the configured log level. This may be /// useful for analyzing their response times. pub db_tracing: bool, diff --git a/server/svix-server/src/lib.rs b/server/svix-server/src/lib.rs index 2c36d3463..7e27476d1 100644 --- a/server/svix-server/src/lib.rs +++ b/server/svix-server/src/lib.rs @@ -275,6 +275,19 @@ pub fn setup_tracing( .tonic() .with_endpoint(addr); + let resources: Vec = [ + Some(opentelemetry::KeyValue::new( + "service.name", + cfg.opentelemetry_service_name.clone(), + )), + cfg.opentelemetry_deployment_env + .as_ref() + .map(|name| opentelemetry::KeyValue::new("deployment.environment", name.clone())), + ] + .into_iter() + .flatten() + .collect(); + let provider = opentelemetry_otlp::new_pipeline() .tracing() .with_exporter(exporter) @@ -285,12 +298,7 @@ pub fn setup_tracing( .map(opentelemetry_sdk::trace::Sampler::TraceIdRatioBased) .unwrap_or(opentelemetry_sdk::trace::Sampler::AlwaysOn), ) - .with_resource(opentelemetry_sdk::Resource::new(vec![ - opentelemetry::KeyValue::new( - "service.name", - cfg.opentelemetry_service_name.clone(), - ), - ])), + .with_resource(opentelemetry_sdk::Resource::new(resources)), ) .install_batch(Tokio) .unwrap(); @@ -352,21 +360,32 @@ pub fn setup_metrics(cfg: &ConfigurationInner) -> Option { .tonic() .with_endpoint(addr); + let resources: Vec = [ + Some(opentelemetry::KeyValue::new( + "service.name", + cfg.opentelemetry_service_name.clone(), + )), + cfg.opentelemetry_deployment_env + .as_ref() + .map(|name| opentelemetry::KeyValue::new("deployment.environment", name.clone())), + Some(opentelemetry::KeyValue::new( + "instance_id", + INSTANCE_ID.to_owned(), + )), + Some(opentelemetry::KeyValue::new( + "service.version", + option_env!("GITHUB_SHA").unwrap_or("unknown"), + )), + ] + .into_iter() + .flatten() + .collect(); + opentelemetry_otlp::new_pipeline() .metrics(Tokio) .with_delta_temporality() .with_exporter(exporter) - .with_resource(opentelemetry_sdk::Resource::new(vec![ - opentelemetry::KeyValue::new( - "service.name", - cfg.opentelemetry_service_name.clone(), - ), - opentelemetry::KeyValue::new("instance_id", INSTANCE_ID.to_owned()), - opentelemetry::KeyValue::new( - "service.version", - option_env!("GITHUB_SHA").unwrap_or("unknown"), - ), - ])) + .with_resource(opentelemetry_sdk::Resource::new(resources)) .build() .unwrap() })