Bumped OTel to 0.11.0; fixes gh-1787

This commit is contained in:
Marcin Grzejszczak
2020-11-30 15:34:53 +01:00
parent 16bf4d6d10
commit 79e0bf1d36
17 changed files with 108 additions and 59 deletions

View File

@@ -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>

View File

@@ -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();

View File

@@ -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>

View File

@@ -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() {

View File

@@ -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) {

View File

@@ -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)

View File

@@ -52,6 +52,11 @@ class NoOpBaggageInScope implements BaggageInScope {
return this;
}
@Override
public BaggageInScope makeCurrent() {
return this;
}
@Override
public void close() {

View File

@@ -66,6 +66,11 @@ class BraveBaggageInScope implements BaggageInScope {
return this;
}
@Override
public BaggageInScope makeCurrent() {
return this;
}
@Override
public void close() {

View File

@@ -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>

View File

@@ -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>

View File

@@ -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();

View File

@@ -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();
}

View File

@@ -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;

View File

@@ -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 + '}';

View File

@@ -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);
}

View File

@@ -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();

View File

@@ -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()) + "]");
}