Skip to content

Commit fa72b69

Browse files
fix(contrib/aws/datadog-lambda-go): start tracer while initializing lambda listener (#4371)
Co-authored-by: shreya.malpani <shreya.malpani@datadoghq.com>
1 parent e334908 commit fa72b69

File tree

1 file changed

+33
-28
lines changed
  • contrib/aws/datadog-lambda-go/internal/trace

1 file changed

+33
-28
lines changed

contrib/aws/datadog-lambda-go/internal/trace/listener.go

Lines changed: 33 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,7 @@ var tracerInitialized = false
5353

5454
// MakeListener initializes a new trace lambda Listener
5555
func MakeListener(config Config, extensionManager *extension.ExtensionManager) Listener {
56-
57-
return Listener{
56+
l := Listener{
5857
ddTraceEnabled: config.DDTraceEnabled,
5958
mergeXrayTraces: config.MergeXrayTraces,
6059
universalInstrumentation: config.UniversalInstrumentation,
@@ -63,9 +62,40 @@ func MakeListener(config Config, extensionManager *extension.ExtensionManager) L
6362
traceContextExtractor: config.TraceContextExtractor,
6463
tracerOptions: config.TracerOptions,
6564
}
65+
66+
if l.ddTraceEnabled && !tracerInitialized {
67+
l.initTracer()
68+
}
69+
70+
return l
71+
}
72+
73+
func (l *Listener) initTracer() {
74+
serviceName := os.Getenv("DD_SERVICE")
75+
if serviceName == "" {
76+
serviceName = internal.Instr.ServiceName(instrumentation.ComponentDefault, instrumentation.OperationContext{})
77+
}
78+
extensionNotRunning := !l.extensionManager.IsExtensionRunning()
79+
opts := append([]ddtracer.StartOption{
80+
ddtracer.WithService(serviceName),
81+
ddtracer.WithLambdaMode(extensionNotRunning),
82+
ddtracer.WithGlobalTag("_dd.origin", "lambda"),
83+
ddtracer.WithSendRetries(2),
84+
}, l.tracerOptions...)
85+
if l.otelTracerEnabled {
86+
provider := ddotel.NewTracerProvider(
87+
opts...,
88+
)
89+
otel.SetTracerProvider(provider)
90+
} else {
91+
ddtracer.Start(
92+
opts...,
93+
)
94+
}
95+
tracerInitialized = true
6696
}
6797

68-
// HandlerStarted sets up tracing and starts the function execution span if Datadog tracing is enabled
98+
// HandlerStarted starts the function execution span if Datadog tracing is enabled
6999
func (l *Listener) HandlerStarted(ctx context.Context, msg json.RawMessage) context.Context {
70100
if !l.ddTraceEnabled {
71101
return ctx
@@ -77,31 +107,6 @@ func (l *Listener) HandlerStarted(ctx context.Context, msg json.RawMessage) cont
77107

78108
ctx, _ = contextWithRootTraceContext(ctx, msg, l.mergeXrayTraces, l.traceContextExtractor)
79109

80-
if !tracerInitialized {
81-
serviceName := os.Getenv("DD_SERVICE")
82-
if serviceName == "" {
83-
serviceName = internal.Instr.ServiceName(instrumentation.ComponentDefault, instrumentation.OperationContext{})
84-
}
85-
extensionNotRunning := !l.extensionManager.IsExtensionRunning()
86-
opts := append([]ddtracer.StartOption{
87-
ddtracer.WithService(serviceName),
88-
ddtracer.WithLambdaMode(extensionNotRunning),
89-
ddtracer.WithGlobalTag("_dd.origin", "lambda"),
90-
ddtracer.WithSendRetries(2),
91-
}, l.tracerOptions...)
92-
if l.otelTracerEnabled {
93-
provider := ddotel.NewTracerProvider(
94-
opts...,
95-
)
96-
otel.SetTracerProvider(provider)
97-
} else {
98-
ddtracer.Start(
99-
opts...,
100-
)
101-
}
102-
tracerInitialized = true
103-
}
104-
105110
isDdServerlessSpan := l.universalInstrumentation && l.extensionManager.IsExtensionRunning()
106111
functionExecutionSpan, ctx = startFunctionExecutionSpan(ctx, l.mergeXrayTraces, isDdServerlessSpan)
107112

0 commit comments

Comments
 (0)