From 010911c8d65a8fb6ff94dbf40fdd9406490d7577 Mon Sep 17 00:00:00 2001 From: CircleCI Date: Sun, 30 Jun 2024 10:16:33 +0300 Subject: [PATCH 01/12] fix: AWS SdkV2 support with auto-trace --- pom.xml | 22 ++++++++++++------- .../impl/AmazonHttpClientInstrumentation.java | 2 +- .../AmazonHttpClientV2Instrumentation.java | 8 +++++-- .../impl/ApacheHttpInstrumentation.java | 2 +- .../ApacheKafkaConsumerInstrumentation.java | 3 ++- .../ApacheKafkaProducerInstrumentation.java | 2 +- ...wsLambdaRequestHandlerInstrumentation.java | 2 +- 7 files changed, 26 insertions(+), 15 deletions(-) diff --git a/pom.xml b/pom.xml index a405c18..4432290 100644 --- a/pom.xml +++ b/pom.xml @@ -84,7 +84,7 @@ com.amazonaws aws-java-sdk-s3 - 1.12.261 + 1.11.505 provided @@ -99,18 +99,12 @@ 1.11.551 provided - - com.squareup.okhttp3 - okhttp - 3.14.2 - software.amazon.awssdk - core + lambda 2.25.45 - pom software.amazon.awssdk @@ -142,10 +136,22 @@ org.apache.kafka kafka-clients 3.1.0 + + + + + org.apache.httpcomponents + httpclient + 4.5.14 provided + + com.squareup.okhttp3 + okhttp + 3.14.2 + com.fasterxml.jackson.core jackson-core diff --git a/src/main/java/io/lumigo/core/instrumentation/impl/AmazonHttpClientInstrumentation.java b/src/main/java/io/lumigo/core/instrumentation/impl/AmazonHttpClientInstrumentation.java index 255a59a..7908406 100644 --- a/src/main/java/io/lumigo/core/instrumentation/impl/AmazonHttpClientInstrumentation.java +++ b/src/main/java/io/lumigo/core/instrumentation/impl/AmazonHttpClientInstrumentation.java @@ -26,7 +26,7 @@ public ElementMatcher getTypeMatcher() { public AgentBuilder.Transformer.ForAdvice getTransformer() { return new AgentBuilder.Transformer.ForAdvice() .include(Loader.class.getClassLoader()) - .advice(isMethod().and(named("execute")), AmazonHttpClientAdvice.class.getName()); + .advice(isMethod().and(named("execute")), AmazonHttpClientInstrumentation.class.getName() + "$AmazonHttpClientAdvice"); } public static class AmazonHttpClientAdvice { diff --git a/src/main/java/io/lumigo/core/instrumentation/impl/AmazonHttpClientV2Instrumentation.java b/src/main/java/io/lumigo/core/instrumentation/impl/AmazonHttpClientV2Instrumentation.java index 434eb4b..0252ce1 100644 --- a/src/main/java/io/lumigo/core/instrumentation/impl/AmazonHttpClientV2Instrumentation.java +++ b/src/main/java/io/lumigo/core/instrumentation/impl/AmazonHttpClientV2Instrumentation.java @@ -33,7 +33,7 @@ public AgentBuilder.Transformer.ForAdvice getTransformer() { .include(Loader.class.getClassLoader()) .advice( isMethod().and(named("resolveExecutionInterceptors")), - AmazonHttpClientV2Advice.class.getName()); + AmazonHttpClientV2Instrumentation.class.getName() + "$AmazonHttpClientV2Advice"); } @SuppressWarnings("unused") @@ -61,7 +61,11 @@ public static class TracingExecutionInterceptor implements ExecutionInterceptor public void beforeExecution( final Context.BeforeExecution context, final ExecutionAttributes executionAttributes) { - startTimeMap.put(context.request().hashCode(), System.currentTimeMillis()); + try { + startTimeMap.put(context.request().hashCode(), System.currentTimeMillis()); + } catch (Throwable e) { + Logger.error(e, "Failed save trace context"); + } } @Override diff --git a/src/main/java/io/lumigo/core/instrumentation/impl/ApacheHttpInstrumentation.java b/src/main/java/io/lumigo/core/instrumentation/impl/ApacheHttpInstrumentation.java index e72fbb4..0891886 100644 --- a/src/main/java/io/lumigo/core/instrumentation/impl/ApacheHttpInstrumentation.java +++ b/src/main/java/io/lumigo/core/instrumentation/impl/ApacheHttpInstrumentation.java @@ -36,7 +36,7 @@ public AgentBuilder.Transformer.ForAdvice getTransformer() { 0, named( "org.apache.http.client.methods.HttpUriRequest")))), - ApacheHttpAdvice.class.getName()); + ApacheHttpInstrumentation.class.getName() + "$ApacheHttpAdvice"); } public static class ApacheHttpAdvice { diff --git a/src/main/java/io/lumigo/core/instrumentation/impl/ApacheKafkaConsumerInstrumentation.java b/src/main/java/io/lumigo/core/instrumentation/impl/ApacheKafkaConsumerInstrumentation.java index bbb05ce..4a97d01 100644 --- a/src/main/java/io/lumigo/core/instrumentation/impl/ApacheKafkaConsumerInstrumentation.java +++ b/src/main/java/io/lumigo/core/instrumentation/impl/ApacheKafkaConsumerInstrumentation.java @@ -34,9 +34,10 @@ public AgentBuilder.Transformer.ForAdvice getTransformer() { returns( named( "org.apache.kafka.clients.consumer.ConsumerRecords"))), - ApacheKafkaConsumerAdvice.class.getName()); + ApacheKafkaConsumerInstrumentation.class.getName() + "$ApacheKafkaConsumerAdvice"); } + @SuppressWarnings("unused") public static class ApacheKafkaConsumerAdvice { public static final SpansContainer spansContainer = SpansContainer.getInstance(); public static final LRUCache startTimeMap = new LRUCache<>(1000); diff --git a/src/main/java/io/lumigo/core/instrumentation/impl/ApacheKafkaProducerInstrumentation.java b/src/main/java/io/lumigo/core/instrumentation/impl/ApacheKafkaProducerInstrumentation.java index 829baa6..efb6322 100644 --- a/src/main/java/io/lumigo/core/instrumentation/impl/ApacheKafkaProducerInstrumentation.java +++ b/src/main/java/io/lumigo/core/instrumentation/impl/ApacheKafkaProducerInstrumentation.java @@ -44,7 +44,7 @@ public AgentBuilder.Transformer.ForAdvice getTransformer() { 1, named( "org.apache.kafka.clients.producer.Callback")))), - ApacheKafkaProducerAdvice.class.getName()); + ApacheKafkaProducerInstrumentation.class.getName() + "$ApacheKafkaProducerAdvice"); } @SuppressWarnings("unused") diff --git a/src/main/java/io/lumigo/core/instrumentation/impl/AwsLambdaRequestHandlerInstrumentation.java b/src/main/java/io/lumigo/core/instrumentation/impl/AwsLambdaRequestHandlerInstrumentation.java index 65f2015..c906674 100644 --- a/src/main/java/io/lumigo/core/instrumentation/impl/AwsLambdaRequestHandlerInstrumentation.java +++ b/src/main/java/io/lumigo/core/instrumentation/impl/AwsLambdaRequestHandlerInstrumentation.java @@ -43,7 +43,7 @@ public AgentBuilder.Transformer.ForAdvice getTransformer() { 1, named( "com.amazonaws.services.lambda.runtime.Context"))), - HandleRequestAdvice.class.getName()); + AwsLambdaRequestHandlerInstrumentation.class.getName() + "$HandleRequestAdvice"); } @SuppressWarnings("unused") From c0204a48fd37ef6f3d97d3c8c60b0c8c58a5dd0f Mon Sep 17 00:00:00 2001 From: CircleCI Date: Sun, 30 Jun 2024 13:52:18 +0300 Subject: [PATCH 02/12] fix --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 4432290..cc5006e 100644 --- a/pom.xml +++ b/pom.xml @@ -74,6 +74,7 @@ com.amazonaws aws-java-sdk-lambda 1.11.560 + provided com.amazonaws @@ -143,7 +144,6 @@ org.apache.httpcomponents httpclient 4.5.14 - provided From f6d3894165e83850727c51b20f36490b55109e7d Mon Sep 17 00:00:00 2001 From: nadav3396 Date: Sun, 30 Jun 2024 21:58:44 +0300 Subject: [PATCH 03/12] fixes --- .../src/main/java/io/lumigo/agent/Agent.java | 41 +++++++++++++++---- .../impl/AmazonHttpClientInstrumentation.java | 5 ++- .../AmazonHttpClientV2Instrumentation.java | 17 +------- .../ApacheKafkaConsumerInstrumentation.java | 3 +- .../ApacheKafkaProducerInstrumentation.java | 3 +- ...wsLambdaRequestHandlerInstrumentation.java | 4 +- .../core/parsers/v1/AwsSdkV1Parser.java | 2 +- .../core/parsers/v2/AwsSdkV2Parser.java | 2 +- .../java/io/lumigo/core/utils/AwsUtils.java | 2 +- 9 files changed, 49 insertions(+), 30 deletions(-) diff --git a/agent/src/main/java/io/lumigo/agent/Agent.java b/agent/src/main/java/io/lumigo/agent/Agent.java index 48b1f22..aa0387a 100644 --- a/agent/src/main/java/io/lumigo/agent/Agent.java +++ b/agent/src/main/java/io/lumigo/agent/Agent.java @@ -2,6 +2,7 @@ import java.io.File; import java.lang.instrument.Instrumentation; +import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.net.MalformedURLException; import java.net.URL; @@ -37,15 +38,17 @@ public static void agentmain(String agentArgs, Instrumentation inst) { if ("lib".equalsIgnoreCase(agentArgs)) { urls = getUrls(); } else { - urls = - new URL[] { - new File("/var/task/").toURI().toURL(), - new File(LUMIGO_JAVA_TRACER_PATH).toURI().toURL() - }; + List jars = new LinkedList<>(); + jars.add(new File("/var/task/").toURI().toURL()); + if (isAutoTrace()) { + jars.add(new File(LUMIGO_JAVA_TRACER_PATH).toURI().toURL()); + } + urls = jars.toArray(new URL[jars.size()]); + } + URLClassLoader newClassLoader = new URLClassLoader(urls, getParentClassLoader()); + if (isAutoTrace()) { + installTracerJar(inst); } - installTracerJar(inst); - URLClassLoader newClassLoader = new URLClassLoader(urls, null); - Thread.currentThread().setContextClassLoader(newClassLoader); final Class loader = newClassLoader.loadClass("io.lumigo.core.instrumentation.agent.Loader"); final Method instrument = loader.getMethod("instrument", Instrumentation.class); @@ -89,4 +92,26 @@ public static boolean isKillSwitchOn() { String value = System.getenv("LUMIGO_SWITCH_OFF"); return "true".equalsIgnoreCase(value); } + + public static boolean isAutoTrace() { + String value = System.getenv("JAVA_TOOL_OPTIONS"); + return !value.contains("allowAttachSelf=true"); + } + + public static ClassLoader getParentClassLoader() { + /* + Must invoke ClassLoader.getPlatformClassLoader by reflection to remain + compatible with java 8. + */ + try { + Method method = ClassLoader.class.getDeclaredMethod("getPlatformClassLoader"); + return (ClassLoader) method.invoke(null); + } catch (InvocationTargetException + | NoSuchMethodException + | IllegalAccessException exception) { + System.out.println( + "Failed to get platform class loader falling back to system class loader"); + return ClassLoader.getSystemClassLoader(); + } + } } diff --git a/src/main/java/io/lumigo/core/instrumentation/impl/AmazonHttpClientInstrumentation.java b/src/main/java/io/lumigo/core/instrumentation/impl/AmazonHttpClientInstrumentation.java index 7908406..d329086 100644 --- a/src/main/java/io/lumigo/core/instrumentation/impl/AmazonHttpClientInstrumentation.java +++ b/src/main/java/io/lumigo/core/instrumentation/impl/AmazonHttpClientInstrumentation.java @@ -26,7 +26,10 @@ public ElementMatcher getTypeMatcher() { public AgentBuilder.Transformer.ForAdvice getTransformer() { return new AgentBuilder.Transformer.ForAdvice() .include(Loader.class.getClassLoader()) - .advice(isMethod().and(named("execute")), AmazonHttpClientInstrumentation.class.getName() + "$AmazonHttpClientAdvice"); + .advice( + isMethod().and(named("execute")), + AmazonHttpClientInstrumentation.class.getName() + + "$AmazonHttpClientAdvice"); } public static class AmazonHttpClientAdvice { diff --git a/src/main/java/io/lumigo/core/instrumentation/impl/AmazonHttpClientV2Instrumentation.java b/src/main/java/io/lumigo/core/instrumentation/impl/AmazonHttpClientV2Instrumentation.java index 0252ce1..b68fa0d 100644 --- a/src/main/java/io/lumigo/core/instrumentation/impl/AmazonHttpClientV2Instrumentation.java +++ b/src/main/java/io/lumigo/core/instrumentation/impl/AmazonHttpClientV2Instrumentation.java @@ -15,7 +15,6 @@ import software.amazon.awssdk.core.interceptor.Context; import software.amazon.awssdk.core.interceptor.ExecutionAttributes; import software.amazon.awssdk.core.interceptor.ExecutionInterceptor; -import software.amazon.awssdk.http.SdkHttpRequest; public class AmazonHttpClientV2Instrumentation implements LumigoInstrumentationApi { @@ -33,7 +32,8 @@ public AgentBuilder.Transformer.ForAdvice getTransformer() { .include(Loader.class.getClassLoader()) .advice( isMethod().and(named("resolveExecutionInterceptors")), - AmazonHttpClientV2Instrumentation.class.getName() + "$AmazonHttpClientV2Advice"); + AmazonHttpClientV2Instrumentation.class.getName() + + "$AmazonHttpClientV2Advice"); } @SuppressWarnings("unused") @@ -68,19 +68,6 @@ public void beforeExecution( } } - @Override - public SdkHttpRequest modifyHttpRequest( - Context.ModifyHttpRequest context, ExecutionAttributes executionAttributes) { - try { - SdkHttpRequest.Builder requestBuilder = context.httpRequest().toBuilder(); - requestBuilder.appendHeader("X-Amzn-Trace-Id", spansContainer.getPatchedRoot()); - return requestBuilder.build(); - } catch (Throwable e) { - Logger.debug("Unable to inject trace header", e); - } - return context.httpRequest(); - } - @Override public void afterExecution( final Context.AfterExecution context, diff --git a/src/main/java/io/lumigo/core/instrumentation/impl/ApacheKafkaConsumerInstrumentation.java b/src/main/java/io/lumigo/core/instrumentation/impl/ApacheKafkaConsumerInstrumentation.java index 4a97d01..01e5ee7 100644 --- a/src/main/java/io/lumigo/core/instrumentation/impl/ApacheKafkaConsumerInstrumentation.java +++ b/src/main/java/io/lumigo/core/instrumentation/impl/ApacheKafkaConsumerInstrumentation.java @@ -34,7 +34,8 @@ public AgentBuilder.Transformer.ForAdvice getTransformer() { returns( named( "org.apache.kafka.clients.consumer.ConsumerRecords"))), - ApacheKafkaConsumerInstrumentation.class.getName() + "$ApacheKafkaConsumerAdvice"); + ApacheKafkaConsumerInstrumentation.class.getName() + + "$ApacheKafkaConsumerAdvice"); } @SuppressWarnings("unused") diff --git a/src/main/java/io/lumigo/core/instrumentation/impl/ApacheKafkaProducerInstrumentation.java b/src/main/java/io/lumigo/core/instrumentation/impl/ApacheKafkaProducerInstrumentation.java index efb6322..496a3bd 100644 --- a/src/main/java/io/lumigo/core/instrumentation/impl/ApacheKafkaProducerInstrumentation.java +++ b/src/main/java/io/lumigo/core/instrumentation/impl/ApacheKafkaProducerInstrumentation.java @@ -44,7 +44,8 @@ public AgentBuilder.Transformer.ForAdvice getTransformer() { 1, named( "org.apache.kafka.clients.producer.Callback")))), - ApacheKafkaProducerInstrumentation.class.getName() + "$ApacheKafkaProducerAdvice"); + ApacheKafkaProducerInstrumentation.class.getName() + + "$ApacheKafkaProducerAdvice"); } @SuppressWarnings("unused") diff --git a/src/main/java/io/lumigo/core/instrumentation/impl/AwsLambdaRequestHandlerInstrumentation.java b/src/main/java/io/lumigo/core/instrumentation/impl/AwsLambdaRequestHandlerInstrumentation.java index c906674..664248f 100644 --- a/src/main/java/io/lumigo/core/instrumentation/impl/AwsLambdaRequestHandlerInstrumentation.java +++ b/src/main/java/io/lumigo/core/instrumentation/impl/AwsLambdaRequestHandlerInstrumentation.java @@ -19,6 +19,7 @@ public class AwsLambdaRequestHandlerInstrumentation implements LumigoInstrumenta @Override public ElementMatcher getTypeMatcher() { return hasSuperType(named("com.amazonaws.services.lambda.runtime.RequestHandler")) + .and(isInterface()) // we don't want to instrument handlers that implement our interfaces because they // are already instrumented .and( @@ -43,7 +44,8 @@ public AgentBuilder.Transformer.ForAdvice getTransformer() { 1, named( "com.amazonaws.services.lambda.runtime.Context"))), - AwsLambdaRequestHandlerInstrumentation.class.getName() + "$HandleRequestAdvice"); + AwsLambdaRequestHandlerInstrumentation.class.getName() + + "$HandleRequestAdvice"); } @SuppressWarnings("unused") diff --git a/src/main/java/io/lumigo/core/parsers/v1/AwsSdkV1Parser.java b/src/main/java/io/lumigo/core/parsers/v1/AwsSdkV1Parser.java index e9608dc..8aacfca 100644 --- a/src/main/java/io/lumigo/core/parsers/v1/AwsSdkV1Parser.java +++ b/src/main/java/io/lumigo/core/parsers/v1/AwsSdkV1Parser.java @@ -17,7 +17,7 @@ default void safeParse(HttpSpan span, Request request, Response response) { parse(span, request, response); Logger.debug("Finish parsing aws v1 request using: " + getParserType()); } catch (Throwable e) { - Logger.error("Failed to parse extra aws v1 data using parser: " + getParserType(), e); + Logger.error(e, "Failed to parse extra aws v1 data using parser: " + getParserType()); } } diff --git a/src/main/java/io/lumigo/core/parsers/v2/AwsSdkV2Parser.java b/src/main/java/io/lumigo/core/parsers/v2/AwsSdkV2Parser.java index c878aa7..48393bf 100644 --- a/src/main/java/io/lumigo/core/parsers/v2/AwsSdkV2Parser.java +++ b/src/main/java/io/lumigo/core/parsers/v2/AwsSdkV2Parser.java @@ -16,7 +16,7 @@ default void safeParse(HttpSpan span, Context.AfterExecution context) { Logger.debug("Finish parsing aws v2 request using: " + getParserType()); } catch (Throwable e) { Logger.error( - "Failed to parse extra aws sdk v2 data using parser: " + getParserType(), e); + e, "Failed to parse extra aws sdk v2 data using parser: " + getParserType()); } } } diff --git a/src/main/java/io/lumigo/core/utils/AwsUtils.java b/src/main/java/io/lumigo/core/utils/AwsUtils.java index 905b443..e1aa8c5 100644 --- a/src/main/java/io/lumigo/core/utils/AwsUtils.java +++ b/src/main/java/io/lumigo/core/utils/AwsUtils.java @@ -287,7 +287,7 @@ public static int parseJavaVersion(String version) { // So we only parse the first part. return Integer.parseInt(parts[0]); } catch (Exception e) { - Logger.error("Failed to parse java version", e); + Logger.error(e, "Failed to parse java version"); return -1; } } From 922499c68a1cf9315c5bca41444e3386349f0540 Mon Sep 17 00:00:00 2001 From: nadav3396 Date: Mon, 1 Jul 2024 09:47:46 +0300 Subject: [PATCH 04/12] fix --- pom.xml | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/pom.xml b/pom.xml index cc5006e..b416dd2 100644 --- a/pom.xml +++ b/pom.xml @@ -111,32 +111,28 @@ software.amazon.awssdk dynamodb 2.25.45 - provided software.amazon.awssdk sqs 2.25.45 - provided software.amazon.awssdk sns 2.25.45 - provided software.amazon.awssdk kinesis 2.25.45 - provided org.apache.kafka kafka-clients - 3.1.0 + 3.4.0 From 7f5faa4c8f33322d91ccb24119ef21d3ded5992c Mon Sep 17 00:00:00 2001 From: nadav3396 Date: Mon, 1 Jul 2024 09:51:04 +0300 Subject: [PATCH 05/12] update README --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index e67bec3..aa11c20 100644 --- a/README.md +++ b/README.md @@ -94,7 +94,7 @@ Find the latest version here (the format of the version will be n.n.n): * Add to your lambda a new layer with the arn from here * Add environment variable `JAVA_TOOL_OPTIONS` and set it to `-javaagent:/opt/lumigo-java/lumigo-agent.jar` (This is instead of the flag for more than java11 support) * Add the `LUMIGO_TRACER_TOKEN` env var. - +* NOTE: because of lambda internal implementation you need to specify the handler with the method name (e.g. `com.example.Handler::handleRequest`) ### Configuration @@ -131,7 +131,7 @@ Add the environment variable `JAVA_TOOL_OPTIONS` to your Lambda functions and se ### Supported Instrumentation Libraries -- Aws SDK V1 +- Aws SDK V1 (Supported only from dependency and not from the auto trace with lambda layer) - Aws SDK V2 - Apache HTTP Client - Apache Kafka From 42d1171822dcc8b04b6c0db0f90b86b46c13aa5d Mon Sep 17 00:00:00 2001 From: nadav3396 Date: Mon, 1 Jul 2024 12:10:36 +0300 Subject: [PATCH 06/12] Fix --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index b416dd2..ee30be0 100644 --- a/pom.xml +++ b/pom.xml @@ -132,7 +132,7 @@ org.apache.kafka kafka-clients - 3.4.0 + 3.1.0 From a8e9503aee2ee2750a18fba51c38175bde733eab Mon Sep 17 00:00:00 2001 From: nadav3396 Date: Mon, 1 Jul 2024 16:20:43 +0300 Subject: [PATCH 07/12] try --- .../src/main/java/io/lumigo/agent/Agent.java | 19 ++----------------- 1 file changed, 2 insertions(+), 17 deletions(-) diff --git a/agent/src/main/java/io/lumigo/agent/Agent.java b/agent/src/main/java/io/lumigo/agent/Agent.java index aa0387a..6ccb8ae 100644 --- a/agent/src/main/java/io/lumigo/agent/Agent.java +++ b/agent/src/main/java/io/lumigo/agent/Agent.java @@ -45,7 +45,8 @@ public static void agentmain(String agentArgs, Instrumentation inst) { } urls = jars.toArray(new URL[jars.size()]); } - URLClassLoader newClassLoader = new URLClassLoader(urls, getParentClassLoader()); + URLClassLoader newClassLoader = new URLClassLoader(urls); + Thread.currentThread().setContextClassLoader(newClassLoader); if (isAutoTrace()) { installTracerJar(inst); } @@ -98,20 +99,4 @@ public static boolean isAutoTrace() { return !value.contains("allowAttachSelf=true"); } - public static ClassLoader getParentClassLoader() { - /* - Must invoke ClassLoader.getPlatformClassLoader by reflection to remain - compatible with java 8. - */ - try { - Method method = ClassLoader.class.getDeclaredMethod("getPlatformClassLoader"); - return (ClassLoader) method.invoke(null); - } catch (InvocationTargetException - | NoSuchMethodException - | IllegalAccessException exception) { - System.out.println( - "Failed to get platform class loader falling back to system class loader"); - return ClassLoader.getSystemClassLoader(); - } - } } From 1c770969bb3cc2fed7f9a62ae584d7cf603ce19a Mon Sep 17 00:00:00 2001 From: nadav3396 Date: Mon, 1 Jul 2024 16:53:13 +0300 Subject: [PATCH 08/12] Fix --- pom.xml | 1 - .../impl/AwsLambdaRequestHandlerInstrumentation.java | 1 - 2 files changed, 2 deletions(-) diff --git a/pom.xml b/pom.xml index ee30be0..c4e50fb 100644 --- a/pom.xml +++ b/pom.xml @@ -74,7 +74,6 @@ com.amazonaws aws-java-sdk-lambda 1.11.560 - provided com.amazonaws diff --git a/src/main/java/io/lumigo/core/instrumentation/impl/AwsLambdaRequestHandlerInstrumentation.java b/src/main/java/io/lumigo/core/instrumentation/impl/AwsLambdaRequestHandlerInstrumentation.java index 664248f..ddb4307 100644 --- a/src/main/java/io/lumigo/core/instrumentation/impl/AwsLambdaRequestHandlerInstrumentation.java +++ b/src/main/java/io/lumigo/core/instrumentation/impl/AwsLambdaRequestHandlerInstrumentation.java @@ -19,7 +19,6 @@ public class AwsLambdaRequestHandlerInstrumentation implements LumigoInstrumenta @Override public ElementMatcher getTypeMatcher() { return hasSuperType(named("com.amazonaws.services.lambda.runtime.RequestHandler")) - .and(isInterface()) // we don't want to instrument handlers that implement our interfaces because they // are already instrumented .and( From 44db921b63b858c257de01a3e8bd57453a29011b Mon Sep 17 00:00:00 2001 From: nadav3396 Date: Mon, 1 Jul 2024 17:13:13 +0300 Subject: [PATCH 09/12] Fix --- agent/src/main/java/io/lumigo/agent/Agent.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/agent/src/main/java/io/lumigo/agent/Agent.java b/agent/src/main/java/io/lumigo/agent/Agent.java index 6ccb8ae..fefdfdf 100644 --- a/agent/src/main/java/io/lumigo/agent/Agent.java +++ b/agent/src/main/java/io/lumigo/agent/Agent.java @@ -2,7 +2,6 @@ import java.io.File; import java.lang.instrument.Instrumentation; -import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.net.MalformedURLException; import java.net.URL; @@ -98,5 +97,4 @@ public static boolean isAutoTrace() { String value = System.getenv("JAVA_TOOL_OPTIONS"); return !value.contains("allowAttachSelf=true"); } - } From 15f901cd6d406e35446fc64fd6eba65fe9fa44fd Mon Sep 17 00:00:00 2001 From: nadav3396 Date: Mon, 1 Jul 2024 17:15:33 +0300 Subject: [PATCH 10/12] fix cr --- agent/src/main/java/io/lumigo/agent/Agent.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/agent/src/main/java/io/lumigo/agent/Agent.java b/agent/src/main/java/io/lumigo/agent/Agent.java index fefdfdf..dfaaf54 100644 --- a/agent/src/main/java/io/lumigo/agent/Agent.java +++ b/agent/src/main/java/io/lumigo/agent/Agent.java @@ -41,14 +41,12 @@ public static void agentmain(String agentArgs, Instrumentation inst) { jars.add(new File("/var/task/").toURI().toURL()); if (isAutoTrace()) { jars.add(new File(LUMIGO_JAVA_TRACER_PATH).toURI().toURL()); + installTracerJar(inst); } urls = jars.toArray(new URL[jars.size()]); } URLClassLoader newClassLoader = new URLClassLoader(urls); Thread.currentThread().setContextClassLoader(newClassLoader); - if (isAutoTrace()) { - installTracerJar(inst); - } final Class loader = newClassLoader.loadClass("io.lumigo.core.instrumentation.agent.Loader"); final Method instrument = loader.getMethod("instrument", Instrumentation.class); From 0333983d074f083eb44ae7e685bd89d5722f2d9b Mon Sep 17 00:00:00 2001 From: nadav3396 Date: Tue, 2 Jul 2024 17:41:00 +0300 Subject: [PATCH 11/12] WIP --- pom.xml | 21 +++++++++---------- .../impl/AmazonHttpClientInstrumentation.java | 2 +- .../AmazonHttpClientV2Instrumentation.java | 2 +- .../impl/ApacheHttpInstrumentation.java | 2 +- .../ApacheKafkaConsumerInstrumentation.java | 2 +- .../ApacheKafkaProducerInstrumentation.java | 2 +- ...wsLambdaRequestHandlerInstrumentation.java | 2 +- 7 files changed, 16 insertions(+), 17 deletions(-) diff --git a/pom.xml b/pom.xml index c4e50fb..c7acf71 100644 --- a/pom.xml +++ b/pom.xml @@ -79,25 +79,25 @@ com.amazonaws aws-java-sdk-kinesis 1.11.505 - provided + compile com.amazonaws aws-java-sdk-s3 1.11.505 - provided + compile com.amazonaws aws-java-sdk-sns 1.11.505 - provided + compile com.amazonaws aws-java-sdk-dynamodb 1.11.551 - provided + compile @@ -105,26 +105,31 @@ software.amazon.awssdk lambda 2.25.45 + compile software.amazon.awssdk dynamodb 2.25.45 + compile software.amazon.awssdk sqs 2.25.45 + compile software.amazon.awssdk sns 2.25.45 + compile software.amazon.awssdk kinesis 2.25.45 + compile @@ -132,13 +137,7 @@ org.apache.kafka kafka-clients 3.1.0 - - - - - org.apache.httpcomponents - httpclient - 4.5.14 + compile diff --git a/src/main/java/io/lumigo/core/instrumentation/impl/AmazonHttpClientInstrumentation.java b/src/main/java/io/lumigo/core/instrumentation/impl/AmazonHttpClientInstrumentation.java index d329086..8720c19 100644 --- a/src/main/java/io/lumigo/core/instrumentation/impl/AmazonHttpClientInstrumentation.java +++ b/src/main/java/io/lumigo/core/instrumentation/impl/AmazonHttpClientInstrumentation.java @@ -25,7 +25,7 @@ public ElementMatcher getTypeMatcher() { @Override public AgentBuilder.Transformer.ForAdvice getTransformer() { return new AgentBuilder.Transformer.ForAdvice() - .include(Loader.class.getClassLoader()) + .include(ClassLoader.getSystemClassLoader()) .advice( isMethod().and(named("execute")), AmazonHttpClientInstrumentation.class.getName() diff --git a/src/main/java/io/lumigo/core/instrumentation/impl/AmazonHttpClientV2Instrumentation.java b/src/main/java/io/lumigo/core/instrumentation/impl/AmazonHttpClientV2Instrumentation.java index b68fa0d..43b590e 100644 --- a/src/main/java/io/lumigo/core/instrumentation/impl/AmazonHttpClientV2Instrumentation.java +++ b/src/main/java/io/lumigo/core/instrumentation/impl/AmazonHttpClientV2Instrumentation.java @@ -29,7 +29,7 @@ public ElementMatcher getTypeMatcher() { @Override public AgentBuilder.Transformer.ForAdvice getTransformer() { return new AgentBuilder.Transformer.ForAdvice() - .include(Loader.class.getClassLoader()) + .include(ClassLoader.getSystemClassLoader()) .advice( isMethod().and(named("resolveExecutionInterceptors")), AmazonHttpClientV2Instrumentation.class.getName() diff --git a/src/main/java/io/lumigo/core/instrumentation/impl/ApacheHttpInstrumentation.java b/src/main/java/io/lumigo/core/instrumentation/impl/ApacheHttpInstrumentation.java index 0891886..1d02f25 100644 --- a/src/main/java/io/lumigo/core/instrumentation/impl/ApacheHttpInstrumentation.java +++ b/src/main/java/io/lumigo/core/instrumentation/impl/ApacheHttpInstrumentation.java @@ -25,7 +25,7 @@ public ElementMatcher getTypeMatcher() { @Override public AgentBuilder.Transformer.ForAdvice getTransformer() { return new AgentBuilder.Transformer.ForAdvice() - .include(Loader.class.getClassLoader()) + .include(ClassLoader.getSystemClassLoader()) .advice( isMethod() .and(named("execute")) diff --git a/src/main/java/io/lumigo/core/instrumentation/impl/ApacheKafkaConsumerInstrumentation.java b/src/main/java/io/lumigo/core/instrumentation/impl/ApacheKafkaConsumerInstrumentation.java index 01e5ee7..5e0469b 100644 --- a/src/main/java/io/lumigo/core/instrumentation/impl/ApacheKafkaConsumerInstrumentation.java +++ b/src/main/java/io/lumigo/core/instrumentation/impl/ApacheKafkaConsumerInstrumentation.java @@ -24,7 +24,7 @@ public ElementMatcher getTypeMatcher() { @Override public AgentBuilder.Transformer.ForAdvice getTransformer() { return new AgentBuilder.Transformer.ForAdvice() - .include(Loader.class.getClassLoader()) + .include(ClassLoader.getSystemClassLoader()) .advice( isMethod() .and(isPublic()) diff --git a/src/main/java/io/lumigo/core/instrumentation/impl/ApacheKafkaProducerInstrumentation.java b/src/main/java/io/lumigo/core/instrumentation/impl/ApacheKafkaProducerInstrumentation.java index 496a3bd..a885108 100644 --- a/src/main/java/io/lumigo/core/instrumentation/impl/ApacheKafkaProducerInstrumentation.java +++ b/src/main/java/io/lumigo/core/instrumentation/impl/ApacheKafkaProducerInstrumentation.java @@ -29,7 +29,7 @@ public ElementMatcher getTypeMatcher() { @Override public AgentBuilder.Transformer.ForAdvice getTransformer() { return new AgentBuilder.Transformer.ForAdvice() - .include(Loader.class.getClassLoader()) + .include(ClassLoader.getSystemClassLoader()) .advice( isMethod() .and(isPublic()) diff --git a/src/main/java/io/lumigo/core/instrumentation/impl/AwsLambdaRequestHandlerInstrumentation.java b/src/main/java/io/lumigo/core/instrumentation/impl/AwsLambdaRequestHandlerInstrumentation.java index ddb4307..d39462e 100644 --- a/src/main/java/io/lumigo/core/instrumentation/impl/AwsLambdaRequestHandlerInstrumentation.java +++ b/src/main/java/io/lumigo/core/instrumentation/impl/AwsLambdaRequestHandlerInstrumentation.java @@ -33,7 +33,7 @@ public ElementMatcher getTypeMatcher() { @Override public AgentBuilder.Transformer.ForAdvice getTransformer() { return new AgentBuilder.Transformer.ForAdvice() - .include(Loader.class.getClassLoader()) + .include(ClassLoader.getSystemClassLoader()) .advice( isMethod() .and(isPublic()) From c967c8672aa0a0531cdc9cf9c34b18aeafd3fd4b Mon Sep 17 00:00:00 2001 From: nadav3396 Date: Wed, 3 Jul 2024 13:16:36 +0300 Subject: [PATCH 12/12] WIP --- .../src/main/java/io/lumigo/agent/Agent.java | 11 ++- .../io/lumigo/agent/AgentClassLoader.java | 72 +++++++++++++++++++ pom.xml | 14 ++-- .../LumigoInstrumentationApi.java | 2 +- .../core/instrumentation/agent/Loader.java | 17 +++-- .../impl/AmazonHttpClientInstrumentation.java | 4 +- .../AmazonHttpClientV2Instrumentation.java | 5 +- .../impl/ApacheHttpInstrumentation.java | 4 +- .../ApacheKafkaConsumerInstrumentation.java | 4 +- .../ApacheKafkaProducerInstrumentation.java | 4 +- ...wsLambdaRequestHandlerInstrumentation.java | 4 +- 11 files changed, 105 insertions(+), 36 deletions(-) create mode 100644 agent/src/main/java/io/lumigo/agent/AgentClassLoader.java diff --git a/agent/src/main/java/io/lumigo/agent/Agent.java b/agent/src/main/java/io/lumigo/agent/Agent.java index dfaaf54..9b432b6 100644 --- a/agent/src/main/java/io/lumigo/agent/Agent.java +++ b/agent/src/main/java/io/lumigo/agent/Agent.java @@ -45,12 +45,11 @@ public static void agentmain(String agentArgs, Instrumentation inst) { } urls = jars.toArray(new URL[jars.size()]); } - URLClassLoader newClassLoader = new URLClassLoader(urls); - Thread.currentThread().setContextClassLoader(newClassLoader); - final Class loader = - newClassLoader.loadClass("io.lumigo.core.instrumentation.agent.Loader"); - final Method instrument = loader.getMethod("instrument", Instrumentation.class); - instrument.invoke(null, inst); + URLClassLoader agentClassLoader = new AgentClassLoader(urls, ClassLoader.getSystemClassLoader()); + final Class instrumentationLoader = + agentClassLoader.loadClass("io.lumigo.core.instrumentation.agent.Loader"); + final Method instrument = instrumentationLoader.getMethod("instrument", Instrumentation.class, ClassLoader.class); + instrument.invoke(null, inst, agentClassLoader); } catch (Exception e) { e.printStackTrace(); } diff --git a/agent/src/main/java/io/lumigo/agent/AgentClassLoader.java b/agent/src/main/java/io/lumigo/agent/AgentClassLoader.java new file mode 100644 index 0000000..39338ae --- /dev/null +++ b/agent/src/main/java/io/lumigo/agent/AgentClassLoader.java @@ -0,0 +1,72 @@ +package io.lumigo.agent; + +import java.net.URL; +import java.net.URLClassLoader; + +/** + * This class is refered from : + * https://github.com/gaoxingliang/tracing-research/blob/main/bootstrap/src/main/java/com/zoomphant/agent/trace/boost/StandaloneAgentClassloader.java + */ +public class AgentClassLoader extends URLClassLoader { + + private final ClassLoader additionalClassloader; + + public AgentClassLoader(URL[] urls, ClassLoader additionalClassloader) { + super(urls, ClassLoader.getSystemClassLoader().getParent()); + this.additionalClassloader = additionalClassloader; + } + + @Override + protected synchronized Class loadClass(String name, boolean resolve) throws ClassNotFoundException { + Class loadedClass = findLoadedClass(name); + if (loadedClass != null) { + return loadedClass; + } + + if (name != null && (name.startsWith("sun.") || name.startsWith("java."))) { + return super.loadClass(name, resolve); + } + + ClassLoader platformClassLoader = safeGetPlatformClassLoader(); + if (platformClassLoader != null) { + // try load from platform class loader + try { + loadedClass = platformClassLoader.loadClass(name); + return loadedClass; + } catch (Exception ignore) { + } + } + if (additionalClassloader != null) { + // try load from additional classloader + try { + loadedClass = additionalClassloader.loadClass(name); + return loadedClass; + } catch (Exception ignore) { + } + } + try { + loadedClass = this.getParent().loadClass(name); + return loadedClass; + } catch (Exception e) { + } + try { + Class aClass = findClass(name); + if (resolve) { + resolveClass(aClass); + } + return aClass; + } catch (Exception e) { + // ignore + } + return super.loadClass(name, resolve); + } + + private ClassLoader safeGetPlatformClassLoader() { + // get platform class loader with reflection + try { + return (ClassLoader) ClassLoader.class.getDeclaredMethod("getPlatformClassLoader").invoke(null); + } catch (Exception e) { + return null; + } + } +} \ No newline at end of file diff --git a/pom.xml b/pom.xml index c7acf71..fd7e2dc 100644 --- a/pom.xml +++ b/pom.xml @@ -79,25 +79,25 @@ com.amazonaws aws-java-sdk-kinesis 1.11.505 - compile + provided com.amazonaws aws-java-sdk-s3 1.11.505 - compile + provided com.amazonaws aws-java-sdk-sns 1.11.505 - compile + provided com.amazonaws aws-java-sdk-dynamodb 1.11.551 - compile + provided @@ -105,31 +105,26 @@ software.amazon.awssdk lambda 2.25.45 - compile software.amazon.awssdk dynamodb 2.25.45 - compile software.amazon.awssdk sqs 2.25.45 - compile software.amazon.awssdk sns 2.25.45 - compile software.amazon.awssdk kinesis 2.25.45 - compile @@ -137,7 +132,6 @@ org.apache.kafka kafka-clients 3.1.0 - compile diff --git a/src/main/java/io/lumigo/core/instrumentation/LumigoInstrumentationApi.java b/src/main/java/io/lumigo/core/instrumentation/LumigoInstrumentationApi.java index 4406df0..6865603 100644 --- a/src/main/java/io/lumigo/core/instrumentation/LumigoInstrumentationApi.java +++ b/src/main/java/io/lumigo/core/instrumentation/LumigoInstrumentationApi.java @@ -8,5 +8,5 @@ public interface LumigoInstrumentationApi { ElementMatcher getTypeMatcher(); - AgentBuilder.Transformer.ForAdvice getTransformer(); + AgentBuilder.Transformer.ForAdvice getTransformer(ClassLoader classLoader); } diff --git a/src/main/java/io/lumigo/core/instrumentation/agent/Loader.java b/src/main/java/io/lumigo/core/instrumentation/agent/Loader.java index 3d82db0..c9e7f78 100644 --- a/src/main/java/io/lumigo/core/instrumentation/agent/Loader.java +++ b/src/main/java/io/lumigo/core/instrumentation/agent/Loader.java @@ -6,7 +6,7 @@ @SuppressWarnings("unused") public class Loader { - public static void instrument(java.lang.instrument.Instrumentation inst) { + public static void instrument(java.lang.instrument.Instrumentation inst, ClassLoader classLoader) { Logger.debug("Start Instrumentation"); ApacheHttpInstrumentation apacheHttpInstrumentation = new ApacheHttpInstrumentation(); AmazonHttpClientInstrumentation amazonHttpClientInstrumentation = @@ -24,17 +24,20 @@ public static void instrument(java.lang.instrument.Instrumentation inst) { .disableClassFormatChanges() .with(AgentBuilder.RedefinitionStrategy.RETRANSFORMATION) .type(apacheHttpInstrumentation.getTypeMatcher()) - .transform(apacheHttpInstrumentation.getTransformer()) + .transform(apacheHttpInstrumentation.getTransformer(classLoader)) .type(amazonHttpClientInstrumentation.getTypeMatcher()) - .transform(amazonHttpClientInstrumentation.getTransformer()) + .transform(amazonHttpClientInstrumentation.getTransformer(classLoader)) .type(amazonHttpClientV2Instrumentation.getTypeMatcher()) - .transform(amazonHttpClientV2Instrumentation.getTransformer()) + .transform(amazonHttpClientV2Instrumentation.getTransformer(classLoader)) .type(apacheKafkaInstrumentation.getTypeMatcher()) - .transform(apacheKafkaInstrumentation.getTransformer()) + .transform(apacheKafkaInstrumentation.getTransformer(classLoader)) .type(apacheKafkaConsumerInstrumentation.getTypeMatcher()) - .transform(apacheKafkaConsumerInstrumentation.getTransformer()) + .transform(apacheKafkaConsumerInstrumentation.getTransformer(classLoader)) .type(awsLambdaRequestHandlerInstrumentation.getTypeMatcher()) - .transform(awsLambdaRequestHandlerInstrumentation.getTransformer()); + .transform(awsLambdaRequestHandlerInstrumentation.getTransformer(classLoader)) + .with(AgentBuilder.Listener.StreamWriting.toSystemError()) + .with(AgentBuilder.InstallationListener.StreamWriting.toSystemError()) + ; builder.installOn(inst); Logger.debug("Finish Instrumentation"); diff --git a/src/main/java/io/lumigo/core/instrumentation/impl/AmazonHttpClientInstrumentation.java b/src/main/java/io/lumigo/core/instrumentation/impl/AmazonHttpClientInstrumentation.java index 8720c19..170b467 100644 --- a/src/main/java/io/lumigo/core/instrumentation/impl/AmazonHttpClientInstrumentation.java +++ b/src/main/java/io/lumigo/core/instrumentation/impl/AmazonHttpClientInstrumentation.java @@ -23,9 +23,9 @@ public ElementMatcher getTypeMatcher() { } @Override - public AgentBuilder.Transformer.ForAdvice getTransformer() { + public AgentBuilder.Transformer.ForAdvice getTransformer(ClassLoader classLoader) { return new AgentBuilder.Transformer.ForAdvice() - .include(ClassLoader.getSystemClassLoader()) + .include(classLoader) .advice( isMethod().and(named("execute")), AmazonHttpClientInstrumentation.class.getName() diff --git a/src/main/java/io/lumigo/core/instrumentation/impl/AmazonHttpClientV2Instrumentation.java b/src/main/java/io/lumigo/core/instrumentation/impl/AmazonHttpClientV2Instrumentation.java index 43b590e..4382239 100644 --- a/src/main/java/io/lumigo/core/instrumentation/impl/AmazonHttpClientV2Instrumentation.java +++ b/src/main/java/io/lumigo/core/instrumentation/impl/AmazonHttpClientV2Instrumentation.java @@ -12,6 +12,7 @@ import net.bytebuddy.description.type.TypeDescription; import net.bytebuddy.matcher.ElementMatcher; import org.pmw.tinylog.Logger; +import software.amazon.awssdk.core.client.builder.SdkDefaultClientBuilder; import software.amazon.awssdk.core.interceptor.Context; import software.amazon.awssdk.core.interceptor.ExecutionAttributes; import software.amazon.awssdk.core.interceptor.ExecutionInterceptor; @@ -27,9 +28,9 @@ public ElementMatcher getTypeMatcher() { } @Override - public AgentBuilder.Transformer.ForAdvice getTransformer() { + public AgentBuilder.Transformer.ForAdvice getTransformer(ClassLoader classLoader) { return new AgentBuilder.Transformer.ForAdvice() - .include(ClassLoader.getSystemClassLoader()) + .include(classLoader) .advice( isMethod().and(named("resolveExecutionInterceptors")), AmazonHttpClientV2Instrumentation.class.getName() diff --git a/src/main/java/io/lumigo/core/instrumentation/impl/ApacheHttpInstrumentation.java b/src/main/java/io/lumigo/core/instrumentation/impl/ApacheHttpInstrumentation.java index 1d02f25..51b232a 100644 --- a/src/main/java/io/lumigo/core/instrumentation/impl/ApacheHttpInstrumentation.java +++ b/src/main/java/io/lumigo/core/instrumentation/impl/ApacheHttpInstrumentation.java @@ -23,9 +23,9 @@ public ElementMatcher getTypeMatcher() { } @Override - public AgentBuilder.Transformer.ForAdvice getTransformer() { + public AgentBuilder.Transformer.ForAdvice getTransformer(ClassLoader classLoader) { return new AgentBuilder.Transformer.ForAdvice() - .include(ClassLoader.getSystemClassLoader()) + .include(classLoader) .advice( isMethod() .and(named("execute")) diff --git a/src/main/java/io/lumigo/core/instrumentation/impl/ApacheKafkaConsumerInstrumentation.java b/src/main/java/io/lumigo/core/instrumentation/impl/ApacheKafkaConsumerInstrumentation.java index 5e0469b..46ce581 100644 --- a/src/main/java/io/lumigo/core/instrumentation/impl/ApacheKafkaConsumerInstrumentation.java +++ b/src/main/java/io/lumigo/core/instrumentation/impl/ApacheKafkaConsumerInstrumentation.java @@ -22,9 +22,9 @@ public ElementMatcher getTypeMatcher() { } @Override - public AgentBuilder.Transformer.ForAdvice getTransformer() { + public AgentBuilder.Transformer.ForAdvice getTransformer(ClassLoader classLoader) { return new AgentBuilder.Transformer.ForAdvice() - .include(ClassLoader.getSystemClassLoader()) + .include(classLoader) .advice( isMethod() .and(isPublic()) diff --git a/src/main/java/io/lumigo/core/instrumentation/impl/ApacheKafkaProducerInstrumentation.java b/src/main/java/io/lumigo/core/instrumentation/impl/ApacheKafkaProducerInstrumentation.java index a885108..0f96957 100644 --- a/src/main/java/io/lumigo/core/instrumentation/impl/ApacheKafkaProducerInstrumentation.java +++ b/src/main/java/io/lumigo/core/instrumentation/impl/ApacheKafkaProducerInstrumentation.java @@ -27,9 +27,9 @@ public ElementMatcher getTypeMatcher() { } @Override - public AgentBuilder.Transformer.ForAdvice getTransformer() { + public AgentBuilder.Transformer.ForAdvice getTransformer(ClassLoader classLoader) { return new AgentBuilder.Transformer.ForAdvice() - .include(ClassLoader.getSystemClassLoader()) + .include(classLoader) .advice( isMethod() .and(isPublic()) diff --git a/src/main/java/io/lumigo/core/instrumentation/impl/AwsLambdaRequestHandlerInstrumentation.java b/src/main/java/io/lumigo/core/instrumentation/impl/AwsLambdaRequestHandlerInstrumentation.java index d39462e..94eee03 100644 --- a/src/main/java/io/lumigo/core/instrumentation/impl/AwsLambdaRequestHandlerInstrumentation.java +++ b/src/main/java/io/lumigo/core/instrumentation/impl/AwsLambdaRequestHandlerInstrumentation.java @@ -31,9 +31,9 @@ public ElementMatcher getTypeMatcher() { } @Override - public AgentBuilder.Transformer.ForAdvice getTransformer() { + public AgentBuilder.Transformer.ForAdvice getTransformer(ClassLoader classLoader) { return new AgentBuilder.Transformer.ForAdvice() - .include(ClassLoader.getSystemClassLoader()) + .include(classLoader) .advice( isMethod() .and(isPublic())