-
Notifications
You must be signed in to change notification settings - Fork 457
fix(llmobs): ensure DD_APM_TRACING_ENABLED disables APM #14617
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
The existing DD_APM_TRACING_ENABLED functionality is specially implemented for asm and did not work for llmobs. Spans are still sent since some spans are required for asm. This change introduces a trace filter to drop all apm spans when llmobs is enabled. Consequently, asm + llmobs with apm disabled will not be possible with this change. I'm choosing to avoid complexity in this implementation until we see a concrete ask for this functionality.
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Implementation lgtm, just a couple questions!
Co-authored-by: Yun Kim <[email protected]>
Co-authored-by: Yun Kim <[email protected]>
Bootstrap import analysisComparison of import times between this PR and base. SummaryThe average import time from this PR is: 271 ± 4 ms. The average import time from base is: 271 ± 4 ms. The import time difference between this PR and base is: -0.6 ± 0.2 ms. The difference is not statistically significant (z = -2.93). Import time breakdownThe following import paths have shrunk:
|
Performance SLOsComparing candidate kylev/llmobs-apm-disabled (01dfc61) with baseline main (e2bc7d1) 📈 Performance Regressions (1 suite)📈 iastaspectsospath - 24/24✅ ospathbasename_aspectTime: ✅ 5.017µs (SLO: <10.000µs 📉 -49.8%) vs baseline: 📈 +19.2% Memory: ✅ 37.532MB (SLO: <39.000MB -3.8%) vs baseline: +5.0% ✅ ospathbasename_noaspectTime: ✅ 1.079µs (SLO: <10.000µs 📉 -89.2%) vs baseline: -1.5% Memory: ✅ 37.434MB (SLO: <39.000MB -4.0%) vs baseline: +4.7% ✅ ospathjoin_aspectTime: ✅ 6.124µs (SLO: <10.000µs 📉 -38.8%) vs baseline: -1.9% Memory: ✅ 37.454MB (SLO: <39.000MB -4.0%) vs baseline: +4.9% ✅ ospathjoin_noaspectTime: ✅ 2.295µs (SLO: <10.000µs 📉 -77.1%) vs baseline: -0.1% Memory: ✅ 37.493MB (SLO: <39.000MB -3.9%) vs baseline: +5.0% ✅ ospathnormcase_aspectTime: ✅ 3.511µs (SLO: <10.000µs 📉 -64.9%) vs baseline: ~same Memory: ✅ 37.473MB (SLO: <39.000MB -3.9%) vs baseline: +5.0% ✅ ospathnormcase_noaspectTime: ✅ 0.565µs (SLO: <10.000µs 📉 -94.3%) vs baseline: -0.6% Memory: ✅ 37.473MB (SLO: <39.000MB -3.9%) vs baseline: +4.9% ✅ ospathsplit_aspectTime: ✅ 4.862µs (SLO: <10.000µs 📉 -51.4%) vs baseline: +0.8% Memory: ✅ 37.532MB (SLO: <39.000MB -3.8%) vs baseline: +5.0% ✅ ospathsplit_noaspectTime: ✅ 1.597µs (SLO: <10.000µs 📉 -84.0%) vs baseline: +0.7% Memory: ✅ 37.454MB (SLO: <39.000MB -4.0%) vs baseline: +4.8% ✅ ospathsplitdrive_aspectTime: ✅ 3.725µs (SLO: <10.000µs 📉 -62.8%) vs baseline: +0.3% Memory: ✅ 37.395MB (SLO: <39.000MB -4.1%) vs baseline: +4.6% ✅ ospathsplitdrive_noaspectTime: ✅ 0.703µs (SLO: <10.000µs 📉 -93.0%) vs baseline: +1.1% Memory: ✅ 37.454MB (SLO: <39.000MB -4.0%) vs baseline: +4.9% ✅ ospathsplitext_aspectTime: ✅ 4.966µs (SLO: <10.000µs 📉 -50.3%) vs baseline: +8.9% Memory: ✅ 37.513MB (SLO: <39.000MB -3.8%) vs baseline: +4.9% ✅ ospathsplitext_noaspectTime: ✅ 1.373µs (SLO: <10.000µs 📉 -86.3%) vs baseline: -0.5% Memory: ✅ 37.473MB (SLO: <39.000MB -3.9%) vs baseline: +4.7% 🟡 Near SLO Breach (5 suites)🟡 djangosimple - 28/28✅ appsecTime: ✅ 20.490ms (SLO: <22.300ms -8.1%) vs baseline: -0.3% Memory: ✅ 64.507MB (SLO: <66.000MB -2.3%) vs baseline: +4.9% ✅ exception-replay-enabledTime: ✅ 1.347ms (SLO: <1.450ms -7.1%) vs baseline: -0.3% Memory: ✅ 63.458MB (SLO: <66.000MB -3.9%) vs baseline: +4.7% ✅ iastTime: ✅ 20.461ms (SLO: <22.250ms -8.0%) vs baseline: -0.5% Memory: ✅ 64.487MB (SLO: <66.000MB -2.3%) vs baseline: +4.8% ✅ profilerTime: ✅ 15.224ms (SLO: <16.550ms -8.0%) vs baseline: +0.3% Memory: ✅ 53.006MB (SLO: <53.500MB 🟡 -0.9%) vs baseline: +4.7% ✅ span-code-originTime: ✅ 26.115ms (SLO: <28.200ms -7.4%) vs baseline: -0.3% Memory: ✅ 66.840MB (SLO: <68.500MB -2.4%) vs baseline: +4.9% ✅ tracerTime: ✅ 20.559ms (SLO: <21.750ms -5.5%) vs baseline: ~same Memory: ✅ 64.507MB (SLO: <66.000MB -2.3%) vs baseline: +4.9% ✅ tracer-and-profilerTime: ✅ 22.076ms (SLO: <23.500ms -6.1%) vs baseline: +0.3% Memory: ✅ 65.865MB (SLO: <67.000MB 🟡 -1.7%) vs baseline: +4.7% ✅ tracer-dont-create-db-spansTime: ✅ 19.333ms (SLO: <21.500ms 📉 -10.1%) vs baseline: -0.2% Memory: ✅ 64.468MB (SLO: <66.000MB -2.3%) vs baseline: +4.8% ✅ tracer-minimalTime: ✅ 16.643ms (SLO: <17.500ms -4.9%) vs baseline: -0.4% Memory: ✅ 64.468MB (SLO: <66.000MB -2.3%) vs baseline: +4.8% ✅ tracer-nativeTime: ✅ 20.485ms (SLO: <21.750ms -5.8%) vs baseline: ~same Memory: ✅ 65.785MB (SLO: <66.000MB 🟡 -0.3%) vs baseline: +5.0% ✅ tracer-no-cachesTime: ✅ 18.437ms (SLO: <19.650ms -6.2%) vs baseline: ~same Memory: ✅ 64.546MB (SLO: <66.000MB -2.2%) vs baseline: +4.9% ✅ tracer-no-databasesTime: ✅ 18.815ms (SLO: <20.100ms -6.4%) vs baseline: -0.4% Memory: ✅ 64.448MB (SLO: <66.000MB -2.4%) vs baseline: +4.8% ✅ tracer-no-middlewareTime: ✅ 20.176ms (SLO: <21.500ms -6.2%) vs baseline: -0.3% Memory: ✅ 64.527MB (SLO: <66.000MB -2.2%) vs baseline: +4.8% ✅ tracer-no-templatesTime: ✅ 20.314ms (SLO: <22.000ms -7.7%) vs baseline: -0.3% Memory: ✅ 64.566MB (SLO: <66.000MB -2.2%) vs baseline: +5.0% 🟡 errortrackingdjangosimple - 6/6✅ errortracking-enabled-allTime: ✅ 18.061ms (SLO: <19.850ms -9.0%) vs baseline: -0.1% Memory: ✅ 64.546MB (SLO: <65.500MB 🟡 -1.5%) vs baseline: +4.9% ✅ errortracking-enabled-userTime: ✅ 18.380ms (SLO: <19.400ms -5.3%) vs baseline: +1.5% Memory: ✅ 64.487MB (SLO: <65.500MB 🟡 -1.5%) vs baseline: +4.9% ✅ tracer-enabledTime: ✅ 18.026ms (SLO: <19.450ms -7.3%) vs baseline: -0.3% Memory: ✅ 64.486MB (SLO: <65.500MB 🟡 -1.5%) vs baseline: +4.9% 🟡 flasksimple - 17/17✅ appsec-getTime: ✅ 4.585ms (SLO: <4.750ms -3.5%) vs baseline: +0.4% Memory: ✅ 62.364MB (SLO: <64.500MB -3.3%) vs baseline: +4.8% ✅ appsec-postTime: ✅ 6.576ms (SLO: <6.750ms -2.6%) vs baseline: ~same Memory: ✅ 62.364MB (SLO: <64.500MB -3.3%) vs baseline: +4.9% ✅ appsec-telemetryTime: ✅ 4.585ms (SLO: <4.750ms -3.5%) vs baseline: +0.3% Memory: ✅ 62.285MB (SLO: <64.500MB -3.4%) vs baseline: +4.6% ✅ debuggerTime: ✅ 1.855ms (SLO: <2.000ms -7.2%) vs baseline: -0.3% Memory: ✅ 44.709MB (SLO: <45.000MB 🟡 -0.6%) vs baseline: +4.6% ✅ iast-getTime: ✅ 1.854ms (SLO: <2.000ms -7.3%) vs baseline: +0.2% Memory: ✅ 41.779MB (SLO: <49.000MB 📉 -14.7%) vs baseline: +4.9% ✅ profilerTime: ✅ 1.918ms (SLO: <2.100ms -8.7%) vs baseline: +0.4% Memory: ✅ 44.492MB (SLO: <46.500MB -4.3%) vs baseline: +5.1% ✅ tracerTime: ✅ 3.374ms (SLO: <3.650ms -7.6%) vs baseline: ~same Memory: ✅ 51.511MB (SLO: <53.500MB -3.7%) vs baseline: +4.9% ✅ tracer-nativeTime: ✅ 3.369ms (SLO: <3.650ms -7.7%) vs baseline: ~same Memory: ✅ 52.671MB (SLO: <53.500MB 🟡 -1.5%) vs baseline: +4.9% 🟡 flasksqli - 6/6✅ appsec-enabledTime: ✅ 3.948ms (SLO: <4.200ms -6.0%) vs baseline: +0.1% Memory: ✅ 62.534MB (SLO: <66.000MB -5.3%) vs baseline: +4.7% ✅ iast-enabledTime: ✅ 2.445ms (SLO: <2.800ms 📉 -12.7%) vs baseline: ~same Memory: ✅ 58.147MB (SLO: <59.000MB 🟡 -1.4%) vs baseline: +4.7% ✅ tracer-enabledTime: ✅ 2.080ms (SLO: <2.250ms -7.6%) vs baseline: +0.4% Memory: ✅ 51.209MB (SLO: <53.500MB -4.3%) vs baseline: +5.0% 🟡 otelspan - 22/22✅ add-eventTime: ✅ 45.156ms (SLO: <47.150ms -4.2%) vs baseline: ~same Memory: ✅ 44.683MB (SLO: <46.500MB -3.9%) vs baseline: +5.1% ✅ add-metricsTime: ✅ 322.720ms (SLO: <344.800ms -6.4%) vs baseline: +0.8% Memory: ✅ 553.759MB (SLO: <562.000MB 🟡 -1.5%) vs baseline: +5.2% ✅ add-tagsTime: ✅ 291.777ms (SLO: <314.000ms -7.1%) vs baseline: ~same Memory: ✅ 554.512MB (SLO: <563.500MB 🟡 -1.6%) vs baseline: +5.0% ✅ get-contextTime: ✅ 82.171ms (SLO: <92.350ms 📉 -11.0%) vs baseline: -0.2% Memory: ✅ 39.779MB (SLO: <46.500MB 📉 -14.5%) vs baseline: +4.6% ✅ is-recordingTime: ✅ 43.074ms (SLO: <44.500ms -3.2%) vs baseline: -0.2% Memory: ✅ 44.114MB (SLO: <46.500MB -5.1%) vs baseline: +4.7% ✅ record-exceptionTime: ✅ 61.855ms (SLO: <67.650ms -8.6%) vs baseline: +0.3% Memory: ✅ 40.164MB (SLO: <46.500MB 📉 -13.6%) vs baseline: +5.1% ✅ set-statusTime: ✅ 49.444ms (SLO: <50.400ms 🟡 -1.9%) vs baseline: +1.5% Memory: ✅ 44.178MB (SLO: <46.500MB -5.0%) vs baseline: +5.0% ✅ startTime: ✅ 42.299ms (SLO: <43.450ms -2.6%) vs baseline: +0.3% Memory: ✅ 44.152MB (SLO: <46.500MB -5.0%) vs baseline: +4.9% ✅ start-finishTime: ✅ 84.993ms (SLO: <88.000ms -3.4%) vs baseline: +2.3% Memory: ✅ 33.994MB (SLO: <46.500MB 📉 -26.9%) vs baseline: +4.6% ✅ start-finish-telemetryTime: ✅ 84.633ms (SLO: <89.000ms -4.9%) vs baseline: ~same Memory: ✅ 34.072MB (SLO: <46.500MB 📉 -26.7%) vs baseline: +5.3% ✅ update-nameTime: ✅ 44.296ms (SLO: <45.150ms 🟡 -1.9%) vs baseline: +0.7% Memory: ✅ 44.345MB (SLO: <46.500MB -4.6%) vs baseline: +4.8%
|
The existing DD_APM_TRACING_ENABLED functionality is specially implemented for asm and did not work for llmobs. Spans are still sent since some spans are required for asm.
This change introduces a trace filter to drop all apm spans when llmobs is enabled.
Consequently, asm + llmobs with apm disabled will not be possible with this change. I'm choosing to avoid complexity in this implementation until we see a concrete ask for this functionality.
Checklist
Reviewer Checklist