Skip to content
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

Inject trace info as comment to MongoDB operation when dbm propagation is enabled. #5230

Merged
merged 18 commits into from
Feb 14, 2025

Conversation

lu-zhengda
Copy link
Contributor

@lu-zhengda lu-zhengda commented Feb 7, 2025

What does this PR do?

This PR introduces DBM propagation mode support for MongoDB operations, aligning with the existing functionality in relational database such as PostgreSQL and MySQL. DBM propagation enables linking APM traces with DBM samples through trace comment injection, providing enhanced observability into database operations.

Key Features:

  • Trace Propagation via Comments:
    The tracer now supports injecting trace metadata into MongoDB commands using the comment field.
  • Configurable Propagation Mode:
    Users can configure the behavior via the dbmPropagationMode setting:
    • disabled – No trace metadata is injected.
    • service – Injects only service-level information.
    • full – Injects both service and span-level information.

Example Usage:

Set dbmPropagationMode in tracer config

// Load the dd-trace library for tracing
const tracer = require("dd-trace").init({
  service: "express-mongodb-app", // Your service name
  env: "dev", // Your environment
  ......  // Your other tracer configs
  dbmPropagationMode: "full",
});

With DBM propagation enabled, MongoDB commands will include a trace comment similar to:
image
Screenshot 2025-02-07 at 2 49 38 PM

Motivation

Improved Traceability:
With trace information attached, MongoDB operation samples in DBM can now be linked to APM traces, allowing users to analyze query performance in the context of distributed tracing.
https://datadoghq.atlassian.net/browse/DBMON-4990

Plugin Checklist

Additional Notes

Copy link

github-actions bot commented Feb 7, 2025

Overall package size

Self size: 8.69 MB
Deduped: 94.89 MB
No deduping: 95.41 MB

Dependency sizes | name | version | self size | total size | |------|---------|-----------|------------| | @datadog/libdatadog | 0.4.0 | 29.44 MB | 29.44 MB | | @datadog/native-appsec | 8.4.0 | 19.25 MB | 19.26 MB | | @datadog/native-iast-taint-tracking | 3.3.0 | 13.77 MB | 13.78 MB | | @datadog/pprof | 5.5.1 | 9.79 MB | 10.17 MB | | protobufjs | 7.2.5 | 2.77 MB | 5.16 MB | | @datadog/native-iast-rewriter | 2.8.0 | 2.6 MB | 2.74 MB | | @opentelemetry/core | 1.14.0 | 872.87 kB | 1.47 MB | | @datadog/native-metrics | 3.1.0 | 1.06 MB | 1.46 MB | | @opentelemetry/api | 1.8.0 | 1.21 MB | 1.21 MB | | import-in-the-middle | 1.11.2 | 112.74 kB | 835.4 kB | | source-map | 0.7.4 | 226 kB | 226 kB | | opentracing | 0.14.7 | 194.81 kB | 194.81 kB | | lru-cache | 7.18.3 | 133.92 kB | 133.92 kB | | pprof-format | 2.1.0 | 111.69 kB | 111.69 kB | | @datadog/sketches-js | 2.1.0 | 109.9 kB | 109.9 kB | | lodash.sortby | 4.7.0 | 75.76 kB | 75.76 kB | | ignore | 5.3.2 | 53.63 kB | 53.63 kB | | shell-quote | 1.8.1 | 44.96 kB | 44.96 kB | | istanbul-lib-coverage | 3.2.0 | 29.34 kB | 29.34 kB | | rfdc | 1.3.1 | 25.21 kB | 25.21 kB | | @isaacs/ttlcache | 1.4.1 | 25.2 kB | 25.2 kB | | tlhunter-sorted-set | 0.1.0 | 24.94 kB | 24.94 kB | | limiter | 1.1.5 | 23.17 kB | 23.17 kB | | dc-polyfill | 0.1.4 | 23.1 kB | 23.1 kB | | retry | 0.13.1 | 18.85 kB | 18.85 kB | | semifies | 1.0.0 | 15.84 kB | 15.84 kB | | jest-docblock | 29.7.0 | 8.99 kB | 12.76 kB | | crypto-randomuuid | 1.0.0 | 11.18 kB | 11.18 kB | | ttl-set | 1.0.0 | 4.61 kB | 9.69 kB | | path-to-regexp | 0.1.12 | 6.6 kB | 6.6 kB | | koalas | 1.0.2 | 6.47 kB | 6.47 kB | | module-details-from-path | 1.0.3 | 4.47 kB | 4.47 kB |

🤖 This report was automatically generated by heaviest-objects-in-the-universe

Copy link

codecov bot commented Feb 7, 2025

Codecov Report

All modified and coverable lines are covered by tests ✅

Project coverage is 81.25%. Comparing base (b8c03bd) to head (5f8d92d).
Report is 13 commits behind head on master.

Additional details and impacted files
@@            Coverage Diff             @@
##           master    #5230      +/-   ##
==========================================
+ Coverage   81.09%   81.25%   +0.15%     
==========================================
  Files         480      487       +7     
  Lines       21438    21715     +277     
==========================================
+ Hits        17386    17645     +259     
- Misses       4052     4070      +18     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

@datadog-datadog-prod-us1
Copy link

datadog-datadog-prod-us1 bot commented Feb 7, 2025

Datadog Report

Branch report: zhengda.lu/mongo-dbm-trace
Commit report: dafd69c
Test service: dd-trace-js-integration-tests

✅ 0 Failed, 625 Passed, 0 Skipped, 12m 29.29s Total Time

@pr-commenter
Copy link

pr-commenter bot commented Feb 10, 2025

Benchmarks

Benchmark execution time: 2025-02-14 17:10:26

Comparing candidate commit 5f8d92d in PR branch zhengda.lu/mongo-dbm-trace with baseline commit b8c03bd in branch master.

Found 0 performance improvements and 0 performance regressions! Performance is the same for 915 metrics, 18 unstable metrics.

@lu-zhengda lu-zhengda marked this pull request as ready for review February 10, 2025 22:51
@lu-zhengda lu-zhengda requested review from a team as code owners February 10, 2025 22:51
@lu-zhengda lu-zhengda requested a review from a team February 10, 2025 22:51
dalextorres
dalextorres previously approved these changes Feb 11, 2025
bengl
bengl previously requested changes Feb 11, 2025
Co-authored-by: Bryan English <bryan.english@datadoghq.com>
Copy link
Contributor

@wconti27 wconti27 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The tests and plugin change looks good to me. But we should put the injection functionality within the same function as the existing DBM propagation.

@lu-zhengda lu-zhengda requested review from a team as code owners February 11, 2025 20:37
@lu-zhengda lu-zhengda requested review from wconti27 and bengl February 11, 2025 21:01
Copy link
Member

@tlhunter tlhunter left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Left some comments requesting changes

@@ -37,7 +37,7 @@ services:
ports:
- "127.0.0.1:6379:6379"
mongo:
image: circleci/mongo:3.6
image: circleci/mongo:4.4
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

bump mongo image to 4.4 because prior to 4.4 only str comments are allowed. newer mongo version allows us to test array comments.

wconti27
wconti27 previously approved these changes Feb 14, 2025
Copy link
Contributor

@wconti27 wconti27 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, thanks for making those changes!

Co-authored-by: Thomas Hunter II <tlhunter@datadog.com>
@lu-zhengda lu-zhengda dismissed bengl’s stale review February 14, 2025 17:20

changes addressed

@lu-zhengda lu-zhengda merged commit 560236e into master Feb 14, 2025
358 checks passed
@lu-zhengda lu-zhengda deleted the zhengda.lu/mongo-dbm-trace branch February 14, 2025 17:20
watson pushed a commit that referenced this pull request Feb 17, 2025
…n is enabled. (#5230)

* inject dbm trace comment

* add service mode test

* add unit test to verify both full and service mode

* update test

* fix lint

* use find query

* fix timeout

* remove done

* add tests to mongodb-core

* fix service mode full

* remove custom timeout

* Update packages/dd-trace/src/plugins/database.js

Co-authored-by: Bryan English <bryan.english@datadoghq.com>

* merge duplicate code

* add tests

* add tests to verify command with comments

* fix lint

* Update index.js

Co-authored-by: Thomas Hunter II <tlhunter@datadog.com>

---------

Co-authored-by: Bryan English <bryan.english@datadoghq.com>
Co-authored-by: Thomas Hunter II <tlhunter@datadog.com>
@watson watson mentioned this pull request Feb 17, 2025
watson pushed a commit that referenced this pull request Feb 17, 2025
…n is enabled. (#5230)

* inject dbm trace comment

* add service mode test

* add unit test to verify both full and service mode

* update test

* fix lint

* use find query

* fix timeout

* remove done

* add tests to mongodb-core

* fix service mode full

* remove custom timeout

* Update packages/dd-trace/src/plugins/database.js

Co-authored-by: Bryan English <bryan.english@datadoghq.com>

* merge duplicate code

* add tests

* add tests to verify command with comments

* fix lint

* Update index.js

Co-authored-by: Thomas Hunter II <tlhunter@datadog.com>

---------

Co-authored-by: Bryan English <bryan.english@datadoghq.com>
Co-authored-by: Thomas Hunter II <tlhunter@datadog.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants