From 60076b2a15c3a41d78cb0628e429b3d00838c082 Mon Sep 17 00:00:00 2001 From: Pavol Loffay Date: Wed, 10 Feb 2021 10:06:16 +0100 Subject: [PATCH 1/6] Bump OTEL to 0.15.0 Signed-off-by: Pavol Loffay --- build.gradle.kts | 4 +-- instrumentation/build.gradle.kts | 4 ++- instrumentation/grpc-1.5/build.gradle.kts | 25 ++++++++++++++++--- .../netty/netty-4.0/build.gradle.kts | 5 ++-- .../netty/netty-4.1/build.gradle.kts | 4 ++- .../vertx-web-3.0/build.gradle.kts | 4 ++- otel-extensions/build.gradle.kts | 1 + .../HypertraceAgentConfiguration.java | 8 +++--- .../HypertraceResourceProvider.java | 6 ++++- .../processor/HypertraceTracerCustomizer.java | 12 ++++----- .../agent/smoketest/SpringBootSmokeTest.java | 6 +++-- testing-common/build.gradle.kts | 1 + .../testing/AbstractInstrumenterTest.java | 10 +++----- .../testing/TestOpenTelemetryInstaller.java | 5 +++- 14 files changed, 65 insertions(+), 30 deletions(-) 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..901654498 100644 --- a/instrumentation/build.gradle.kts +++ b/instrumentation/build.gradle.kts @@ -13,7 +13,9 @@ subprojects { implementation("net.bytebuddy:byte-buddy:${versions["byte_buddy"]}") implementation("io.opentelemetry:opentelemetry-api:${versions["opentelemetry"]}") - implementation("io.opentelemetry.javaagent:opentelemetry-javaagent-tooling:${versions["opentelemetry_java_agent"]}") + implementation("io.opentelemetry.javaagent:opentelemetry-javaagent-tooling:${versions["opentelemetry_java_agent"]}") { + exclude(group = "io.netty") + } implementation("io.opentelemetry.javaagent:opentelemetry-javaagent-api:${versions["opentelemetry_java_agent"]}") implementation("io.opentelemetry.instrumentation:opentelemetry-instrumentation-api:${versions["opentelemetry_java_agent"]}") implementation(project(":javaagent-core")) diff --git a/instrumentation/grpc-1.5/build.gradle.kts b/instrumentation/grpc-1.5/build.gradle.kts index 48fb2380e..e6ca8fc64 100644 --- a/instrumentation/grpc-1.5/build.gradle.kts +++ b/instrumentation/grpc-1.5/build.gradle.kts @@ -59,6 +59,7 @@ val versions: Map by extra 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"]}") + implementation("io.opentelemetry.javaagent:opentelemetry-javaagent-tooling:${versions["opentelemetry_java_agent"]}") compileOnly("io.grpc:grpc-core:1.5.0") compileOnly("io.grpc:grpc-protobuf:1.5.0") @@ -68,8 +69,24 @@ dependencies { 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:1.5.0") { + version { + strictly("1.5.0") + } + } + testImplementation("io.grpc:grpc-protobuf:1.5.0") { + version { + strictly("1.5.0") + } + } + testImplementation("io.grpc:grpc-stub:1.5.0") { + version { + strictly("1.5.0") + } + } + testImplementation("io.grpc:grpc-netty:1.5.0") { + version { + strictly("1.5.0") + } + } } diff --git a/instrumentation/netty/netty-4.0/build.gradle.kts b/instrumentation/netty/netty-4.0/build.gradle.kts index e58c1e7a3..e9febfb09 100644 --- a/instrumentation/netty/netty-4.0/build.gradle.kts +++ b/instrumentation/netty/netty-4.0/build.gradle.kts @@ -45,8 +45,9 @@ 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") - - testImplementation(project(":testing-common")) + testImplementation(project(":testing-common")) { + exclude(group = "io.netty") + } testImplementation("org.asynchttpclient:async-http-client:2.0.9") } diff --git a/instrumentation/netty/netty-4.1/build.gradle.kts b/instrumentation/netty/netty-4.1/build.gradle.kts index a4659b931..64b98f2d2 100644 --- a/instrumentation/netty/netty-4.1/build.gradle.kts +++ b/instrumentation/netty/netty-4.1/build.gradle.kts @@ -46,7 +46,9 @@ dependencies { implementation("io.netty:netty-codec-http:4.1.0.Final") - testImplementation(project(":testing-common")) + testImplementation(project(":testing-common")) { + exclude(group = "io.netty") + } testImplementation("io.netty:netty-handler:4.1.0.Final") testImplementation("org.asynchttpclient:async-http-client:2.1.0") } diff --git a/instrumentation/vertx-web-3.0/build.gradle.kts b/instrumentation/vertx-web-3.0/build.gradle.kts index cdb43b739..cffaa9e00 100644 --- a/instrumentation/vertx-web-3.0/build.gradle.kts +++ b/instrumentation/vertx-web-3.0/build.gradle.kts @@ -24,7 +24,9 @@ afterEvaluate{ val versions: Map by extra dependencies { - testImplementation(project(":testing-common")) + testImplementation(project(":testing-common")) { + exclude(group = "io.netty") + } testImplementation(project(":instrumentation:netty:netty-4.0")) 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"]}") 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/SpringBootSmokeTest.java b/smoke-tests/src/test/java/org/hypertrace/agent/smoketest/SpringBootSmokeTest.java index 4944e1404..05a57267e 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 @@ -66,7 +66,9 @@ public void get() throws IOException { 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 = @@ -79,6 +81,7 @@ public void get() throws IOException { Assertions.assertEquals( ResourceAttributes.SERVICE_NAME.getKey(), traces.get(0).getResourceSpans(0).getResource().getAttributes(0).getKey()); + System.out.println(traces.get(0).getResourceSpans(0).getResource().getAttributesList()); Assertions.assertEquals( ResourceAttributes.CONTAINER_ID.getKey(), traces.get(0).getResourceSpans(0).getResource().getAttributes(1).getKey()); @@ -93,7 +96,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() {} } From caee874130d753164a571562c47cad997ad092b0 Mon Sep 17 00:00:00 2001 From: Pavol Loffay Date: Wed, 10 Feb 2021 13:11:55 +0100 Subject: [PATCH 2/6] Update Signed-off-by: Pavol Loffay --- instrumentation/build.gradle.kts | 4 +- instrumentation/grpc-1.5/build.gradle.kts | 26 ++++++------ .../netty/netty-4.0/build.gradle.kts | 42 +++++++++++++++++-- .../netty/netty-4.1/build.gradle.kts | 2 +- .../vertx-web-3.0/build.gradle.kts | 37 ++++++++++++++-- 5 files changed, 88 insertions(+), 23 deletions(-) diff --git a/instrumentation/build.gradle.kts b/instrumentation/build.gradle.kts index 901654498..28a6c3be1 100644 --- a/instrumentation/build.gradle.kts +++ b/instrumentation/build.gradle.kts @@ -13,9 +13,7 @@ subprojects { implementation("net.bytebuddy:byte-buddy:${versions["byte_buddy"]}") implementation("io.opentelemetry:opentelemetry-api:${versions["opentelemetry"]}") - implementation("io.opentelemetry.javaagent:opentelemetry-javaagent-tooling:${versions["opentelemetry_java_agent"]}") { - exclude(group = "io.netty") - } + implementation("io.opentelemetry.javaagent:opentelemetry-javaagent-tooling:${versions["opentelemetry_java_agent"]}") implementation("io.opentelemetry.javaagent:opentelemetry-javaagent-api:${versions["opentelemetry_java_agent"]}") implementation("io.opentelemetry.instrumentation:opentelemetry-instrumentation-api:${versions["opentelemetry_java_agent"]}") implementation(project(":javaagent-core")) diff --git a/instrumentation/grpc-1.5/build.gradle.kts b/instrumentation/grpc-1.5/build.gradle.kts index e6ca8fc64..128289d58 100644 --- a/instrumentation/grpc-1.5/build.gradle.kts +++ b/instrumentation/grpc-1.5/build.gradle.kts @@ -55,38 +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"]}") - implementation("io.opentelemetry.javaagent:opentelemetry-javaagent-tooling:${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-core:${grpcVersion}") { version { - strictly("1.5.0") + strictly(grpcVersion) } } - testImplementation("io.grpc:grpc-protobuf:1.5.0") { + testImplementation("io.grpc:grpc-protobuf:${grpcVersion}") { version { - strictly("1.5.0") + strictly(grpcVersion) } } - testImplementation("io.grpc:grpc-stub:1.5.0") { + testImplementation("io.grpc:grpc-stub:${grpcVersion}") { version { - strictly("1.5.0") + strictly(grpcVersion) } } - testImplementation("io.grpc:grpc-netty:1.5.0") { + testImplementation("io.grpc:grpc-netty:${grpcVersion}") { version { - strictly("1.5.0") + strictly(grpcVersion) } } } diff --git a/instrumentation/netty/netty-4.0/build.gradle.kts b/instrumentation/netty/netty-4.0/build.gradle.kts index e9febfb09..14f1f93b1 100644 --- a/instrumentation/netty/netty-4.0/build.gradle.kts +++ b/instrumentation/netty/netty-4.0/build.gradle.kts @@ -40,14 +40,50 @@ 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") - testImplementation(project(":testing-common")) { - exclude(group = "io.netty") + 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.1/build.gradle.kts b/instrumentation/netty/netty-4.1/build.gradle.kts index 64b98f2d2..1523e676d 100644 --- a/instrumentation/netty/netty-4.1/build.gradle.kts +++ b/instrumentation/netty/netty-4.1/build.gradle.kts @@ -47,7 +47,7 @@ dependencies { implementation("io.netty:netty-codec-http:4.1.0.Final") testImplementation(project(":testing-common")) { - exclude(group = "io.netty") +// exclude(group = "io.netty") } testImplementation("io.netty:netty-handler:4.1.0.Final") testImplementation("org.asynchttpclient:async-http-client:2.1.0") diff --git a/instrumentation/vertx-web-3.0/build.gradle.kts b/instrumentation/vertx-web-3.0/build.gradle.kts index cffaa9e00..c292affd1 100644 --- a/instrumentation/vertx-web-3.0/build.gradle.kts +++ b/instrumentation/vertx-web-3.0/build.gradle.kts @@ -22,14 +22,45 @@ afterEvaluate{ } val versions: Map by extra +val nettyVersion = "4.0.28.Final" dependencies { - testImplementation(project(":testing-common")) { - exclude(group = "io.netty") - } + testImplementation(project(":testing-common")) testImplementation(project(":instrumentation:netty:netty-4.0")) 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) + } + } } From d232f7284eeeeb8bebbd45dd036598d08ff79132 Mon Sep 17 00:00:00 2001 From: Pavol Loffay Date: Wed, 10 Feb 2021 13:15:42 +0100 Subject: [PATCH 3/6] cleanup Signed-off-by: Pavol Loffay --- instrumentation/netty/netty-4.1/build.gradle.kts | 4 +--- instrumentation/vertx-web-3.0/build.gradle.kts | 1 + .../org/hypertrace/agent/smoketest/SpringBootSmokeTest.java | 1 - 3 files changed, 2 insertions(+), 4 deletions(-) diff --git a/instrumentation/netty/netty-4.1/build.gradle.kts b/instrumentation/netty/netty-4.1/build.gradle.kts index 1523e676d..a4659b931 100644 --- a/instrumentation/netty/netty-4.1/build.gradle.kts +++ b/instrumentation/netty/netty-4.1/build.gradle.kts @@ -46,9 +46,7 @@ dependencies { implementation("io.netty:netty-codec-http:4.1.0.Final") - testImplementation(project(":testing-common")) { -// exclude(group = "io.netty") - } + testImplementation(project(":testing-common")) testImplementation("io.netty:netty-handler:4.1.0.Final") testImplementation("org.asynchttpclient:async-http-client:2.1.0") } diff --git a/instrumentation/vertx-web-3.0/build.gradle.kts b/instrumentation/vertx-web-3.0/build.gradle.kts index c292affd1..da22d8097 100644 --- a/instrumentation/vertx-web-3.0/build.gradle.kts +++ b/instrumentation/vertx-web-3.0/build.gradle.kts @@ -22,6 +22,7 @@ afterEvaluate{ } val versions: Map by extra +// version used by io.vertx:vertx-web:3.0.0 val nettyVersion = "4.0.28.Final" dependencies { 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 05a57267e..4afdf1f7d 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 @@ -81,7 +81,6 @@ public void get() throws IOException { Assertions.assertEquals( ResourceAttributes.SERVICE_NAME.getKey(), traces.get(0).getResourceSpans(0).getResource().getAttributes(0).getKey()); - System.out.println(traces.get(0).getResourceSpans(0).getResource().getAttributesList()); Assertions.assertEquals( ResourceAttributes.CONTAINER_ID.getKey(), traces.get(0).getResourceSpans(0).getResource().getAttributes(1).getKey()); From 1cc60e1e189ec5e93f603525d40ee2048b6fdbba Mon Sep 17 00:00:00 2001 From: Pavol Loffay Date: Wed, 10 Feb 2021 14:02:58 +0100 Subject: [PATCH 4/6] Matcher changes Signed-off-by: Pavol Loffay --- instrumentation/build.gradle.kts | 2 ++ .../netty/v4_0/NettyInstrumentationModule.java | 11 +++++++++++ .../netty/v4_1/NettyInstrumentationModule.java | 10 ++++++++++ .../Servlet31NoWrappingInstrumentation.java | 8 +++++++- javaagent/build.gradle.kts | 2 ++ .../agent/smoketest/SpringBootSmokeTest.java | 2 +- 6 files changed, 33 insertions(+), 2 deletions(-) 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/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/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/smoke-tests/src/test/java/org/hypertrace/agent/smoketest/SpringBootSmokeTest.java b/smoke-tests/src/test/java/org/hypertrace/agent/smoketest/SpringBootSmokeTest.java index 4afdf1f7d..22fff4c8d 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 @@ -62,7 +62,7 @@ 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(); From dfab761924563f3aa11ecabab786b30c4330e0c3 Mon Sep 17 00:00:00 2001 From: Pavol Loffay Date: Wed, 10 Feb 2021 14:46:38 +0100 Subject: [PATCH 5/6] use ghcr images Signed-off-by: Pavol Loffay --- .../org/hypertrace/agent/smoketest/AbstractSmokeTest.java | 4 ++-- .../org/hypertrace/agent/smoketest/SpringBootSmokeTest.java | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) 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 22fff4c8d..9ea42cbfa 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,7 @@ 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; From 38149d1d7c0b1c2d521dfdcc62c256ae05cb51c8 Mon Sep 17 00:00:00 2001 From: Pavol Loffay Date: Wed, 10 Feb 2021 14:52:40 +0100 Subject: [PATCH 6/6] foobar Signed-off-by: Pavol Loffay --- .../org/hypertrace/agent/smoketest/SpringBootSmokeTest.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) 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 9ea42cbfa..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 "ghcr.io/open-telemetry/java-test-containers:smoke-springboot-jdk" + jdk + "-20210209.550405798"; + return "ghcr.io/open-telemetry/java-test-containers:smoke-springboot-jdk" + + jdk + + "-20210209.550405798"; } private static GenericContainer app;