extract @SpringBootInstrumentation annotation (#11293)
This commit is contained in:
parent
f036673279
commit
32df5ae710
|
@ -16,6 +16,7 @@ dependencies {
|
||||||
compileOnly(project(":instrumentation:spring:spring-boot-autoconfigure"))
|
compileOnly(project(":instrumentation:spring:spring-boot-autoconfigure"))
|
||||||
implementation(project(":instrumentation:spring:spring-web:spring-web-3.1:library"))
|
implementation(project(":instrumentation:spring:spring-web:spring-web-3.1:library"))
|
||||||
|
|
||||||
|
testImplementation(project(":instrumentation:spring:spring-boot-autoconfigure"))
|
||||||
testLibrary("org.springframework.boot:spring-boot-starter-test:$springBootVersion") {
|
testLibrary("org.springframework.boot:spring-boot-starter-test:$springBootVersion") {
|
||||||
exclude("org.junit.vintage", "junit-vintage-engine")
|
exclude("org.junit.vintage", "junit-vintage-engine")
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,17 +6,14 @@
|
||||||
package io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.web;
|
package io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.web;
|
||||||
|
|
||||||
import io.opentelemetry.api.OpenTelemetry;
|
import io.opentelemetry.api.OpenTelemetry;
|
||||||
import io.opentelemetry.instrumentation.spring.autoconfigure.internal.SdkEnabled;
|
import io.opentelemetry.instrumentation.spring.autoconfigure.internal.ConditionalOnEnabledInstrumentation;
|
||||||
import io.opentelemetry.instrumentation.spring.web.v3_1.SpringWebTelemetry;
|
import io.opentelemetry.instrumentation.spring.web.v3_1.SpringWebTelemetry;
|
||||||
import org.springframework.beans.factory.ObjectProvider;
|
import org.springframework.beans.factory.ObjectProvider;
|
||||||
import org.springframework.boot.autoconfigure.AutoConfiguration;
|
import org.springframework.boot.autoconfigure.AutoConfiguration;
|
||||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
|
|
||||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
|
||||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
|
||||||
import org.springframework.boot.autoconfigure.web.client.RestClientAutoConfiguration;
|
import org.springframework.boot.autoconfigure.web.client.RestClientAutoConfiguration;
|
||||||
import org.springframework.boot.web.client.RestClientCustomizer;
|
import org.springframework.boot.web.client.RestClientCustomizer;
|
||||||
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Bean;
|
||||||
import org.springframework.context.annotation.Conditional;
|
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
import org.springframework.web.client.RestClient;
|
import org.springframework.web.client.RestClient;
|
||||||
|
|
||||||
|
@ -25,10 +22,8 @@ import org.springframework.web.client.RestClient;
|
||||||
*
|
*
|
||||||
* <p>Adds Open Telemetry instrumentation to {@link RestClient} beans after initialization
|
* <p>Adds Open Telemetry instrumentation to {@link RestClient} beans after initialization
|
||||||
*/
|
*/
|
||||||
@ConditionalOnBean(OpenTelemetry.class)
|
@ConditionalOnEnabledInstrumentation(module = "spring-web")
|
||||||
@ConditionalOnProperty(name = "otel.instrumentation.spring-web.enabled", matchIfMissing = true)
|
|
||||||
@ConditionalOnClass(RestClient.class)
|
@ConditionalOnClass(RestClient.class)
|
||||||
@Conditional(SdkEnabled.class)
|
|
||||||
@AutoConfiguration(after = RestClientAutoConfiguration.class)
|
@AutoConfiguration(after = RestClientAutoConfiguration.class)
|
||||||
@Configuration
|
@Configuration
|
||||||
public class RestClientInstrumentationAutoConfiguration {
|
public class RestClientInstrumentationAutoConfiguration {
|
||||||
|
|
|
@ -8,6 +8,7 @@ package io.opentelemetry.instrumentation.spring.autoconfigure;
|
||||||
import io.opentelemetry.api.OpenTelemetry;
|
import io.opentelemetry.api.OpenTelemetry;
|
||||||
import io.opentelemetry.api.trace.TracerProvider;
|
import io.opentelemetry.api.trace.TracerProvider;
|
||||||
import io.opentelemetry.instrumentation.spring.autoconfigure.internal.MapConverter;
|
import io.opentelemetry.instrumentation.spring.autoconfigure.internal.MapConverter;
|
||||||
|
import io.opentelemetry.instrumentation.spring.autoconfigure.internal.SdkEnabled;
|
||||||
import io.opentelemetry.instrumentation.spring.autoconfigure.properties.OtelResourceProperties;
|
import io.opentelemetry.instrumentation.spring.autoconfigure.properties.OtelResourceProperties;
|
||||||
import io.opentelemetry.instrumentation.spring.autoconfigure.properties.OtlpExporterProperties;
|
import io.opentelemetry.instrumentation.spring.autoconfigure.properties.OtlpExporterProperties;
|
||||||
import io.opentelemetry.instrumentation.spring.autoconfigure.properties.PropagationProperties;
|
import io.opentelemetry.instrumentation.spring.autoconfigure.properties.PropagationProperties;
|
||||||
|
@ -29,6 +30,7 @@ import org.springframework.boot.context.properties.EnableConfigurationProperties
|
||||||
import org.springframework.boot.info.BuildProperties;
|
import org.springframework.boot.info.BuildProperties;
|
||||||
import org.springframework.context.ApplicationContext;
|
import org.springframework.context.ApplicationContext;
|
||||||
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Bean;
|
||||||
|
import org.springframework.context.annotation.Conditional;
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
import org.springframework.core.env.Environment;
|
import org.springframework.core.env.Environment;
|
||||||
|
|
||||||
|
@ -50,8 +52,8 @@ public class OpenTelemetryAutoConfiguration {
|
||||||
public OpenTelemetryAutoConfiguration() {}
|
public OpenTelemetryAutoConfiguration() {}
|
||||||
|
|
||||||
@Configuration
|
@Configuration
|
||||||
|
@Conditional(SdkEnabled.class)
|
||||||
@ConditionalOnMissingBean(OpenTelemetry.class)
|
@ConditionalOnMissingBean(OpenTelemetry.class)
|
||||||
@ConditionalOnProperty(name = "otel.sdk.disabled", havingValue = "false", matchIfMissing = true)
|
|
||||||
public static class OpenTelemetrySdkConfig {
|
public static class OpenTelemetrySdkConfig {
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
|
|
|
@ -7,22 +7,17 @@ package io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.an
|
||||||
|
|
||||||
import io.opentelemetry.api.OpenTelemetry;
|
import io.opentelemetry.api.OpenTelemetry;
|
||||||
import io.opentelemetry.instrumentation.annotations.WithSpan;
|
import io.opentelemetry.instrumentation.annotations.WithSpan;
|
||||||
import io.opentelemetry.instrumentation.spring.autoconfigure.internal.SdkEnabled;
|
import io.opentelemetry.instrumentation.spring.autoconfigure.internal.ConditionalOnEnabledInstrumentation;
|
||||||
import org.aspectj.lang.annotation.Aspect;
|
import org.aspectj.lang.annotation.Aspect;
|
||||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
|
|
||||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
|
||||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
|
||||||
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Bean;
|
||||||
import org.springframework.context.annotation.Conditional;
|
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
import org.springframework.core.DefaultParameterNameDiscoverer;
|
import org.springframework.core.DefaultParameterNameDiscoverer;
|
||||||
import org.springframework.core.ParameterNameDiscoverer;
|
import org.springframework.core.ParameterNameDiscoverer;
|
||||||
|
|
||||||
/** Configures {@link WithSpanAspect} to trace bean methods annotated with {@link WithSpan}. */
|
/** Configures {@link WithSpanAspect} to trace bean methods annotated with {@link WithSpan}. */
|
||||||
@ConditionalOnBean(OpenTelemetry.class)
|
@ConditionalOnEnabledInstrumentation(module = "annotations")
|
||||||
@ConditionalOnClass(Aspect.class)
|
@ConditionalOnClass(Aspect.class)
|
||||||
@ConditionalOnProperty(name = "otel.instrumentation.annotations.enabled", matchIfMissing = true)
|
|
||||||
@Conditional(SdkEnabled.class)
|
|
||||||
@Configuration
|
@Configuration
|
||||||
public class InstrumentationAnnotationsAutoConfiguration {
|
public class InstrumentationAnnotationsAutoConfiguration {
|
||||||
private final ParameterNameDiscoverer parameterNameDiscoverer =
|
private final ParameterNameDiscoverer parameterNameDiscoverer =
|
||||||
|
|
|
@ -6,26 +6,23 @@
|
||||||
package io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.jdbc;
|
package io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.jdbc;
|
||||||
|
|
||||||
import io.opentelemetry.api.OpenTelemetry;
|
import io.opentelemetry.api.OpenTelemetry;
|
||||||
import io.opentelemetry.instrumentation.spring.autoconfigure.internal.SdkEnabled;
|
import io.opentelemetry.instrumentation.spring.autoconfigure.internal.ConditionalOnEnabledInstrumentation;
|
||||||
import javax.sql.DataSource;
|
import javax.sql.DataSource;
|
||||||
import org.springframework.beans.factory.ObjectProvider;
|
import org.springframework.beans.factory.ObjectProvider;
|
||||||
import org.springframework.boot.autoconfigure.AutoConfiguration;
|
import org.springframework.boot.autoconfigure.AutoConfiguration;
|
||||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
|
||||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
|
||||||
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
|
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
|
||||||
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Bean;
|
||||||
import org.springframework.context.annotation.Conditional;
|
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
|
||||||
@ConditionalOnProperty(name = "otel.instrumentation.jdbc.enabled", matchIfMissing = true)
|
@ConditionalOnEnabledInstrumentation(module = "jdbc")
|
||||||
@AutoConfiguration(after = DataSourceAutoConfiguration.class)
|
@AutoConfiguration(after = DataSourceAutoConfiguration.class)
|
||||||
@ConditionalOnBean({DataSource.class})
|
@ConditionalOnBean({DataSource.class})
|
||||||
@Conditional(SdkEnabled.class)
|
|
||||||
@Configuration(proxyBeanMethods = false)
|
@Configuration(proxyBeanMethods = false)
|
||||||
public class JdbcInstrumentationAutoconfiguration {
|
public class JdbcInstrumentationAutoConfiguration {
|
||||||
|
|
||||||
// For error prone
|
// For error prone
|
||||||
public JdbcInstrumentationAutoconfiguration() {}
|
public JdbcInstrumentationAutoConfiguration() {}
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
// static to avoid "is not eligible for getting processed by all BeanPostProcessors" warning
|
// static to avoid "is not eligible for getting processed by all BeanPostProcessors" warning
|
|
@ -7,22 +7,17 @@ package io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.ka
|
||||||
|
|
||||||
import io.opentelemetry.api.OpenTelemetry;
|
import io.opentelemetry.api.OpenTelemetry;
|
||||||
import io.opentelemetry.instrumentation.kafkaclients.v2_6.KafkaTelemetry;
|
import io.opentelemetry.instrumentation.kafkaclients.v2_6.KafkaTelemetry;
|
||||||
import io.opentelemetry.instrumentation.spring.autoconfigure.internal.SdkEnabled;
|
import io.opentelemetry.instrumentation.spring.autoconfigure.internal.ConditionalOnEnabledInstrumentation;
|
||||||
import org.springframework.beans.factory.ObjectProvider;
|
import org.springframework.beans.factory.ObjectProvider;
|
||||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
|
|
||||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
|
||||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
|
||||||
import org.springframework.boot.autoconfigure.kafka.DefaultKafkaProducerFactoryCustomizer;
|
import org.springframework.boot.autoconfigure.kafka.DefaultKafkaProducerFactoryCustomizer;
|
||||||
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Bean;
|
||||||
import org.springframework.context.annotation.Conditional;
|
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
import org.springframework.kafka.config.ConcurrentKafkaListenerContainerFactory;
|
import org.springframework.kafka.config.ConcurrentKafkaListenerContainerFactory;
|
||||||
import org.springframework.kafka.core.KafkaTemplate;
|
import org.springframework.kafka.core.KafkaTemplate;
|
||||||
|
|
||||||
@ConditionalOnBean(OpenTelemetry.class)
|
@ConditionalOnEnabledInstrumentation(module = "kafka")
|
||||||
@ConditionalOnClass({KafkaTemplate.class, ConcurrentKafkaListenerContainerFactory.class})
|
@ConditionalOnClass({KafkaTemplate.class, ConcurrentKafkaListenerContainerFactory.class})
|
||||||
@ConditionalOnProperty(name = "otel.instrumentation.kafka.enabled", matchIfMissing = true)
|
|
||||||
@Conditional(SdkEnabled.class)
|
|
||||||
@Configuration
|
@Configuration
|
||||||
public class KafkaInstrumentationAutoConfiguration {
|
public class KafkaInstrumentationAutoConfiguration {
|
||||||
|
|
||||||
|
|
|
@ -6,26 +6,19 @@
|
||||||
package io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.logging;
|
package io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.logging;
|
||||||
|
|
||||||
import io.opentelemetry.api.OpenTelemetry;
|
import io.opentelemetry.api.OpenTelemetry;
|
||||||
import io.opentelemetry.instrumentation.spring.autoconfigure.internal.SdkEnabled;
|
import io.opentelemetry.instrumentation.spring.autoconfigure.internal.ConditionalOnEnabledInstrumentation;
|
||||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
|
|
||||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
|
||||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
|
||||||
import org.springframework.boot.context.event.ApplicationReadyEvent;
|
import org.springframework.boot.context.event.ApplicationReadyEvent;
|
||||||
import org.springframework.context.ApplicationListener;
|
import org.springframework.context.ApplicationListener;
|
||||||
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Bean;
|
||||||
import org.springframework.context.annotation.Conditional;
|
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
|
||||||
@ConditionalOnBean(OpenTelemetry.class)
|
|
||||||
@Configuration
|
@Configuration
|
||||||
@Conditional(SdkEnabled.class)
|
|
||||||
@SuppressWarnings("OtelPrivateConstructorForUtilityClass")
|
@SuppressWarnings("OtelPrivateConstructorForUtilityClass")
|
||||||
public class OpenTelemetryAppenderAutoConfiguration {
|
public class OpenTelemetryAppenderAutoConfiguration {
|
||||||
|
|
||||||
|
@ConditionalOnEnabledInstrumentation(module = "log4j-appender")
|
||||||
@ConditionalOnClass(org.apache.logging.log4j.core.LoggerContext.class)
|
@ConditionalOnClass(org.apache.logging.log4j.core.LoggerContext.class)
|
||||||
@ConditionalOnProperty(
|
|
||||||
name = "otel.instrumentation.log4j-appender.enabled",
|
|
||||||
matchIfMissing = true)
|
|
||||||
@Configuration
|
@Configuration
|
||||||
static class Log4jAppenderConfig {
|
static class Log4jAppenderConfig {
|
||||||
|
|
||||||
|
@ -39,10 +32,8 @@ public class OpenTelemetryAppenderAutoConfiguration {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ConditionalOnEnabledInstrumentation(module = "logback-appender")
|
||||||
@ConditionalOnClass(ch.qos.logback.classic.LoggerContext.class)
|
@ConditionalOnClass(ch.qos.logback.classic.LoggerContext.class)
|
||||||
@ConditionalOnProperty(
|
|
||||||
name = "otel.instrumentation.logback-appender.enabled",
|
|
||||||
matchIfMissing = true)
|
|
||||||
@Configuration
|
@Configuration
|
||||||
static class LogbackAppenderConfig {
|
static class LogbackAppenderConfig {
|
||||||
|
|
||||||
|
|
|
@ -9,24 +9,21 @@ import io.micrometer.core.instrument.Clock;
|
||||||
import io.micrometer.core.instrument.MeterRegistry;
|
import io.micrometer.core.instrument.MeterRegistry;
|
||||||
import io.opentelemetry.api.OpenTelemetry;
|
import io.opentelemetry.api.OpenTelemetry;
|
||||||
import io.opentelemetry.instrumentation.micrometer.v1_5.OpenTelemetryMeterRegistry;
|
import io.opentelemetry.instrumentation.micrometer.v1_5.OpenTelemetryMeterRegistry;
|
||||||
import io.opentelemetry.instrumentation.spring.autoconfigure.internal.SdkEnabled;
|
import io.opentelemetry.instrumentation.spring.autoconfigure.internal.ConditionalOnEnabledInstrumentation;
|
||||||
import org.springframework.boot.actuate.autoconfigure.metrics.CompositeMeterRegistryAutoConfiguration;
|
import org.springframework.boot.actuate.autoconfigure.metrics.CompositeMeterRegistryAutoConfiguration;
|
||||||
import org.springframework.boot.actuate.autoconfigure.metrics.MetricsAutoConfiguration;
|
import org.springframework.boot.actuate.autoconfigure.metrics.MetricsAutoConfiguration;
|
||||||
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
|
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
|
||||||
import org.springframework.boot.autoconfigure.AutoConfigureBefore;
|
import org.springframework.boot.autoconfigure.AutoConfigureBefore;
|
||||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
|
||||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
|
||||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
|
||||||
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Bean;
|
||||||
import org.springframework.context.annotation.Conditional;
|
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
|
||||||
|
@ConditionalOnEnabledInstrumentation(module = "micrometer", enabledByDefault = false)
|
||||||
@AutoConfigureAfter(MetricsAutoConfiguration.class)
|
@AutoConfigureAfter(MetricsAutoConfiguration.class)
|
||||||
@AutoConfigureBefore(CompositeMeterRegistryAutoConfiguration.class)
|
@AutoConfigureBefore(CompositeMeterRegistryAutoConfiguration.class)
|
||||||
@ConditionalOnBean({Clock.class, OpenTelemetry.class})
|
@ConditionalOnBean(Clock.class)
|
||||||
@ConditionalOnClass(MeterRegistry.class)
|
@ConditionalOnClass(MeterRegistry.class)
|
||||||
@ConditionalOnProperty(name = "otel.instrumentation.micrometer.enabled")
|
|
||||||
@Conditional(SdkEnabled.class)
|
|
||||||
@Configuration
|
@Configuration
|
||||||
public class MicrometerBridgeAutoConfiguration {
|
public class MicrometerBridgeAutoConfiguration {
|
||||||
|
|
||||||
|
|
|
@ -6,14 +6,11 @@
|
||||||
package io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.web;
|
package io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.web;
|
||||||
|
|
||||||
import io.opentelemetry.api.OpenTelemetry;
|
import io.opentelemetry.api.OpenTelemetry;
|
||||||
import io.opentelemetry.instrumentation.spring.autoconfigure.internal.SdkEnabled;
|
import io.opentelemetry.instrumentation.spring.autoconfigure.internal.ConditionalOnEnabledInstrumentation;
|
||||||
import org.springframework.beans.factory.ObjectProvider;
|
import org.springframework.beans.factory.ObjectProvider;
|
||||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
|
|
||||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
|
||||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
|
||||||
import org.springframework.boot.web.client.RestTemplateCustomizer;
|
import org.springframework.boot.web.client.RestTemplateCustomizer;
|
||||||
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Bean;
|
||||||
import org.springframework.context.annotation.Conditional;
|
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
import org.springframework.web.client.RestTemplate;
|
import org.springframework.web.client.RestTemplate;
|
||||||
|
|
||||||
|
@ -22,10 +19,8 @@ import org.springframework.web.client.RestTemplate;
|
||||||
*
|
*
|
||||||
* <p>Adds Open Telemetry instrumentation to RestTemplate beans after initialization
|
* <p>Adds Open Telemetry instrumentation to RestTemplate beans after initialization
|
||||||
*/
|
*/
|
||||||
@ConditionalOnBean(OpenTelemetry.class)
|
@ConditionalOnEnabledInstrumentation(module = "spring-web")
|
||||||
@ConditionalOnClass(RestTemplate.class)
|
@ConditionalOnClass(RestTemplate.class)
|
||||||
@ConditionalOnProperty(name = "otel.instrumentation.spring-web.enabled", matchIfMissing = true)
|
|
||||||
@Conditional(SdkEnabled.class)
|
|
||||||
@Configuration
|
@Configuration
|
||||||
public class SpringWebInstrumentationAutoConfiguration {
|
public class SpringWebInstrumentationAutoConfiguration {
|
||||||
|
|
||||||
|
|
|
@ -6,14 +6,11 @@
|
||||||
package io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.webflux;
|
package io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.webflux;
|
||||||
|
|
||||||
import io.opentelemetry.api.OpenTelemetry;
|
import io.opentelemetry.api.OpenTelemetry;
|
||||||
import io.opentelemetry.instrumentation.spring.autoconfigure.internal.SdkEnabled;
|
import io.opentelemetry.instrumentation.spring.autoconfigure.internal.ConditionalOnEnabledInstrumentation;
|
||||||
import io.opentelemetry.instrumentation.spring.webflux.v5_3.SpringWebfluxTelemetry;
|
import io.opentelemetry.instrumentation.spring.webflux.v5_3.SpringWebfluxTelemetry;
|
||||||
import org.springframework.beans.factory.ObjectProvider;
|
import org.springframework.beans.factory.ObjectProvider;
|
||||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
|
|
||||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
|
||||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
|
||||||
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Bean;
|
||||||
import org.springframework.context.annotation.Conditional;
|
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
import org.springframework.web.reactive.function.client.WebClient;
|
import org.springframework.web.reactive.function.client.WebClient;
|
||||||
import org.springframework.web.server.WebFilter;
|
import org.springframework.web.server.WebFilter;
|
||||||
|
@ -23,10 +20,8 @@ import org.springframework.web.server.WebFilter;
|
||||||
*
|
*
|
||||||
* <p>Adds Open Telemetry instrumentation to WebClient beans after initialization
|
* <p>Adds Open Telemetry instrumentation to WebClient beans after initialization
|
||||||
*/
|
*/
|
||||||
@ConditionalOnBean(OpenTelemetry.class)
|
@ConditionalOnEnabledInstrumentation(module = "spring-webflux")
|
||||||
@ConditionalOnClass(WebClient.class)
|
@ConditionalOnClass(WebClient.class)
|
||||||
@ConditionalOnProperty(name = "otel.instrumentation.spring-webflux.enabled", matchIfMissing = true)
|
|
||||||
@Conditional(SdkEnabled.class)
|
|
||||||
@Configuration
|
@Configuration
|
||||||
public class SpringWebfluxInstrumentationAutoConfiguration {
|
public class SpringWebfluxInstrumentationAutoConfiguration {
|
||||||
|
|
||||||
|
|
|
@ -6,22 +6,17 @@
|
||||||
package io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.webmvc;
|
package io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.webmvc;
|
||||||
|
|
||||||
import io.opentelemetry.api.OpenTelemetry;
|
import io.opentelemetry.api.OpenTelemetry;
|
||||||
import io.opentelemetry.instrumentation.spring.autoconfigure.internal.SdkEnabled;
|
import io.opentelemetry.instrumentation.spring.autoconfigure.internal.ConditionalOnEnabledInstrumentation;
|
||||||
import io.opentelemetry.instrumentation.spring.webmvc.v5_3.SpringWebMvcTelemetry;
|
import io.opentelemetry.instrumentation.spring.webmvc.v5_3.SpringWebMvcTelemetry;
|
||||||
import javax.servlet.Filter;
|
import javax.servlet.Filter;
|
||||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
|
|
||||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
|
||||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
|
||||||
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Bean;
|
||||||
import org.springframework.context.annotation.Conditional;
|
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
import org.springframework.web.filter.OncePerRequestFilter;
|
import org.springframework.web.filter.OncePerRequestFilter;
|
||||||
import org.springframework.web.servlet.DispatcherServlet;
|
import org.springframework.web.servlet.DispatcherServlet;
|
||||||
|
|
||||||
@ConditionalOnBean(OpenTelemetry.class)
|
@ConditionalOnEnabledInstrumentation(module = "spring-webmvc")
|
||||||
@ConditionalOnClass({Filter.class, OncePerRequestFilter.class, DispatcherServlet.class})
|
@ConditionalOnClass({Filter.class, OncePerRequestFilter.class, DispatcherServlet.class})
|
||||||
@ConditionalOnProperty(name = "otel.instrumentation.spring-webmvc.enabled", matchIfMissing = true)
|
|
||||||
@Conditional(SdkEnabled.class)
|
|
||||||
@Configuration
|
@Configuration
|
||||||
@SuppressWarnings("OtelPrivateConstructorForUtilityClass")
|
@SuppressWarnings("OtelPrivateConstructorForUtilityClass")
|
||||||
public class SpringWebMvc5InstrumentationAutoConfiguration {
|
public class SpringWebMvc5InstrumentationAutoConfiguration {
|
||||||
|
|
|
@ -6,22 +6,17 @@
|
||||||
package io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.webmvc;
|
package io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.webmvc;
|
||||||
|
|
||||||
import io.opentelemetry.api.OpenTelemetry;
|
import io.opentelemetry.api.OpenTelemetry;
|
||||||
import io.opentelemetry.instrumentation.spring.autoconfigure.internal.SdkEnabled;
|
import io.opentelemetry.instrumentation.spring.autoconfigure.internal.ConditionalOnEnabledInstrumentation;
|
||||||
import io.opentelemetry.instrumentation.spring.webmvc.v6_0.SpringWebMvcTelemetry;
|
import io.opentelemetry.instrumentation.spring.webmvc.v6_0.SpringWebMvcTelemetry;
|
||||||
import jakarta.servlet.Filter;
|
import jakarta.servlet.Filter;
|
||||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
|
|
||||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
|
||||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
|
||||||
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Bean;
|
||||||
import org.springframework.context.annotation.Conditional;
|
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
import org.springframework.web.filter.OncePerRequestFilter;
|
import org.springframework.web.filter.OncePerRequestFilter;
|
||||||
import org.springframework.web.servlet.DispatcherServlet;
|
import org.springframework.web.servlet.DispatcherServlet;
|
||||||
|
|
||||||
@ConditionalOnBean(OpenTelemetry.class)
|
@ConditionalOnEnabledInstrumentation(module = "spring-webmvc")
|
||||||
@ConditionalOnClass({Filter.class, OncePerRequestFilter.class, DispatcherServlet.class})
|
@ConditionalOnClass({Filter.class, OncePerRequestFilter.class, DispatcherServlet.class})
|
||||||
@ConditionalOnProperty(name = "otel.instrumentation.spring-webmvc.enabled", matchIfMissing = true)
|
|
||||||
@Conditional(SdkEnabled.class)
|
|
||||||
@Configuration
|
@Configuration
|
||||||
@SuppressWarnings("OtelPrivateConstructorForUtilityClass")
|
@SuppressWarnings("OtelPrivateConstructorForUtilityClass")
|
||||||
public class SpringWebMvc6InstrumentationAutoConfiguration {
|
public class SpringWebMvc6InstrumentationAutoConfiguration {
|
||||||
|
|
|
@ -0,0 +1,28 @@
|
||||||
|
/*
|
||||||
|
* Copyright The OpenTelemetry Authors
|
||||||
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
|
*/
|
||||||
|
|
||||||
|
package io.opentelemetry.instrumentation.spring.autoconfigure.internal;
|
||||||
|
|
||||||
|
import io.opentelemetry.api.OpenTelemetry;
|
||||||
|
import java.lang.annotation.ElementType;
|
||||||
|
import java.lang.annotation.Retention;
|
||||||
|
import java.lang.annotation.RetentionPolicy;
|
||||||
|
import java.lang.annotation.Target;
|
||||||
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
|
||||||
|
import org.springframework.context.annotation.Conditional;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class is internal and is hence not for public use. Its APIs are unstable and can change at
|
||||||
|
* any time.
|
||||||
|
*/
|
||||||
|
@Target({ElementType.TYPE})
|
||||||
|
@Retention(RetentionPolicy.RUNTIME)
|
||||||
|
@ConditionalOnBean(OpenTelemetry.class)
|
||||||
|
@Conditional({SdkEnabled.class, InstrumentationPropertyEnabled.class})
|
||||||
|
public @interface ConditionalOnEnabledInstrumentation {
|
||||||
|
String module();
|
||||||
|
|
||||||
|
boolean enabledByDefault() default true;
|
||||||
|
}
|
|
@ -0,0 +1,28 @@
|
||||||
|
/*
|
||||||
|
* Copyright The OpenTelemetry Authors
|
||||||
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
|
*/
|
||||||
|
|
||||||
|
package io.opentelemetry.instrumentation.spring.autoconfigure.internal;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
import org.springframework.context.annotation.Condition;
|
||||||
|
import org.springframework.context.annotation.ConditionContext;
|
||||||
|
import org.springframework.core.type.AnnotatedTypeMetadata;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class is internal and is hence not for public use. Its APIs are unstable and can change at
|
||||||
|
* any time.
|
||||||
|
*/
|
||||||
|
public class InstrumentationPropertyEnabled implements Condition {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
|
||||||
|
Map<String, Object> attributes =
|
||||||
|
metadata.getAnnotationAttributes(ConditionalOnEnabledInstrumentation.class.getName());
|
||||||
|
|
||||||
|
String name = String.format("otel.instrumentation.%s.enabled", attributes.get("module"));
|
||||||
|
boolean defaultValue = (boolean) attributes.get("enabledByDefault");
|
||||||
|
return context.getEnvironment().getProperty(name, Boolean.class, defaultValue);
|
||||||
|
}
|
||||||
|
}
|
|
@ -3,7 +3,7 @@ io.opentelemetry.instrumentation.spring.autoconfigure.OpenTelemetryAutoConfigura
|
||||||
io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.annotations.InstrumentationAnnotationsAutoConfiguration,\
|
io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.annotations.InstrumentationAnnotationsAutoConfiguration,\
|
||||||
io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.kafka.KafkaInstrumentationAutoConfiguration,\
|
io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.kafka.KafkaInstrumentationAutoConfiguration,\
|
||||||
io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.logging.OpenTelemetryAppenderAutoConfiguration,\
|
io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.logging.OpenTelemetryAppenderAutoConfiguration,\
|
||||||
io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.jdbc.JdbcInstrumentationAutoconfiguration,\
|
io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.jdbc.JdbcInstrumentationAutoConfiguration,\
|
||||||
io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.micrometer.MicrometerBridgeAutoConfiguration,\
|
io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.micrometer.MicrometerBridgeAutoConfiguration,\
|
||||||
io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.web.SpringWebInstrumentationAutoConfiguration,\
|
io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.web.SpringWebInstrumentationAutoConfiguration,\
|
||||||
io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.webflux.SpringWebfluxInstrumentationAutoConfiguration,\
|
io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.webflux.SpringWebfluxInstrumentationAutoConfiguration,\
|
||||||
|
|
|
@ -2,7 +2,7 @@ io.opentelemetry.instrumentation.spring.autoconfigure.OpenTelemetryAutoConfigura
|
||||||
io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.annotations.InstrumentationAnnotationsAutoConfiguration
|
io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.annotations.InstrumentationAnnotationsAutoConfiguration
|
||||||
io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.kafka.KafkaInstrumentationAutoConfiguration
|
io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.kafka.KafkaInstrumentationAutoConfiguration
|
||||||
io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.logging.OpenTelemetryAppenderAutoConfiguration
|
io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.logging.OpenTelemetryAppenderAutoConfiguration
|
||||||
io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.jdbc.JdbcInstrumentationAutoconfiguration
|
io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.jdbc.JdbcInstrumentationAutoConfiguration
|
||||||
io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.micrometer.MicrometerBridgeAutoConfiguration
|
io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.micrometer.MicrometerBridgeAutoConfiguration
|
||||||
io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.web.SpringWebInstrumentationAutoConfiguration
|
io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.web.SpringWebInstrumentationAutoConfiguration
|
||||||
io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.webflux.SpringWebfluxInstrumentationAutoConfiguration
|
io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.webflux.SpringWebfluxInstrumentationAutoConfiguration
|
||||||
|
|
Loading…
Reference in New Issue