Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

re-use sdk logic for configuring otlp exporters #10292

Merged
merged 9 commits into from
Feb 6, 2024
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,13 @@
import io.opentelemetry.api.OpenTelemetry;
import io.opentelemetry.api.trace.TracerProvider;
import io.opentelemetry.context.propagation.ContextPropagators;
import io.opentelemetry.instrumentation.spring.autoconfigure.exporters.otlp.OtlpLoggerExporterAutoConfiguration;
import io.opentelemetry.instrumentation.spring.autoconfigure.exporters.otlp.OtlpExporterProperties;
import io.opentelemetry.instrumentation.spring.autoconfigure.exporters.otlp.OtlpLogRecordExporterAutoConfiguration;
import io.opentelemetry.instrumentation.spring.autoconfigure.exporters.otlp.OtlpMetricExporterAutoConfiguration;
import io.opentelemetry.instrumentation.spring.autoconfigure.exporters.otlp.OtlpSpanExporterAutoConfiguration;
import io.opentelemetry.instrumentation.spring.autoconfigure.internal.MapConverter;
import io.opentelemetry.instrumentation.spring.autoconfigure.resources.OtelResourceAutoConfiguration;
import io.opentelemetry.instrumentation.spring.autoconfigure.resources.SpringResourceConfigProperties;
import io.opentelemetry.instrumentation.spring.autoconfigure.resources.SpringConfigProperties;
import io.opentelemetry.sdk.OpenTelemetrySdk;
import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
import io.opentelemetry.sdk.autoconfigure.spi.ResourceProvider;
Expand Down Expand Up @@ -55,7 +56,11 @@
* <p>Updates the sampler probability for the configured {@link TracerProvider}.
*/
@Configuration
@EnableConfigurationProperties({MetricExportProperties.class, SamplerProperties.class})
@EnableConfigurationProperties({
MetricExportProperties.class,
SamplerProperties.class,
OtlpExporterProperties.class
})
public class OpenTelemetryAutoConfiguration {

public OpenTelemetryAutoConfiguration() {}
Expand All @@ -81,7 +86,7 @@ public MapConverterCondition() {
@ConditionalOnBean(OtelResourceAutoConfiguration.class)
static class Resource {}

@ConditionalOnBean(OtlpLoggerExporterAutoConfiguration.class)
@ConditionalOnBean(OtlpLogRecordExporterAutoConfiguration.class)
static class Logger {}

@ConditionalOnBean(OtlpSpanExporterAutoConfiguration.class)
Expand All @@ -91,6 +96,13 @@ static class Span {}
static class Metric {}
}

@Bean
@ConditionalOnMissingBean
ConfigProperties configProperties(
Environment env, OtlpExporterProperties otlpExporterProperties) {
return new SpringConfigProperties(env, new SpelExpressionParser(), otlpExporterProperties);
}

@Bean(destroyMethod = "") // SDK components are shutdown from the OpenTelemetry instance
@ConditionalOnMissingBean
public SdkTracerProvider sdkTracerProvider(
Expand Down Expand Up @@ -156,8 +168,7 @@ private static PeriodicMetricReader createPeriodicMetricReader(
@Bean
@ConditionalOnMissingBean
public Resource otelResource(
Environment env, ObjectProvider<List<ResourceProvider>> resourceProviders) {
ConfigProperties config = new SpringResourceConfigProperties(env, new SpelExpressionParser());
ConfigProperties config, ObjectProvider<List<ResourceProvider>> resourceProviders) {
Resource resource = Resource.getDefault();
for (ResourceProvider resourceProvider :
resourceProviders.getIfAvailable(Collections::emptyList)) {
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -11,15 +11,13 @@
import org.springframework.boot.autoconfigure.AutoConfigureBefore;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Condition;
import org.springframework.context.annotation.Conditional;
import org.springframework.context.annotation.Configuration;

/** Configures {@link LoggingMetricExporter} bean for tracing. */
@Configuration
@EnableConfigurationProperties(LoggingExporterProperties.class)
@AutoConfigureBefore(OpenTelemetryAutoConfiguration.class)
@Conditional(LoggingMetricExporterAutoConfiguration.CustomCondition.class)
@ConditionalOnClass(LoggingMetricExporter.class)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,15 +11,13 @@
import org.springframework.boot.autoconfigure.AutoConfigureBefore;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Condition;
import org.springframework.context.annotation.Conditional;
import org.springframework.context.annotation.Configuration;

/** Configures {@link LoggingSpanExporter} bean for tracing. */
@Configuration
@EnableConfigurationProperties(LoggingExporterProperties.class)
@AutoConfigureBefore(OpenTelemetryAutoConfiguration.class)
@Conditional(LoggingSpanExporterAutoConfiguration.CustomCondition.class)
@ConditionalOnClass(LoggingSpanExporter.class)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,76 +5,24 @@

package io.opentelemetry.instrumentation.spring.autoconfigure.exporters.otlp;

import java.time.Duration;
import java.util.HashMap;
import java.util.Map;
import javax.annotation.Nullable;
import org.springframework.boot.context.properties.ConfigurationProperties;

/**
* Configuration for {@link io.opentelemetry.exporter.otlp.trace.OtlpGrpcSpanExporter} and {@link
* io.opentelemetry.exporter.otlp.metrics.OtlpGrpcMetricExporter}.
*
* <p>Get Exporter Service Name
*
* <p>Get Exporter Endpoint
*
* <p>Get max wait time for Collector to process Span Batches
*/
/** Configuration for OLTP exporters. */
@ConfigurationProperties(prefix = "otel.exporter.otlp")
public final class OtlpExporterProperties {

private boolean enabled = true;
@Nullable private String endpoint;

@Nullable private String protocol;

private final Map<String, String> headers = new HashMap<>();

@Nullable private Duration timeout;
private final SignalProperties traces = new SignalProperties();
private final SignalProperties metrics = new SignalProperties();
private final SignalProperties logs = new SignalProperties();

public boolean isEnabled() {
return enabled;
}

public void setEnabled(boolean enabled) {
this.enabled = enabled;
}

@Nullable
public String getEndpoint() {
return endpoint;
}

public void setEndpoint(String endpoint) {
this.endpoint = endpoint;
}

@Nullable
public String getProtocol() {
return protocol;
}

public void setProtocol(@Nullable String protocol) {
this.protocol = protocol;
}

public Map<String, String> getHeaders() {
return headers;
}

@Nullable
public Duration getTimeout() {
return timeout;
}

public void setTimeout(Duration timeout) {
this.timeout = timeout;
}

public SignalProperties getTraces() {
return traces;
}
Expand All @@ -88,53 +36,10 @@ public SignalProperties getLogs() {
}

public static class SignalProperties {

private boolean enabled = true;
@Nullable private String endpoint;

@Nullable private String protocol;

private final Map<String, String> headers = new HashMap<>();

@Nullable private Duration timeout;

public boolean isEnabled() {
return enabled;
}

public void setEnabled(boolean enabled) {
this.enabled = enabled;
}

@Nullable
public String getEndpoint() {
return endpoint;
}

public void setEndpoint(@Nullable String endpoint) {
this.endpoint = endpoint;
}

@Nullable
public String getProtocol() {
return protocol;
}

public void setProtocol(@Nullable String protocol) {
this.protocol = protocol;
}

public Map<String, String> getHeaders() {
return headers;
}

@Nullable
public Duration getTimeout() {
return timeout;
}

public void setTimeout(@Nullable Duration timeout) {
this.timeout = timeout;
}
}
}

This file was deleted.

Loading
Loading