From 1cd768e29474be903384ce27a54a2f8b643a34f3 Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Wed, 21 Feb 2024 21:46:58 +0100 Subject: [PATCH] spring boot starter: add service.version detection, improve service.name detection (#10457) --- .../spring-boot-autoconfigure/build.gradle.kts | 2 ++ .../resources/OtelResourceAutoConfiguration.java | 14 ++++++++++++++ .../resources/SpringBootServiceNameDetector.java | 3 +++ .../starters/spring-boot-starter/build.gradle.kts | 1 + 4 files changed, 20 insertions(+) diff --git a/instrumentation/spring/spring-boot-autoconfigure/build.gradle.kts b/instrumentation/spring/spring-boot-autoconfigure/build.gradle.kts index 2adcb09955..980e1376f4 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/build.gradle.kts +++ b/instrumentation/spring/spring-boot-autoconfigure/build.gradle.kts @@ -46,6 +46,7 @@ dependencies { compileOnly(project(":instrumentation-annotations")) compileOnly(project(":instrumentation:resources:library")) + compileOnly(project(":instrumentation:spring:spring-boot-resources:library")) annotationProcessor("com.google.auto.service:auto-service") compileOnly("com.google.auto.service:auto-service-annotations") @@ -60,6 +61,7 @@ dependencies { testImplementation("io.opentelemetry:opentelemetry-sdk") testImplementation("io.opentelemetry:opentelemetry-sdk-testing") testImplementation(project(":instrumentation:resources:library")) + testImplementation(project(":instrumentation:spring:spring-boot-resources:library")) testImplementation("io.opentelemetry:opentelemetry-sdk-extension-autoconfigure-spi") testImplementation("io.opentelemetry:opentelemetry-extension-trace-propagators") testImplementation("io.opentelemetry.contrib:opentelemetry-aws-xray-propagator") diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/resources/OtelResourceAutoConfiguration.java b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/resources/OtelResourceAutoConfiguration.java index 41aab9620d..5e21b8d8fb 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/resources/OtelResourceAutoConfiguration.java +++ b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/resources/OtelResourceAutoConfiguration.java @@ -16,6 +16,8 @@ import io.opentelemetry.instrumentation.resources.ProcessResourceProvider; import io.opentelemetry.instrumentation.resources.ProcessRuntimeResource; import io.opentelemetry.instrumentation.resources.ProcessRuntimeResourceProvider; import io.opentelemetry.instrumentation.spring.autoconfigure.OpenTelemetryAutoConfiguration; +import io.opentelemetry.instrumentation.spring.resources.SpringBootServiceNameDetector; +import io.opentelemetry.instrumentation.spring.resources.SpringBootServiceVersionDetector; import io.opentelemetry.sdk.autoconfigure.internal.EnvironmentResourceProvider; import io.opentelemetry.sdk.autoconfigure.spi.ResourceProvider; import org.springframework.boot.autoconfigure.AutoConfigureBefore; @@ -46,6 +48,18 @@ public class OtelResourceAutoConfiguration { return new DistroVersionResourceProvider(); } + @Bean + @ConditionalOnClass(SpringBootServiceNameDetector.class) + public ResourceProvider otelSpringBootServiceNameResourceProvider() { + return new SpringBootServiceNameDetector(); + } + + @Bean + @ConditionalOnClass(SpringBootServiceVersionDetector.class) + public ResourceProvider otelSpringBootServiceVersionResourceProvider() { + return new SpringBootServiceVersionDetector(); + } + @Bean @ConditionalOnClass(OsResource.class) public ResourceProvider otelOsResourceProvider() { diff --git a/instrumentation/spring/spring-boot-resources/library/src/main/java/io/opentelemetry/instrumentation/spring/resources/SpringBootServiceNameDetector.java b/instrumentation/spring/spring-boot-resources/library/src/main/java/io/opentelemetry/instrumentation/spring/resources/SpringBootServiceNameDetector.java index b0a598846a..02eb3897ba 100644 --- a/instrumentation/spring/spring-boot-resources/library/src/main/java/io/opentelemetry/instrumentation/spring/resources/SpringBootServiceNameDetector.java +++ b/instrumentation/spring/spring-boot-resources/library/src/main/java/io/opentelemetry/instrumentation/spring/resources/SpringBootServiceNameDetector.java @@ -45,6 +45,9 @@ import org.snakeyaml.engine.v2.api.LoadSettings; *
  • Check for --spring.application.name program argument (not jvm arg) via ProcessHandle *
  • Check for --spring.application.name program argument via sun.java.command system property * + * + *

    Note: should not be used inside a spring application, where the spring.application.name is + * already available. */ @AutoService(ResourceProvider.class) public class SpringBootServiceNameDetector implements ConditionalResourceProvider { diff --git a/instrumentation/spring/starters/spring-boot-starter/build.gradle.kts b/instrumentation/spring/starters/spring-boot-starter/build.gradle.kts index 66e481b2e6..600b789300 100644 --- a/instrumentation/spring/starters/spring-boot-starter/build.gradle.kts +++ b/instrumentation/spring/starters/spring-boot-starter/build.gradle.kts @@ -14,6 +14,7 @@ dependencies { api(project(":instrumentation:spring:spring-boot-autoconfigure")) api(project(":instrumentation-annotations")) implementation(project(":instrumentation:resources:library")) + implementation(project(":instrumentation:spring:spring-boot-resources:library")) api("io.opentelemetry:opentelemetry-sdk-extension-autoconfigure-spi") api("io.opentelemetry:opentelemetry-api") api("io.opentelemetry:opentelemetry-exporter-logging")