Skip to content

Commit 70af386

Browse files
committed
move tracer initialization to lambda init
1 parent ba13e54 commit 70af386

File tree

1 file changed

+34
-27
lines changed

1 file changed

+34
-27
lines changed

internal/trace/listener.go

Lines changed: 34 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,7 @@ var tracerInitialized = false
5555

5656
// MakeListener initializes a new trace lambda Listener
5757
func MakeListener(config Config, extensionManager *extension.ExtensionManager) Listener {
58-
59-
return Listener{
58+
l := Listener{
6059
ddTraceEnabled: config.DDTraceEnabled,
6160
mergeXrayTraces: config.MergeXrayTraces,
6261
universalInstrumentation: config.UniversalInstrumentation,
@@ -65,6 +64,39 @@ func MakeListener(config Config, extensionManager *extension.ExtensionManager) L
6564
traceContextExtractor: config.TraceContextExtractor,
6665
tracerOptions: config.TracerOptions,
6766
}
67+
68+
// Initialize tracer during Lambda init phase (only if tracing enabled)
69+
if l.ddTraceEnabled && !tracerInitialized {
70+
l.initTracer()
71+
}
72+
73+
return l
74+
}
75+
76+
// initTracer starts the Datadog tracer or OpenTelemetry provider
77+
func (l *Listener) initTracer() {
78+
serviceName := os.Getenv("DD_SERVICE")
79+
if serviceName == "" {
80+
serviceName = "aws.lambda"
81+
}
82+
extensionNotRunning := !l.extensionManager.IsExtensionRunning()
83+
opts := append([]tracer.StartOption{
84+
tracer.WithService(serviceName),
85+
tracer.WithLambdaMode(extensionNotRunning),
86+
tracer.WithGlobalTag("_dd.origin", "lambda"),
87+
tracer.WithSendRetries(2),
88+
}, l.tracerOptions...)
89+
if l.otelTracerEnabled {
90+
provider := ddotel.NewTracerProvider(
91+
opts...,
92+
)
93+
otel.SetTracerProvider(provider)
94+
} else {
95+
tracer.Start(
96+
opts...,
97+
)
98+
}
99+
tracerInitialized = true
68100
}
69101

70102
// HandlerStarted sets up tracing and starts the function execution span if Datadog tracing is enabled
@@ -79,31 +111,6 @@ func (l *Listener) HandlerStarted(ctx context.Context, msg json.RawMessage) cont
79111

80112
ctx, _ = contextWithRootTraceContext(ctx, msg, l.mergeXrayTraces, l.traceContextExtractor)
81113

82-
if !tracerInitialized {
83-
serviceName := os.Getenv("DD_SERVICE")
84-
if serviceName == "" {
85-
serviceName = "aws.lambda"
86-
}
87-
extensionNotRunning := !l.extensionManager.IsExtensionRunning()
88-
opts := append([]tracer.StartOption{
89-
tracer.WithService(serviceName),
90-
tracer.WithLambdaMode(extensionNotRunning),
91-
tracer.WithGlobalTag("_dd.origin", "lambda"),
92-
tracer.WithSendRetries(2),
93-
}, l.tracerOptions...)
94-
if l.otelTracerEnabled {
95-
provider := ddotel.NewTracerProvider(
96-
opts...,
97-
)
98-
otel.SetTracerProvider(provider)
99-
} else {
100-
tracer.Start(
101-
opts...,
102-
)
103-
}
104-
tracerInitialized = true
105-
}
106-
107114
isDdServerlessSpan := l.universalInstrumentation && l.extensionManager.IsExtensionRunning()
108115
functionExecutionSpan, ctx = startFunctionExecutionSpan(ctx, l.mergeXrayTraces, isDdServerlessSpan)
109116

0 commit comments

Comments
 (0)