From f6e16c8f900d174a9283061f806da541a7ff301b Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Mon, 18 May 2020 13:06:18 -0700 Subject: [PATCH] Bring back webflux client instrumentation (#406) --- .../client/WebClientFilterInstrumentation.java | 4 ++-- .../springwebflux/client/WebClientTracingFilter.java | 5 +++-- .../instrumentation/springwebflux/server/AdviceUtils.java | 8 -------- .../test/groovy/client/SpringWebfluxHttpClientTest.groovy | 6 +----- 4 files changed, 6 insertions(+), 17 deletions(-) diff --git a/instrumentation/spring-webflux-5.0/src/main/java/io/opentelemetry/auto/instrumentation/springwebflux/client/WebClientFilterInstrumentation.java b/instrumentation/spring-webflux-5.0/src/main/java/io/opentelemetry/auto/instrumentation/springwebflux/client/WebClientFilterInstrumentation.java index 3ec1eb0104..d11b5f3726 100644 --- a/instrumentation/spring-webflux-5.0/src/main/java/io/opentelemetry/auto/instrumentation/springwebflux/client/WebClientFilterInstrumentation.java +++ b/instrumentation/spring-webflux-5.0/src/main/java/io/opentelemetry/auto/instrumentation/springwebflux/client/WebClientFilterInstrumentation.java @@ -22,14 +22,14 @@ import static net.bytebuddy.matcher.ElementMatchers.isMethod; import static net.bytebuddy.matcher.ElementMatchers.isPublic; import static net.bytebuddy.matcher.ElementMatchers.named; +import com.google.auto.service.AutoService; import io.opentelemetry.auto.tooling.Instrumenter; import java.util.Map; import net.bytebuddy.description.method.MethodDescription; import net.bytebuddy.description.type.TypeDescription; import net.bytebuddy.matcher.ElementMatcher; -// FIXME this instrumentation is not currently reliable, see DefaultWebClientAdvice -// @AutoService(Instrumenter.class) +@AutoService(Instrumenter.class) public class WebClientFilterInstrumentation extends Instrumenter.Default { public WebClientFilterInstrumentation() { diff --git a/instrumentation/spring-webflux-5.0/src/main/java8/io/opentelemetry/auto/instrumentation/springwebflux/client/WebClientTracingFilter.java b/instrumentation/spring-webflux-5.0/src/main/java8/io/opentelemetry/auto/instrumentation/springwebflux/client/WebClientTracingFilter.java index 4c8d153bdb..4ed2394e36 100644 --- a/instrumentation/spring-webflux-5.0/src/main/java8/io/opentelemetry/auto/instrumentation/springwebflux/client/WebClientTracingFilter.java +++ b/instrumentation/spring-webflux-5.0/src/main/java8/io/opentelemetry/auto/instrumentation/springwebflux/client/WebClientTracingFilter.java @@ -18,6 +18,7 @@ package io.opentelemetry.auto.instrumentation.springwebflux.client; import static io.opentelemetry.auto.instrumentation.springwebflux.client.HttpHeadersInjectAdapter.SETTER; import static io.opentelemetry.auto.instrumentation.springwebflux.client.SpringWebfluxHttpClientDecorator.DECORATE; import static io.opentelemetry.auto.instrumentation.springwebflux.client.SpringWebfluxHttpClientDecorator.TRACER; +import static io.opentelemetry.trace.Span.Kind.CLIENT; import io.grpc.Context; import io.opentelemetry.OpenTelemetry; @@ -38,13 +39,13 @@ public class WebClientTracingFilter implements ExchangeFilterFunction { @Override public Mono filter(final ClientRequest request, final ExchangeFunction next) { - final Span span = TRACER.spanBuilder("http.request").startSpan(); + final Span span = + TRACER.spanBuilder(DECORATE.spanNameForRequest(request)).setSpanKind(CLIENT).startSpan(); DECORATE.afterStart(span); try (final Scope scope = TRACER.withSpan(span)) { final ClientRequest mutatedRequest = ClientRequest.from(request) - .attribute(Span.class.getName(), span) .headers( httpHeaders -> OpenTelemetry.getPropagators() diff --git a/instrumentation/spring-webflux-5.0/src/main/java8/io/opentelemetry/auto/instrumentation/springwebflux/server/AdviceUtils.java b/instrumentation/spring-webflux-5.0/src/main/java8/io/opentelemetry/auto/instrumentation/springwebflux/server/AdviceUtils.java index 05fb47686e..571d69f42e 100644 --- a/instrumentation/spring-webflux-5.0/src/main/java8/io/opentelemetry/auto/instrumentation/springwebflux/server/AdviceUtils.java +++ b/instrumentation/spring-webflux-5.0/src/main/java8/io/opentelemetry/auto/instrumentation/springwebflux/server/AdviceUtils.java @@ -27,7 +27,6 @@ import java.util.function.Function; import lombok.extern.slf4j.Slf4j; import org.reactivestreams.Publisher; import org.reactivestreams.Subscription; -import org.springframework.web.reactive.function.client.ClientRequest; import org.springframework.web.reactive.function.server.ServerRequest; import org.springframework.web.server.ServerWebExchange; import reactor.core.CoreSubscriber; @@ -85,13 +84,6 @@ public class AdviceUtils { } } - public static void finishSpanIfPresent( - final ClientRequest clientRequest, final Throwable throwable) { - if (clientRequest != null) { - finishSpanIfPresentInAttributes(clientRequest.attributes(), throwable); - } - } - private static void finishSpanIfPresentInAttributes( final Map attributes, final Throwable throwable) { diff --git a/instrumentation/spring-webflux-5.0/src/test/groovy/client/SpringWebfluxHttpClientTest.groovy b/instrumentation/spring-webflux-5.0/src/test/groovy/client/SpringWebfluxHttpClientTest.groovy index e90584d018..5560c48b98 100644 --- a/instrumentation/spring-webflux-5.0/src/test/groovy/client/SpringWebfluxHttpClientTest.groovy +++ b/instrumentation/spring-webflux-5.0/src/test/groovy/client/SpringWebfluxHttpClientTest.groovy @@ -22,14 +22,10 @@ import io.opentelemetry.auto.test.base.HttpClientTest import org.springframework.http.HttpMethod import org.springframework.web.reactive.function.client.ClientResponse import org.springframework.web.reactive.function.client.WebClient -import spock.lang.Ignore import spock.lang.Timeout import static io.opentelemetry.trace.Span.Kind.CLIENT -// FIXME this instrumentation is not currently reliable and so is currently disabled -// see DefaultWebClientInstrumentation and DefaultWebClientAdvice -@Ignore @Timeout(5) class SpringWebfluxHttpClientTest extends HttpClientTest { @@ -54,7 +50,7 @@ class SpringWebfluxHttpClientTest extends HttpClientTest { if (!exception) { trace.span(index + 1) { childOf(trace.span(index)) - operationName "netty.client.request" + operationName "HTTP $method" spanKind CLIENT errored exception != null tags {