Skip to content

Commit c52606f

Browse files
committed
add request-id to lambda start/end invocation calls
1 parent b6d4e4f commit c52606f

File tree

4 files changed

+27
-14
lines changed

4 files changed

+27
-14
lines changed

dd-java-agent/instrumentation/aws-java/aws-java-lambda-handler-1.2/src/main/java/datadog/trace/instrumentation/aws/v1/lambda/LambdaHandlerInstrumentation.java

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -88,15 +88,15 @@ static AgentScope enter(
8888
if (CallDepthThreadLocalMap.incrementCallDepth(RequestHandler.class) > 0) {
8989
return null;
9090
}
91-
92-
AgentSpanContext lambdaContext = AgentTracer.get().notifyExtensionStart(in);
91+
String lambdaRequestId = awsContext.getAwsRequestId();
92+
AgentSpanContext lambdaContext = AgentTracer.get().notifyExtensionStart(in, lambdaRequestId);
9393
final AgentSpan span;
9494
if (null == lambdaContext) {
9595
span = startSpan(INVOCATION_SPAN_NAME);
9696
} else {
9797
span = startSpan(INVOCATION_SPAN_NAME, lambdaContext);
9898
}
99-
span.setTag("request_id", awsContext.getAwsRequestId());
99+
span.setTag("request_id", lambdaRequestId);
100100

101101
final AgentScope scope = activateSpan(span);
102102
return scope;
@@ -107,6 +107,7 @@ static void exit(
107107
@Origin String method,
108108
@Enter final AgentScope scope,
109109
@Advice.Argument(1) final Object result,
110+
@Advice.Argument(2) final Context awsContext,
110111
@Advice.Thrown final Throwable throwable) {
111112

112113
if (scope == null) {
@@ -120,8 +121,14 @@ static void exit(
120121
if (throwable != null) {
121122
span.addThrowable(throwable);
122123
}
124+
String lambdaRequestId = awsContext.getAwsRequestId();
125+
126+
// QUESTION would it be better to get request id from span tag instead? So we dont have to
127+
// change method signature
128+
// E.G:
129+
// String lambdaRequestIdFromSpan = (String) span.getTag("request_id");
123130
span.finish();
124-
AgentTracer.get().notifyExtensionEnd(span, result, null != throwable);
131+
AgentTracer.get().notifyExtensionEnd(span, result, null != throwable, lambdaRequestId);
125132
} finally {
126133
scope.close();
127134
}

dd-trace-core/src/main/java/datadog/trace/core/CoreTracer.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1194,13 +1194,13 @@ public void closeActive() {
11941194
}
11951195

11961196
@Override
1197-
public AgentSpanContext notifyExtensionStart(Object event) {
1198-
return LambdaHandler.notifyStartInvocation(this, event);
1197+
public AgentSpanContext notifyExtensionStart(Object event, String requestId) {
1198+
return LambdaHandler.notifyStartInvocation(this, event, requestId);
11991199
}
12001200

12011201
@Override
1202-
public void notifyExtensionEnd(AgentSpan span, Object result, boolean isError) {
1203-
LambdaHandler.notifyEndInvocation(span, result, isError);
1202+
public void notifyExtensionEnd(AgentSpan span, Object result, boolean isError, String requestId) {
1203+
LambdaHandler.notifyEndInvocation(span, result, isError, requestId);
12041204
}
12051205

12061206
@Override

dd-trace-core/src/main/java/datadog/trace/lambda/LambdaHandler.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ public class LambdaHandler {
4343
private static final String DATADOG_INVOCATION_ERROR_MSG = "x-datadog-invocation-error-msg";
4444
private static final String DATADOG_INVOCATION_ERROR_TYPE = "x-datadog-invocation-error-type";
4545
private static final String DATADOG_INVOCATION_ERROR_STACK = "x-datadog-invocation-error-stack";
46+
private static final String LAMBDA_RUNTIME_AWS_REQUEST_ID = "lambda-runtime-aws-request-id";
4647

4748
private static final String START_INVOCATION = "/lambda/start-invocation";
4849
private static final String END_INVOCATION = "/lambda/end-invocation";
@@ -72,14 +73,16 @@ public class LambdaHandler {
7273

7374
private static String EXTENSION_BASE_URL = "http://127.0.0.1:8124";
7475

75-
public static AgentSpanContext notifyStartInvocation(CoreTracer tracer, Object event) {
76+
public static AgentSpanContext notifyStartInvocation(
77+
CoreTracer tracer, Object event, String requestId) {
7678
RequestBody body = RequestBody.create(jsonMediaType, writeValueAsString(event));
7779
try (Response response =
7880
HTTP_CLIENT
7981
.newCall(
8082
new Request.Builder()
8183
.url(EXTENSION_BASE_URL + START_INVOCATION)
8284
.addHeader(DATADOG_META_LANG, "java")
85+
.addHeader(LAMBDA_RUNTIME_AWS_REQUEST_ID, requestId)
8386
.post(body)
8487
.build())
8588
.execute()) {
@@ -99,7 +102,8 @@ public static AgentSpanContext notifyStartInvocation(CoreTracer tracer, Object e
99102
return null;
100103
}
101104

102-
public static boolean notifyEndInvocation(AgentSpan span, Object result, boolean isError) {
105+
public static boolean notifyEndInvocation(
106+
AgentSpan span, Object result, boolean isError, String requestId) {
103107
if (null == span || null == span.getSamplingPriority()) {
104108
log.error(
105109
"could not notify the extension as the lambda span is null or no sampling priority has been found");
@@ -113,6 +117,7 @@ public static boolean notifyEndInvocation(AgentSpan span, Object result, boolean
113117
.addHeader(DATADOG_SPAN_ID, DDSpanId.toString(span.getSpanId()))
114118
.addHeader(DATADOG_SAMPLING_PRIORITY, span.getSamplingPriority().toString())
115119
.addHeader(DATADOG_META_LANG, "java")
120+
.addHeader(LAMBDA_RUNTIME_AWS_REQUEST_ID, requestId)
116121
.post(body);
117122

118123
Object errorMessage = span.getTag(DDTags.ERROR_MSG);

internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/AgentTracer.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -406,9 +406,9 @@ default SpanBuilder singleSpanBuilder(CharSequence spanName) {
406406

407407
CallbackProvider getUniversalCallbackProvider();
408408

409-
AgentSpanContext notifyExtensionStart(Object event);
409+
AgentSpanContext notifyExtensionStart(Object event, String requestId);
410410

411-
void notifyExtensionEnd(AgentSpan span, Object result, boolean isError);
411+
void notifyExtensionEnd(AgentSpan span, Object result, boolean isError, String requestId);
412412

413413
AgentDataStreamsMonitoring getDataStreamsMonitoring();
414414

@@ -653,12 +653,13 @@ public EndpointTracker onRootSpanStarted(AgentSpan root) {
653653
}
654654

655655
@Override
656-
public AgentSpanContext notifyExtensionStart(Object event) {
656+
public AgentSpanContext notifyExtensionStart(Object event, String requestId) {
657657
return null;
658658
}
659659

660660
@Override
661-
public void notifyExtensionEnd(AgentSpan span, Object result, boolean isError) {}
661+
public void notifyExtensionEnd(
662+
AgentSpan span, Object result, boolean isError, String requestId) {}
662663

663664
@Override
664665
public AgentDataStreamsMonitoring getDataStreamsMonitoring() {

0 commit comments

Comments
 (0)