diff --git a/build.gradle.kts b/build.gradle.kts index 4063cab8b..986f5ac58 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -28,8 +28,8 @@ subprojects { description = "Hypertrace OpenTelemetry Javaagent" extra.set("versions", mapOf( - "opentelemetry" to "0.14.1", - "opentelemetry_java_agent" to "0.14.0", + "opentelemetry" to "0.15.0", + "opentelemetry_java_agent" to "0.15.1", "byte_buddy" to "1.10.18" )) diff --git a/instrumentation/build.gradle.kts b/instrumentation/build.gradle.kts index 28a6c3be1..2e840ab6b 100644 --- a/instrumentation/build.gradle.kts +++ b/instrumentation/build.gradle.kts @@ -79,8 +79,10 @@ tasks { // relocate OpenTelemetry API relocate("io.opentelemetry.api", "io.opentelemetry.javaagent.shaded.io.opentelemetry.api") + relocate("io.opentelemetry.semconv", "io.opentelemetry.javaagent.shaded.io.opentelemetry.semconv") relocate("io.opentelemetry.spi", "io.opentelemetry.javaagent.shaded.io.opentelemetry.spi") relocate("io.opentelemetry.context", "io.opentelemetry.javaagent.shaded.io.opentelemetry.context") + relocate("io.opentelemetry.extension.kotlin", "io.opentelemetry.javaagent.shaded.io.opentelemetry.extension.kotlin") relocate ("io.opentelemetry.extension.trace.propagation", "io.opentelemetry.javaagent.shaded.io.opentelemetry.extension.trace.propagation") } } diff --git a/instrumentation/grpc-1.5/build.gradle.kts b/instrumentation/grpc-1.5/build.gradle.kts index 48fb2380e..128289d58 100644 --- a/instrumentation/grpc-1.5/build.gradle.kts +++ b/instrumentation/grpc-1.5/build.gradle.kts @@ -55,21 +55,38 @@ protobuf { } val versions: Map by extra +val grpcVersion = "1.5.0" dependencies { api("io.opentelemetry.javaagent.instrumentation:opentelemetry-javaagent-grpc-1.5:${versions["opentelemetry_java_agent"]}") api("io.opentelemetry.instrumentation:opentelemetry-grpc-1.5:${versions["opentelemetry_java_agent"]}") - compileOnly("io.grpc:grpc-core:1.5.0") - compileOnly("io.grpc:grpc-protobuf:1.5.0") - compileOnly("io.grpc:grpc-stub:1.5.0") - compileOnly("io.grpc:grpc-netty:1.5.0") + compileOnly("io.grpc:grpc-core:${grpcVersion}") + compileOnly("io.grpc:grpc-protobuf:${grpcVersion}") + compileOnly("io.grpc:grpc-stub:${grpcVersion}") + compileOnly("io.grpc:grpc-netty:${grpcVersion}") implementation("javax.annotation:javax.annotation-api:1.3.2") testImplementation(project(":testing-common")) - testImplementation("io.grpc:grpc-core:1.5.0") - testImplementation("io.grpc:grpc-protobuf:1.5.0") - testImplementation("io.grpc:grpc-stub:1.5.0") - testImplementation("io.grpc:grpc-netty:1.5.0") + testImplementation("io.grpc:grpc-core:${grpcVersion}") { + version { + strictly(grpcVersion) + } + } + testImplementation("io.grpc:grpc-protobuf:${grpcVersion}") { + version { + strictly(grpcVersion) + } + } + testImplementation("io.grpc:grpc-stub:${grpcVersion}") { + version { + strictly(grpcVersion) + } + } + testImplementation("io.grpc:grpc-netty:${grpcVersion}") { + version { + strictly(grpcVersion) + } + } } diff --git a/instrumentation/netty/netty-4.0/build.gradle.kts b/instrumentation/netty/netty-4.0/build.gradle.kts index e58c1e7a3..14f1f93b1 100644 --- a/instrumentation/netty/netty-4.0/build.gradle.kts +++ b/instrumentation/netty/netty-4.0/build.gradle.kts @@ -40,11 +40,48 @@ afterEvaluate{ } val versions: Map by extra +// version used by async-http-client:2.0.9 +val nettyVersion = "4.0.38.Final" dependencies { implementation("io.opentelemetry.javaagent.instrumentation:opentelemetry-javaagent-netty-4.0:${versions["opentelemetry_java_agent"]}") - implementation("io.netty:netty-codec-http:4.0.0.Final") + compileOnly("io.netty:netty-codec-http:${nettyVersion}") { + version { + strictly(nettyVersion) + } + } + + testImplementation("io.netty:netty-codec-http:${nettyVersion}") { + version { + strictly(nettyVersion) + } + } + testImplementation("io.netty:netty-transport:${nettyVersion}") { + version { + strictly(nettyVersion) + } + } + testImplementation("io.netty:netty-common:${nettyVersion}") { + version { + strictly(nettyVersion) + } + } + testImplementation("io.netty:netty-codec:${nettyVersion}") { + version { + strictly(nettyVersion) + } + } + testImplementation("io.netty:netty-handler:${nettyVersion}") { + version { + strictly(nettyVersion) + } + } + testImplementation("io.netty:netty-buffer:${nettyVersion}") { + version { + strictly(nettyVersion) + } + } testImplementation(project(":testing-common")) testImplementation("org.asynchttpclient:async-http-client:2.0.9") diff --git a/instrumentation/netty/netty-4.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/netty/v4_0/NettyInstrumentationModule.java b/instrumentation/netty/netty-4.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/netty/v4_0/NettyInstrumentationModule.java index 0e8c0b83b..52d102836 100644 --- a/instrumentation/netty/netty-4.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/netty/v4_0/NettyInstrumentationModule.java +++ b/instrumentation/netty/netty-4.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/netty/v4_0/NettyInstrumentationModule.java @@ -16,11 +16,15 @@ package io.opentelemetry.javaagent.instrumentation.hypertrace.netty.v4_0; +import static io.opentelemetry.javaagent.tooling.bytebuddy.matcher.ClassLoaderMatcher.hasClassesNamed; +import static net.bytebuddy.matcher.ElementMatchers.not; + import com.google.auto.service.AutoService; import io.opentelemetry.javaagent.tooling.InstrumentationModule; import io.opentelemetry.javaagent.tooling.TypeInstrumentation; import java.util.Arrays; import java.util.List; +import net.bytebuddy.matcher.ElementMatcher; @AutoService(InstrumentationModule.class) public class NettyInstrumentationModule extends InstrumentationModule { @@ -34,6 +38,13 @@ public int getOrder() { return -1; } + @Override + public ElementMatcher.Junction classLoaderMatcher() { + // Class added in 4.1.0 and not in 4.0.56 to avoid resolving this instrumentation completely + // when using 4.1. + return not(hasClassesNamed("io.netty.handler.codec.http.CombinedHttpHeaders")); + } + @Override public List typeInstrumentations() { return Arrays.asList(new NettyChannelPipelineInstrumentation()); diff --git a/instrumentation/netty/netty-4.1/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/netty/v4_1/NettyInstrumentationModule.java b/instrumentation/netty/netty-4.1/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/netty/v4_1/NettyInstrumentationModule.java index b66c9341f..e4c90cef3 100644 --- a/instrumentation/netty/netty-4.1/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/netty/v4_1/NettyInstrumentationModule.java +++ b/instrumentation/netty/netty-4.1/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/netty/v4_1/NettyInstrumentationModule.java @@ -16,11 +16,14 @@ package io.opentelemetry.javaagent.instrumentation.hypertrace.netty.v4_1; +import static io.opentelemetry.javaagent.tooling.bytebuddy.matcher.ClassLoaderMatcher.hasClassesNamed; + import com.google.auto.service.AutoService; import io.opentelemetry.javaagent.tooling.InstrumentationModule; import io.opentelemetry.javaagent.tooling.TypeInstrumentation; import java.util.Arrays; import java.util.List; +import net.bytebuddy.matcher.ElementMatcher; @AutoService(InstrumentationModule.class) public class NettyInstrumentationModule extends InstrumentationModule { @@ -34,6 +37,13 @@ public int getOrder() { return -1; } + @Override + public ElementMatcher.Junction classLoaderMatcher() { + // Class added in 4.1.0 and not in 4.0.56 to avoid resolving this instrumentation completely + // when using 4.0. + return hasClassesNamed("io.netty.handler.codec.http.CombinedHttpHeaders"); + } + @Override public List typeInstrumentations() { return Arrays.asList(new NettyChannelPipelineInstrumentation()); diff --git a/instrumentation/servlet/servlet-3.0-no-wrapping/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_0/nowrapping/Servlet31NoWrappingInstrumentation.java b/instrumentation/servlet/servlet-3.0-no-wrapping/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_0/nowrapping/Servlet31NoWrappingInstrumentation.java index 83377141c..c7343939a 100644 --- a/instrumentation/servlet/servlet-3.0-no-wrapping/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_0/nowrapping/Servlet31NoWrappingInstrumentation.java +++ b/instrumentation/servlet/servlet-3.0-no-wrapping/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_0/nowrapping/Servlet31NoWrappingInstrumentation.java @@ -17,6 +17,7 @@ package io.opentelemetry.javaagent.instrumentation.hypertrace.servlet.v3_0.nowrapping; import static io.opentelemetry.javaagent.tooling.bytebuddy.matcher.AgentElementMatchers.safeHasSuperType; +import static io.opentelemetry.javaagent.tooling.bytebuddy.matcher.ClassLoaderMatcher.hasClassesNamed; import static io.opentelemetry.javaagent.tooling.bytebuddy.matcher.NameMatchers.namedOneOf; import static net.bytebuddy.matcher.ElementMatchers.isPublic; import static net.bytebuddy.matcher.ElementMatchers.named; @@ -59,9 +60,14 @@ public class Servlet31NoWrappingInstrumentation implements TypeInstrumentation { + @Override + public ElementMatcher classLoaderOptimization() { + return hasClassesNamed("javax.servlet.Filter"); + } + @Override public ElementMatcher typeMatcher() { - return safeHasSuperType(namedOneOf("javax.servlet.Filter", "javax.servlet.http.HttpServlet")); + return safeHasSuperType(namedOneOf("javax.servlet.Filter", "javax.servlet.Servlet")); } @Override diff --git a/instrumentation/vertx-web-3.0/build.gradle.kts b/instrumentation/vertx-web-3.0/build.gradle.kts index cdb43b739..da22d8097 100644 --- a/instrumentation/vertx-web-3.0/build.gradle.kts +++ b/instrumentation/vertx-web-3.0/build.gradle.kts @@ -22,6 +22,8 @@ afterEvaluate{ } val versions: Map by extra +// version used by io.vertx:vertx-web:3.0.0 +val nettyVersion = "4.0.28.Final" dependencies { testImplementation(project(":testing-common")) @@ -29,5 +31,37 @@ dependencies { testImplementation("io.opentelemetry.javaagent.instrumentation:opentelemetry-javaagent-netty-4.0:${versions["opentelemetry_java_agent"]}") testImplementation("io.opentelemetry.javaagent.instrumentation:opentelemetry-javaagent-vertx-web-3.0:${versions["opentelemetry_java_agent"]}") testImplementation("io.vertx:vertx-web:3.0.0") + + + testImplementation("io.netty:netty-codec-http:${nettyVersion}") { + version { + strictly(nettyVersion) + } + } + testImplementation("io.netty:netty-transport:${nettyVersion}") { + version { + strictly(nettyVersion) + } + } + testImplementation("io.netty:netty-common:${nettyVersion}") { + version { + strictly(nettyVersion) + } + } + testImplementation("io.netty:netty-codec:${nettyVersion}") { + version { + strictly(nettyVersion) + } + } + testImplementation("io.netty:netty-handler:${nettyVersion}") { + version { + strictly(nettyVersion) + } + } + testImplementation("io.netty:netty-buffer:${nettyVersion}") { + version { + strictly(nettyVersion) + } + } } diff --git a/javaagent/build.gradle.kts b/javaagent/build.gradle.kts index 7eb40f320..3568330eb 100644 --- a/javaagent/build.gradle.kts +++ b/javaagent/build.gradle.kts @@ -56,8 +56,10 @@ tasks { // relocate OpenTelemetry API relocate("io.opentelemetry.api", "io.opentelemetry.javaagent.shaded.io.opentelemetry.api") + relocate("io.opentelemetry.semconv", "io.opentelemetry.javaagent.shaded.io.opentelemetry.semconv") relocate("io.opentelemetry.spi", "io.opentelemetry.javaagent.shaded.io.opentelemetry.spi") relocate("io.opentelemetry.context", "io.opentelemetry.javaagent.shaded.io.opentelemetry.context") + relocate("io.opentelemetry.extension.kotlin", "io.opentelemetry.javaagent.shaded.io.opentelemetry.extension.kotlin") relocate("io.opentelemetry.extension.trace.propagation", "io.opentelemetry.javaagent.shaded.io.opentelemetry.extension.trace.propagation") mergeServiceFiles { diff --git a/otel-extensions/build.gradle.kts b/otel-extensions/build.gradle.kts index b952ba8b8..bb3e60584 100644 --- a/otel-extensions/build.gradle.kts +++ b/otel-extensions/build.gradle.kts @@ -8,6 +8,7 @@ dependencies { api(project(":filter-custom-opa")) compileOnly("io.opentelemetry:opentelemetry-sdk:${versions["opentelemetry"]}") + compileOnly("io.opentelemetry:opentelemetry-sdk-extension-autoconfigure:${versions["opentelemetry"]}-alpha") implementation("io.opentelemetry.javaagent:opentelemetry-javaagent-spi:${versions["opentelemetry_java_agent"]}") implementation("org.slf4j:slf4j-api:1.7.30") diff --git a/otel-extensions/src/main/java/org/hypertrace/agent/otel/extensions/HypertraceAgentConfiguration.java b/otel-extensions/src/main/java/org/hypertrace/agent/otel/extensions/HypertraceAgentConfiguration.java index 32f017fef..82c0574c0 100644 --- a/otel-extensions/src/main/java/org/hypertrace/agent/otel/extensions/HypertraceAgentConfiguration.java +++ b/otel-extensions/src/main/java/org/hypertrace/agent/otel/extensions/HypertraceAgentConfiguration.java @@ -31,7 +31,8 @@ public class HypertraceAgentConfiguration implements PropertySource { // https://github.com/open-telemetry/opentelemetry-specification/blob/master/specification/sdk-environment-variables.md - private static final String OTEL_EXPORTER = "otel.exporter"; + private static final String OTEL_TRACE_EXPORTER = "otel.trace.exporter"; + private static final String OTEL_METRICS_EXPORTER = "otel.metrics.exporter"; private static final String OTEL_PROPAGATORS = "otel.propagators"; private static final String OTEL_EXPORTER_ZIPKIN_ENDPOINT = "otel.exporter.zipkin.endpoint"; private static final String OTEL_EXPORTER_ZIPKIN_SERVICE_NAME = @@ -45,14 +46,15 @@ public Map getProperties() { AgentConfig agentConfig = HypertraceConfig.get(); Map configProperties = new HashMap<>(); - configProperties.put(OTEL_EXPORTER, "zipkin"); + configProperties.put(OTEL_TRACE_EXPORTER, "zipkin"); configProperties.put( OTEL_EXPORTER_ZIPKIN_SERVICE_NAME, agentConfig.getServiceName().getValue()); configProperties.put( OTEL_EXPORTER_ZIPKIN_ENDPOINT, agentConfig.getReporting().getEndpoint().getValue()); configProperties.put( OTEL_PROPAGATORS, toOtelPropagators(agentConfig.getPropagationFormatsList())); - + // metrics are not reported + configProperties.put(OTEL_METRICS_EXPORTER, "none"); return configProperties; } diff --git a/otel-extensions/src/main/java/org/hypertrace/agent/otel/extensions/HypertraceResourceProvider.java b/otel-extensions/src/main/java/org/hypertrace/agent/otel/extensions/HypertraceResourceProvider.java index 0dc458282..2ed6e2627 100644 --- a/otel-extensions/src/main/java/org/hypertrace/agent/otel/extensions/HypertraceResourceProvider.java +++ b/otel-extensions/src/main/java/org/hypertrace/agent/otel/extensions/HypertraceResourceProvider.java @@ -21,19 +21,23 @@ import io.opentelemetry.api.common.AttributesBuilder; import io.opentelemetry.sdk.resources.ResourceAttributes; import io.opentelemetry.sdk.resources.ResourceProvider; +import org.hypertrace.agent.config.Config.AgentConfig; +import org.hypertrace.agent.core.config.HypertraceConfig; @AutoService(ResourceProvider.class) public class HypertraceResourceProvider extends ResourceProvider { private final CgroupsReader cgroupsReader = new CgroupsReader(); + private final AgentConfig agentConfig = HypertraceConfig.get(); @Override protected Attributes getAttributes() { AttributesBuilder builder = Attributes.builder(); String containerId = this.cgroupsReader.readContainerId(); if (containerId != null && !containerId.isEmpty()) { - builder.put(ResourceAttributes.CONTAINER_ID.getKey(), containerId); + builder.put(ResourceAttributes.CONTAINER_ID, containerId); } + builder.put(ResourceAttributes.SERVICE_NAME, agentConfig.getServiceName().getValue()); return builder.build(); } } diff --git a/otel-extensions/src/main/java/org/hypertrace/agent/otel/extensions/processor/HypertraceTracerCustomizer.java b/otel-extensions/src/main/java/org/hypertrace/agent/otel/extensions/processor/HypertraceTracerCustomizer.java index d86bedcf6..eabc659fa 100644 --- a/otel-extensions/src/main/java/org/hypertrace/agent/otel/extensions/processor/HypertraceTracerCustomizer.java +++ b/otel-extensions/src/main/java/org/hypertrace/agent/otel/extensions/processor/HypertraceTracerCustomizer.java @@ -17,8 +17,8 @@ package org.hypertrace.agent.otel.extensions.processor; import com.google.auto.service.AutoService; -import io.opentelemetry.javaagent.spi.TracerCustomizer; -import io.opentelemetry.sdk.trace.SdkTracerManagement; +import io.opentelemetry.sdk.autoconfigure.spi.SdkTracerProviderConfigurer; +import io.opentelemetry.sdk.trace.SdkTracerProviderBuilder; /** * This is a workaround to add container ID tags to spans when Zipkin exporter is used. Zipkin @@ -28,11 +28,11 @@ *

Remove this once we migrate to OTEL exporter * https://github.com/hypertrace/javaagent/issues/132 */ -@AutoService(TracerCustomizer.class) -public class HypertraceTracerCustomizer implements TracerCustomizer { +@AutoService(SdkTracerProviderConfigurer.class) +public class HypertraceTracerCustomizer implements SdkTracerProviderConfigurer { @Override - public void configure(SdkTracerManagement tracerManagement) { - tracerManagement.addSpanProcessor(new AddTagsSpanProcessor()); + public void configure(SdkTracerProviderBuilder tracerProvider) { + tracerProvider.addSpanProcessor(new AddTagsSpanProcessor()); } } diff --git a/smoke-tests/src/test/java/org/hypertrace/agent/smoketest/AbstractSmokeTest.java b/smoke-tests/src/test/java/org/hypertrace/agent/smoketest/AbstractSmokeTest.java index 60d8a9fc9..470204f00 100644 --- a/smoke-tests/src/test/java/org/hypertrace/agent/smoketest/AbstractSmokeTest.java +++ b/smoke-tests/src/test/java/org/hypertrace/agent/smoketest/AbstractSmokeTest.java @@ -49,7 +49,7 @@ public abstract class AbstractSmokeTest { private static final Logger log = LoggerFactory.getLogger(OpenTelemetryStorage.class); private static final String OTEL_COLLECTOR_IMAGE = "otel/opentelemetry-collector:latest"; private static final String MOCK_BACKEND_IMAGE = - "open-telemetry-docker-dev.bintray.io/java/smoke-fake-backend:latest"; + "ghcr.io/open-telemetry/java-test-containers:smoke-fake-backend-20201128.1734635"; private static final String NETWORK_ALIAS_OTEL_COLLECTOR = "collector"; private static final String NETWORK_ALIAS_OTEL_MOCK_STORAGE = "storage"; private static final String OTEL_EXPORTER_ENDPOINT = @@ -132,7 +132,7 @@ GenericContainer createAppUnderTest(int jdk) { MountableFile.forClasspathResource("/ht-config.yaml"), "/etc/ht-config.yaml") .withEnv("JAVA_TOOL_OPTIONS", "-javaagent:/javaagent.jar") .withEnv("HT_CONFIG_FILE", "/etc/ht-config.yaml") - .withEnv("OTEL_BSP_MAX_EXPORT_BATCH", "1") + .withEnv("OTEL_BSP_MAX_EXPORT_BATCH_SIZE", "1") .withEnv("OTEL_BSP_SCHEDULE_DELAY", "10") .withEnv("HT_REPORTING_ENDPOINT", OTEL_EXPORTER_ENDPOINT); } diff --git a/smoke-tests/src/test/java/org/hypertrace/agent/smoketest/SpringBootSmokeTest.java b/smoke-tests/src/test/java/org/hypertrace/agent/smoketest/SpringBootSmokeTest.java index 4944e1404..d2ec97101 100644 --- a/smoke-tests/src/test/java/org/hypertrace/agent/smoketest/SpringBootSmokeTest.java +++ b/smoke-tests/src/test/java/org/hypertrace/agent/smoketest/SpringBootSmokeTest.java @@ -40,7 +40,9 @@ public class SpringBootSmokeTest extends AbstractSmokeTest { @Override protected String getTargetImage(int jdk) { - return "open-telemetry-docker-dev.bintray.io/java/smoke-springboot-jdk" + jdk + ":latest"; + return "ghcr.io/open-telemetry/java-test-containers:smoke-springboot-jdk" + + jdk + + "-20210209.550405798"; } private static GenericContainer app; @@ -62,11 +64,13 @@ static synchronized void afterEach() { } @Test - public void get() throws IOException { + public void get() throws IOException, InterruptedException { String url = String.format("http://localhost:%d/greeting", app.getMappedPort(8080)); Request request = new Request.Builder().url(url).get().build(); - Response response = client.newCall(request).execute(); + try (Response response = client.newCall(request).execute()) { + Assertions.assertEquals(response.body().string(), "Hi!"); + } ArrayList traces = new ArrayList<>(waitForTraces()); Object currentAgentVersion = @@ -93,7 +97,6 @@ public void get() throws IOException { .getValue() .getStringValue()); - Assertions.assertEquals(response.body().string(), "Hi!"); Assertions.assertEquals(1, countSpansByName(traces, "/greeting")); Assertions.assertEquals(1, countSpansByName(traces, "webcontroller.greeting")); Assertions.assertTrue( diff --git a/testing-common/build.gradle.kts b/testing-common/build.gradle.kts index 9ee829f06..8a9d89d51 100644 --- a/testing-common/build.gradle.kts +++ b/testing-common/build.gradle.kts @@ -14,6 +14,7 @@ dependencies { api("io.opentelemetry:opentelemetry-api:${versions["opentelemetry"]}") api("io.opentelemetry:opentelemetry-sdk:${versions["opentelemetry"]}") + compileOnly("io.opentelemetry:opentelemetry-sdk-extension-autoconfigure:${versions["opentelemetry"]}-alpha") api("com.squareup.okhttp3:okhttp:4.9.0") implementation("io.opentelemetry.javaagent:opentelemetry-javaagent-tooling:${versions["opentelemetry_java_agent"]}") implementation("io.opentelemetry.javaagent:opentelemetry-javaagent-spi:${versions["opentelemetry_java_agent"]}") diff --git a/testing-common/src/main/java/org/hypertrace/agent/testing/AbstractInstrumenterTest.java b/testing-common/src/main/java/org/hypertrace/agent/testing/AbstractInstrumenterTest.java index 262e86cc7..9731504a7 100644 --- a/testing-common/src/main/java/org/hypertrace/agent/testing/AbstractInstrumenterTest.java +++ b/testing-common/src/main/java/org/hypertrace/agent/testing/AbstractInstrumenterTest.java @@ -22,8 +22,6 @@ import io.opentelemetry.api.trace.Tracer; import io.opentelemetry.javaagent.spi.ComponentInstaller; import io.opentelemetry.javaagent.tooling.AgentInstaller; -import io.opentelemetry.javaagent.tooling.config.ConfigInitializer; -import io.opentelemetry.sdk.OpenTelemetrySdk; import java.io.IOException; import java.lang.instrument.ClassFileTransformer; import java.lang.instrument.Instrumentation; @@ -57,11 +55,10 @@ public abstract class AbstractInstrumenterTest { */ public static final InMemoryExporter TEST_WRITER = new InMemoryExporter();; - protected static final Tracer TEST_TRACER; + protected static Tracer TEST_TRACER; private static final Instrumentation INSTRUMENTATION; static { - ConfigInitializer.initialize(); // always run with the thread propagation debugger to help track down sporadic test failures System.setProperty("otel.threadPropagationDebugger", "true"); System.setProperty("otel.internal.failOnContextLeak", "true"); @@ -74,8 +71,6 @@ public abstract class AbstractInstrumenterTest { ((Logger) LoggerFactory.getLogger("io.opentelemetry")).setLevel(Level.DEBUG); COMPONENT_INSTALLER = new TestOpenTelemetryInstaller(TEST_WRITER); - OpenTelemetrySdk.getGlobalTracerManagement().addSpanProcessor(TEST_WRITER); - TEST_TRACER = GlobalOpenTelemetry.getTracer("io.opentelemetry.auto"); } private static ClassFileTransformer classFileTransformer; @@ -95,6 +90,9 @@ public static void beforeAll() { AgentInstaller.installBytebuddyAgent( INSTRUMENTATION, Collections.singleton(COMPONENT_INSTALLER)); } + if (TEST_TRACER == null) { + TEST_TRACER = GlobalOpenTelemetry.getTracer("io.opentelemetry.auto"); + } } @BeforeEach diff --git a/testing-common/src/main/java/org/hypertrace/agent/testing/TestOpenTelemetryInstaller.java b/testing-common/src/main/java/org/hypertrace/agent/testing/TestOpenTelemetryInstaller.java index cad52aa97..34d1d5a2e 100644 --- a/testing-common/src/main/java/org/hypertrace/agent/testing/TestOpenTelemetryInstaller.java +++ b/testing-common/src/main/java/org/hypertrace/agent/testing/TestOpenTelemetryInstaller.java @@ -32,10 +32,13 @@ public TestOpenTelemetryInstaller(SpanProcessor spanProcessor) { } @Override - public void afterByteBuddyAgent() { + public void beforeByteBuddyAgent() { OpenTelemetrySdk.builder() .setTracerProvider(SdkTracerProvider.builder().addSpanProcessor(spanProcessor).build()) .setPropagators(ContextPropagators.create(W3CTraceContextPropagator.getInstance())) .buildAndRegisterGlobal(); } + + @Override + public void afterByteBuddyAgent() {} }