diff --git a/ddlambda.go b/ddlambda.go index c8ee2ca..41030bf 100644 --- a/ddlambda.go +++ b/ddlambda.go @@ -18,12 +18,14 @@ import ( "strings" "time" + "github.com/aws/aws-lambda-go/lambda" + "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer" + "github.com/DataDog/datadog-lambda-go/internal/extension" "github.com/DataDog/datadog-lambda-go/internal/logger" "github.com/DataDog/datadog-lambda-go/internal/metrics" "github.com/DataDog/datadog-lambda-go/internal/trace" "github.com/DataDog/datadog-lambda-go/internal/wrapper" - "github.com/aws/aws-lambda-go/lambda" ) type ( @@ -71,6 +73,8 @@ type ( // TraceContextExtractor is the function that extracts a root/parent trace context from the Lambda event body. // See trace.DefaultTraceExtractor for an example. TraceContextExtractor trace.ContextExtractor + // TracerOptions are additional options passed to the tracer. + TracerOptions []tracer.StartOption } ) @@ -214,6 +218,7 @@ func (cfg *Config) toTraceConfig() trace.Config { traceConfig.DDTraceEnabled = cfg.DDTraceEnabled traceConfig.MergeXrayTraces = cfg.MergeXrayTraces traceConfig.TraceContextExtractor = cfg.TraceContextExtractor + traceConfig.TracerOptions = cfg.TracerOptions } if traceConfig.TraceContextExtractor == nil { diff --git a/internal/trace/listener.go b/internal/trace/listener.go index 41c390c..89f3417 100644 --- a/internal/trace/listener.go +++ b/internal/trace/listener.go @@ -34,6 +34,7 @@ type ( otelTracerEnabled bool extensionManager *extension.ExtensionManager traceContextExtractor ContextExtractor + tracerOptions []tracer.StartOption } // Config gives options for how the Listener should work @@ -43,6 +44,7 @@ type ( UniversalInstrumentation bool OtelTracerEnabled bool TraceContextExtractor ContextExtractor + TracerOptions []tracer.StartOption } ) @@ -61,6 +63,7 @@ func MakeListener(config Config, extensionManager *extension.ExtensionManager) L otelTracerEnabled: config.OtelTracerEnabled, extensionManager: extensionManager, traceContextExtractor: config.TraceContextExtractor, + tracerOptions: config.TracerOptions, } } @@ -82,12 +85,12 @@ func (l *Listener) HandlerStarted(ctx context.Context, msg json.RawMessage) cont serviceName = "aws.lambda" } extensionNotRunning := !l.extensionManager.IsExtensionRunning() - opts := []tracer.StartOption{ + opts := append([]tracer.StartOption{ tracer.WithService(serviceName), tracer.WithLambdaMode(extensionNotRunning), tracer.WithGlobalTag("_dd.origin", "lambda"), tracer.WithSendRetries(2), - } + }, l.tracerOptions...) if l.otelTracerEnabled { provider := ddotel.NewTracerProvider( opts...,