From 7c2b26c3453162ee1eb4399a61e3fffdade09e14 Mon Sep 17 00:00:00 2001 From: Tyler Finethy Date: Thu, 27 Aug 2026 14:06:59 -0400 Subject: [PATCH] fix: map named OTel deployment environment --- .../datadog/trace/api/ConfigTest.groovy | 2 +- .../OtelEnvironmentConfigSourceTest.groovy | 21 ++++++++++++++++++- .../provider/OtelEnvironmentConfigSource.java | 4 +++- 3 files changed, 24 insertions(+), 3 deletions(-) diff --git a/internal-api/src/test/groovy/datadog/trace/api/ConfigTest.groovy b/internal-api/src/test/groovy/datadog/trace/api/ConfigTest.groovy index ef95d5e902c..e5fec1a2745 100644 --- a/internal-api/src/test/groovy/datadog/trace/api/ConfigTest.groovy +++ b/internal-api/src/test/groovy/datadog/trace/api/ConfigTest.groovy @@ -589,7 +589,7 @@ class ConfigTest extends DDSpecification { def "otel generic config via system properties - metrics enabled"() { setup: System.setProperty(DD_METRICS_OTEL_ENABLED_PROP, "true") - System.setProperty(OTEL_RESOURCE_ATTRIBUTES_PROP, "service.name=my=app,service.version=1.0.0,deployment.environment=production, message=blahblah") + System.setProperty(OTEL_RESOURCE_ATTRIBUTES_PROP, "service.name=my=app,service.version=1.0.0,deployment.environment.name=production, message=blahblah") System.setProperty("otel.log.level", "warning") when: diff --git a/internal-api/src/test/groovy/datadog/trace/bootstrap/config/provider/OtelEnvironmentConfigSourceTest.groovy b/internal-api/src/test/groovy/datadog/trace/bootstrap/config/provider/OtelEnvironmentConfigSourceTest.groovy index 977bba8f6c6..f2531f47e76 100644 --- a/internal-api/src/test/groovy/datadog/trace/bootstrap/config/provider/OtelEnvironmentConfigSourceTest.groovy +++ b/internal-api/src/test/groovy/datadog/trace/bootstrap/config/provider/OtelEnvironmentConfigSourceTest.groovy @@ -324,7 +324,7 @@ class OtelEnvironmentConfigSourceTest extends DDSpecification { 'key4=four,' + 'key5=five,' + 'key6=six,' + - 'deployment.environment=staging,' + + 'deployment.environment.name=staging,' + 'key7=seven,' + 'key8=eight,' + 'key9=nine,' + @@ -374,4 +374,23 @@ class OtelEnvironmentConfigSourceTest extends DDSpecification { // only the first 10 custom attributes are mapped to tags source.get(TAGS) == 'key1:one,key2:two,key3:three,key4:four,key5:five,key6:six,key7:seven,key8:eight,key9:nine,key10:ten' } + + def "named deployment environment takes precedence over legacy attribute"() { + setup: + injectSysConfig('dd.trace.otel.enabled', 'true', false) + injectSysConfig('otel.resource.attributes', resourceAttributes, false) + + when: + def source = new OtelEnvironmentConfigSource() + + then: + source.get(ENV) == 'production' + source.get(TAGS) == null + + where: + resourceAttributes << [ + 'deployment.environment.name=production,deployment.environment=staging', + 'deployment.environment=staging,deployment.environment.name=production' + ] + } } diff --git a/utils/config-utils/src/main/java/datadog/trace/bootstrap/config/provider/OtelEnvironmentConfigSource.java b/utils/config-utils/src/main/java/datadog/trace/bootstrap/config/provider/OtelEnvironmentConfigSource.java index 28ef45ff9de..67dd95eab2d 100644 --- a/utils/config-utils/src/main/java/datadog/trace/bootstrap/config/provider/OtelEnvironmentConfigSource.java +++ b/utils/config-utils/src/main/java/datadog/trace/bootstrap/config/provider/OtelEnvironmentConfigSource.java @@ -128,7 +128,9 @@ private void setupOtelEnvironment() { Map attributeMap = parseOtelMap(resourceAttributes); capture(SERVICE_NAME, attributeMap.remove("service.name")); capture(VERSION, attributeMap.remove("service.version")); - capture(ENV, attributeMap.remove("deployment.environment")); + String environment = attributeMap.remove("deployment.environment"); + String namedEnvironment = attributeMap.remove("deployment.environment.name"); + capture(ENV, namedEnvironment != null ? namedEnvironment : environment); capture(TAGS, renderDatadogMap(attributeMap, 10)); } capture(LOG_LEVEL, logLevel);