-
Notifications
You must be signed in to change notification settings - Fork 467
feat(aiokafka): add aiokafka integration with APM and DSM support #14975
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
Conversation
CircleCI:aiokafka
Co-authored-by: Emmett Butler <[email protected]>
Co-authored-by: Emmett Butler <[email protected]>
Co-authored-by: Emmett Butler <[email protected]>
Co-authored-by: Emmett Butler <[email protected]>
Co-authored-by: Emmett Butler <[email protected]>
|
|
Bootstrap import analysisComparison of import times between this PR and base. SummaryThe average import time from this PR is: 252 ± 5 ms. The average import time from base is: 244 ± 3 ms. The import time difference between this PR and base is: 8.0 ± 0.2 ms. Import time breakdownThe following import paths have appeared:
|
Performance SLOsComparing candidate dubloom/aiokafka (832a298) with baseline main (0b0f0d3) ❌ Test Failures (1 suite)❌ otelspan - 20/22✅ add-eventTime: ✅ 40.170ms (SLO: <47.150ms 📉 -14.8%) vs baseline: ~same Memory: ✅ 43.810MB (SLO: <47.000MB -6.8%) vs baseline: +5.0% ❌ add-metricsTime: ✅ 318.626ms (SLO: <344.800ms -7.6%) vs baseline: +0.4% Memory: ❌ 652.198MB (SLO: <630.000MB +3.5%) vs baseline: +5.0% ❌ add-tagsTime: ✅ 287.952ms (SLO: <314.000ms -8.3%) vs baseline: ~same Memory: ❌ 653.464MB (SLO: <630.000MB +3.7%) vs baseline: +4.8% ✅ get-contextTime: ✅ 80.197ms (SLO: <92.350ms 📉 -13.2%) vs baseline: +0.2% Memory: ✅ 39.648MB (SLO: <46.500MB 📉 -14.7%) vs baseline: +4.9% ✅ is-recordingTime: ✅ 38.099ms (SLO: <44.500ms 📉 -14.4%) vs baseline: ~same Memory: ✅ 43.162MB (SLO: <47.500MB -9.1%) vs baseline: +4.8% ✅ record-exceptionTime: ✅ 58.157ms (SLO: <67.650ms 📉 -14.0%) vs baseline: -0.1% Memory: ✅ 39.890MB (SLO: <47.000MB 📉 -15.1%) vs baseline: +5.0% ✅ set-statusTime: ✅ 43.836ms (SLO: <50.400ms 📉 -13.0%) vs baseline: ~same Memory: ✅ 43.205MB (SLO: <47.000MB -8.1%) vs baseline: +4.9% ✅ startTime: ✅ 37.551ms (SLO: <43.450ms 📉 -13.6%) vs baseline: +0.9% Memory: ✅ 43.190MB (SLO: <47.000MB -8.1%) vs baseline: +4.8% ✅ start-finishTime: ✅ 82.724ms (SLO: <88.000ms -6.0%) vs baseline: +1.2% Memory: ✅ 34.603MB (SLO: <46.500MB 📉 -25.6%) vs baseline: +4.9% ✅ start-finish-telemetryTime: ✅ 83.397ms (SLO: <89.000ms -6.3%) vs baseline: -0.3% Memory: ✅ 34.583MB (SLO: <46.500MB 📉 -25.6%) vs baseline: +5.0% ✅ update-nameTime: ✅ 39.003ms (SLO: <45.150ms 📉 -13.6%) vs baseline: +0.5% Memory: ✅ 43.540MB (SLO: <47.000MB -7.4%) vs baseline: +5.0% 📈 Performance Regressions (1 suite)📈 iastaspectsospath - 24/24✅ ospathbasename_aspectTime: ✅ 4.334µs (SLO: <10.000µs 📉 -56.7%) vs baseline: -0.1% Memory: ✅ 37.650MB (SLO: <39.000MB -3.5%) vs baseline: +4.8% ✅ ospathbasename_noaspectTime: ✅ 1.093µs (SLO: <10.000µs 📉 -89.1%) vs baseline: ~same Memory: ✅ 37.729MB (SLO: <39.000MB -3.3%) vs baseline: +5.1% ✅ ospathjoin_aspectTime: ✅ 6.210µs (SLO: <10.000µs 📉 -37.9%) vs baseline: +0.4% Memory: ✅ 37.709MB (SLO: <39.000MB -3.3%) vs baseline: +5.1% ✅ ospathjoin_noaspectTime: ✅ 2.303µs (SLO: <10.000µs 📉 -77.0%) vs baseline: +1.2% Memory: ✅ 37.670MB (SLO: <39.000MB -3.4%) vs baseline: +5.0% ✅ ospathnormcase_aspectTime: ✅ 3.988µs (SLO: <10.000µs 📉 -60.1%) vs baseline: 📈 +10.9% Memory: ✅ 37.729MB (SLO: <39.000MB -3.3%) vs baseline: +5.0% ✅ ospathnormcase_noaspectTime: ✅ 0.571µs (SLO: <10.000µs 📉 -94.3%) vs baseline: -2.3% Memory: ✅ 37.650MB (SLO: <39.000MB -3.5%) vs baseline: +4.9% ✅ ospathsplit_aspectTime: ✅ 5.885µs (SLO: <10.000µs 📉 -41.1%) vs baseline: 📈 +18.3% Memory: ✅ 37.709MB (SLO: <39.000MB -3.3%) vs baseline: +4.9% ✅ ospathsplit_noaspectTime: ✅ 1.596µs (SLO: <10.000µs 📉 -84.0%) vs baseline: -0.3% Memory: ✅ 37.709MB (SLO: <39.000MB -3.3%) vs baseline: +4.9% ✅ ospathsplitdrive_aspectTime: ✅ 4.148µs (SLO: <10.000µs 📉 -58.5%) vs baseline: 📈 +10.8% Memory: ✅ 37.631MB (SLO: <39.000MB -3.5%) vs baseline: +4.6% ✅ ospathsplitdrive_noaspectTime: ✅ 0.693µs (SLO: <10.000µs 📉 -93.1%) vs baseline: -2.3% Memory: ✅ 37.650MB (SLO: <39.000MB -3.5%) vs baseline: +4.7% ✅ ospathsplitext_aspectTime: ✅ 5.256µs (SLO: <10.000µs 📉 -47.4%) vs baseline: 📈 +13.6% Memory: ✅ 37.670MB (SLO: <39.000MB -3.4%) vs baseline: +4.7% ✅ ospathsplitext_noaspectTime: ✅ 1.368µs (SLO: <10.000µs 📉 -86.3%) vs baseline: -1.4% Memory: ✅ 37.670MB (SLO: <39.000MB -3.4%) vs baseline: +4.7% 🟡 Near SLO Breach (3 suites)🟡 djangosimple - 30/30✅ appsecTime: ✅ 19.785ms (SLO: <22.300ms 📉 -11.3%) vs baseline: -0.2% Memory: ✅ 65.507MB (SLO: <67.000MB -2.2%) vs baseline: +4.9% ✅ exception-replay-enabledTime: ✅ 1.327ms (SLO: <1.450ms -8.5%) vs baseline: -0.4% Memory: ✅ 64.545MB (SLO: <67.000MB -3.7%) vs baseline: +4.8% ✅ iastTime: ✅ 19.788ms (SLO: <22.250ms 📉 -11.1%) vs baseline: -0.2% Memory: ✅ 65.520MB (SLO: <67.000MB -2.2%) vs baseline: +4.9% ✅ profilerTime: ✅ 14.692ms (SLO: <16.550ms 📉 -11.2%) vs baseline: ~same Memory: ✅ 53.772MB (SLO: <54.500MB 🟡 -1.3%) vs baseline: +4.4% ✅ resource-renamingTime: ✅ 19.868ms (SLO: <21.750ms -8.7%) vs baseline: -0.5% Memory: ✅ 65.341MB (SLO: <67.000MB -2.5%) vs baseline: +4.7% ✅ span-code-originTime: ✅ 24.324ms (SLO: <28.200ms 📉 -13.7%) vs baseline: +0.1% Memory: ✅ 67.716MB (SLO: <69.500MB -2.6%) vs baseline: +4.8% ✅ tracerTime: ✅ 19.775ms (SLO: <21.750ms -9.1%) vs baseline: -0.3% Memory: ✅ 65.479MB (SLO: <67.000MB -2.3%) vs baseline: +4.8% ✅ tracer-and-profilerTime: ✅ 21.295ms (SLO: <23.500ms -9.4%) vs baseline: ~same Memory: ✅ 66.767MB (SLO: <67.500MB 🟡 -1.1%) vs baseline: +5.1% ✅ tracer-dont-create-db-spansTime: ✅ 18.663ms (SLO: <21.500ms 📉 -13.2%) vs baseline: -0.2% Memory: ✅ 65.486MB (SLO: <66.000MB 🟡 -0.8%) vs baseline: +4.8% ✅ tracer-minimalTime: ✅ 16.092ms (SLO: <17.500ms -8.0%) vs baseline: +0.2% Memory: ✅ 65.570MB (SLO: <66.000MB 🟡 -0.7%) vs baseline: +5.0% ✅ tracer-nativeTime: ✅ 19.839ms (SLO: <21.750ms -8.8%) vs baseline: +0.1% Memory: ✅ 71.439MB (SLO: <72.500MB 🟡 -1.5%) vs baseline: +4.9% ✅ tracer-no-cachesTime: ✅ 17.843ms (SLO: <19.650ms -9.2%) vs baseline: +0.1% Memory: ✅ 65.488MB (SLO: <67.000MB -2.3%) vs baseline: +4.9% ✅ tracer-no-databasesTime: ✅ 18.133ms (SLO: <20.100ms -9.8%) vs baseline: -0.2% Memory: ✅ 65.488MB (SLO: <67.000MB -2.3%) vs baseline: +4.8% ✅ tracer-no-middlewareTime: ✅ 19.476ms (SLO: <21.500ms -9.4%) vs baseline: -0.1% Memory: ✅ 65.458MB (SLO: <67.000MB -2.3%) vs baseline: +4.8% ✅ tracer-no-templatesTime: ✅ 19.612ms (SLO: <22.000ms 📉 -10.9%) vs baseline: -0.1% Memory: ✅ 65.455MB (SLO: <67.000MB -2.3%) vs baseline: +4.8% 🟡 errortrackingdjangosimple - 6/6✅ errortracking-enabled-allTime: ✅ 18.021ms (SLO: <19.850ms -9.2%) vs baseline: -0.2% Memory: ✅ 65.286MB (SLO: <66.500MB 🟡 -1.8%) vs baseline: +4.9% ✅ errortracking-enabled-userTime: ✅ 18.046ms (SLO: <19.400ms -7.0%) vs baseline: +0.2% Memory: ✅ 65.254MB (SLO: <66.500MB 🟡 -1.9%) vs baseline: +4.9% ✅ tracer-enabledTime: ✅ 18.320ms (SLO: <19.450ms -5.8%) vs baseline: +1.2% Memory: ✅ 65.235MB (SLO: <66.500MB 🟡 -1.9%) vs baseline: +4.9% 🟡 flasksimple - 18/18✅ appsec-getTime: ✅ 4.585ms (SLO: <4.750ms -3.5%) vs baseline: +0.5% Memory: ✅ 61.991MB (SLO: <65.000MB -4.6%) vs baseline: +4.9% ✅ appsec-postTime: ✅ 6.614ms (SLO: <6.750ms -2.0%) vs baseline: +0.2% Memory: ✅ 61.971MB (SLO: <65.000MB -4.7%) vs baseline: +4.8% ✅ appsec-telemetryTime: ✅ 4.601ms (SLO: <4.750ms -3.1%) vs baseline: +0.7% Memory: ✅ 62.030MB (SLO: <65.000MB -4.6%) vs baseline: +4.8% ✅ debuggerTime: ✅ 1.859ms (SLO: <2.000ms -7.0%) vs baseline: +0.2% Memory: ✅ 45.456MB (SLO: <47.000MB -3.3%) vs baseline: +4.8% ✅ iast-getTime: ✅ 1.861ms (SLO: <2.000ms -6.9%) vs baseline: -0.3% Memory: ✅ 42.389MB (SLO: <49.000MB 📉 -13.5%) vs baseline: +5.1% ✅ profilerTime: ✅ 1.909ms (SLO: <2.100ms -9.1%) vs baseline: -0.2% Memory: ✅ 46.498MB (SLO: <47.000MB 🟡 -1.1%) vs baseline: +4.9% ✅ resource-renamingTime: ✅ 3.376ms (SLO: <3.650ms -7.5%) vs baseline: +0.4% Memory: ✅ 52.239MB (SLO: <53.500MB -2.4%) vs baseline: +4.8% ✅ tracerTime: ✅ 3.361ms (SLO: <3.650ms -7.9%) vs baseline: +0.1% Memory: ✅ 52.278MB (SLO: <53.500MB -2.3%) vs baseline: +4.9% ✅ tracer-nativeTime: ✅ 3.360ms (SLO: <3.650ms -7.9%) vs baseline: -0.2% Memory: ✅ 58.369MB (SLO: <60.000MB -2.7%) vs baseline: +5.0%
|
| span = ctx.span | ||
| messages = await func(*args, **kwargs) | ||
|
|
||
| core.dispatch("aiokafka.getmany.message", (instance, span, messages)) |
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.
Passing the context rather than the span here would make this code slightly more generic
| result = future.result() | ||
| core.dispatch("aiokafka.send.completed", (result,)) | ||
| except Exception as e: | ||
| span.set_exc_info(type(e), e, e.__traceback__) |
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.
Putting this and other span method calls into trace_handlers would keep this file free of direct uses of the Span API, making it easier to instrument without tracing. This may be useful if we want to allow DSM to be used without APM.
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.
All of these release note files can be combined into one
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.
this PR is pretty big and seems there are a few changes happening at once, it would likely benefit from being broken out into smaller narrowly focused PRs. e.g. fixing kafka issues, adding initial basic support for aiokafka, then adding dsm support, etc etc..... if possible.
| service=trace_utils.ext_service(None, config.aiokafka), | ||
| tags=common_aiokafka_tags(topic, bootstrap_servers), | ||
| ) as ctx: | ||
| span = ctx.span |
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.
like Emmett mentioned already, we want to avoid any usage of ctx.span, especially in new integrations.
| --- | ||
| fixes: | ||
| - | | ||
| kafka: This fix resolves an issue where only the first message in a batch was dispatched to Data Streams Monitoring (DSM) when consuming multiple Kafka messages No newline at end of file |
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.
not sure I understand this fix, we are fixing an issue with the kafka integration while introducing a new integration?
Description
AIOKafkaProducer.send,AIOKafkaConsumer.getone/getmany, andcommit.DD_KAFKA_PROPAGATION_ENABLED=true.Testing
Added two test files:
test_aiokafka.pyfor APM teststest_aiokafka_dsm.pyfor DSM tests.This is a follow up of #10068
Thanks for your initial initial contribution @ls-pieter-vanisacker