Suppress nested http client spans in aws2 instrumentation (#9634)
This commit is contained in:
parent
aeb332f96b
commit
6f0fd8e631
|
@ -72,8 +72,9 @@ dependencies {
|
||||||
|
|
||||||
testImplementation(project(":instrumentation:aws-sdk:aws-sdk-2.2:testing"))
|
testImplementation(project(":instrumentation:aws-sdk:aws-sdk-2.2:testing"))
|
||||||
// Make sure these don't add HTTP headers
|
// Make sure these don't add HTTP headers
|
||||||
testImplementation(project(":instrumentation:apache-httpclient:apache-httpclient-4.0:javaagent"))
|
testInstrumentation(project(":instrumentation:apache-httpclient:apache-httpclient-4.0:javaagent"))
|
||||||
testImplementation(project(":instrumentation:netty:netty-4.1:javaagent"))
|
testInstrumentation(project(":instrumentation:apache-httpclient:apache-httpclient-5.0:javaagent"))
|
||||||
|
testInstrumentation(project(":instrumentation:netty:netty-4.1:javaagent"))
|
||||||
|
|
||||||
testLibrary("software.amazon.awssdk:dynamodb:2.2.0")
|
testLibrary("software.amazon.awssdk:dynamodb:2.2.0")
|
||||||
testLibrary("software.amazon.awssdk:ec2:2.2.0")
|
testLibrary("software.amazon.awssdk:ec2:2.2.0")
|
||||||
|
|
|
@ -0,0 +1,45 @@
|
||||||
|
/*
|
||||||
|
* Copyright The OpenTelemetry Authors
|
||||||
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
|
*/
|
||||||
|
|
||||||
|
package io.opentelemetry.instrumentation.awssdk.v2_2;
|
||||||
|
|
||||||
|
import io.opentelemetry.api.common.AttributesBuilder;
|
||||||
|
import io.opentelemetry.context.Context;
|
||||||
|
import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor;
|
||||||
|
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientAttributesExtractor;
|
||||||
|
import io.opentelemetry.instrumentation.api.internal.SpanKey;
|
||||||
|
import io.opentelemetry.instrumentation.api.internal.SpanKeyProvider;
|
||||||
|
import javax.annotation.Nullable;
|
||||||
|
import software.amazon.awssdk.core.interceptor.ExecutionAttributes;
|
||||||
|
import software.amazon.awssdk.http.SdkHttpResponse;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An attribute extractor that reports implementing HTTP client semantic conventions. Adding this
|
||||||
|
* extractor suppresses nested HTTP client instrumentations similarly to how using {@link
|
||||||
|
* HttpClientAttributesExtractor} would.
|
||||||
|
*/
|
||||||
|
class AwsSdkHttpClientSuppressionAttributesExtractor
|
||||||
|
implements AttributesExtractor<ExecutionAttributes, SdkHttpResponse>, SpanKeyProvider {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onStart(
|
||||||
|
AttributesBuilder attributes,
|
||||||
|
Context parentContext,
|
||||||
|
ExecutionAttributes executionAttributes) {}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onEnd(
|
||||||
|
AttributesBuilder attributes,
|
||||||
|
Context context,
|
||||||
|
ExecutionAttributes executionAttributes,
|
||||||
|
@Nullable SdkHttpResponse sdkHttpResponse,
|
||||||
|
@Nullable Throwable error) {}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
@Override
|
||||||
|
public SpanKey internalGetSpanKey() {
|
||||||
|
return SpanKey.HTTP_CLIENT;
|
||||||
|
}
|
||||||
|
}
|
|
@ -29,14 +29,22 @@ final class AwsSdkInstrumenterFactory {
|
||||||
static final AttributesExtractor<ExecutionAttributes, SdkHttpResponse> httpAttributesExtractor =
|
static final AttributesExtractor<ExecutionAttributes, SdkHttpResponse> httpAttributesExtractor =
|
||||||
HttpClientAttributesExtractor.create(httpAttributesGetter);
|
HttpClientAttributesExtractor.create(httpAttributesGetter);
|
||||||
|
|
||||||
|
private static final AttributesExtractor<ExecutionAttributes, SdkHttpResponse>
|
||||||
|
httpClientSuppressionAttributesExtractor =
|
||||||
|
new AwsSdkHttpClientSuppressionAttributesExtractor();
|
||||||
|
|
||||||
private static final AwsSdkSpanKindExtractor spanKindExtractor = new AwsSdkSpanKindExtractor();
|
private static final AwsSdkSpanKindExtractor spanKindExtractor = new AwsSdkSpanKindExtractor();
|
||||||
|
|
||||||
private static final List<AttributesExtractor<ExecutionAttributes, SdkHttpResponse>>
|
private static final List<AttributesExtractor<ExecutionAttributes, SdkHttpResponse>>
|
||||||
defaultAttributesExtractors = Arrays.asList(rpcAttributesExtractor);
|
defaultAttributesExtractors =
|
||||||
|
Arrays.asList(rpcAttributesExtractor, httpClientSuppressionAttributesExtractor);
|
||||||
|
|
||||||
private static final List<AttributesExtractor<ExecutionAttributes, SdkHttpResponse>>
|
private static final List<AttributesExtractor<ExecutionAttributes, SdkHttpResponse>>
|
||||||
extendedAttributesExtractors =
|
extendedAttributesExtractors =
|
||||||
Arrays.asList(rpcAttributesExtractor, experimentalAttributesExtractor);
|
Arrays.asList(
|
||||||
|
rpcAttributesExtractor,
|
||||||
|
experimentalAttributesExtractor,
|
||||||
|
httpClientSuppressionAttributesExtractor);
|
||||||
|
|
||||||
private static final List<AttributesExtractor<ExecutionAttributes, SdkHttpResponse>>
|
private static final List<AttributesExtractor<ExecutionAttributes, SdkHttpResponse>>
|
||||||
defaultConsumerAttributesExtractors =
|
defaultConsumerAttributesExtractors =
|
||||||
|
|
Loading…
Reference in New Issue