8
8
import io .opentelemetry .api .OpenTelemetry ;
9
9
import io .opentelemetry .api .trace .TracerProvider ;
10
10
import io .opentelemetry .context .propagation .ContextPropagators ;
11
+ import io .opentelemetry .instrumentation .spring .autoconfigure .resources .SpringResourceConfigProperties ;
11
12
import io .opentelemetry .sdk .OpenTelemetrySdk ;
13
+ import io .opentelemetry .sdk .autoconfigure .spi .ConfigProperties ;
14
+ import io .opentelemetry .sdk .autoconfigure .spi .ResourceProvider ;
15
+ import io .opentelemetry .sdk .resources .Resource ;
12
16
import io .opentelemetry .sdk .trace .SdkTracerProvider ;
13
17
import io .opentelemetry .sdk .trace .SdkTracerProviderBuilder ;
14
18
import io .opentelemetry .sdk .trace .export .BatchSpanProcessor ;
21
25
import org .springframework .boot .context .properties .EnableConfigurationProperties ;
22
26
import org .springframework .context .annotation .Bean ;
23
27
import org .springframework .context .annotation .Configuration ;
28
+ import org .springframework .core .env .Environment ;
29
+ import org .springframework .expression .spel .standard .SpelExpressionParser ;
24
30
25
31
/**
26
32
* Create {@link io.opentelemetry.api.trace.Tracer} bean if bean is missing.
@@ -41,18 +47,33 @@ public static class OpenTelemetryBeanConfig {
41
47
@ ConditionalOnMissingBean
42
48
public SdkTracerProvider sdkTracerProvider (
43
49
SamplerProperties samplerProperties ,
44
- ObjectProvider <List <SpanExporter >> spanExportersProvider ) {
50
+ ObjectProvider <List <SpanExporter >> spanExportersProvider ,
51
+ Resource otelResource ) {
45
52
SdkTracerProviderBuilder tracerProviderBuilder = SdkTracerProvider .builder ();
46
53
47
54
spanExportersProvider .getIfAvailable (Collections ::emptyList ).stream ()
48
55
.map (spanExporter -> BatchSpanProcessor .builder (spanExporter ).build ())
49
56
.forEach (tracerProviderBuilder ::addSpanProcessor );
50
57
51
58
return tracerProviderBuilder
59
+ .setResource (otelResource )
52
60
.setSampler (Sampler .traceIdRatioBased (samplerProperties .getProbability ()))
53
61
.build ();
54
62
}
55
63
64
+ @ Bean
65
+ @ ConditionalOnMissingBean
66
+ public Resource otelResource (
67
+ Environment env , ObjectProvider <List <ResourceProvider >> resourceProviders ) {
68
+ ConfigProperties config = new SpringResourceConfigProperties (env , new SpelExpressionParser ());
69
+ Resource resource = Resource .getDefault ();
70
+ for (ResourceProvider resourceProvider :
71
+ resourceProviders .getIfAvailable (Collections ::emptyList )) {
72
+ resource = resource .merge (resourceProvider .createResource (config ));
73
+ }
74
+ return resource ;
75
+ }
76
+
56
77
@ Bean
57
78
public OpenTelemetry openTelemetry (
58
79
ObjectProvider <ContextPropagators > propagatorsProvider , SdkTracerProvider tracerProvider ) {
0 commit comments