Skip to content

Commit 3860eb2

Browse files
committed
Implement auto-configurations for Brave and OpenTelemetry
- Configure Zipkin - Configure Wavefront - Configure Brave - Configure OpenTelemetry - Configure Micrometer Tracing bridges for OpenTelemetry and Brave - Create the ObservationHandler for tracing with Micrometer Closes gh-30156
1 parent f5f7fc8 commit 3860eb2

File tree

47 files changed

+3244
-304
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

47 files changed

+3244
-304
lines changed

Diff for: spring-boot-project/spring-boot-actuator-autoconfigure/build.gradle

+5
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,9 @@ dependencies {
5050
optional("io.micrometer:micrometer-observation")
5151
optional("io.micrometer:micrometer-core")
5252
optional("io.micrometer:micrometer-tracing-api")
53+
optional("io.micrometer:micrometer-tracing-bridge-brave")
54+
optional("io.micrometer:micrometer-tracing-bridge-otel")
55+
optional("io.micrometer:micrometer-tracing-reporter-wavefront")
5356
optional("io.micrometer:micrometer-registry-appoptics")
5457
optional("io.micrometer:micrometer-registry-atlas") {
5558
exclude group: "javax.inject", module: "javax.inject"
@@ -75,6 +78,8 @@ dependencies {
7578
optional("io.micrometer:micrometer-registry-signalfx")
7679
optional("io.micrometer:micrometer-registry-statsd")
7780
optional("io.micrometer:micrometer-registry-wavefront")
81+
optional("io.zipkin.reporter2:zipkin-sender-urlconnection")
82+
optional("io.opentelemetry:opentelemetry-exporter-zipkin")
7883
optional("io.projectreactor.netty:reactor-netty-http")
7984
optional("io.r2dbc:r2dbc-pool")
8085
optional("io.r2dbc:r2dbc-spi")

Diff for: spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/export/wavefront/WavefrontMetricsExportAutoConfiguration.java

+6-32
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,7 @@
1616

1717
package org.springframework.boot.actuate.autoconfigure.metrics.export.wavefront;
1818

19-
import java.time.Duration;
20-
2119
import com.wavefront.sdk.common.WavefrontSender;
22-
import com.wavefront.sdk.common.clients.WavefrontClient.Builder;
2320
import io.micrometer.core.instrument.Clock;
2421
import io.micrometer.wavefront.WavefrontConfig;
2522
import io.micrometer.wavefront.WavefrontMeterRegistry;
@@ -28,16 +25,15 @@
2825
import org.springframework.boot.actuate.autoconfigure.metrics.MetricsAutoConfiguration;
2926
import org.springframework.boot.actuate.autoconfigure.metrics.export.ConditionalOnEnabledMetricsExport;
3027
import org.springframework.boot.actuate.autoconfigure.metrics.export.simple.SimpleMetricsExportAutoConfiguration;
31-
import org.springframework.boot.actuate.autoconfigure.metrics.export.wavefront.WavefrontProperties.Sender;
28+
import org.springframework.boot.actuate.autoconfigure.wavefront.WavefrontAutoConfiguration;
29+
import org.springframework.boot.actuate.autoconfigure.wavefront.WavefrontProperties;
3230
import org.springframework.boot.autoconfigure.AutoConfiguration;
3331
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
3432
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
3533
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
3634
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
3735
import org.springframework.boot.context.properties.EnableConfigurationProperties;
38-
import org.springframework.boot.context.properties.PropertyMapper;
3936
import org.springframework.context.annotation.Bean;
40-
import org.springframework.util.unit.DataSize;
4137

4238
/**
4339
* {@link EnableAutoConfiguration Auto-configuration} for exporting metrics to Wavefront.
@@ -49,29 +45,17 @@
4945
*/
5046
@AutoConfiguration(
5147
before = { CompositeMeterRegistryAutoConfiguration.class, SimpleMetricsExportAutoConfiguration.class },
52-
after = MetricsAutoConfiguration.class)
53-
@ConditionalOnBean(Clock.class)
48+
after = { MetricsAutoConfiguration.class, WavefrontAutoConfiguration.class })
49+
@ConditionalOnBean({ Clock.class, WavefrontSender.class })
5450
@ConditionalOnClass({ WavefrontMeterRegistry.class, WavefrontSender.class })
5551
@ConditionalOnEnabledMetricsExport("wavefront")
5652
@EnableConfigurationProperties(WavefrontProperties.class)
5753
public class WavefrontMetricsExportAutoConfiguration {
5854

59-
private final WavefrontProperties properties;
60-
61-
public WavefrontMetricsExportAutoConfiguration(WavefrontProperties properties) {
62-
this.properties = properties;
63-
}
64-
65-
@Bean
66-
@ConditionalOnMissingBean
67-
public WavefrontConfig wavefrontConfig() {
68-
return new WavefrontPropertiesConfigAdapter(this.properties);
69-
}
70-
7155
@Bean
7256
@ConditionalOnMissingBean
73-
public WavefrontSender wavefrontSender(WavefrontConfig wavefrontConfig) {
74-
return createWavefrontSender(wavefrontConfig);
57+
public WavefrontConfig wavefrontConfig(WavefrontProperties properties) {
58+
return new WavefrontPropertiesConfigAdapter(properties);
7559
}
7660

7761
@Bean
@@ -81,14 +65,4 @@ public WavefrontMeterRegistry wavefrontMeterRegistry(WavefrontConfig wavefrontCo
8165
return WavefrontMeterRegistry.builder(wavefrontConfig).clock(clock).wavefrontSender(wavefrontSender).build();
8266
}
8367

84-
private WavefrontSender createWavefrontSender(WavefrontConfig wavefrontConfig) {
85-
Builder builder = WavefrontMeterRegistry.getDefaultSenderBuilder(wavefrontConfig);
86-
PropertyMapper mapper = PropertyMapper.get().alwaysApplyingWhenNonNull();
87-
Sender sender = this.properties.getSender();
88-
mapper.from(sender.getMaxQueueSize()).to(builder::maxQueueSize);
89-
mapper.from(sender.getFlushInterval()).asInt(Duration::getSeconds).to(builder::flushIntervalSeconds);
90-
mapper.from(sender.getMessageSize()).asInt(DataSize::toBytes).to(builder::messageSizeBytes);
91-
return builder.build();
92-
}
93-
9468
}

Diff for: spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/export/wavefront/WavefrontProperties.java

-132
This file was deleted.

Diff for: spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/export/wavefront/WavefrontPropertiesConfigAdapter.java

+18-16
Original file line numberDiff line numberDiff line change
@@ -19,18 +19,24 @@
1919
import io.micrometer.wavefront.WavefrontConfig;
2020

2121
import org.springframework.boot.actuate.autoconfigure.metrics.export.properties.PushRegistryPropertiesConfigAdapter;
22+
import org.springframework.boot.actuate.autoconfigure.wavefront.WavefrontProperties;
23+
import org.springframework.boot.actuate.autoconfigure.wavefront.WavefrontProperties.Metrics.Export;
2224

2325
/**
24-
* Adapter to convert {@link WavefrontProperties} to a {@link WavefrontConfig}.
26+
* Adapter to convert {@link WavefrontProperties.Metrics} to a {@link WavefrontConfig}.
2527
*
2628
* @author Jon Schneider
29+
* @author Moritz Halbritter
2730
* @since 2.0.0
2831
*/
29-
public class WavefrontPropertiesConfigAdapter extends PushRegistryPropertiesConfigAdapter<WavefrontProperties>
30-
implements WavefrontConfig {
32+
public class WavefrontPropertiesConfigAdapter
33+
extends PushRegistryPropertiesConfigAdapter<WavefrontProperties.Metrics.Export> implements WavefrontConfig {
34+
35+
private final WavefrontProperties properties;
3136

3237
public WavefrontPropertiesConfigAdapter(WavefrontProperties properties) {
33-
super(properties);
38+
super(properties.getMetrics().getExport());
39+
this.properties = properties;
3440
}
3541

3642
@Override
@@ -39,32 +45,28 @@ public String prefix() {
3945
}
4046

4147
@Override
42-
public String get(String k) {
43-
return null;
48+
public String uri() {
49+
return this.properties.getEffectiveUri().toString();
4450
}
4551

4652
@Override
47-
public String uri() {
48-
return get(this::getUriAsString, WavefrontConfig.DEFAULT_DIRECT::uri);
53+
public String source() {
54+
return this.properties.getSourceOrDefault();
4955
}
5056

5157
@Override
52-
public String source() {
53-
return get(WavefrontProperties::getSource, WavefrontConfig.super::source);
58+
public int batchSize() {
59+
return this.properties.getSender().getBatchSize();
5460
}
5561

5662
@Override
5763
public String apiToken() {
58-
return get(WavefrontProperties::getApiToken, WavefrontConfig.super::apiToken);
64+
return this.properties.getApiTokenOrThrow();
5965
}
6066

6167
@Override
6268
public String globalPrefix() {
63-
return get(WavefrontProperties::getGlobalPrefix, WavefrontConfig.super::globalPrefix);
64-
}
65-
66-
private String getUriAsString(WavefrontProperties properties) {
67-
return (properties.getUri() != null) ? properties.getUri().toString() : null;
69+
return get(Export::getGlobalPrefix, WavefrontConfig.super::globalPrefix);
6870
}
6971

7072
}

0 commit comments

Comments
 (0)