Use namespace for attributes put into user classes (#1739)
* Use namespace for attributes put into user classes * Add dependency to remove duplication
This commit is contained in:
parent
889bce0976
commit
a5a36bd203
|
@ -30,7 +30,9 @@ public abstract class HttpServerTracer<REQUEST, RESPONSE, CONNECTION, STORAGE> e
|
|||
|
||||
private static final Logger log = LoggerFactory.getLogger(HttpServerTracer.class);
|
||||
|
||||
public static final String CONTEXT_ATTRIBUTE = "io.opentelemetry.instrumentation.context";
|
||||
// the class name is part of the attribute name, so that it will be shaded when used in javaagent
|
||||
// instrumentation, and won't conflict with usage outside javaagent instrumentation
|
||||
public static final String CONTEXT_ATTRIBUTE = HttpServerTracer.class.getName() + ".Context";
|
||||
|
||||
protected static final String USER_AGENT = "User-Agent";
|
||||
|
||||
|
|
|
@ -27,11 +27,15 @@ import software.amazon.awssdk.core.interceptor.SdkExecutionAttribute;
|
|||
/** AWS request execution interceptor. */
|
||||
final class TracingExecutionInterceptor implements ExecutionInterceptor {
|
||||
|
||||
// the class name is part of the attribute name, so that it will be shaded when used in javaagent
|
||||
// instrumentation, and won't conflict with usage outside javaagent instrumentation
|
||||
static final ExecutionAttribute<io.opentelemetry.context.Context> CONTEXT_ATTRIBUTE =
|
||||
new ExecutionAttribute<>("io.opentelemetry.auto.Context");
|
||||
new ExecutionAttribute<>(TracingExecutionInterceptor.class.getName() + ".Context");
|
||||
|
||||
// the class name is part of the attribute name, so that it will be shaded when used in javaagent
|
||||
// instrumentation, and won't conflict with usage outside javaagent instrumentation
|
||||
static final ExecutionAttribute<RequestType> REQUEST_TYPE_ATTRIBUTE =
|
||||
new ExecutionAttribute<>("io.opentelemetry.auto.aws.RequestType");
|
||||
new ExecutionAttribute<>(TracingExecutionInterceptor.class.getName() + ".RequestType");
|
||||
|
||||
static final String COMPONENT_NAME = "java-aws-sdk";
|
||||
|
||||
|
|
|
@ -9,8 +9,6 @@ import io.netty.util.AttributeKey;
|
|||
import io.opentelemetry.api.trace.Span;
|
||||
import io.opentelemetry.context.Context;
|
||||
import io.opentelemetry.javaagent.instrumentation.api.WeakMap;
|
||||
import io.opentelemetry.javaagent.instrumentation.netty.v4_0.client.HttpClientTracingHandler;
|
||||
import io.opentelemetry.javaagent.instrumentation.netty.v4_0.server.HttpServerTracingHandler;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.ConcurrentMap;
|
||||
|
||||
|
@ -26,17 +24,17 @@ public class AttributeKeys {
|
|||
}
|
||||
};
|
||||
|
||||
public static final AttributeKey<Context> PARENT_CONNECT_CONTEXT_ATTRIBUTE_KEY =
|
||||
attributeKey("io.opentelemetry.javaagent.instrumentation.netty.v4_0.parent.connect.context");
|
||||
public static final AttributeKey<Context> CONNECT_CONTEXT_ATTRIBUTE_KEY =
|
||||
attributeKey(AttributeKeys.class.getName() + ".connect.context");
|
||||
|
||||
public static final AttributeKey<Context> SERVER_ATTRIBUTE_KEY =
|
||||
attributeKey(HttpServerTracingHandler.class.getName() + ".context");
|
||||
attributeKey(AttributeKeys.class.getName() + ".context");
|
||||
|
||||
public static final AttributeKey<Span> CLIENT_ATTRIBUTE_KEY =
|
||||
attributeKey(HttpClientTracingHandler.class.getName() + ".span");
|
||||
attributeKey(AttributeKeys.class.getName() + ".span");
|
||||
|
||||
public static final AttributeKey<Context> CLIENT_PARENT_ATTRIBUTE_KEY =
|
||||
attributeKey(HttpClientTracingHandler.class.getName() + ".parent");
|
||||
attributeKey(AttributeKeys.class.getName() + ".parent");
|
||||
|
||||
/**
|
||||
* Generate an attribute key or reuse the one existing in the global app map. This implementation
|
||||
|
|
|
@ -59,7 +59,7 @@ final class ChannelFutureListenerInstrumentation implements TypeInstrumentation
|
|||
return null;
|
||||
}
|
||||
Context parentContext =
|
||||
future.channel().attr(AttributeKeys.PARENT_CONNECT_CONTEXT_ATTRIBUTE_KEY).getAndRemove();
|
||||
future.channel().attr(AttributeKeys.CONNECT_CONTEXT_ATTRIBUTE_KEY).getAndRemove();
|
||||
if (parentContext == null) {
|
||||
return null;
|
||||
}
|
||||
|
|
|
@ -124,7 +124,7 @@ final class NettyChannelPipelineInstrumentation implements TypeInstrumentation {
|
|||
public static void addParentSpan(@Advice.This ChannelPipeline pipeline) {
|
||||
Context context = Java8BytecodeBridge.currentContext();
|
||||
Attribute<Context> attribute =
|
||||
pipeline.channel().attr(AttributeKeys.PARENT_CONNECT_CONTEXT_ATTRIBUTE_KEY);
|
||||
pipeline.channel().attr(AttributeKeys.CONNECT_CONTEXT_ATTRIBUTE_KEY);
|
||||
attribute.compareAndSet(null, context);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -30,7 +30,7 @@ public class HttpClientRequestTracingHandler extends ChannelOutboundHandlerAdapt
|
|||
// TODO pass Context into Tracer.startSpan() and then don't need this scoping
|
||||
Scope parentScope = null;
|
||||
Context parentContext =
|
||||
ctx.channel().attr(AttributeKeys.PARENT_CONNECT_CONTEXT_ATTRIBUTE_KEY).getAndRemove();
|
||||
ctx.channel().attr(AttributeKeys.CONNECT_CONTEXT_ATTRIBUTE_KEY).getAndRemove();
|
||||
if (parentContext != null) {
|
||||
parentScope = parentContext.makeCurrent();
|
||||
}
|
||||
|
|
|
@ -9,8 +9,6 @@ import io.netty.util.AttributeKey;
|
|||
import io.opentelemetry.api.trace.Span;
|
||||
import io.opentelemetry.context.Context;
|
||||
import io.opentelemetry.javaagent.instrumentation.api.WeakMap;
|
||||
import io.opentelemetry.javaagent.instrumentation.netty.v4_1.client.HttpClientTracingHandler;
|
||||
import io.opentelemetry.javaagent.instrumentation.netty.v4_1.server.HttpServerTracingHandler;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.ConcurrentMap;
|
||||
|
||||
|
@ -26,23 +24,18 @@ public class AttributeKeys {
|
|||
}
|
||||
};
|
||||
|
||||
public static final AttributeKey<Context> PARENT_CONNECT_CONTEXT_ATTRIBUTE_KEY =
|
||||
attributeKey("io.opentelemetry.javaagent.instrumentation.netty.v4_1.parent.connect.context");
|
||||
public static final AttributeKey<Context> CONNECT_CONTEXT_ATTRIBUTE_KEY =
|
||||
attributeKey(AttributeKeys.class.getName() + "connect.context");
|
||||
|
||||
/**
|
||||
* This constant is copied over to
|
||||
* io.opentelemetry.javaagent.instrumentation.ratpack.server.TracingHandler, so if this changes,
|
||||
* that must also change.
|
||||
*/
|
||||
// this attribute key is also used by ratpack instrumentation
|
||||
public static final AttributeKey<Context> SERVER_ATTRIBUTE_KEY =
|
||||
attributeKey(HttpServerTracingHandler.class.getName() + ".context");
|
||||
attributeKey(AttributeKeys.class.getName() + ".context");
|
||||
|
||||
// TODO understand and change to context
|
||||
public static final AttributeKey<Span> CLIENT_ATTRIBUTE_KEY =
|
||||
attributeKey(HttpClientTracingHandler.class.getName() + ".span");
|
||||
attributeKey(AttributeKeys.class.getName() + ".span");
|
||||
|
||||
public static final AttributeKey<Context> CLIENT_PARENT_ATTRIBUTE_KEY =
|
||||
attributeKey(HttpClientTracingHandler.class.getName() + ".parent");
|
||||
attributeKey(AttributeKeys.class.getName() + ".parent");
|
||||
|
||||
/**
|
||||
* Generate an attribute key or reuse the one existing in the global app map. This implementation
|
||||
|
|
|
@ -59,7 +59,7 @@ final class ChannelFutureListenerInstrumentation implements TypeInstrumentation
|
|||
return null;
|
||||
}
|
||||
Context parentContext =
|
||||
future.channel().attr(AttributeKeys.PARENT_CONNECT_CONTEXT_ATTRIBUTE_KEY).getAndRemove();
|
||||
future.channel().attr(AttributeKeys.CONNECT_CONTEXT_ATTRIBUTE_KEY).getAndRemove();
|
||||
if (parentContext == null) {
|
||||
return null;
|
||||
}
|
||||
|
|
|
@ -132,7 +132,7 @@ final class NettyChannelPipelineInstrumentation implements TypeInstrumentation {
|
|||
@Advice.OnMethodEnter
|
||||
public static void addParentSpan(@Advice.This ChannelPipeline pipeline) {
|
||||
Attribute<Context> attribute =
|
||||
pipeline.channel().attr(AttributeKeys.PARENT_CONNECT_CONTEXT_ATTRIBUTE_KEY);
|
||||
pipeline.channel().attr(AttributeKeys.CONNECT_CONTEXT_ATTRIBUTE_KEY);
|
||||
attribute.compareAndSet(null, Java8BytecodeBridge.currentContext());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -30,7 +30,7 @@ public class HttpClientRequestTracingHandler extends ChannelOutboundHandlerAdapt
|
|||
// TODO pass Context into Tracer.startSpan() and then don't need this scoping
|
||||
Scope parentScope = null;
|
||||
Context parentContext =
|
||||
ctx.channel().attr(AttributeKeys.PARENT_CONNECT_CONTEXT_ATTRIBUTE_KEY).getAndRemove();
|
||||
ctx.channel().attr(AttributeKeys.CONNECT_CONTEXT_ATTRIBUTE_KEY).getAndRemove();
|
||||
if (parentContext != null) {
|
||||
parentScope = parentContext.makeCurrent();
|
||||
}
|
||||
|
|
|
@ -12,8 +12,9 @@ muzzle {
|
|||
dependencies {
|
||||
library group: 'io.ratpack', name: 'ratpack-core', version: '1.4.0'
|
||||
|
||||
implementation project(':instrumentation:netty:netty-4.1')
|
||||
|
||||
testLibrary group: 'io.ratpack', name: 'ratpack-groovy-test', version: '1.4.0'
|
||||
testImplementation project(':instrumentation:netty:netty-4.1')
|
||||
if (JavaVersion.current().isCompatibleWith(JavaVersion.VERSION_11)) {
|
||||
testImplementation group: 'com.sun.activation', name: 'jakarta.activation', version: '1.2.2'
|
||||
}
|
||||
|
|
|
@ -25,6 +25,8 @@ public class RatpackInstrumentationModule extends InstrumentationModule {
|
|||
packageName + ".BlockWrapper",
|
||||
packageName + ".RatpackTracer",
|
||||
packageName + ".TracingHandler",
|
||||
"io.opentelemetry.javaagent.instrumentation.netty.v4_1.AttributeKeys",
|
||||
"io.opentelemetry.javaagent.instrumentation.netty.v4_1.AttributeKeys$1"
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
@ -8,29 +8,20 @@ package io.opentelemetry.javaagent.instrumentation.ratpack;
|
|||
import static io.opentelemetry.javaagent.instrumentation.ratpack.RatpackTracer.tracer;
|
||||
|
||||
import io.netty.util.Attribute;
|
||||
import io.netty.util.AttributeKey;
|
||||
import io.opentelemetry.api.trace.Span;
|
||||
import io.opentelemetry.api.trace.Span.Kind;
|
||||
import io.opentelemetry.context.Scope;
|
||||
import io.opentelemetry.javaagent.instrumentation.netty.v4_1.AttributeKeys;
|
||||
import ratpack.handling.Context;
|
||||
import ratpack.handling.Handler;
|
||||
|
||||
public final class TracingHandler implements Handler {
|
||||
public static final Handler INSTANCE = new TracingHandler();
|
||||
|
||||
/**
|
||||
* This constant is copied over from
|
||||
* io.opentelemetry.javaagent.instrumentation.netty.v4_1.AttributeKeys. The key string must be
|
||||
* kept consistent.
|
||||
*/
|
||||
public static final AttributeKey<io.opentelemetry.context.Context> SERVER_ATTRIBUTE_KEY =
|
||||
AttributeKey.valueOf(
|
||||
"io.opentelemetry.javaagent.instrumentation.netty.v4_1.server.HttpServerTracingHandler.context");
|
||||
|
||||
@Override
|
||||
public void handle(Context ctx) {
|
||||
Attribute<io.opentelemetry.context.Context> spanAttribute =
|
||||
ctx.getDirectChannelAccess().getChannel().attr(SERVER_ATTRIBUTE_KEY);
|
||||
ctx.getDirectChannelAccess().getChannel().attr(AttributeKeys.SERVER_ATTRIBUTE_KEY);
|
||||
io.opentelemetry.context.Context serverSpanContext = spanAttribute.get();
|
||||
|
||||
// Relying on executor instrumentation to assume the netty span is in context as the parent.
|
||||
|
|
|
@ -103,17 +103,20 @@ public final class ReactorNettyInstrumentationModule extends InstrumentationModu
|
|||
|
||||
public static class MapConnect
|
||||
implements BiFunction<Mono<? extends Connection>, Bootstrap, Mono<? extends Connection>> {
|
||||
|
||||
static final String CONTEXT_ATTRIBUTE = MapConnect.class.getName() + ".Context";
|
||||
|
||||
@Override
|
||||
public Mono<? extends Connection> apply(Mono<? extends Connection> m, Bootstrap b) {
|
||||
return m.subscriberContext(s -> s.put("otel_context", Context.current()));
|
||||
return m.subscriberContext(s -> s.put(CONTEXT_ATTRIBUTE, Context.current()));
|
||||
}
|
||||
}
|
||||
|
||||
public static class OnRequest implements BiConsumer<HttpClientRequest, Connection> {
|
||||
@Override
|
||||
public void accept(HttpClientRequest r, Connection c) {
|
||||
Context context = r.currentContext().get("otel_context");
|
||||
c.channel().attr(AttributeKeys.PARENT_CONNECT_CONTEXT_ATTRIBUTE_KEY).set(context);
|
||||
Context context = r.currentContext().get(MapConnect.CONTEXT_ATTRIBUTE);
|
||||
c.channel().attr(AttributeKeys.CONNECT_CONTEXT_ATTRIBUTE_KEY).set(context);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -24,8 +24,7 @@ import reactor.util.context.Context;
|
|||
|
||||
public class AdviceUtils {
|
||||
|
||||
public static final String CONTEXT_ATTRIBUTE =
|
||||
"io.opentelemetry.javaagent.instrumentation.springwebflux.Context";
|
||||
public static final String CONTEXT_ATTRIBUTE = AdviceUtils.class.getName() + ".Context";
|
||||
|
||||
public static String parseOperationName(Object handler) {
|
||||
String className = tracer().spanNameForClass(handler.getClass());
|
||||
|
|
Loading…
Reference in New Issue