Use HTTP instead of non-known method in http span name (#9441)
Co-authored-by: Mateusz Rzeszutek <mrzeszutek@splunk.com>
This commit is contained in:
parent
2d505ebd08
commit
d157b68efb
|
|
@ -6,6 +6,8 @@
|
|||
package io.opentelemetry.instrumentation.api.instrumenter.http;
|
||||
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.SpanNameExtractor;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
/**
|
||||
|
|
@ -17,18 +19,29 @@ import javax.annotation.Nullable;
|
|||
public final class HttpSpanNameExtractor<REQUEST> implements SpanNameExtractor<REQUEST> {
|
||||
|
||||
/**
|
||||
* Returns a {@link SpanNameExtractor} which should be used for HTTP requests. HTTP attributes
|
||||
* will be examined to determine the name of the span.
|
||||
* Returns a {@link SpanNameExtractor} which should be used for HTTP requests with default
|
||||
* configuration. HTTP attributes will be examined to determine the name of the span.
|
||||
*/
|
||||
public static <REQUEST> SpanNameExtractor<REQUEST> create(
|
||||
HttpCommonAttributesGetter<REQUEST, ?> getter) {
|
||||
return new HttpSpanNameExtractor<>(getter);
|
||||
return builder(getter).build();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a new {@link HttpSpanNameExtractorBuilder} that can be used to configure the HTTP span
|
||||
* name extractor.
|
||||
*/
|
||||
public static <REQUEST> HttpSpanNameExtractorBuilder<REQUEST> builder(
|
||||
HttpCommonAttributesGetter<REQUEST, ?> getter) {
|
||||
return new HttpSpanNameExtractorBuilder<>(getter);
|
||||
}
|
||||
|
||||
private final HttpCommonAttributesGetter<REQUEST, ?> getter;
|
||||
private final Set<String> knownMethods;
|
||||
|
||||
private HttpSpanNameExtractor(HttpCommonAttributesGetter<REQUEST, ?> getter) {
|
||||
this.getter = getter;
|
||||
HttpSpanNameExtractor(HttpSpanNameExtractorBuilder<REQUEST> builder) {
|
||||
this.getter = builder.httpAttributesGetter;
|
||||
this.knownMethods = new HashSet<>(builder.knownMethods);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -36,6 +49,9 @@ public final class HttpSpanNameExtractor<REQUEST> implements SpanNameExtractor<R
|
|||
String method = getter.getHttpRequestMethod(request);
|
||||
String route = extractRoute(request);
|
||||
if (method != null) {
|
||||
if (!knownMethods.contains(method)) {
|
||||
method = "HTTP";
|
||||
}
|
||||
return route == null ? method : method + " " + route;
|
||||
}
|
||||
return "HTTP";
|
||||
|
|
|
|||
|
|
@ -0,0 +1,52 @@
|
|||
/*
|
||||
* Copyright The OpenTelemetry Authors
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
package io.opentelemetry.instrumentation.api.instrumenter.http;
|
||||
|
||||
import com.google.errorprone.annotations.CanIgnoreReturnValue;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.SpanNameExtractor;
|
||||
import io.opentelemetry.instrumentation.api.internal.HttpConstants;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
/** A builder of {@link HttpSpanNameExtractor}. */
|
||||
public final class HttpSpanNameExtractorBuilder<REQUEST> {
|
||||
|
||||
final HttpCommonAttributesGetter<REQUEST, ?> httpAttributesGetter;
|
||||
Set<String> knownMethods = HttpConstants.KNOWN_METHODS;
|
||||
|
||||
HttpSpanNameExtractorBuilder(HttpCommonAttributesGetter<REQUEST, ?> httpAttributesGetter) {
|
||||
this.httpAttributesGetter = httpAttributesGetter;
|
||||
}
|
||||
|
||||
/**
|
||||
* Configures the extractor to recognize an alternative set of HTTP request methods.
|
||||
*
|
||||
* <p>By default, this extractor defines "known" methods as the ones listed in <a
|
||||
* href="https://www.rfc-editor.org/rfc/rfc9110.html#name-methods">RFC9110</a> and the PATCH
|
||||
* method defined in <a href="https://www.rfc-editor.org/rfc/rfc5789.html">RFC5789</a>. If an
|
||||
* unknown method is encountered, the extractor will use the value {@value HttpConstants#_OTHER}
|
||||
* instead of it and put the original value in an extra {@code http.request.method_original}
|
||||
* attribute.
|
||||
*
|
||||
* <p>Note: calling this method <b>overrides</b> the default known method sets completely; it does
|
||||
* not supplement it.
|
||||
*
|
||||
* @param knownMethods A set of recognized HTTP request methods.
|
||||
*/
|
||||
@CanIgnoreReturnValue
|
||||
public HttpSpanNameExtractorBuilder<REQUEST> setKnownMethods(Set<String> knownMethods) {
|
||||
this.knownMethods = new HashSet<>(knownMethods);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a new {@link HttpSpanNameExtractor} with the settings of this {@link
|
||||
* HttpSpanNameExtractorBuilder}.
|
||||
*/
|
||||
public SpanNameExtractor<REQUEST> build() {
|
||||
return new HttpSpanNameExtractor<>(this);
|
||||
}
|
||||
}
|
||||
|
|
@ -32,7 +32,9 @@ public class AkkaHttpClientSingletons {
|
|||
Instrumenter.<HttpRequest, HttpResponse>builder(
|
||||
GlobalOpenTelemetry.get(),
|
||||
AkkaHttpUtil.instrumentationName(),
|
||||
HttpSpanNameExtractor.create(httpAttributesGetter))
|
||||
HttpSpanNameExtractor.builder(httpAttributesGetter)
|
||||
.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods())
|
||||
.build())
|
||||
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter))
|
||||
.addAttributesExtractor(
|
||||
HttpClientAttributesExtractor.builder(httpAttributesGetter)
|
||||
|
|
|
|||
|
|
@ -29,7 +29,9 @@ public final class AkkaHttpServerSingletons {
|
|||
Instrumenter.<HttpRequest, HttpResponse>builder(
|
||||
GlobalOpenTelemetry.get(),
|
||||
AkkaHttpUtil.instrumentationName(),
|
||||
HttpSpanNameExtractor.create(httpAttributesGetter))
|
||||
HttpSpanNameExtractor.builder(httpAttributesGetter)
|
||||
.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods())
|
||||
.build())
|
||||
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter))
|
||||
.addAttributesExtractor(
|
||||
HttpServerAttributesExtractor.builder(httpAttributesGetter)
|
||||
|
|
|
|||
|
|
@ -30,7 +30,9 @@ public final class ApacheHttpAsyncClientSingletons {
|
|||
Instrumenter.<ApacheHttpClientRequest, HttpResponse>builder(
|
||||
GlobalOpenTelemetry.get(),
|
||||
INSTRUMENTATION_NAME,
|
||||
HttpSpanNameExtractor.create(httpAttributesGetter))
|
||||
HttpSpanNameExtractor.builder(httpAttributesGetter)
|
||||
.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods())
|
||||
.build())
|
||||
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter))
|
||||
.addAttributesExtractor(
|
||||
HttpClientAttributesExtractor.builder(httpAttributesGetter)
|
||||
|
|
|
|||
|
|
@ -30,7 +30,9 @@ public final class ApacheHttpClientSingletons {
|
|||
Instrumenter.<HttpMethod, HttpMethod>builder(
|
||||
GlobalOpenTelemetry.get(),
|
||||
INSTRUMENTATION_NAME,
|
||||
HttpSpanNameExtractor.create(httpAttributesGetter))
|
||||
HttpSpanNameExtractor.builder(httpAttributesGetter)
|
||||
.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods())
|
||||
.build())
|
||||
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter))
|
||||
.addAttributesExtractor(
|
||||
HttpClientAttributesExtractor.builder(httpAttributesGetter)
|
||||
|
|
|
|||
|
|
@ -30,7 +30,9 @@ public final class ApacheHttpClientSingletons {
|
|||
Instrumenter.<ApacheHttpClientRequest, HttpResponse>builder(
|
||||
GlobalOpenTelemetry.get(),
|
||||
INSTRUMENTATION_NAME,
|
||||
HttpSpanNameExtractor.create(httpAttributesGetter))
|
||||
HttpSpanNameExtractor.builder(httpAttributesGetter)
|
||||
.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods())
|
||||
.build())
|
||||
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter))
|
||||
.addAttributesExtractor(
|
||||
HttpClientAttributesExtractor.builder(httpAttributesGetter)
|
||||
|
|
|
|||
|
|
@ -16,6 +16,7 @@ import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientAttribut
|
|||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientExperimentalMetrics;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientMetrics;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractorBuilder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
|
@ -34,6 +35,8 @@ public final class ApacheHttpClientTelemetryBuilder {
|
|||
private final HttpClientAttributesExtractorBuilder<ApacheHttpClientRequest, HttpResponse>
|
||||
httpAttributesExtractorBuilder =
|
||||
HttpClientAttributesExtractor.builder(ApacheHttpClientHttpAttributesGetter.INSTANCE);
|
||||
private final HttpSpanNameExtractorBuilder<ApacheHttpClientRequest> httpSpanNameExtractorBuilder =
|
||||
HttpSpanNameExtractor.builder(ApacheHttpClientHttpAttributesGetter.INSTANCE);
|
||||
private boolean emitExperimentalHttpClientMetrics = false;
|
||||
|
||||
ApacheHttpClientTelemetryBuilder(OpenTelemetry openTelemetry) {
|
||||
|
|
@ -90,6 +93,7 @@ public final class ApacheHttpClientTelemetryBuilder {
|
|||
@CanIgnoreReturnValue
|
||||
public ApacheHttpClientTelemetryBuilder setKnownMethods(Set<String> knownMethods) {
|
||||
httpAttributesExtractorBuilder.setKnownMethods(knownMethods);
|
||||
httpSpanNameExtractorBuilder.setKnownMethods(knownMethods);
|
||||
return this;
|
||||
}
|
||||
|
||||
|
|
@ -116,9 +120,7 @@ public final class ApacheHttpClientTelemetryBuilder {
|
|||
|
||||
InstrumenterBuilder<ApacheHttpClientRequest, HttpResponse> builder =
|
||||
Instrumenter.<ApacheHttpClientRequest, HttpResponse>builder(
|
||||
openTelemetry,
|
||||
INSTRUMENTATION_NAME,
|
||||
HttpSpanNameExtractor.create(httpAttributesGetter))
|
||||
openTelemetry, INSTRUMENTATION_NAME, httpSpanNameExtractorBuilder.build())
|
||||
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter))
|
||||
.addAttributesExtractor(httpAttributesExtractorBuilder.build())
|
||||
.addAttributesExtractors(additionalExtractors)
|
||||
|
|
|
|||
|
|
@ -31,7 +31,9 @@ public final class ApacheHttpClientSingletons {
|
|||
Instrumenter.<HttpRequest, HttpResponse>builder(
|
||||
GlobalOpenTelemetry.get(),
|
||||
INSTRUMENTATION_NAME,
|
||||
HttpSpanNameExtractor.create(httpAttributesGetter))
|
||||
HttpSpanNameExtractor.builder(httpAttributesGetter)
|
||||
.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods())
|
||||
.build())
|
||||
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter))
|
||||
.addAttributesExtractor(
|
||||
HttpClientAttributesExtractor.builder(httpAttributesGetter)
|
||||
|
|
|
|||
|
|
@ -25,6 +25,7 @@ import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerExperime
|
|||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerMetrics;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractorBuilder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor;
|
||||
import io.opentelemetry.instrumentation.armeria.v1_3.internal.ArmeriaHttpClientAttributesGetter;
|
||||
import io.opentelemetry.semconv.trace.attributes.SemanticAttributes;
|
||||
|
|
@ -56,6 +57,11 @@ public final class ArmeriaTelemetryBuilder {
|
|||
httpServerAttributesExtractorBuilder =
|
||||
HttpServerAttributesExtractor.builder(ArmeriaHttpServerAttributesGetter.INSTANCE);
|
||||
|
||||
private final HttpSpanNameExtractorBuilder<RequestContext> httpClientSpanNameExtractorBuilder =
|
||||
HttpSpanNameExtractor.builder(ArmeriaHttpClientAttributesGetter.INSTANCE);
|
||||
private final HttpSpanNameExtractorBuilder<RequestContext> httpServerSpanNameExtractorBuilder =
|
||||
HttpSpanNameExtractor.builder(ArmeriaHttpServerAttributesGetter.INSTANCE);
|
||||
|
||||
private Function<
|
||||
SpanStatusExtractor<RequestContext, RequestLog>,
|
||||
? extends SpanStatusExtractor<? super RequestContext, ? super RequestLog>>
|
||||
|
|
@ -167,6 +173,8 @@ public final class ArmeriaTelemetryBuilder {
|
|||
public ArmeriaTelemetryBuilder setKnownMethods(Set<String> knownMethods) {
|
||||
httpClientAttributesExtractorBuilder.setKnownMethods(knownMethods);
|
||||
httpServerAttributesExtractorBuilder.setKnownMethods(knownMethods);
|
||||
httpClientSpanNameExtractorBuilder.setKnownMethods(knownMethods);
|
||||
httpServerSpanNameExtractorBuilder.setKnownMethods(knownMethods);
|
||||
return this;
|
||||
}
|
||||
|
||||
|
|
@ -204,14 +212,10 @@ public final class ArmeriaTelemetryBuilder {
|
|||
|
||||
InstrumenterBuilder<ClientRequestContext, RequestLog> clientInstrumenterBuilder =
|
||||
Instrumenter.builder(
|
||||
openTelemetry,
|
||||
INSTRUMENTATION_NAME,
|
||||
HttpSpanNameExtractor.create(clientAttributesGetter));
|
||||
openTelemetry, INSTRUMENTATION_NAME, httpClientSpanNameExtractorBuilder.build());
|
||||
InstrumenterBuilder<ServiceRequestContext, RequestLog> serverInstrumenterBuilder =
|
||||
Instrumenter.builder(
|
||||
openTelemetry,
|
||||
INSTRUMENTATION_NAME,
|
||||
HttpSpanNameExtractor.create(serverAttributesGetter));
|
||||
openTelemetry, INSTRUMENTATION_NAME, httpServerSpanNameExtractorBuilder.build());
|
||||
|
||||
Stream.of(clientInstrumenterBuilder, serverInstrumenterBuilder)
|
||||
.forEach(instrumenter -> instrumenter.addAttributesExtractors(additionalExtractors));
|
||||
|
|
|
|||
|
|
@ -31,7 +31,9 @@ public final class AsyncHttpClientSingletons {
|
|||
Instrumenter.<Request, Response>builder(
|
||||
GlobalOpenTelemetry.get(),
|
||||
INSTRUMENTATION_NAME,
|
||||
HttpSpanNameExtractor.create(httpAttributesGetter))
|
||||
HttpSpanNameExtractor.builder(httpAttributesGetter)
|
||||
.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods())
|
||||
.build())
|
||||
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter))
|
||||
.addAttributesExtractor(
|
||||
HttpClientAttributesExtractor.builder(httpAttributesGetter)
|
||||
|
|
|
|||
|
|
@ -30,7 +30,9 @@ public final class AsyncHttpClientSingletons {
|
|||
Instrumenter.<RequestContext, Response>builder(
|
||||
GlobalOpenTelemetry.get(),
|
||||
INSTRUMENTATION_NAME,
|
||||
HttpSpanNameExtractor.create(httpAttributesGetter))
|
||||
HttpSpanNameExtractor.builder(httpAttributesGetter)
|
||||
.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods())
|
||||
.build())
|
||||
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter))
|
||||
.addAttributesExtractor(
|
||||
HttpClientAttributesExtractor.builder(httpAttributesGetter)
|
||||
|
|
|
|||
|
|
@ -31,7 +31,9 @@ public class GoogleHttpClientSingletons {
|
|||
Instrumenter.<HttpRequest, HttpResponse>builder(
|
||||
GlobalOpenTelemetry.get(),
|
||||
INSTRUMENTATION_NAME,
|
||||
HttpSpanNameExtractor.create(httpAttributesGetter))
|
||||
HttpSpanNameExtractor.builder(httpAttributesGetter)
|
||||
.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods())
|
||||
.build())
|
||||
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter))
|
||||
.addAttributesExtractor(
|
||||
HttpClientAttributesExtractor.builder(httpAttributesGetter)
|
||||
|
|
|
|||
|
|
@ -30,7 +30,9 @@ public final class GrizzlySingletons {
|
|||
Instrumenter.<HttpRequestPacket, HttpResponsePacket>builder(
|
||||
GlobalOpenTelemetry.get(),
|
||||
"io.opentelemetry.grizzly-2.3",
|
||||
HttpSpanNameExtractor.create(httpAttributesGetter))
|
||||
HttpSpanNameExtractor.builder(httpAttributesGetter)
|
||||
.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods())
|
||||
.build())
|
||||
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter))
|
||||
.addAttributesExtractor(
|
||||
HttpServerAttributesExtractor.builder(httpAttributesGetter)
|
||||
|
|
|
|||
|
|
@ -28,7 +28,9 @@ public final class HttpUrlConnectionSingletons {
|
|||
Instrumenter.<HttpURLConnection, Integer>builder(
|
||||
GlobalOpenTelemetry.get(),
|
||||
"io.opentelemetry.http-url-connection",
|
||||
HttpSpanNameExtractor.create(httpAttributesGetter))
|
||||
HttpSpanNameExtractor.builder(httpAttributesGetter)
|
||||
.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods())
|
||||
.build())
|
||||
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter))
|
||||
.addAttributesExtractor(
|
||||
HttpClientAttributesExtractor.builder(httpAttributesGetter)
|
||||
|
|
|
|||
|
|
@ -33,6 +33,7 @@ public class JavaHttpClientSingletons {
|
|||
.setCapturedRequestHeaders(CommonConfig.get().getClientRequestHeaders())
|
||||
.setCapturedResponseHeaders(CommonConfig.get().getClientResponseHeaders())
|
||||
.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods()),
|
||||
builder -> builder.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods()),
|
||||
singletonList(
|
||||
PeerServiceAttributesExtractor.create(
|
||||
JavaHttpClientAttributesGetter.INSTANCE,
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@ import io.opentelemetry.api.OpenTelemetry;
|
|||
import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientAttributesExtractorBuilder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractorBuilder;
|
||||
import io.opentelemetry.instrumentation.httpclient.internal.HttpHeadersSetter;
|
||||
import io.opentelemetry.instrumentation.httpclient.internal.JavaHttpClientInstrumenterFactory;
|
||||
import java.net.http.HttpRequest;
|
||||
|
|
@ -25,9 +26,10 @@ public final class JavaHttpClientTelemetryBuilder {
|
|||
|
||||
private final List<AttributesExtractor<? super HttpRequest, ? super HttpResponse<?>>>
|
||||
additionalExtractors = new ArrayList<>();
|
||||
|
||||
private Consumer<HttpClientAttributesExtractorBuilder<HttpRequest, HttpResponse<?>>>
|
||||
extractorConfigurer = builder -> {};
|
||||
private Consumer<HttpSpanNameExtractorBuilder<HttpRequest>> spanNameExtractorConfigurer =
|
||||
builder -> {};
|
||||
private boolean emitExperimentalHttpClientMetrics = false;
|
||||
|
||||
JavaHttpClientTelemetryBuilder(OpenTelemetry openTelemetry) {
|
||||
|
|
@ -86,6 +88,8 @@ public final class JavaHttpClientTelemetryBuilder {
|
|||
public JavaHttpClientTelemetryBuilder setKnownMethods(Set<String> knownMethods) {
|
||||
extractorConfigurer =
|
||||
extractorConfigurer.andThen(builder -> builder.setKnownMethods(knownMethods));
|
||||
spanNameExtractorConfigurer =
|
||||
spanNameExtractorConfigurer.andThen(builder -> builder.setKnownMethods(knownMethods));
|
||||
return this;
|
||||
}
|
||||
|
||||
|
|
@ -107,6 +111,7 @@ public final class JavaHttpClientTelemetryBuilder {
|
|||
JavaHttpClientInstrumenterFactory.createInstrumenter(
|
||||
openTelemetry,
|
||||
extractorConfigurer,
|
||||
spanNameExtractorConfigurer,
|
||||
additionalExtractors,
|
||||
emitExperimentalHttpClientMetrics);
|
||||
|
||||
|
|
|
|||
|
|
@ -15,6 +15,7 @@ import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientAttribut
|
|||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientExperimentalMetrics;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientMetrics;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractorBuilder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor;
|
||||
import java.net.http.HttpRequest;
|
||||
import java.net.http.HttpResponse;
|
||||
|
|
@ -32,6 +33,7 @@ public final class JavaHttpClientInstrumenterFactory {
|
|||
OpenTelemetry openTelemetry,
|
||||
Consumer<HttpClientAttributesExtractorBuilder<HttpRequest, HttpResponse<?>>>
|
||||
extractorConfigurer,
|
||||
Consumer<HttpSpanNameExtractorBuilder<HttpRequest>> spanNameExtractorConfigurer,
|
||||
List<AttributesExtractor<? super HttpRequest, ? super HttpResponse<?>>> additionalExtractors,
|
||||
boolean emitExperimentalHttpClientMetrics) {
|
||||
|
||||
|
|
@ -42,11 +44,13 @@ public final class JavaHttpClientInstrumenterFactory {
|
|||
HttpClientAttributesExtractor.builder(httpAttributesGetter);
|
||||
extractorConfigurer.accept(httpAttributesExtractorBuilder);
|
||||
|
||||
HttpSpanNameExtractorBuilder<HttpRequest> httpSpanNameExtractorBuilder =
|
||||
HttpSpanNameExtractor.builder(httpAttributesGetter);
|
||||
spanNameExtractorConfigurer.accept(httpSpanNameExtractorBuilder);
|
||||
|
||||
InstrumenterBuilder<HttpRequest, HttpResponse<?>> builder =
|
||||
Instrumenter.<HttpRequest, HttpResponse<?>>builder(
|
||||
openTelemetry,
|
||||
INSTRUMENTATION_NAME,
|
||||
HttpSpanNameExtractor.create(httpAttributesGetter))
|
||||
openTelemetry, INSTRUMENTATION_NAME, httpSpanNameExtractorBuilder.build())
|
||||
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter))
|
||||
.addAttributesExtractor(httpAttributesExtractorBuilder.build())
|
||||
.addAttributesExtractors(additionalExtractors)
|
||||
|
|
|
|||
|
|
@ -26,6 +26,7 @@ public class JettyHttpClientSingletons {
|
|||
.setCapturedRequestHeaders(CommonConfig.get().getClientRequestHeaders())
|
||||
.setCapturedResponseHeaders(CommonConfig.get().getClientResponseHeaders())
|
||||
.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods()),
|
||||
builder -> builder.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods()),
|
||||
singletonList(
|
||||
PeerServiceAttributesExtractor.create(
|
||||
JettyClientHttpAttributesGetter.INSTANCE,
|
||||
|
|
|
|||
|
|
@ -9,6 +9,7 @@ import com.google.errorprone.annotations.CanIgnoreReturnValue;
|
|||
import io.opentelemetry.api.OpenTelemetry;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientAttributesExtractorBuilder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractorBuilder;
|
||||
import io.opentelemetry.instrumentation.jetty.httpclient.v9_2.internal.JettyClientInstrumenterFactory;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
|
@ -27,6 +28,8 @@ public final class JettyClientTelemetryBuilder {
|
|||
new ArrayList<>();
|
||||
private Consumer<HttpClientAttributesExtractorBuilder<Request, Response>> extractorConfigurer =
|
||||
builder -> {};
|
||||
private Consumer<HttpSpanNameExtractorBuilder<Request>> spanNameExtractorConfigurer =
|
||||
builder -> {};
|
||||
private boolean emitExperimentalHttpClientMetrics = false;
|
||||
private HttpClientTransport httpClientTransport;
|
||||
private SslContextFactory sslContextFactory;
|
||||
|
|
@ -100,6 +103,8 @@ public final class JettyClientTelemetryBuilder {
|
|||
public JettyClientTelemetryBuilder setKnownMethods(Set<String> knownMethods) {
|
||||
extractorConfigurer =
|
||||
extractorConfigurer.andThen(builder -> builder.setKnownMethods(knownMethods));
|
||||
spanNameExtractorConfigurer =
|
||||
spanNameExtractorConfigurer.andThen(builder -> builder.setKnownMethods(knownMethods));
|
||||
return this;
|
||||
}
|
||||
|
||||
|
|
@ -126,6 +131,7 @@ public final class JettyClientTelemetryBuilder {
|
|||
JettyClientInstrumenterFactory.create(
|
||||
openTelemetry,
|
||||
extractorConfigurer,
|
||||
spanNameExtractorConfigurer,
|
||||
additionalExtractors,
|
||||
emitExperimentalHttpClientMetrics),
|
||||
sslContextFactory,
|
||||
|
|
|
|||
|
|
@ -14,6 +14,7 @@ import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientAttribut
|
|||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientExperimentalMetrics;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientMetrics;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractorBuilder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor;
|
||||
import java.util.List;
|
||||
import java.util.function.Consumer;
|
||||
|
|
@ -31,6 +32,7 @@ public final class JettyClientInstrumenterFactory {
|
|||
public static Instrumenter<Request, Response> create(
|
||||
OpenTelemetry openTelemetry,
|
||||
Consumer<HttpClientAttributesExtractorBuilder<Request, Response>> extractorConfigurer,
|
||||
Consumer<HttpSpanNameExtractorBuilder<Request>> spanNameExtractorConfigurer,
|
||||
List<AttributesExtractor<? super Request, ? super Response>> additionalExtractors,
|
||||
boolean emitExperimentalHttpClientMetrics) {
|
||||
|
||||
|
|
@ -40,11 +42,13 @@ public final class JettyClientInstrumenterFactory {
|
|||
HttpClientAttributesExtractor.builder(httpAttributesGetter);
|
||||
extractorConfigurer.accept(httpAttributesExtractorBuilder);
|
||||
|
||||
HttpSpanNameExtractorBuilder<Request> httpSpanNameExtractorBuilder =
|
||||
HttpSpanNameExtractor.builder(httpAttributesGetter);
|
||||
spanNameExtractorConfigurer.accept(httpSpanNameExtractorBuilder);
|
||||
|
||||
InstrumenterBuilder<Request, Response> builder =
|
||||
Instrumenter.<Request, Response>builder(
|
||||
openTelemetry,
|
||||
INSTRUMENTATION_NAME,
|
||||
HttpSpanNameExtractor.create(httpAttributesGetter))
|
||||
openTelemetry, INSTRUMENTATION_NAME, httpSpanNameExtractorBuilder.build())
|
||||
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter))
|
||||
.addAttributesExtractor(httpAttributesExtractorBuilder.build())
|
||||
.addAttributesExtractors(additionalExtractors)
|
||||
|
|
|
|||
|
|
@ -30,7 +30,9 @@ public final class JoddHttpSingletons {
|
|||
Instrumenter.<HttpRequest, HttpResponse>builder(
|
||||
GlobalOpenTelemetry.get(),
|
||||
INSTRUMENTATION_NAME,
|
||||
HttpSpanNameExtractor.create(httpAttributesGetter))
|
||||
HttpSpanNameExtractor.builder(httpAttributesGetter)
|
||||
.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods())
|
||||
.build())
|
||||
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter))
|
||||
.addAttributesExtractor(
|
||||
HttpClientAttributesExtractor.builder(httpAttributesGetter)
|
||||
|
|
|
|||
|
|
@ -38,6 +38,8 @@ class KtorServerTracing private constructor(
|
|||
|
||||
internal val httpAttributesExtractorBuilder = HttpServerAttributesExtractor.builder(KtorHttpServerAttributesGetter.INSTANCE)
|
||||
|
||||
internal val httpSpanNameExtractorBuilder = HttpSpanNameExtractor.builder(KtorHttpServerAttributesGetter.INSTANCE)
|
||||
|
||||
internal var statusExtractor:
|
||||
(SpanStatusExtractor<ApplicationRequest, ApplicationResponse>) -> SpanStatusExtractor<in ApplicationRequest, in ApplicationResponse> = { a -> a }
|
||||
|
||||
|
|
@ -74,6 +76,7 @@ class KtorServerTracing private constructor(
|
|||
|
||||
fun setKnownMethods(knownMethods: Set<String>) {
|
||||
httpAttributesExtractorBuilder.setKnownMethods(knownMethods)
|
||||
httpSpanNameExtractorBuilder.setKnownMethods(knownMethods)
|
||||
}
|
||||
|
||||
internal fun isOpenTelemetryInitialized(): Boolean = this::openTelemetry.isInitialized
|
||||
|
|
@ -112,7 +115,7 @@ class KtorServerTracing private constructor(
|
|||
val instrumenterBuilder = Instrumenter.builder<ApplicationRequest, ApplicationResponse>(
|
||||
configuration.openTelemetry,
|
||||
INSTRUMENTATION_NAME,
|
||||
HttpSpanNameExtractor.create(httpAttributesGetter),
|
||||
configuration.httpSpanNameExtractorBuilder.build()
|
||||
)
|
||||
|
||||
configuration.additionalExtractors.forEach { instrumenterBuilder.addAttributesExtractor(it) }
|
||||
|
|
|
|||
|
|
@ -23,6 +23,7 @@ class KtorClientTracingBuilder {
|
|||
private var openTelemetry: OpenTelemetry? = null
|
||||
private val additionalExtractors = mutableListOf<AttributesExtractor<in HttpRequestData, in HttpResponse>>()
|
||||
private val httpAttributesExtractorBuilder = HttpClientAttributesExtractor.builder(KtorHttpClientAttributesGetter)
|
||||
private val httpSpanNameExtractorBuilder = HttpSpanNameExtractor.builder(KtorHttpClientAttributesGetter)
|
||||
private var emitExperimentalHttpClientMetrics = false
|
||||
|
||||
fun setOpenTelemetry(openTelemetry: OpenTelemetry) {
|
||||
|
|
@ -45,6 +46,7 @@ class KtorClientTracingBuilder {
|
|||
|
||||
fun setKnownMethods(knownMethods: Set<String>) {
|
||||
httpAttributesExtractorBuilder.setKnownMethods(knownMethods)
|
||||
httpSpanNameExtractorBuilder.setKnownMethods(knownMethods)
|
||||
}
|
||||
|
||||
fun addAttributesExtractors(vararg extractors: AttributesExtractor<in HttpRequestData, in HttpResponse>) =
|
||||
|
|
@ -72,7 +74,7 @@ class KtorClientTracingBuilder {
|
|||
val instrumenterBuilder = Instrumenter.builder<HttpRequestData, HttpResponse>(
|
||||
initializedOpenTelemetry,
|
||||
INSTRUMENTATION_NAME,
|
||||
HttpSpanNameExtractor.create(KtorHttpClientAttributesGetter),
|
||||
httpSpanNameExtractorBuilder.build()
|
||||
)
|
||||
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(KtorHttpClientAttributesGetter))
|
||||
.addAttributesExtractor(httpAttributesExtractorBuilder.build())
|
||||
|
|
|
|||
|
|
@ -39,6 +39,8 @@ class KtorServerTracing private constructor(
|
|||
|
||||
internal val httpAttributesExtractorBuilder = HttpServerAttributesExtractor.builder(KtorHttpServerAttributesGetter.INSTANCE)
|
||||
|
||||
internal val httpSpanNameExtractorBuilder = HttpSpanNameExtractor.builder(KtorHttpServerAttributesGetter.INSTANCE)
|
||||
|
||||
internal var statusExtractor:
|
||||
(SpanStatusExtractor<ApplicationRequest, ApplicationResponse>) -> SpanStatusExtractor<in ApplicationRequest, in ApplicationResponse> = { a -> a }
|
||||
|
||||
|
|
@ -75,6 +77,7 @@ class KtorServerTracing private constructor(
|
|||
|
||||
fun setKnownMethods(knownMethods: Set<String>) {
|
||||
httpAttributesExtractorBuilder.setKnownMethods(knownMethods)
|
||||
httpSpanNameExtractorBuilder.setKnownMethods(knownMethods)
|
||||
}
|
||||
|
||||
internal fun isOpenTelemetryInitialized(): Boolean = this::openTelemetry.isInitialized
|
||||
|
|
@ -112,7 +115,7 @@ class KtorServerTracing private constructor(
|
|||
val instrumenterBuilder = Instrumenter.builder<ApplicationRequest, ApplicationResponse>(
|
||||
configuration.openTelemetry,
|
||||
INSTRUMENTATION_NAME,
|
||||
HttpSpanNameExtractor.create(httpAttributesGetter),
|
||||
configuration.httpSpanNameExtractorBuilder.build()
|
||||
)
|
||||
|
||||
configuration.additionalExtractors.forEach { instrumenterBuilder.addAttributesExtractor(it) }
|
||||
|
|
|
|||
|
|
@ -29,7 +29,9 @@ public final class LibertyDispatcherSingletons {
|
|||
Instrumenter.<LibertyRequest, LibertyResponse>builder(
|
||||
GlobalOpenTelemetry.get(),
|
||||
INSTRUMENTATION_NAME,
|
||||
HttpSpanNameExtractor.create(httpAttributesGetter))
|
||||
HttpSpanNameExtractor.builder(httpAttributesGetter)
|
||||
.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods())
|
||||
.build())
|
||||
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter))
|
||||
.addAttributesExtractor(
|
||||
HttpServerAttributesExtractor.builder(httpAttributesGetter)
|
||||
|
|
|
|||
|
|
@ -36,7 +36,9 @@ public final class NettyClientSingletons {
|
|||
Instrumenter.<HttpRequestAndChannel, HttpResponse>builder(
|
||||
GlobalOpenTelemetry.get(),
|
||||
INSTRUMENTATION_NAME,
|
||||
HttpSpanNameExtractor.create(httpAttributesGetter))
|
||||
HttpSpanNameExtractor.builder(httpAttributesGetter)
|
||||
.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods())
|
||||
.build())
|
||||
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter))
|
||||
.addAttributesExtractor(
|
||||
HttpClientAttributesExtractor.builder(httpAttributesGetter)
|
||||
|
|
|
|||
|
|
@ -31,7 +31,9 @@ final class NettyServerSingletons {
|
|||
Instrumenter.<HttpRequestAndChannel, HttpResponse>builder(
|
||||
GlobalOpenTelemetry.get(),
|
||||
"io.opentelemetry.netty-3.8",
|
||||
HttpSpanNameExtractor.create(httpServerAttributesGetter))
|
||||
HttpSpanNameExtractor.builder(httpServerAttributesGetter)
|
||||
.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods())
|
||||
.build())
|
||||
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpServerAttributesGetter))
|
||||
.addAttributesExtractor(
|
||||
HttpServerAttributesExtractor.builder(httpServerAttributesGetter)
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@ import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientAttribut
|
|||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientExperimentalMetrics;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientMetrics;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractorBuilder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.net.PeerServiceAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.netty.common.internal.NettyConnectionRequest;
|
||||
|
|
@ -56,6 +57,7 @@ public final class NettyClientInstrumenterFactory {
|
|||
public Instrumenter<HttpRequestAndChannel, HttpResponse> createHttpInstrumenter(
|
||||
Consumer<HttpClientAttributesExtractorBuilder<HttpRequestAndChannel, HttpResponse>>
|
||||
extractorConfigurer,
|
||||
Consumer<HttpSpanNameExtractorBuilder<HttpRequestAndChannel>> spanNameExtractorConfigurer,
|
||||
List<AttributesExtractor<HttpRequestAndChannel, HttpResponse>>
|
||||
additionalHttpAttributeExtractors) {
|
||||
NettyHttpClientAttributesGetter httpAttributesGetter = new NettyHttpClientAttributesGetter();
|
||||
|
|
@ -64,11 +66,13 @@ public final class NettyClientInstrumenterFactory {
|
|||
HttpClientAttributesExtractor.builder(httpAttributesGetter);
|
||||
extractorConfigurer.accept(extractorBuilder);
|
||||
|
||||
HttpSpanNameExtractorBuilder<HttpRequestAndChannel> httpSpanNameExtractorBuilder =
|
||||
HttpSpanNameExtractor.builder(httpAttributesGetter);
|
||||
spanNameExtractorConfigurer.accept(httpSpanNameExtractorBuilder);
|
||||
|
||||
InstrumenterBuilder<HttpRequestAndChannel, HttpResponse> builder =
|
||||
Instrumenter.<HttpRequestAndChannel, HttpResponse>builder(
|
||||
openTelemetry,
|
||||
instrumentationName,
|
||||
HttpSpanNameExtractor.create(httpAttributesGetter))
|
||||
openTelemetry, instrumentationName, httpSpanNameExtractorBuilder.build())
|
||||
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter))
|
||||
.addAttributesExtractor(extractorBuilder.build())
|
||||
.addAttributesExtractor(
|
||||
|
|
|
|||
|
|
@ -15,6 +15,7 @@ import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerExperime
|
|||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerMetrics;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractorBuilder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor;
|
||||
import io.opentelemetry.instrumentation.netty.common.internal.NettyErrorHolder;
|
||||
import io.opentelemetry.instrumentation.netty.v4.common.HttpRequestAndChannel;
|
||||
|
|
@ -31,6 +32,7 @@ public final class NettyServerInstrumenterFactory {
|
|||
String instrumentationName,
|
||||
Consumer<HttpServerAttributesExtractorBuilder<HttpRequestAndChannel, HttpResponse>>
|
||||
extractorConfigurer,
|
||||
Consumer<HttpSpanNameExtractorBuilder<HttpRequestAndChannel>> spanNameExtractorConfigurer,
|
||||
boolean emitExperimentalHttpServerMetrics) {
|
||||
|
||||
NettyHttpServerAttributesGetter httpAttributesGetter = new NettyHttpServerAttributesGetter();
|
||||
|
|
@ -39,11 +41,13 @@ public final class NettyServerInstrumenterFactory {
|
|||
HttpServerAttributesExtractor.builder(httpAttributesGetter);
|
||||
extractorConfigurer.accept(extractorBuilder);
|
||||
|
||||
HttpSpanNameExtractorBuilder<HttpRequestAndChannel> httpSpanNameExtractorBuilder =
|
||||
HttpSpanNameExtractor.builder(httpAttributesGetter);
|
||||
spanNameExtractorConfigurer.accept(httpSpanNameExtractorBuilder);
|
||||
|
||||
InstrumenterBuilder<HttpRequestAndChannel, HttpResponse> builder =
|
||||
Instrumenter.<HttpRequestAndChannel, HttpResponse>builder(
|
||||
openTelemetry,
|
||||
instrumentationName,
|
||||
HttpSpanNameExtractor.create(httpAttributesGetter))
|
||||
openTelemetry, instrumentationName, httpSpanNameExtractorBuilder.build())
|
||||
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter))
|
||||
.addAttributesExtractor(extractorBuilder.build())
|
||||
.addOperationMetrics(HttpServerMetrics.get());
|
||||
|
|
|
|||
|
|
@ -56,6 +56,7 @@ public final class NettyClientSingletons {
|
|||
.setCapturedRequestHeaders(CommonConfig.get().getClientRequestHeaders())
|
||||
.setCapturedResponseHeaders(CommonConfig.get().getClientResponseHeaders())
|
||||
.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods()),
|
||||
builder -> builder.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods()),
|
||||
Collections.emptyList());
|
||||
CONNECTION_INSTRUMENTER = factory.createConnectionInstrumenter();
|
||||
SSL_INSTRUMENTER = factory.createSslInstrumenter();
|
||||
|
|
|
|||
|
|
@ -23,6 +23,7 @@ public final class NettyServerSingletons {
|
|||
.setCapturedRequestHeaders(CommonConfig.get().getServerRequestHeaders())
|
||||
.setCapturedResponseHeaders(CommonConfig.get().getServerResponseHeaders())
|
||||
.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods()),
|
||||
builder -> builder.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods()),
|
||||
CommonConfig.get().shouldEmitExperimentalHttpServerMetrics());
|
||||
|
||||
public static Instrumenter<HttpRequestAndChannel, HttpResponse> instrumenter() {
|
||||
|
|
|
|||
|
|
@ -56,6 +56,7 @@ public final class NettyClientSingletons {
|
|||
.setCapturedRequestHeaders(CommonConfig.get().getClientRequestHeaders())
|
||||
.setCapturedResponseHeaders(CommonConfig.get().getClientResponseHeaders())
|
||||
.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods()),
|
||||
builder -> builder.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods()),
|
||||
Collections.emptyList());
|
||||
CONNECTION_INSTRUMENTER = factory.createConnectionInstrumenter();
|
||||
SSL_INSTRUMENTER = factory.createSslInstrumenter();
|
||||
|
|
|
|||
|
|
@ -23,6 +23,7 @@ public final class NettyServerSingletons {
|
|||
.setCapturedRequestHeaders(CommonConfig.get().getServerRequestHeaders())
|
||||
.setCapturedResponseHeaders(CommonConfig.get().getServerResponseHeaders())
|
||||
.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods()),
|
||||
builder -> builder.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods()),
|
||||
CommonConfig.get().shouldEmitExperimentalHttpServerMetrics());
|
||||
|
||||
public static Instrumenter<HttpRequestAndChannel, HttpResponse> instrumenter() {
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@ import io.netty.handler.codec.http.HttpResponse;
|
|||
import io.opentelemetry.api.OpenTelemetry;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientAttributesExtractorBuilder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractorBuilder;
|
||||
import io.opentelemetry.instrumentation.netty.v4.common.HttpRequestAndChannel;
|
||||
import io.opentelemetry.instrumentation.netty.v4.common.internal.client.NettyClientInstrumenterFactory;
|
||||
import io.opentelemetry.instrumentation.netty.v4.common.internal.client.NettyConnectionInstrumentationFlag;
|
||||
|
|
@ -28,6 +29,8 @@ public final class NettyClientTelemetryBuilder {
|
|||
|
||||
private Consumer<HttpClientAttributesExtractorBuilder<HttpRequestAndChannel, HttpResponse>>
|
||||
extractorConfigurer = builder -> {};
|
||||
private Consumer<HttpSpanNameExtractorBuilder<HttpRequestAndChannel>>
|
||||
spanNameExtractorConfigurer = builder -> {};
|
||||
private boolean emitExperimentalHttpClientMetrics = false;
|
||||
|
||||
NettyClientTelemetryBuilder(OpenTelemetry openTelemetry) {
|
||||
|
|
@ -90,6 +93,8 @@ public final class NettyClientTelemetryBuilder {
|
|||
public NettyClientTelemetryBuilder setKnownMethods(Set<String> knownMethods) {
|
||||
extractorConfigurer =
|
||||
extractorConfigurer.andThen(builder -> builder.setKnownMethods(knownMethods));
|
||||
spanNameExtractorConfigurer =
|
||||
spanNameExtractorConfigurer.andThen(builder -> builder.setKnownMethods(knownMethods));
|
||||
return this;
|
||||
}
|
||||
|
||||
|
|
@ -116,6 +121,7 @@ public final class NettyClientTelemetryBuilder {
|
|||
NettyConnectionInstrumentationFlag.DISABLED,
|
||||
Collections.emptyMap(),
|
||||
emitExperimentalHttpClientMetrics)
|
||||
.createHttpInstrumenter(extractorConfigurer, additionalAttributesExtractors));
|
||||
.createHttpInstrumenter(
|
||||
extractorConfigurer, spanNameExtractorConfigurer, additionalAttributesExtractors));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -9,6 +9,7 @@ import com.google.errorprone.annotations.CanIgnoreReturnValue;
|
|||
import io.netty.handler.codec.http.HttpResponse;
|
||||
import io.opentelemetry.api.OpenTelemetry;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesExtractorBuilder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractorBuilder;
|
||||
import io.opentelemetry.instrumentation.netty.v4.common.HttpRequestAndChannel;
|
||||
import io.opentelemetry.instrumentation.netty.v4.common.internal.server.NettyServerInstrumenterFactory;
|
||||
import java.util.List;
|
||||
|
|
@ -22,6 +23,8 @@ public final class NettyServerTelemetryBuilder {
|
|||
|
||||
private Consumer<HttpServerAttributesExtractorBuilder<HttpRequestAndChannel, HttpResponse>>
|
||||
extractorConfigurer = builder -> {};
|
||||
private Consumer<HttpSpanNameExtractorBuilder<HttpRequestAndChannel>>
|
||||
spanNameExtractorConfigurer = builder -> {};
|
||||
private boolean emitExperimentalHttpServerMetrics = false;
|
||||
|
||||
NettyServerTelemetryBuilder(OpenTelemetry openTelemetry) {
|
||||
|
|
@ -73,6 +76,8 @@ public final class NettyServerTelemetryBuilder {
|
|||
public NettyServerTelemetryBuilder setKnownMethods(Set<String> knownMethods) {
|
||||
extractorConfigurer =
|
||||
extractorConfigurer.andThen(builder -> builder.setKnownMethods(knownMethods));
|
||||
spanNameExtractorConfigurer =
|
||||
spanNameExtractorConfigurer.andThen(builder -> builder.setKnownMethods(knownMethods));
|
||||
return this;
|
||||
}
|
||||
|
||||
|
|
@ -96,6 +101,7 @@ public final class NettyServerTelemetryBuilder {
|
|||
openTelemetry,
|
||||
"io.opentelemetry.netty-4.1",
|
||||
extractorConfigurer,
|
||||
spanNameExtractorConfigurer,
|
||||
emitExperimentalHttpServerMetrics));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -37,7 +37,9 @@ public final class OkHttp2Singletons {
|
|||
Instrumenter.<Request, Response>builder(
|
||||
openTelemetry,
|
||||
INSTRUMENTATION_NAME,
|
||||
HttpSpanNameExtractor.create(httpAttributesGetter))
|
||||
HttpSpanNameExtractor.builder(httpAttributesGetter)
|
||||
.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods())
|
||||
.build())
|
||||
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter))
|
||||
.addAttributesExtractor(
|
||||
HttpClientAttributesExtractor.builder(httpAttributesGetter)
|
||||
|
|
|
|||
|
|
@ -33,6 +33,7 @@ public final class OkHttp3Singletons {
|
|||
.setCapturedRequestHeaders(CommonConfig.get().getClientRequestHeaders())
|
||||
.setCapturedResponseHeaders(CommonConfig.get().getClientResponseHeaders())
|
||||
.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods()),
|
||||
builder -> builder.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods()),
|
||||
singletonList(
|
||||
PeerServiceAttributesExtractor.create(
|
||||
OkHttpAttributesGetter.INSTANCE, CommonConfig.get().getPeerServiceMapping())),
|
||||
|
|
|
|||
|
|
@ -9,6 +9,7 @@ import com.google.errorprone.annotations.CanIgnoreReturnValue;
|
|||
import io.opentelemetry.api.OpenTelemetry;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientAttributesExtractorBuilder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractorBuilder;
|
||||
import io.opentelemetry.instrumentation.okhttp.v3_0.internal.OkHttpInstrumenterFactory;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
|
@ -25,6 +26,8 @@ public final class OkHttpTelemetryBuilder {
|
|||
new ArrayList<>();
|
||||
private Consumer<HttpClientAttributesExtractorBuilder<Request, Response>> extractorConfigurer =
|
||||
builder -> {};
|
||||
private Consumer<HttpSpanNameExtractorBuilder<Request>> spanNameExtractorConfigurer =
|
||||
builder -> {};
|
||||
private boolean emitExperimentalHttpClientMetrics = false;
|
||||
|
||||
OkHttpTelemetryBuilder(OpenTelemetry openTelemetry) {
|
||||
|
|
@ -83,6 +86,8 @@ public final class OkHttpTelemetryBuilder {
|
|||
public OkHttpTelemetryBuilder setKnownMethods(Set<String> knownMethods) {
|
||||
extractorConfigurer =
|
||||
extractorConfigurer.andThen(builder -> builder.setKnownMethods(knownMethods));
|
||||
spanNameExtractorConfigurer =
|
||||
spanNameExtractorConfigurer.andThen(builder -> builder.setKnownMethods(knownMethods));
|
||||
return this;
|
||||
}
|
||||
|
||||
|
|
@ -107,6 +112,7 @@ public final class OkHttpTelemetryBuilder {
|
|||
OkHttpInstrumenterFactory.create(
|
||||
openTelemetry,
|
||||
extractorConfigurer,
|
||||
spanNameExtractorConfigurer,
|
||||
additionalExtractors,
|
||||
emitExperimentalHttpClientMetrics),
|
||||
openTelemetry.getPropagators());
|
||||
|
|
|
|||
|
|
@ -16,6 +16,7 @@ import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientAttribut
|
|||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientExperimentalMetrics;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientMetrics;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractorBuilder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor;
|
||||
import java.util.List;
|
||||
import java.util.function.Consumer;
|
||||
|
|
@ -33,6 +34,7 @@ public final class OkHttpInstrumenterFactory {
|
|||
public static Instrumenter<Request, Response> create(
|
||||
OpenTelemetry openTelemetry,
|
||||
Consumer<HttpClientAttributesExtractorBuilder<Request, Response>> extractorConfigurer,
|
||||
Consumer<HttpSpanNameExtractorBuilder<Request>> spanNameExtractorConfigurer,
|
||||
List<AttributesExtractor<Request, Response>> additionalAttributesExtractors,
|
||||
boolean emitExperimentalHttpClientMetrics) {
|
||||
|
||||
|
|
@ -42,11 +44,13 @@ public final class OkHttpInstrumenterFactory {
|
|||
HttpClientAttributesExtractor.builder(httpAttributesGetter);
|
||||
extractorConfigurer.accept(extractorBuilder);
|
||||
|
||||
HttpSpanNameExtractorBuilder<Request> httpSpanNameExtractorBuilder =
|
||||
HttpSpanNameExtractor.builder(httpAttributesGetter);
|
||||
spanNameExtractorConfigurer.accept(httpSpanNameExtractorBuilder);
|
||||
|
||||
InstrumenterBuilder<Request, Response> builder =
|
||||
Instrumenter.<Request, Response>builder(
|
||||
openTelemetry,
|
||||
INSTRUMENTATION_NAME,
|
||||
HttpSpanNameExtractor.create(httpAttributesGetter))
|
||||
openTelemetry, INSTRUMENTATION_NAME, httpSpanNameExtractorBuilder.build())
|
||||
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter))
|
||||
.addAttributesExtractor(extractorBuilder.build())
|
||||
.addAttributesExtractors(additionalAttributesExtractors)
|
||||
|
|
|
|||
|
|
@ -27,7 +27,9 @@ public final class PlayWsClientInstrumenterFactory {
|
|||
Instrumenter.<Request, Response>builder(
|
||||
GlobalOpenTelemetry.get(),
|
||||
instrumentationName,
|
||||
HttpSpanNameExtractor.create(httpAttributesGetter))
|
||||
HttpSpanNameExtractor.builder(httpAttributesGetter)
|
||||
.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods())
|
||||
.build())
|
||||
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter))
|
||||
.addAttributesExtractor(
|
||||
HttpClientAttributesExtractor.builder(httpAttributesGetter)
|
||||
|
|
|
|||
|
|
@ -20,6 +20,7 @@ import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerExperime
|
|||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerMetrics;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractorBuilder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
|
@ -45,6 +46,11 @@ public final class RatpackTelemetryBuilder {
|
|||
httpServerAttributesExtractorBuilder =
|
||||
HttpServerAttributesExtractor.builder(RatpackHttpAttributesGetter.INSTANCE);
|
||||
|
||||
private final HttpSpanNameExtractorBuilder<RequestSpec> httpClientSpanNameExtractorBuilder =
|
||||
HttpSpanNameExtractor.builder(RatpackHttpClientAttributesGetter.INSTANCE);
|
||||
private final HttpSpanNameExtractorBuilder<Request> httpServerSpanNameExtractorBuilder =
|
||||
HttpSpanNameExtractor.builder(RatpackHttpAttributesGetter.INSTANCE);
|
||||
|
||||
private final List<AttributesExtractor<? super RequestSpec, ? super HttpResponse>>
|
||||
additionalHttpClientExtractors = new ArrayList<>();
|
||||
|
||||
|
|
@ -135,6 +141,8 @@ public final class RatpackTelemetryBuilder {
|
|||
public RatpackTelemetryBuilder setKnownMethods(Set<String> knownMethods) {
|
||||
httpClientAttributesExtractorBuilder.setKnownMethods(knownMethods);
|
||||
httpServerAttributesExtractorBuilder.setKnownMethods(knownMethods);
|
||||
httpClientSpanNameExtractorBuilder.setKnownMethods(knownMethods);
|
||||
httpServerSpanNameExtractorBuilder.setKnownMethods(knownMethods);
|
||||
return this;
|
||||
}
|
||||
|
||||
|
|
@ -174,7 +182,7 @@ public final class RatpackTelemetryBuilder {
|
|||
|
||||
InstrumenterBuilder<Request, Response> builder =
|
||||
Instrumenter.<Request, Response>builder(
|
||||
openTelemetry, INSTRUMENTATION_NAME, HttpSpanNameExtractor.create(httpAttributes))
|
||||
openTelemetry, INSTRUMENTATION_NAME, httpServerSpanNameExtractorBuilder.build())
|
||||
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributes))
|
||||
.addAttributesExtractor(httpServerAttributesExtractorBuilder.build())
|
||||
.addAttributesExtractors(additionalExtractors)
|
||||
|
|
@ -191,7 +199,7 @@ public final class RatpackTelemetryBuilder {
|
|||
|
||||
InstrumenterBuilder<RequestSpec, HttpResponse> builder =
|
||||
Instrumenter.<RequestSpec, HttpResponse>builder(
|
||||
openTelemetry, INSTRUMENTATION_NAME, HttpSpanNameExtractor.create(httpAttributes))
|
||||
openTelemetry, INSTRUMENTATION_NAME, httpClientSpanNameExtractorBuilder.build())
|
||||
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributes))
|
||||
.addAttributesExtractor(httpClientAttributesExtractorBuilder.build())
|
||||
.addAttributesExtractors(additionalHttpClientExtractors)
|
||||
|
|
|
|||
|
|
@ -50,7 +50,9 @@ public final class ReactorNettySingletons {
|
|||
Instrumenter.<HttpClientRequest, HttpClientResponse>builder(
|
||||
GlobalOpenTelemetry.get(),
|
||||
INSTRUMENTATION_NAME,
|
||||
HttpSpanNameExtractor.create(httpAttributesGetter))
|
||||
HttpSpanNameExtractor.builder(httpAttributesGetter)
|
||||
.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods())
|
||||
.build())
|
||||
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter))
|
||||
.addAttributesExtractor(
|
||||
HttpClientAttributesExtractor.builder(httpAttributesGetter)
|
||||
|
|
|
|||
|
|
@ -16,6 +16,7 @@ import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerExperime
|
|||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerMetrics;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractorBuilder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
|
@ -34,7 +35,8 @@ public final class RestletTelemetryBuilder {
|
|||
private final HttpServerAttributesExtractorBuilder<Request, Response>
|
||||
httpAttributesExtractorBuilder =
|
||||
HttpServerAttributesExtractor.builder(RestletHttpAttributesGetter.INSTANCE);
|
||||
|
||||
private final HttpSpanNameExtractorBuilder<Request> httpSpanNameExtractorBuilder =
|
||||
HttpSpanNameExtractor.builder(RestletHttpAttributesGetter.INSTANCE);
|
||||
private boolean emitExperimentalHttpServerMetrics = false;
|
||||
|
||||
RestletTelemetryBuilder(OpenTelemetry openTelemetry) {
|
||||
|
|
@ -90,6 +92,7 @@ public final class RestletTelemetryBuilder {
|
|||
@CanIgnoreReturnValue
|
||||
public RestletTelemetryBuilder setKnownMethods(Set<String> knownMethods) {
|
||||
httpAttributesExtractorBuilder.setKnownMethods(knownMethods);
|
||||
httpSpanNameExtractorBuilder.setKnownMethods(knownMethods);
|
||||
return this;
|
||||
}
|
||||
|
||||
|
|
@ -115,9 +118,7 @@ public final class RestletTelemetryBuilder {
|
|||
|
||||
InstrumenterBuilder<Request, Response> builder =
|
||||
Instrumenter.<Request, Response>builder(
|
||||
openTelemetry,
|
||||
INSTRUMENTATION_NAME,
|
||||
HttpSpanNameExtractor.create(httpAttributesGetter))
|
||||
openTelemetry, INSTRUMENTATION_NAME, httpSpanNameExtractorBuilder.build())
|
||||
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter))
|
||||
.addAttributesExtractor(httpAttributesExtractorBuilder.build())
|
||||
.addAttributesExtractors(additionalExtractors)
|
||||
|
|
|
|||
|
|
@ -9,6 +9,7 @@ import io.opentelemetry.api.GlobalOpenTelemetry;
|
|||
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteGetter;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor;
|
||||
import io.opentelemetry.instrumentation.restlet.v2_0.internal.RestletHttpAttributesGetter;
|
||||
import io.opentelemetry.instrumentation.restlet.v2_0.internal.RestletInstrumenterFactory;
|
||||
import io.opentelemetry.javaagent.bootstrap.internal.CommonConfig;
|
||||
|
|
@ -27,6 +28,9 @@ public final class RestletSingletons {
|
|||
.setCapturedResponseHeaders(CommonConfig.get().getServerResponseHeaders())
|
||||
.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods())
|
||||
.build(),
|
||||
HttpSpanNameExtractor.builder(RestletHttpAttributesGetter.INSTANCE)
|
||||
.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods())
|
||||
.build(),
|
||||
Collections.emptyList(),
|
||||
CommonConfig.get().shouldEmitExperimentalHttpServerMetrics());
|
||||
|
||||
|
|
|
|||
|
|
@ -11,6 +11,8 @@ import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor;
|
|||
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesExtractorBuilder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractorBuilder;
|
||||
import io.opentelemetry.instrumentation.restlet.v2_0.internal.RestletHttpAttributesGetter;
|
||||
import io.opentelemetry.instrumentation.restlet.v2_0.internal.RestletInstrumenterFactory;
|
||||
import java.util.ArrayList;
|
||||
|
|
@ -28,7 +30,8 @@ public final class RestletTelemetryBuilder {
|
|||
private final HttpServerAttributesExtractorBuilder<Request, Response>
|
||||
httpAttributesExtractorBuilder =
|
||||
HttpServerAttributesExtractor.builder(RestletHttpAttributesGetter.INSTANCE);
|
||||
|
||||
private final HttpSpanNameExtractorBuilder<Request> httpSpanNameExtractorBuilder =
|
||||
HttpSpanNameExtractor.builder(RestletHttpAttributesGetter.INSTANCE);
|
||||
private boolean emitExperimentalHttpServerMetrics = false;
|
||||
|
||||
RestletTelemetryBuilder(OpenTelemetry openTelemetry) {
|
||||
|
|
@ -84,6 +87,7 @@ public final class RestletTelemetryBuilder {
|
|||
@CanIgnoreReturnValue
|
||||
public RestletTelemetryBuilder setKnownMethods(Set<String> knownMethods) {
|
||||
httpAttributesExtractorBuilder.setKnownMethods(knownMethods);
|
||||
httpSpanNameExtractorBuilder.setKnownMethods(knownMethods);
|
||||
return this;
|
||||
}
|
||||
|
||||
|
|
@ -109,6 +113,7 @@ public final class RestletTelemetryBuilder {
|
|||
RestletInstrumenterFactory.newServerInstrumenter(
|
||||
openTelemetry,
|
||||
httpAttributesExtractorBuilder.build(),
|
||||
httpSpanNameExtractorBuilder.build(),
|
||||
additionalExtractors,
|
||||
emitExperimentalHttpServerMetrics);
|
||||
|
||||
|
|
|
|||
|
|
@ -9,10 +9,10 @@ import io.opentelemetry.api.OpenTelemetry;
|
|||
import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.InstrumenterBuilder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.SpanNameExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerExperimentalMetrics;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerMetrics;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor;
|
||||
import java.util.List;
|
||||
import org.restlet.Request;
|
||||
|
|
@ -29,6 +29,7 @@ public final class RestletInstrumenterFactory {
|
|||
public static Instrumenter<Request, Response> newServerInstrumenter(
|
||||
OpenTelemetry openTelemetry,
|
||||
AttributesExtractor<Request, Response> httpServerAttributesExtractor,
|
||||
SpanNameExtractor<Request> httpServerSpanNameExtractor,
|
||||
List<AttributesExtractor<Request, Response>> additionalExtractors,
|
||||
boolean emitExperimentalHttpServerMetrics) {
|
||||
|
||||
|
|
@ -36,9 +37,7 @@ public final class RestletInstrumenterFactory {
|
|||
|
||||
InstrumenterBuilder<Request, Response> builder =
|
||||
Instrumenter.<Request, Response>builder(
|
||||
openTelemetry,
|
||||
INSTRUMENTATION_NAME,
|
||||
HttpSpanNameExtractor.create(httpAttributesGetter))
|
||||
openTelemetry, INSTRUMENTATION_NAME, httpServerSpanNameExtractor)
|
||||
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter))
|
||||
.addAttributesExtractor(httpServerAttributesExtractor)
|
||||
.addAttributesExtractors(additionalExtractors)
|
||||
|
|
|
|||
|
|
@ -87,7 +87,9 @@ public final class ServletInstrumenterBuilder<REQUEST, RESPONSE> {
|
|||
HttpServerAttributesGetter<ServletRequestContext<REQUEST>, ServletResponseContext<RESPONSE>>
|
||||
httpAttributesGetter = new ServletHttpAttributesGetter<>(accessor);
|
||||
SpanNameExtractor<ServletRequestContext<REQUEST>> spanNameExtractor =
|
||||
HttpSpanNameExtractor.create(httpAttributesGetter);
|
||||
HttpSpanNameExtractor.builder(httpAttributesGetter)
|
||||
.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods())
|
||||
.build();
|
||||
|
||||
return build(instrumentationName, accessor, spanNameExtractor, httpAttributesGetter);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -16,6 +16,7 @@ import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientAttribut
|
|||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientExperimentalMetrics;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientMetrics;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractorBuilder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
|
@ -35,6 +36,8 @@ public final class SpringWebTelemetryBuilder {
|
|||
private final HttpClientAttributesExtractorBuilder<HttpRequest, ClientHttpResponse>
|
||||
httpAttributesExtractorBuilder =
|
||||
HttpClientAttributesExtractor.builder(SpringWebHttpAttributesGetter.INSTANCE);
|
||||
private final HttpSpanNameExtractorBuilder<HttpRequest> httpSpanNameExtractorBuilder =
|
||||
HttpSpanNameExtractor.builder(SpringWebHttpAttributesGetter.INSTANCE);
|
||||
private boolean emitExperimentalHttpClientMetrics = false;
|
||||
|
||||
@Nullable
|
||||
|
|
@ -103,6 +106,7 @@ public final class SpringWebTelemetryBuilder {
|
|||
@CanIgnoreReturnValue
|
||||
public SpringWebTelemetryBuilder setKnownMethods(Set<String> knownMethods) {
|
||||
httpAttributesExtractorBuilder.setKnownMethods(knownMethods);
|
||||
httpSpanNameExtractorBuilder.setKnownMethods(knownMethods);
|
||||
return this;
|
||||
}
|
||||
|
||||
|
|
@ -126,8 +130,7 @@ public final class SpringWebTelemetryBuilder {
|
|||
public SpringWebTelemetry build() {
|
||||
SpringWebHttpAttributesGetter httpAttributeGetter = SpringWebHttpAttributesGetter.INSTANCE;
|
||||
|
||||
SpanNameExtractor<HttpRequest> originalSpanNameExtractor =
|
||||
HttpSpanNameExtractor.create(httpAttributeGetter);
|
||||
SpanNameExtractor<HttpRequest> originalSpanNameExtractor = httpSpanNameExtractorBuilder.build();
|
||||
SpanNameExtractor<? super HttpRequest> spanNameExtractor = originalSpanNameExtractor;
|
||||
if (spanNameExtractorTransformer != null) {
|
||||
spanNameExtractor = spanNameExtractorTransformer.apply(originalSpanNameExtractor);
|
||||
|
|
|
|||
|
|
@ -30,6 +30,7 @@ public final class WebClientHelper {
|
|||
.setCapturedRequestHeaders(CommonConfig.get().getClientRequestHeaders())
|
||||
.setCapturedResponseHeaders(CommonConfig.get().getClientResponseHeaders())
|
||||
.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods()),
|
||||
builder -> builder.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods()),
|
||||
singletonList(
|
||||
PeerServiceAttributesExtractor.create(
|
||||
WebClientHttpAttributesGetter.INSTANCE,
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@ import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerExperime
|
|||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerMetrics;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractorBuilder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor;
|
||||
import io.opentelemetry.instrumentation.spring.webflux.v5_3.internal.ClientInstrumenterFactory;
|
||||
import java.util.ArrayList;
|
||||
|
|
@ -41,9 +42,13 @@ public final class SpringWebfluxTelemetryBuilder {
|
|||
private final HttpServerAttributesExtractorBuilder<ServerWebExchange, ServerWebExchange>
|
||||
httpServerAttributesExtractorBuilder =
|
||||
HttpServerAttributesExtractor.builder(WebfluxServerHttpAttributesGetter.INSTANCE);
|
||||
private final HttpSpanNameExtractorBuilder<ServerWebExchange> httpServerSpanNameExtractorBuilder =
|
||||
HttpSpanNameExtractor.builder(WebfluxServerHttpAttributesGetter.INSTANCE);
|
||||
|
||||
private Consumer<HttpClientAttributesExtractorBuilder<ClientRequest, ClientResponse>>
|
||||
clientExtractorConfigurer = builder -> {};
|
||||
private Consumer<HttpSpanNameExtractorBuilder<ClientRequest>> clientSpanNameExtractorConfigurer =
|
||||
builder -> {};
|
||||
private boolean captureExperimentalSpanAttributes = false;
|
||||
private boolean emitExperimentalHttpClientMetrics = false;
|
||||
private boolean emitExperimentalHttpServerMetrics = false;
|
||||
|
|
@ -158,7 +163,10 @@ public final class SpringWebfluxTelemetryBuilder {
|
|||
public SpringWebfluxTelemetryBuilder setKnownMethods(Set<String> knownMethods) {
|
||||
clientExtractorConfigurer =
|
||||
clientExtractorConfigurer.andThen(builder -> builder.setKnownMethods(knownMethods));
|
||||
clientSpanNameExtractorConfigurer =
|
||||
clientSpanNameExtractorConfigurer.andThen(builder -> builder.setKnownMethods(knownMethods));
|
||||
httpServerAttributesExtractorBuilder.setKnownMethods(knownMethods);
|
||||
httpServerSpanNameExtractorBuilder.setKnownMethods(knownMethods);
|
||||
return this;
|
||||
}
|
||||
|
||||
|
|
@ -198,6 +206,7 @@ public final class SpringWebfluxTelemetryBuilder {
|
|||
ClientInstrumenterFactory.create(
|
||||
openTelemetry,
|
||||
clientExtractorConfigurer,
|
||||
clientSpanNameExtractorConfigurer,
|
||||
clientAdditionalExtractors,
|
||||
captureExperimentalSpanAttributes,
|
||||
emitExperimentalHttpClientMetrics);
|
||||
|
|
@ -214,7 +223,7 @@ public final class SpringWebfluxTelemetryBuilder {
|
|||
|
||||
InstrumenterBuilder<ServerWebExchange, ServerWebExchange> builder =
|
||||
Instrumenter.<ServerWebExchange, ServerWebExchange>builder(
|
||||
openTelemetry, INSTRUMENTATION_NAME, HttpSpanNameExtractor.create(getter))
|
||||
openTelemetry, INSTRUMENTATION_NAME, httpServerSpanNameExtractorBuilder.build())
|
||||
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(getter))
|
||||
.addAttributesExtractor(httpServerAttributesExtractorBuilder.build())
|
||||
.addAttributesExtractors(serverAdditionalExtractors)
|
||||
|
|
|
|||
|
|
@ -16,6 +16,7 @@ import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientAttribut
|
|||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientExperimentalMetrics;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientMetrics;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractorBuilder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor;
|
||||
import java.util.List;
|
||||
import java.util.function.Consumer;
|
||||
|
|
@ -36,6 +37,7 @@ public final class ClientInstrumenterFactory {
|
|||
OpenTelemetry openTelemetry,
|
||||
Consumer<HttpClientAttributesExtractorBuilder<ClientRequest, ClientResponse>>
|
||||
extractorConfigurer,
|
||||
Consumer<HttpSpanNameExtractorBuilder<ClientRequest>> spanNameExtractorConfigurer,
|
||||
List<AttributesExtractor<ClientRequest, ClientResponse>> additionalExtractors,
|
||||
boolean captureExperimentalSpanAttributes,
|
||||
boolean emitExperimentalHttpClientMetrics) {
|
||||
|
|
@ -46,11 +48,13 @@ public final class ClientInstrumenterFactory {
|
|||
HttpClientAttributesExtractor.builder(httpAttributesGetter);
|
||||
extractorConfigurer.accept(extractorBuilder);
|
||||
|
||||
HttpSpanNameExtractorBuilder<ClientRequest> httpSpanNameExtractorBuilder =
|
||||
HttpSpanNameExtractor.builder(httpAttributesGetter);
|
||||
spanNameExtractorConfigurer.accept(httpSpanNameExtractorBuilder);
|
||||
|
||||
InstrumenterBuilder<ClientRequest, ClientResponse> clientBuilder =
|
||||
Instrumenter.<ClientRequest, ClientResponse>builder(
|
||||
openTelemetry,
|
||||
INSTRUMENTATION_NAME,
|
||||
HttpSpanNameExtractor.create(httpAttributesGetter))
|
||||
openTelemetry, INSTRUMENTATION_NAME, httpSpanNameExtractorBuilder.build())
|
||||
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter))
|
||||
.addAttributesExtractor(extractorBuilder.build())
|
||||
.addAttributesExtractors(additionalExtractors)
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@ import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerExperime
|
|||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerMetrics;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractorBuilder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
|
@ -37,6 +38,8 @@ public final class SpringWebMvcTelemetryBuilder {
|
|||
private final HttpServerAttributesExtractorBuilder<HttpServletRequest, HttpServletResponse>
|
||||
httpAttributesExtractorBuilder =
|
||||
HttpServerAttributesExtractor.builder(SpringWebMvcHttpAttributesGetter.INSTANCE);
|
||||
private final HttpSpanNameExtractorBuilder<HttpServletRequest> httpSpanNameExtractorBuilder =
|
||||
HttpSpanNameExtractor.builder(SpringWebMvcHttpAttributesGetter.INSTANCE);
|
||||
|
||||
@Nullable
|
||||
private Function<
|
||||
|
|
@ -110,6 +113,7 @@ public final class SpringWebMvcTelemetryBuilder {
|
|||
@CanIgnoreReturnValue
|
||||
public SpringWebMvcTelemetryBuilder setKnownMethods(Set<String> knownMethods) {
|
||||
httpAttributesExtractorBuilder.setKnownMethods(knownMethods);
|
||||
httpSpanNameExtractorBuilder.setKnownMethods(knownMethods);
|
||||
return this;
|
||||
}
|
||||
|
||||
|
|
@ -135,7 +139,7 @@ public final class SpringWebMvcTelemetryBuilder {
|
|||
SpringWebMvcHttpAttributesGetter.INSTANCE;
|
||||
|
||||
SpanNameExtractor<HttpServletRequest> originalSpanNameExtractor =
|
||||
HttpSpanNameExtractor.create(httpAttributesGetter);
|
||||
httpSpanNameExtractorBuilder.build();
|
||||
SpanNameExtractor<? super HttpServletRequest> spanNameExtractor = originalSpanNameExtractor;
|
||||
if (spanNameExtractorTransformer != null) {
|
||||
spanNameExtractor = spanNameExtractorTransformer.apply(originalSpanNameExtractor);
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@ import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerExperime
|
|||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerMetrics;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractorBuilder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
|
|
@ -37,6 +38,8 @@ public final class SpringWebMvcTelemetryBuilder {
|
|||
private final HttpServerAttributesExtractorBuilder<HttpServletRequest, HttpServletResponse>
|
||||
httpAttributesExtractorBuilder =
|
||||
HttpServerAttributesExtractor.builder(SpringWebMvcHttpAttributesGetter.INSTANCE);
|
||||
private final HttpSpanNameExtractorBuilder<HttpServletRequest> httpSpanNameExtractorBuilder =
|
||||
HttpSpanNameExtractor.builder(SpringWebMvcHttpAttributesGetter.INSTANCE);
|
||||
|
||||
@Nullable
|
||||
private Function<
|
||||
|
|
@ -110,6 +113,7 @@ public final class SpringWebMvcTelemetryBuilder {
|
|||
@CanIgnoreReturnValue
|
||||
public SpringWebMvcTelemetryBuilder setKnownMethods(Set<String> knownMethods) {
|
||||
httpAttributesExtractorBuilder.setKnownMethods(knownMethods);
|
||||
httpSpanNameExtractorBuilder.setKnownMethods(knownMethods);
|
||||
return this;
|
||||
}
|
||||
|
||||
|
|
@ -135,7 +139,7 @@ public final class SpringWebMvcTelemetryBuilder {
|
|||
SpringWebMvcHttpAttributesGetter.INSTANCE;
|
||||
|
||||
SpanNameExtractor<HttpServletRequest> originalSpanNameExtractor =
|
||||
HttpSpanNameExtractor.create(httpAttributesGetter);
|
||||
httpSpanNameExtractorBuilder.build();
|
||||
SpanNameExtractor<? super HttpServletRequest> spanNameExtractor = originalSpanNameExtractor;
|
||||
if (spanNameExtractorTransformer != null) {
|
||||
spanNameExtractor = spanNameExtractorTransformer.apply(originalSpanNameExtractor);
|
||||
|
|
|
|||
|
|
@ -33,7 +33,9 @@ public final class TomcatInstrumenterFactory {
|
|||
Instrumenter.<Request, Response>builder(
|
||||
GlobalOpenTelemetry.get(),
|
||||
instrumentationName,
|
||||
HttpSpanNameExtractor.create(httpAttributesGetter))
|
||||
HttpSpanNameExtractor.builder(httpAttributesGetter)
|
||||
.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods())
|
||||
.build())
|
||||
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter))
|
||||
.setErrorCauseExtractor(new ServletErrorCauseExtractor<>(accessor))
|
||||
.addAttributesExtractor(
|
||||
|
|
|
|||
|
|
@ -31,7 +31,9 @@ public final class UndertowSingletons {
|
|||
Instrumenter.<HttpServerExchange, HttpServerExchange>builder(
|
||||
GlobalOpenTelemetry.get(),
|
||||
INSTRUMENTATION_NAME,
|
||||
HttpSpanNameExtractor.create(httpAttributesGetter))
|
||||
HttpSpanNameExtractor.builder(httpAttributesGetter)
|
||||
.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods())
|
||||
.build())
|
||||
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter))
|
||||
.addAttributesExtractor(
|
||||
HttpServerAttributesExtractor.builder(httpAttributesGetter)
|
||||
|
|
|
|||
|
|
@ -27,7 +27,9 @@ public final class VertxClientInstrumenterFactory {
|
|||
Instrumenter.<HttpClientRequest, HttpClientResponse>builder(
|
||||
GlobalOpenTelemetry.get(),
|
||||
instrumentationName,
|
||||
HttpSpanNameExtractor.create(httpAttributesGetter))
|
||||
HttpSpanNameExtractor.builder(httpAttributesGetter)
|
||||
.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods())
|
||||
.build())
|
||||
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter))
|
||||
.addAttributesExtractor(
|
||||
HttpClientAttributesExtractor.builder(httpAttributesGetter)
|
||||
|
|
|
|||
|
|
@ -374,7 +374,7 @@ abstract class HttpClientTest<REQUEST> extends InstrumentationSpecification {
|
|||
}
|
||||
|
||||
protected String expectedClientSpanName(URI uri, String method) {
|
||||
return HttpConstants._OTHER == method ? "TEST" : method
|
||||
return HttpConstants._OTHER == method ? "HTTP" : method
|
||||
}
|
||||
|
||||
Integer responseCodeOnRedirectError() {
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@ public abstract class HttpClientTestOptions {
|
|||
SemconvStabilityUtil.getAttributeKey(SemanticAttributes.USER_AGENT_ORIGINAL))));
|
||||
|
||||
public static final BiFunction<URI, String, String> DEFAULT_EXPECTED_CLIENT_SPAN_NAME_MAPPER =
|
||||
(uri, method) -> HttpConstants._OTHER.equals(method) ? "TEST" : method;
|
||||
(uri, method) -> HttpConstants._OTHER.equals(method) ? "HTTP" : method;
|
||||
|
||||
public static final int FOUND_STATUS_CODE = HttpStatus.FOUND.code();
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue