Bumped OTel to 0.11.0; fixes gh-1787
This commit is contained in:
4
pom.xml
4
pom.xml
@@ -73,9 +73,9 @@
|
||||
<spring-cloud-openfeign.version>3.0.0-SNAPSHOT</spring-cloud-openfeign.version>
|
||||
<brave.version>5.13.2</brave.version>
|
||||
<opentracing.version>0.32.0</opentracing.version>
|
||||
<opentelemetry.version>0.10.0</opentelemetry.version>
|
||||
<opentelemetry.version>0.11.0</opentelemetry.version>
|
||||
<!-- From maven local -->
|
||||
<opentelemetry-instrumentation.version>0.10.1</opentelemetry-instrumentation.version>
|
||||
<opentelemetry-instrumentation.version>0.11.0</opentelemetry-instrumentation.version>
|
||||
<spring-security-boot-autoconfigure.version>2.3.4.RELEASE</spring-security-boot-autoconfigure.version>
|
||||
<disable.nohttp.checks>false</disable.nohttp.checks>
|
||||
<okhttp.version>4.9.0</okhttp.version>
|
||||
|
||||
@@ -68,6 +68,12 @@ public interface BaggageInScope extends Closeable {
|
||||
*/
|
||||
BaggageInScope set(TraceContext traceContext, String value);
|
||||
|
||||
/**
|
||||
* Sets the current baggage in scope.
|
||||
* @return this in scope
|
||||
*/
|
||||
BaggageInScope makeCurrent();
|
||||
|
||||
@Override
|
||||
void close();
|
||||
|
||||
|
||||
@@ -351,17 +351,6 @@
|
||||
</exclusion>
|
||||
</exclusions>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.opentelemetry</groupId>
|
||||
<artifactId>opentelemetry-extension-auto-annotations</artifactId>
|
||||
<optional>true</optional>
|
||||
<exclusions>
|
||||
<exclusion>
|
||||
<groupId>io.opentelemetry</groupId>
|
||||
<artifactId>*</artifactId>
|
||||
</exclusion>
|
||||
</exclusions>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.opentelemetry</groupId>
|
||||
<artifactId>opentelemetry-exporter-logging</artifactId>
|
||||
|
||||
@@ -22,10 +22,9 @@ import java.util.stream.Collectors;
|
||||
|
||||
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.SimpleSpanProcessor;
|
||||
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.SleuthBaggageProperties;
|
||||
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 @@ import org.springframework.context.annotation.Import;
|
||||
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() {
|
||||
|
||||
@@ -19,10 +19,6 @@ package org.springframework.cloud.sleuth.autoconfig.otel;
|
||||
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.OtelBaggageManager;
|
||||
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 org.springframework.lang.Nullable;
|
||||
@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) {
|
||||
|
||||
@@ -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<List<TextMapPropagator>> propagators) {
|
||||
List<TextMapPropagator> 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<String> fields() {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
@Override
|
||||
public <C> void inject(Context context, @Nullable C carrier, Setter<C> setter) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public <C> Context extract(Context context, @Nullable C carrier, Getter<C> getter) {
|
||||
return context;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@Configuration(proxyBeanMethods = false)
|
||||
|
||||
@@ -52,6 +52,11 @@ class NoOpBaggageInScope implements BaggageInScope {
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public BaggageInScope makeCurrent() {
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void close() {
|
||||
|
||||
|
||||
@@ -66,6 +66,11 @@ class BraveBaggageInScope implements BaggageInScope {
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public BaggageInScope makeCurrent() {
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void close() {
|
||||
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
<brave.version>5.13.2</brave.version>
|
||||
<brave.opentracing.version>0.37.4</brave.opentracing.version>
|
||||
<grpc.spring.boot.version>4.2.2</grpc.spring.boot.version>
|
||||
<opentelemetry.version>0.10.0</opentelemetry.version>
|
||||
<opentelemetry.version>0.11.0</opentelemetry.version>
|
||||
</properties>
|
||||
<dependencyManagement>
|
||||
<dependencies>
|
||||
|
||||
@@ -88,17 +88,6 @@
|
||||
</exclusion>
|
||||
</exclusions>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.opentelemetry</groupId>
|
||||
<artifactId>opentelemetry-extension-auto-annotations</artifactId>
|
||||
<optional>true</optional>
|
||||
<exclusions>
|
||||
<exclusion>
|
||||
<groupId>io.opentelemetry</groupId>
|
||||
<artifactId>*</artifactId>
|
||||
</exclusion>
|
||||
</exclusions>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.opentelemetry</groupId>
|
||||
<artifactId>opentelemetry-exporter-logging</artifactId>
|
||||
|
||||
@@ -119,6 +119,16 @@ class OtelBaggageInScope implements BaggageInScope {
|
||||
return doSet(traceContext, value);
|
||||
}
|
||||
|
||||
@Override
|
||||
public BaggageInScope makeCurrent() {
|
||||
close();
|
||||
Entry entry = entry();
|
||||
Scope scope = Baggage.builder().put(entry.getKey(), entry.getValue(), entry.getEntryMetadata()).build()
|
||||
.makeCurrent();
|
||||
this.scope.set(scope);
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void close() {
|
||||
Scope scope = this.scope.get();
|
||||
|
||||
@@ -27,6 +27,7 @@ import java.util.Map;
|
||||
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 @@ class CompositeBaggage implements io.opentelemetry.api.baggage.Baggage {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Builder toBuilder() {
|
||||
public BaggageBuilder toBuilder() {
|
||||
return Baggage.builder();
|
||||
}
|
||||
|
||||
|
||||
@@ -20,10 +20,10 @@ import java.util.Objects;
|
||||
|
||||
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 class OtelOpenTelemetry implements OpenTelemetry {
|
||||
}
|
||||
|
||||
@Override
|
||||
public io.opentelemetry.api.OpenTelemetry.Builder<OtelOpenTelemetry.Builder> toBuilder() {
|
||||
public io.opentelemetry.api.OpenTelemetryBuilder<OtelOpenTelemetry.Builder> toBuilder() {
|
||||
return new Builder(this.meterProviderFactory, this.tracerProviderFactory);
|
||||
}
|
||||
|
||||
static class Builder implements io.opentelemetry.api.OpenTelemetry.Builder<OtelOpenTelemetry.Builder> {
|
||||
static class Builder implements io.opentelemetry.api.OpenTelemetryBuilder<OtelOpenTelemetry.Builder> {
|
||||
|
||||
private ContextPropagators propagators;
|
||||
|
||||
|
||||
@@ -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;
|
||||
@@ -156,7 +158,7 @@ class SpanFromSpanContext implements io.opentelemetry.api.trace.Span {
|
||||
|
||||
SpanFromSpanContext(io.opentelemetry.api.trace.Span span, SpanContext newSpanContext,
|
||||
OtelTraceContext otelTraceContext) {
|
||||
this.span = span;
|
||||
this.span = span != null ? span : io.opentelemetry.api.trace.Span.wrap(newSpanContext);
|
||||
this.newSpanContext = newSpanContext;
|
||||
this.otelTraceContext = otelTraceContext;
|
||||
}
|
||||
@@ -187,7 +189,12 @@ class SpanFromSpanContext implements io.opentelemetry.api.trace.Span {
|
||||
}
|
||||
|
||||
@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 @@ class SpanFromSpanContext implements io.opentelemetry.api.trace.Span {
|
||||
}
|
||||
|
||||
@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 @@ class SpanFromSpanContext implements io.opentelemetry.api.trace.Span {
|
||||
}
|
||||
|
||||
@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 @@ class SpanFromSpanContext implements io.opentelemetry.api.trace.Span {
|
||||
return span.isRecording();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Context storeInContext(Context context) {
|
||||
return span.storeInContext(context);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "SpanFromSpanContext{" + "span=" + span + ", newSpanContext=" + newSpanContext + '}';
|
||||
|
||||
@@ -31,7 +31,7 @@ import org.springframework.util.StringUtils;
|
||||
*/
|
||||
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<String> 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);
|
||||
}
|
||||
|
||||
|
||||
@@ -22,6 +22,7 @@ import java.util.Map;
|
||||
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 class BaggageTextMapPropagator implements TextMapPropagator {
|
||||
Map<String, String> 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();
|
||||
|
||||
@@ -95,7 +95,7 @@ class Service2Client {
|
||||
log.info("Hello from service1. Calling service2");
|
||||
return webClient.get().uri(serviceAddress + "/foo").exchange().doOnSuccess(clientResponse -> {
|
||||
log.info("Got response from service2 [{}]", clientResponse);
|
||||
try (BaggageInScope bs = this.tracer.getBaggage("key")) {
|
||||
try (BaggageInScope bs = baggageField.makeCurrent()) {
|
||||
this.baggageKey = bs.get();
|
||||
log.info("Service1: Baggage for [key] is [" + (bs == null ? null : bs.get()) + "]");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user