diff --git a/pom.xml b/pom.xml
index eeb1b1755b..8ce2c2d239 100644
--- a/pom.xml
+++ b/pom.xml
@@ -73,7 +73,7 @@
3.0.0-SNAPSHOT
5.12.7
0.32.0
- 0.10.0
+ 0.11.0
0.10.1
2.3.4.RELEASE
diff --git a/spring-cloud-sleuth-autoconfigure/pom.xml b/spring-cloud-sleuth-autoconfigure/pom.xml
index 52876f5ff2..870c257665 100644
--- a/spring-cloud-sleuth-autoconfigure/pom.xml
+++ b/spring-cloud-sleuth-autoconfigure/pom.xml
@@ -351,17 +351,6 @@
-
- io.opentelemetry
- opentelemetry-extension-auto-annotations
- true
-
-
- io.opentelemetry
- *
-
-
-
io.opentelemetry
opentelemetry-exporter-logging
diff --git a/spring-cloud-sleuth-autoconfigure/src/main/java/org/springframework/cloud/sleuth/autoconfig/otel/OtelAutoConfiguration.java b/spring-cloud-sleuth-autoconfigure/src/main/java/org/springframework/cloud/sleuth/autoconfig/otel/OtelAutoConfiguration.java
index 7bfff13646..89337e981d 100644
--- a/spring-cloud-sleuth-autoconfigure/src/main/java/org/springframework/cloud/sleuth/autoconfig/otel/OtelAutoConfiguration.java
+++ b/spring-cloud-sleuth-autoconfigure/src/main/java/org/springframework/cloud/sleuth/autoconfig/otel/OtelAutoConfiguration.java
@@ -22,10 +22,9 @@
import io.opentelemetry.api.OpenTelemetry;
import io.opentelemetry.api.metrics.MeterProvider;
-import io.opentelemetry.api.metrics.spi.MeterProviderFactory;
import io.opentelemetry.api.trace.Tracer;
import io.opentelemetry.api.trace.TracerProvider;
-import io.opentelemetry.api.trace.spi.TracerProviderFactory;
+import io.opentelemetry.context.propagation.ContextPropagators;
import io.opentelemetry.sdk.trace.SpanProcessor;
import io.opentelemetry.sdk.trace.TracerSdkProvider;
import io.opentelemetry.sdk.trace.config.TraceConfig;
@@ -33,6 +32,8 @@
import io.opentelemetry.sdk.trace.export.SpanExporter;
import io.opentelemetry.sdk.trace.samplers.Sampler;
import io.opentelemetry.sdk.trace.spi.TracerProviderFactorySdk;
+import io.opentelemetry.spi.metrics.MeterProviderFactory;
+import io.opentelemetry.spi.trace.TracerProviderFactory;
import org.springframework.beans.factory.ObjectProvider;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
@@ -44,6 +45,7 @@
import org.springframework.cloud.sleuth.autoconfig.SleuthSpanFilterProperties;
import org.springframework.cloud.sleuth.autoconfig.SleuthTracerProperties;
import org.springframework.cloud.sleuth.autoconfig.TraceConfiguration;
+import org.springframework.cloud.sleuth.otel.bridge.OtelOpenTelemetry;
import org.springframework.cloud.sleuth.otel.bridge.SpanExporterCustomizer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@@ -67,6 +69,17 @@
SleuthAnnotationConfiguration.class })
public class OtelAutoConfiguration {
+ @Bean
+ @ConditionalOnMissingBean
+ OpenTelemetry otel(TracerProviderFactory tracerProviderFactory, MeterProviderFactory meterProviderFactory,
+ TracerProvider tracerProvider, MeterProvider meterProvider, ContextPropagators contextPropagators) {
+ OtelOpenTelemetry otelOpenTelemetry = new OtelOpenTelemetry(tracerProviderFactory, meterProviderFactory,
+ tracerProvider, meterProvider, contextPropagators);
+ OpenTelemetry.set(otelOpenTelemetry);
+ OpenTelemetry.setGlobalPropagators(contextPropagators);
+ return otelOpenTelemetry;
+ }
+
@Bean
@ConditionalOnMissingBean
TracerProviderFactory otelTracerProviderFactory() {
diff --git a/spring-cloud-sleuth-autoconfigure/src/main/java/org/springframework/cloud/sleuth/autoconfig/otel/OtelBridgeConfiguation.java b/spring-cloud-sleuth-autoconfigure/src/main/java/org/springframework/cloud/sleuth/autoconfig/otel/OtelBridgeConfiguation.java
index b02f72e0b5..1b67b902c7 100644
--- a/spring-cloud-sleuth-autoconfigure/src/main/java/org/springframework/cloud/sleuth/autoconfig/otel/OtelBridgeConfiguation.java
+++ b/spring-cloud-sleuth-autoconfigure/src/main/java/org/springframework/cloud/sleuth/autoconfig/otel/OtelBridgeConfiguation.java
@@ -19,10 +19,6 @@
import java.util.regex.Pattern;
import io.opentelemetry.api.OpenTelemetry;
-import io.opentelemetry.api.metrics.MeterProvider;
-import io.opentelemetry.api.metrics.spi.MeterProviderFactory;
-import io.opentelemetry.api.trace.TracerProvider;
-import io.opentelemetry.api.trace.spi.TracerProviderFactory;
import io.opentelemetry.context.propagation.ContextPropagators;
import org.springframework.beans.factory.ObjectProvider;
@@ -51,7 +47,6 @@
import org.springframework.cloud.sleuth.otel.bridge.OtelCurrentTraceContext;
import org.springframework.cloud.sleuth.otel.bridge.OtelHttpClientHandler;
import org.springframework.cloud.sleuth.otel.bridge.OtelHttpServerHandler;
-import org.springframework.cloud.sleuth.otel.bridge.OtelOpenTelemetry;
import org.springframework.cloud.sleuth.otel.bridge.OtelPropagator;
import org.springframework.cloud.sleuth.otel.bridge.OtelSpanCustomizer;
import org.springframework.cloud.sleuth.otel.bridge.OtelTracer;
@@ -76,14 +71,6 @@
@Import({ OtelLogConfiguration.class, OtelExporterConfiguration.class })
class OtelBridgeConfiguation {
- @Bean
- @ConditionalOnMissingBean
- OpenTelemetry otel(TracerProviderFactory tracerProviderFactory, MeterProviderFactory meterProviderFactory,
- TracerProvider tracerProvider, MeterProvider meterProvider, ContextPropagators contextPropagators) {
- return new OtelOpenTelemetry(tracerProviderFactory, meterProviderFactory, tracerProvider, meterProvider,
- contextPropagators);
- }
-
@Bean
Tracer otelTracerBridge(io.opentelemetry.api.trace.Tracer tracer, ApplicationEventPublisher publisher,
CurrentTraceContext currentTraceContext, SleuthBaggageProperties sleuthBaggageProperties) {
diff --git a/spring-cloud-sleuth-autoconfigure/src/main/java/org/springframework/cloud/sleuth/autoconfig/otel/OtelPropagationConfiguration.java b/spring-cloud-sleuth-autoconfigure/src/main/java/org/springframework/cloud/sleuth/autoconfig/otel/OtelPropagationConfiguration.java
index 40044d3fa6..70b5feb96c 100644
--- a/spring-cloud-sleuth-autoconfigure/src/main/java/org/springframework/cloud/sleuth/autoconfig/otel/OtelPropagationConfiguration.java
+++ b/spring-cloud-sleuth-autoconfigure/src/main/java/org/springframework/cloud/sleuth/autoconfig/otel/OtelPropagationConfiguration.java
@@ -17,9 +17,12 @@
package org.springframework.cloud.sleuth.autoconfig.otel;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.List;
-import io.opentelemetry.api.OpenTelemetry;
+import javax.annotation.Nullable;
+
+import io.opentelemetry.context.Context;
import io.opentelemetry.context.propagation.ContextPropagators;
import io.opentelemetry.context.propagation.DefaultContextPropagators;
import io.opentelemetry.context.propagation.TextMapPropagator;
@@ -58,12 +61,30 @@ class OtelPropagationConfiguration {
ContextPropagators otelContextPropagators(ObjectProvider> propagators) {
List mapPropagators = propagators.getIfAvailable(ArrayList::new);
if (mapPropagators.isEmpty()) {
- return OpenTelemetry.getGlobalPropagators();
+ return noOpContextPropagator();
}
DefaultContextPropagators.Builder builder = DefaultContextPropagators.builder();
mapPropagators.forEach(builder::addTextMapPropagator);
- OpenTelemetry.setGlobalPropagators(builder.build());
- return OpenTelemetry.getGlobalPropagators();
+ return builder.build();
+ }
+
+ private ContextPropagators noOpContextPropagator() {
+ return () -> new TextMapPropagator() {
+ @Override
+ public List fields() {
+ return Collections.emptyList();
+ }
+
+ @Override
+ public void inject(Context context, @Nullable C carrier, Setter setter) {
+
+ }
+
+ @Override
+ public Context extract(Context context, @Nullable C carrier, Getter getter) {
+ return context;
+ }
+ };
}
@Configuration(proxyBeanMethods = false)
diff --git a/spring-cloud-sleuth-dependencies/pom.xml b/spring-cloud-sleuth-dependencies/pom.xml
index 367ddc4ae0..29493f72d9 100644
--- a/spring-cloud-sleuth-dependencies/pom.xml
+++ b/spring-cloud-sleuth-dependencies/pom.xml
@@ -34,7 +34,7 @@
5.13.1
0.37.4
4.2.2
- 0.10.0
+ 0.11.0
diff --git a/spring-cloud-sleuth-otel/pom.xml b/spring-cloud-sleuth-otel/pom.xml
index 2d26d97247..01d8a26fd9 100644
--- a/spring-cloud-sleuth-otel/pom.xml
+++ b/spring-cloud-sleuth-otel/pom.xml
@@ -88,17 +88,6 @@
-
- io.opentelemetry
- opentelemetry-extension-auto-annotations
- true
-
-
- io.opentelemetry
- *
-
-
-
io.opentelemetry
opentelemetry-exporter-logging
diff --git a/spring-cloud-sleuth-otel/src/main/java/org/springframework/cloud/sleuth/otel/bridge/OtelBaggageManager.java b/spring-cloud-sleuth-otel/src/main/java/org/springframework/cloud/sleuth/otel/bridge/OtelBaggageManager.java
index 9bedfa046b..913b4869fd 100644
--- a/spring-cloud-sleuth-otel/src/main/java/org/springframework/cloud/sleuth/otel/bridge/OtelBaggageManager.java
+++ b/spring-cloud-sleuth-otel/src/main/java/org/springframework/cloud/sleuth/otel/bridge/OtelBaggageManager.java
@@ -27,6 +27,7 @@
import java.util.Objects;
import io.opentelemetry.api.baggage.Baggage;
+import io.opentelemetry.api.baggage.BaggageBuilder;
import io.opentelemetry.api.baggage.BaggageConsumer;
import io.opentelemetry.api.baggage.EntryMetadata;
import io.opentelemetry.context.Context;
@@ -205,7 +206,7 @@ public String getEntryValue(String entryKey) {
}
@Override
- public Builder toBuilder() {
+ public BaggageBuilder toBuilder() {
return Baggage.builder();
}
diff --git a/spring-cloud-sleuth-otel/src/main/java/org/springframework/cloud/sleuth/otel/bridge/OtelOpenTelemetry.java b/spring-cloud-sleuth-otel/src/main/java/org/springframework/cloud/sleuth/otel/bridge/OtelOpenTelemetry.java
index 7dec15954e..fdbf48ca9a 100644
--- a/spring-cloud-sleuth-otel/src/main/java/org/springframework/cloud/sleuth/otel/bridge/OtelOpenTelemetry.java
+++ b/spring-cloud-sleuth-otel/src/main/java/org/springframework/cloud/sleuth/otel/bridge/OtelOpenTelemetry.java
@@ -20,10 +20,10 @@
import io.opentelemetry.api.OpenTelemetry;
import io.opentelemetry.api.metrics.MeterProvider;
-import io.opentelemetry.api.metrics.spi.MeterProviderFactory;
import io.opentelemetry.api.trace.TracerProvider;
-import io.opentelemetry.api.trace.spi.TracerProviderFactory;
import io.opentelemetry.context.propagation.ContextPropagators;
+import io.opentelemetry.spi.metrics.MeterProviderFactory;
+import io.opentelemetry.spi.trace.TracerProviderFactory;
/**
* Sleuth implementation of a {@link OpenTelemetry}.
@@ -68,11 +68,11 @@ public ContextPropagators getPropagators() {
}
@Override
- public io.opentelemetry.api.OpenTelemetry.Builder toBuilder() {
+ public io.opentelemetry.api.OpenTelemetryBuilder toBuilder() {
return new Builder(this.meterProviderFactory, this.tracerProviderFactory);
}
- static class Builder implements io.opentelemetry.api.OpenTelemetry.Builder {
+ static class Builder implements io.opentelemetry.api.OpenTelemetryBuilder {
private ContextPropagators propagators;
diff --git a/spring-cloud-sleuth-otel/src/main/java/org/springframework/cloud/sleuth/otel/bridge/OtelSpan.java b/spring-cloud-sleuth-otel/src/main/java/org/springframework/cloud/sleuth/otel/bridge/OtelSpan.java
index 772b82c463..bbb68cb712 100644
--- a/spring-cloud-sleuth-otel/src/main/java/org/springframework/cloud/sleuth/otel/bridge/OtelSpan.java
+++ b/spring-cloud-sleuth-otel/src/main/java/org/springframework/cloud/sleuth/otel/bridge/OtelSpan.java
@@ -16,7 +16,9 @@
package org.springframework.cloud.sleuth.otel.bridge;
+import java.time.Instant;
import java.util.Objects;
+import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicReference;
import io.opentelemetry.api.common.AttributeKey;
@@ -187,7 +189,12 @@ public io.opentelemetry.api.trace.Span addEvent(String name) {
}
@Override
- public io.opentelemetry.api.trace.Span addEvent(String name, long timestamp) {
+ public io.opentelemetry.api.trace.Span addEvent(String name, long timestamp, TimeUnit unit) {
+ return span.addEvent(name, timestamp, unit);
+ }
+
+ @Override
+ public io.opentelemetry.api.trace.Span addEvent(String name, Instant timestamp) {
return span.addEvent(name, timestamp);
}
@@ -197,7 +204,12 @@ public io.opentelemetry.api.trace.Span addEvent(String name, Attributes attribut
}
@Override
- public io.opentelemetry.api.trace.Span addEvent(String name, Attributes attributes, long timestamp) {
+ public io.opentelemetry.api.trace.Span addEvent(String name, Attributes attributes, long timestamp, TimeUnit unit) {
+ return span.addEvent(name, attributes, timestamp, unit);
+ }
+
+ @Override
+ public io.opentelemetry.api.trace.Span addEvent(String name, Attributes attributes, Instant timestamp) {
return span.addEvent(name, attributes, timestamp);
}
@@ -242,8 +254,13 @@ public void end() {
}
@Override
- public void end(long l) {
- span.end(l);
+ public void end(long timestamp, TimeUnit unit) {
+ span.end(timestamp, unit);
+ }
+
+ @Override
+ public void end(Instant timestamp) {
+ span.end(timestamp);
}
@Override
@@ -256,6 +273,11 @@ public boolean isRecording() {
return span.isRecording();
}
+ @Override
+ public Context storeInContext(Context context) {
+ return span.storeInContext(context);
+ }
+
@Override
public String toString() {
return "SpanFromSpanContext{" + "span=" + span + ", newSpanContext=" + newSpanContext + '}';
diff --git a/spring-cloud-sleuth-otel/src/main/java/org/springframework/cloud/sleuth/otel/bridge/OtelSpanBuilder.java b/spring-cloud-sleuth-otel/src/main/java/org/springframework/cloud/sleuth/otel/bridge/OtelSpanBuilder.java
index 277673cd47..c53be3e711 100644
--- a/spring-cloud-sleuth-otel/src/main/java/org/springframework/cloud/sleuth/otel/bridge/OtelSpanBuilder.java
+++ b/spring-cloud-sleuth-otel/src/main/java/org/springframework/cloud/sleuth/otel/bridge/OtelSpanBuilder.java
@@ -31,7 +31,7 @@
*/
class OtelSpanBuilder implements Span.Builder {
- private final io.opentelemetry.api.trace.Span.Builder delegate;
+ private final io.opentelemetry.api.trace.SpanBuilder delegate;
private final List annotations = new LinkedList<>();
@@ -39,11 +39,11 @@ class OtelSpanBuilder implements Span.Builder {
private Throwable error;
- OtelSpanBuilder(io.opentelemetry.api.trace.Span.Builder delegate) {
+ OtelSpanBuilder(io.opentelemetry.api.trace.SpanBuilder delegate) {
this.delegate = delegate;
}
- static Span.Builder fromOtel(io.opentelemetry.api.trace.Span.Builder builder) {
+ static Span.Builder fromOtel(io.opentelemetry.api.trace.SpanBuilder builder) {
return new OtelSpanBuilder(builder);
}
diff --git a/spring-cloud-sleuth-otel/src/main/java/org/springframework/cloud/sleuth/otel/propagation/BaggageTextMapPropagator.java b/spring-cloud-sleuth-otel/src/main/java/org/springframework/cloud/sleuth/otel/propagation/BaggageTextMapPropagator.java
index 96af07add1..eac7bdf322 100644
--- a/spring-cloud-sleuth-otel/src/main/java/org/springframework/cloud/sleuth/otel/propagation/BaggageTextMapPropagator.java
+++ b/spring-cloud-sleuth-otel/src/main/java/org/springframework/cloud/sleuth/otel/propagation/BaggageTextMapPropagator.java
@@ -22,6 +22,7 @@
import java.util.stream.Collectors;
import io.opentelemetry.api.baggage.Baggage;
+import io.opentelemetry.api.baggage.BaggageBuilder;
import io.opentelemetry.api.baggage.EntryMetadata;
import io.opentelemetry.context.Context;
import io.opentelemetry.context.propagation.TextMapPropagator;
@@ -73,7 +74,7 @@ public Context extract(Context context, C c, Getter getter) {
Map baggageEntries = this.remoteFields.stream()
.map(s -> new AbstractMap.SimpleEntry<>(s, getter.get(c, s))).filter(e -> e.getValue() != null)
.collect(Collectors.toMap((e) -> e.getKey(), (e) -> e.getValue()));
- Baggage.Builder builder = Baggage.builder().setParent(context);
+ BaggageBuilder builder = Baggage.builder().setParent(context);
// TODO: [OTEL] magic string
baggageEntries.forEach((key, value) -> builder.put(key, value, EntryMetadata.create("propagation=unlimited")));
Baggage baggage = builder.build();