@@ -55,8 +55,7 @@ var tracerInitialized = false
5555
5656// MakeListener initializes a new trace lambda Listener
5757func 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