fix(serverless): add base_service tag for serverless [backport #17238 to 4.7]#17441
Conversation
## Overview Fixes `_dd.base_service` handling for AWS Lambda environments in the Python tracer, enabling service remapping rules to work on Lambda spans and ensuring trace stats contain a meaningful `base_service`. ### Changes **`ddtrace/internal/settings/_config.py`** — When `DD_SERVICE` is not configured and the tracer is running in AWS Lambda, `config.service` is now automatically set from `AWS_LAMBDA_FUNCTION_NAME`. This mirrors existing GCP (`K_SERVICE`) and Azure (`WEBSITE_SITE_NAME`) auto-detection behavior. **`ddtrace/internal/schema/processor.py`** — Removes the Lambda-specific early exit from `BaseServiceProcessor`. Previously, the processor skipped all Lambda spans to avoid unhelpful `base_service` values from the runtime. Now that the service is correctly resolved from the function name, the processor runs normally and `_dd.base_service` is properly attached to spans. ## Testing Existing serverless system tests pass (ALB, API Gateway HTTP/REST, Function URL). ## Risks Low. The change only affects Lambda environments where `DD_SERVICE` is not explicitly set. The resolved service name (`AWS_LAMBDA_FUNCTION_NAME`) matches what the extension already uses for extension-based languages, ensuring consistency across runtimes. Co-authored-by: zarir.hamza <zarir.hamza@datadoghq.com>
Codeowners resolved as |
This comment has been minimized.
This comment has been minimized.
Performance SLOsComparing candidate backport-17238-to-4.7 (2aed816) with baseline 4.7 (65fecc4) 📈 Performance Regressions (2 suites)📈 iastaspects - 118/118✅ add_aspectTime: ✅ 104.236µs (SLO: <130.000µs 📉 -19.8%) vs baseline: +2.9% Memory: ✅ 43.747MB (SLO: <46.000MB -4.9%) vs baseline: +4.9% ✅ add_inplace_aspectTime: ✅ 102.563µs (SLO: <130.000µs 📉 -21.1%) vs baseline: -0.8% Memory: ✅ 43.863MB (SLO: <46.000MB -4.6%) vs baseline: +5.5% ✅ add_inplace_noaspectTime: ✅ 28.417µs (SLO: <40.000µs 📉 -29.0%) vs baseline: +0.9% Memory: ✅ 43.814MB (SLO: <46.000MB -4.8%) vs baseline: +5.6% ✅ add_noaspectTime: ✅ 48.708µs (SLO: <70.000µs 📉 -30.4%) vs baseline: -1.1% Memory: ✅ 43.671MB (SLO: <46.000MB -5.1%) vs baseline: +4.9% ✅ bytearray_aspectTime: ✅ 256.859µs (SLO: <400.000µs 📉 -35.8%) vs baseline: +0.2% Memory: ✅ 43.823MB (SLO: <46.000MB -4.7%) vs baseline: +5.3% ✅ bytearray_extend_aspectTime: ✅ 665.839µs (SLO: <800.000µs 📉 -16.8%) vs baseline: +1.5% Memory: ✅ 43.759MB (SLO: <46.000MB -4.9%) vs baseline: +5.1% ✅ bytearray_extend_noaspectTime: ✅ 275.777µs (SLO: <400.000µs 📉 -31.1%) vs baseline: +0.3% Memory: ✅ 43.794MB (SLO: <46.000MB -4.8%) vs baseline: +5.2% ✅ bytearray_noaspectTime: ✅ 143.852µs (SLO: <300.000µs 📉 -52.0%) vs baseline: -0.5% Memory: ✅ 43.744MB (SLO: <46.000MB -4.9%) vs baseline: +4.8% ✅ bytes_aspectTime: ✅ 221.621µs (SLO: <300.000µs 📉 -26.1%) vs baseline: +0.5% Memory: ✅ 43.832MB (SLO: <46.000MB -4.7%) vs baseline: +5.2% ✅ bytes_noaspectTime: ✅ 136.725µs (SLO: <200.000µs 📉 -31.6%) vs baseline: +0.7% Memory: ✅ 43.711MB (SLO: <46.000MB -5.0%) vs baseline: +5.2% ✅ bytesio_aspectTime: ✅ 3.876ms (SLO: <5.000ms 📉 -22.5%) vs baseline: ~same Memory: ✅ 43.641MB (SLO: <46.000MB -5.1%) vs baseline: +5.0% ✅ bytesio_noaspectTime: ✅ 320.758µs (SLO: <420.000µs 📉 -23.6%) vs baseline: -1.0% Memory: ✅ 43.757MB (SLO: <46.000MB -4.9%) vs baseline: +5.3% ✅ capitalize_aspectTime: ✅ 89.924µs (SLO: <300.000µs 📉 -70.0%) vs baseline: -0.1% Memory: ✅ 43.760MB (SLO: <46.000MB -4.9%) vs baseline: +5.5% ✅ capitalize_noaspectTime: ✅ 256.805µs (SLO: <300.000µs 📉 -14.4%) vs baseline: ~same Memory: ✅ 43.661MB (SLO: <46.000MB -5.1%) vs baseline: +4.7% ✅ casefold_aspectTime: ✅ 91.714µs (SLO: <500.000µs 📉 -81.7%) vs baseline: +1.8% Memory: ✅ 43.790MB (SLO: <46.000MB -4.8%) vs baseline: +5.3% ✅ casefold_noaspectTime: ✅ 317.466µs (SLO: <500.000µs 📉 -36.5%) vs baseline: +0.4% Memory: ✅ 43.855MB (SLO: <46.000MB -4.7%) vs baseline: +5.3% ✅ decode_aspectTime: ✅ 87.235µs (SLO: <100.000µs 📉 -12.8%) vs baseline: +0.3% Memory: ✅ 43.826MB (SLO: <46.000MB -4.7%) vs baseline: +5.1% ✅ decode_noaspectTime: ✅ 158.001µs (SLO: <210.000µs 📉 -24.8%) vs baseline: +2.6% Memory: ✅ 43.733MB (SLO: <46.000MB -4.9%) vs baseline: +5.0% ✅ encode_aspectTime: ✅ 84.516µs (SLO: <200.000µs 📉 -57.7%) vs baseline: ~same Memory: ✅ 43.802MB (SLO: <46.000MB -4.8%) vs baseline: +5.4% ✅ encode_noaspectTime: ✅ 145.304µs (SLO: <200.000µs 📉 -27.3%) vs baseline: +1.3% Memory: ✅ 43.737MB (SLO: <46.000MB -4.9%) vs baseline: +5.1% ✅ format_aspectTime: ✅ 14.664ms (SLO: <19.200ms 📉 -23.6%) vs baseline: ~same Memory: ✅ 44.117MB (SLO: <46.000MB -4.1%) vs baseline: +5.3% ✅ format_map_aspectTime: ✅ 16.434ms (SLO: <21.500ms 📉 -23.6%) vs baseline: ~same Memory: ✅ 43.968MB (SLO: <46.000MB -4.4%) vs baseline: +5.1% ✅ format_map_noaspectTime: ✅ 376.540µs (SLO: <500.000µs 📉 -24.7%) vs baseline: +0.8% Memory: ✅ 43.806MB (SLO: <46.000MB -4.8%) vs baseline: +5.4% ✅ format_noaspectTime: ✅ 314.047µs (SLO: <500.000µs 📉 -37.2%) vs baseline: -0.8% Memory: ✅ 43.771MB (SLO: <46.000MB -4.8%) vs baseline: +5.4% ✅ index_aspectTime: ✅ 122.234µs (SLO: <300.000µs 📉 -59.3%) vs baseline: +0.1% Memory: ✅ 43.929MB (SLO: <46.000MB -4.5%) vs baseline: +5.2% ✅ index_noaspectTime: ✅ 40.425µs (SLO: <300.000µs 📉 -86.5%) vs baseline: +0.5% Memory: ✅ 43.829MB (SLO: <46.000MB -4.7%) vs baseline: +5.3% ✅ join_aspectTime: ✅ 218.667µs (SLO: <300.000µs 📉 -27.1%) vs baseline: ~same Memory: ✅ 43.819MB (SLO: <46.000MB -4.7%) vs baseline: +5.2% ✅ join_noaspectTime: ✅ 143.309µs (SLO: <300.000µs 📉 -52.2%) vs baseline: -0.6% Memory: ✅ 43.783MB (SLO: <46.000MB -4.8%) vs baseline: +4.9% ✅ ljust_aspectTime: ✅ 509.146µs (SLO: <700.000µs 📉 -27.3%) vs baseline: +0.8% Memory: ✅ 43.964MB (SLO: <46.000MB -4.4%) vs baseline: +5.3% ✅ ljust_noaspectTime: ✅ 262.853µs (SLO: <300.000µs 📉 -12.4%) vs baseline: +0.8% Memory: ✅ 43.835MB (SLO: <46.000MB -4.7%) vs baseline: +5.2% ✅ lower_aspectTime: ✅ 302.609µs (SLO: <500.000µs 📉 -39.5%) vs baseline: -3.8% Memory: ✅ 43.771MB (SLO: <46.000MB -4.8%) vs baseline: +5.3% ✅ lower_noaspectTime: ✅ 241.728µs (SLO: <300.000µs 📉 -19.4%) vs baseline: +2.1% Memory: ✅ 43.717MB (SLO: <46.000MB -5.0%) vs baseline: +4.9% ✅ lstrip_aspectTime: ✅ 0.335ms (SLO: <3.000ms 📉 -88.8%) vs baseline: 📈 +18.9% Memory: ✅ 43.925MB (SLO: <46.000MB -4.5%) vs baseline: +5.5% ✅ lstrip_noaspectTime: ✅ 0.180ms (SLO: <3.000ms 📉 -94.0%) vs baseline: +0.4% Memory: ✅ 43.890MB (SLO: <46.000MB -4.6%) vs baseline: +5.7% ✅ modulo_aspectTime: ✅ 14.337ms (SLO: <18.750ms 📉 -23.5%) vs baseline: +0.1% Memory: ✅ 44.009MB (SLO: <46.000MB -4.3%) vs baseline: +5.3% ✅ modulo_aspect_for_bytearray_bytearrayTime: ✅ 14.813ms (SLO: <19.350ms 📉 -23.4%) vs baseline: ~same Memory: ✅ 44.057MB (SLO: <46.000MB -4.2%) vs baseline: +5.4% ✅ modulo_aspect_for_bytesTime: ✅ 14.439ms (SLO: <18.900ms 📉 -23.6%) vs baseline: ~same Memory: ✅ 43.968MB (SLO: <46.000MB -4.4%) vs baseline: +5.1% ✅ modulo_aspect_for_bytes_bytearrayTime: ✅ 14.660ms (SLO: <19.150ms 📉 -23.4%) vs baseline: +0.3% Memory: ✅ 44.068MB (SLO: <46.000MB -4.2%) vs baseline: +5.1% ✅ modulo_noaspectTime: ✅ 0.370ms (SLO: <3.000ms 📉 -87.7%) vs baseline: -0.3% Memory: ✅ 43.841MB (SLO: <46.000MB -4.7%) vs baseline: +5.3% ✅ replace_aspectTime: ✅ 19.074ms (SLO: <24.000ms 📉 -20.5%) vs baseline: +3.0% Memory: ✅ 43.952MB (SLO: <46.000MB -4.5%) vs baseline: +5.1% ✅ replace_noaspectTime: ✅ 288.223µs (SLO: <400.000µs 📉 -27.9%) vs baseline: +0.6% Memory: ✅ 43.796MB (SLO: <46.000MB -4.8%) vs baseline: +5.2% ✅ repr_aspectTime: ✅ 328.516µs (SLO: <420.000µs 📉 -21.8%) vs baseline: +0.3% Memory: ✅ 43.656MB (SLO: <46.000MB -5.1%) vs baseline: +4.9% ✅ repr_noaspectTime: ✅ 46.784µs (SLO: <90.000µs 📉 -48.0%) vs baseline: +0.3% Memory: ✅ 43.782MB (SLO: <46.000MB -4.8%) vs baseline: +5.3% ✅ rstrip_aspectTime: ✅ 392.534µs (SLO: <500.000µs 📉 -21.5%) vs baseline: -0.8% Memory: ✅ 43.903MB (SLO: <46.000MB -4.6%) vs baseline: +5.5% ✅ rstrip_noaspectTime: ✅ 187.351µs (SLO: <300.000µs 📉 -37.5%) vs baseline: +0.9% Memory: ✅ 43.750MB (SLO: <46.000MB -4.9%) vs baseline: +5.0% ✅ slice_aspectTime: ✅ 184.802µs (SLO: <300.000µs 📉 -38.4%) vs baseline: +0.7% Memory: ✅ 43.789MB (SLO: <46.000MB -4.8%) vs baseline: +5.3% ✅ slice_noaspectTime: ✅ 54.146µs (SLO: <90.000µs 📉 -39.8%) vs baseline: ~same Memory: ✅ 43.804MB (SLO: <46.000MB -4.8%) vs baseline: +5.5% ✅ stringio_aspectTime: ✅ 3.919ms (SLO: <5.000ms 📉 -21.6%) vs baseline: -0.2% Memory: ✅ 43.706MB (SLO: <46.000MB -5.0%) vs baseline: +4.9% ✅ stringio_noaspectTime: ✅ 357.083µs (SLO: <500.000µs 📉 -28.6%) vs baseline: -1.0% Memory: ✅ 43.710MB (SLO: <46.000MB -5.0%) vs baseline: +5.0% ✅ strip_aspectTime: ✅ 281.260µs (SLO: <350.000µs 📉 -19.6%) vs baseline: ~same Memory: ✅ 43.840MB (SLO: <46.000MB -4.7%) vs baseline: +5.5% ✅ strip_noaspectTime: ✅ 179.826µs (SLO: <240.000µs 📉 -25.1%) vs baseline: +1.1% Memory: ✅ 43.737MB (SLO: <46.000MB -4.9%) vs baseline: +5.2% ✅ swapcase_aspectTime: ✅ 350.198µs (SLO: <500.000µs 📉 -30.0%) vs baseline: +0.7% Memory: ✅ 43.877MB (SLO: <46.000MB -4.6%) vs baseline: +5.0% ✅ swapcase_noaspectTime: ✅ 280.069µs (SLO: <400.000µs 📉 -30.0%) vs baseline: +0.2% Memory: ✅ 43.864MB (SLO: <46.000MB -4.6%) vs baseline: +5.4% ✅ title_aspectTime: ✅ 333.317µs (SLO: <500.000µs 📉 -33.3%) vs baseline: -0.4% Memory: ✅ 43.812MB (SLO: <46.000MB -4.8%) vs baseline: +5.4% ✅ title_noaspectTime: ✅ 285.272µs (SLO: <400.000µs 📉 -28.7%) vs baseline: +2.4% Memory: ✅ 43.815MB (SLO: <46.000MB -4.7%) vs baseline: +5.5% ✅ translate_aspectTime: ✅ 501.352µs (SLO: <700.000µs 📉 -28.4%) vs baseline: -1.6% Memory: ✅ 43.822MB (SLO: <46.000MB -4.7%) vs baseline: +5.0% ✅ translate_noaspectTime: ✅ 430.006µs (SLO: <500.000µs 📉 -14.0%) vs baseline: -2.2% Memory: ✅ 43.781MB (SLO: <46.000MB -4.8%) vs baseline: +5.3% ✅ upper_aspectTime: ✅ 309.258µs (SLO: <500.000µs 📉 -38.1%) vs baseline: -0.2% Memory: ✅ 43.764MB (SLO: <46.000MB -4.9%) vs baseline: +5.2% ✅ upper_noaspectTime: ✅ 240.998µs (SLO: <400.000µs 📉 -39.8%) vs baseline: +1.3% Memory: ✅ 43.744MB (SLO: <46.000MB -4.9%) vs baseline: +4.9% 📈 iastaspectsospath - 24/24✅ ospathbasename_aspectTime: ✅ 515.182µs (SLO: <700.000µs 📉 -26.4%) vs baseline: 📈 +20.5% Memory: ✅ 43.519MB (SLO: <46.000MB -5.4%) vs baseline: +4.7% ✅ ospathbasename_noaspectTime: ✅ 430.983µs (SLO: <700.000µs 📉 -38.4%) vs baseline: -0.2% Memory: ✅ 43.641MB (SLO: <46.000MB -5.1%) vs baseline: +4.9% ✅ ospathjoin_aspectTime: ✅ 623.981µs (SLO: <700.000µs 📉 -10.9%) vs baseline: -0.1% Memory: ✅ 43.589MB (SLO: <46.000MB -5.2%) vs baseline: +5.0% ✅ ospathjoin_noaspectTime: ✅ 628.397µs (SLO: <700.000µs 📉 -10.2%) vs baseline: -0.2% Memory: ✅ 43.706MB (SLO: <46.000MB -5.0%) vs baseline: +5.1% ✅ ospathnormcase_aspectTime: ✅ 353.548µs (SLO: <700.000µs 📉 -49.5%) vs baseline: -0.2% Memory: ✅ 43.512MB (SLO: <46.000MB -5.4%) vs baseline: +5.0% ✅ ospathnormcase_noaspectTime: ✅ 363.206µs (SLO: <700.000µs 📉 -48.1%) vs baseline: ~same Memory: ✅ 43.652MB (SLO: <46.000MB -5.1%) vs baseline: +4.9% ✅ ospathsplit_aspectTime: ✅ 488.381µs (SLO: <700.000µs 📉 -30.2%) vs baseline: -1.0% Memory: ✅ 43.590MB (SLO: <46.000MB -5.2%) vs baseline: +4.9% ✅ ospathsplit_noaspectTime: ✅ 498.752µs (SLO: <700.000µs 📉 -28.7%) vs baseline: -0.4% Memory: ✅ 43.520MB (SLO: <46.000MB -5.4%) vs baseline: +4.4% ✅ ospathsplitdrive_aspectTime: ✅ 375.682µs (SLO: <700.000µs 📉 -46.3%) vs baseline: +1.0% Memory: ✅ 43.430MB (SLO: <46.000MB -5.6%) vs baseline: +4.8% ✅ ospathsplitdrive_noaspectTime: ✅ 72.964µs (SLO: <700.000µs 📉 -89.6%) vs baseline: +1.3% Memory: ✅ 43.649MB (SLO: <46.000MB -5.1%) vs baseline: +5.0% ✅ ospathsplitext_aspectTime: ✅ 461.451µs (SLO: <700.000µs 📉 -34.1%) vs baseline: -1.2% Memory: ✅ 43.570MB (SLO: <46.000MB -5.3%) vs baseline: +4.7% ✅ ospathsplitext_noaspectTime: ✅ 471.101µs (SLO: <700.000µs 📉 -32.7%) vs baseline: -0.7% Memory: ✅ 43.644MB (SLO: <46.000MB -5.1%) vs baseline: +4.9% 🟡 Near SLO Breach (2 suites)🟡 djangosimple - 30/30✅ appsecTime: ✅ 19.698ms (SLO: <22.300ms 📉 -11.7%) vs baseline: +0.2% Memory: ✅ 69.501MB (SLO: <73.500MB -5.4%) vs baseline: +4.8% ✅ exception-replay-enabledTime: ✅ 1.327ms (SLO: <1.450ms -8.4%) vs baseline: -0.2% Memory: ✅ 67.741MB (SLO: <71.500MB -5.3%) vs baseline: +4.9% ✅ iastTime: ✅ 19.693ms (SLO: <22.250ms 📉 -11.5%) vs baseline: -0.4% Memory: ✅ 69.560MB (SLO: <75.000MB -7.3%) vs baseline: +5.0% ✅ profilerTime: ✅ 15.168ms (SLO: <16.550ms -8.4%) vs baseline: -0.8% Memory: ✅ 60.204MB (SLO: <61.000MB 🟡 -1.3%) vs baseline: +5.0% ✅ resource-renamingTime: ✅ 19.616ms (SLO: <21.750ms -9.8%) vs baseline: ~same Memory: ✅ 69.521MB (SLO: <73.500MB -5.4%) vs baseline: +4.9% ✅ span-code-originTime: ✅ 20.127ms (SLO: <28.200ms 📉 -28.6%) vs baseline: +0.9% Memory: ✅ 69.540MB (SLO: <75.000MB -7.3%) vs baseline: +4.9% ✅ tracerTime: ✅ 19.629ms (SLO: <21.750ms -9.8%) vs baseline: -0.1% Memory: ✅ 69.481MB (SLO: <75.000MB -7.4%) vs baseline: +4.9% ✅ tracer-and-profilerTime: ✅ 21.122ms (SLO: <23.500ms 📉 -10.1%) vs baseline: ~same Memory: ✅ 71.369MB (SLO: <75.000MB -4.8%) vs baseline: +4.6% ✅ tracer-dont-create-db-spansTime: ✅ 19.745ms (SLO: <21.500ms -8.2%) vs baseline: ~same Memory: ✅ 69.560MB (SLO: <75.000MB -7.3%) vs baseline: +4.8% ✅ tracer-minimalTime: ✅ 16.911ms (SLO: <17.500ms -3.4%) vs baseline: ~same Memory: ✅ 69.422MB (SLO: <75.000MB -7.4%) vs baseline: +4.9% ✅ tracer-nativeTime: ✅ 19.709ms (SLO: <21.750ms -9.4%) vs baseline: +0.4% Memory: ✅ 69.540MB (SLO: <72.500MB -4.1%) vs baseline: +4.7% ✅ tracer-no-cachesTime: ✅ 17.681ms (SLO: <19.650ms 📉 -10.0%) vs baseline: +0.2% Memory: ✅ 69.422MB (SLO: <75.000MB -7.4%) vs baseline: +4.8% ✅ tracer-no-databasesTime: ✅ 19.374ms (SLO: <20.100ms -3.6%) vs baseline: ~same Memory: ✅ 69.521MB (SLO: <75.000MB -7.3%) vs baseline: +4.9% ✅ tracer-no-middlewareTime: ✅ 19.392ms (SLO: <21.500ms -9.8%) vs baseline: ~same Memory: ✅ 69.540MB (SLO: <75.000MB -7.3%) vs baseline: +5.0% ✅ tracer-no-templatesTime: ✅ 19.885ms (SLO: <22.000ms -9.6%) vs baseline: +1.6% Memory: ✅ 69.524MB (SLO: <73.500MB -5.4%) vs baseline: +4.9% 🟡 recursivecomputation - 8/8✅ deepTime: ✅ 311.216ms (SLO: <320.950ms -3.0%) vs baseline: ~same Memory: ✅ 37.513MB (SLO: <38.750MB -3.2%) vs baseline: +4.9% ✅ deep-profiledTime: ✅ 329.098ms (SLO: <359.150ms -8.4%) vs baseline: -0.3% Memory: ✅ 43.431MB (SLO: <46.000MB -5.6%) vs baseline: +4.9% ✅ mediumTime: ✅ 7.302ms (SLO: <7.400ms 🟡 -1.3%) vs baseline: +0.4% Memory: ✅ 36.235MB (SLO: <38.000MB -4.6%) vs baseline: +4.5% ✅ shallowTime: ✅ 1.021ms (SLO: <1.050ms -2.8%) vs baseline: +1.8% Memory: ✅ 36.255MB (SLO: <38.000MB -4.6%) vs baseline: +4.9%
|
f070c0e to
3145949
Compare
Backport of #17238 to 4.7.
(cherry picked from commit 93778cc)
Description
Fixes
_dd.base_servicehandling for AWS Lambda environments in the Python tracer, enabling service remapping rules to work on Lambda spans and ensuring trace stats contain a meaningfulbase_service.Changes
ddtrace/internal/settings/_config.py— WhenDD_SERVICEis not configured and the tracer is running in AWS Lambda,config.serviceis now automatically set fromAWS_LAMBDA_FUNCTION_NAME. This mirrors existing GCP (K_SERVICE) and Azure (WEBSITE_SITE_NAME) auto-detection behavior.ddtrace/internal/schema/processor.py— Removes the Lambda-specific early exit fromBaseServiceProcessor. Previously, the processor skipped all Lambda spans to avoid unhelpfulbase_servicevalues from the runtime. Now that the service is correctly resolved from the function name, the processor runs normally and_dd.base_serviceis properly attached to spans.Testing
Existing serverless system tests pass (ALB, API Gateway HTTP/REST, Function URL). Includes new unit tests for Lambda service name auto-detection and base_service processor behavior.
Risks
Low. The change only affects Lambda environments where
DD_SERVICEis not explicitly set. The resolved service name (AWS_LAMBDA_FUNCTION_NAME) matches what the extension already uses for extension-based languages, ensuring consistency across runtimes.