Skip to content

Prepare support for Dynamic Instrumentation#4492

Merged
watson merged 40 commits intomasterfrom
watson/DEBUG-2532/di
Sep 13, 2024
Merged

Prepare support for Dynamic Instrumentation#4492
watson merged 40 commits intomasterfrom
watson/DEBUG-2532/di

Conversation

@watson
Copy link
Copy Markdown
Collaborator

@watson watson commented Jul 9, 2024

Prepare the Node.js tracer to be used with the Dynamic Instrumentation product (DI).

Please note, that even after this PR has been merged, it's not possible to use DI with the Node.js tracer, as 1) this isn't the full implementation and 2) the Datadog UI hasn't been updated to support DI for Node.js applications (it's currently behind a feature flag that needs to be enabled by Datadog).

Implementation details

Probes are added as breakpoints using the V8 Inspector Protocol. The inspector runs in a worker thread and will pause the main thread temporarily while gathering the required information related to the probe (as of this PR no information is gathered, but this is a required step once we start to gather the local state snapshot).

Included in this PR

  • Support for line based log probes
  • Support for loading probes via Remote Configuration
  • Support for sending probe status to the debugger-backend
  • Support for sending log data to debugger-backend

Out of scope for this PR

  • No support for function probes
  • No support for Metric/Span/Span Tag probes
  • No support for sampling
  • No support for capturing of snapshots
  • No support for templates (in either conditions or messages)
  • No support for attaching span/trace ID to payload

Notes to reviewers

To enable, set DD_DYNAMIC_INSTRUMENTATION_ENABLED=true and enable the live_debugger_language_js feature flag in the UI.

Tasks

  • Add tests
  • Go over remaining TODO comments and resolve any that needs resolving before merging
  • Either trigger test:debugger during CI, or change to use the Mocha test-runner

@watson watson self-assigned this Jul 9, 2024
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Jul 9, 2024

Overall package size

Self size: 7.13 MB
Deduped: 62.5 MB
No deduping: 62.78 MB

Dependency sizes | name | version | self size | total size | |------|---------|-----------|------------| | @datadog/native-appsec | 8.1.1 | 18.67 MB | 18.68 MB | | @datadog/native-iast-taint-tracking | 3.1.0 | 12.27 MB | 12.28 MB | | @datadog/pprof | 5.3.0 | 9.85 MB | 10.22 MB | | protobufjs | 7.2.5 | 2.77 MB | 5.16 MB | | @datadog/native-iast-rewriter | 2.4.1 | 2.14 MB | 2.23 MB | | @opentelemetry/core | 1.14.0 | 872.87 kB | 1.47 MB | | @datadog/native-metrics | 2.0.0 | 898.77 kB | 1.3 MB | | @opentelemetry/api | 1.8.0 | 1.21 MB | 1.21 MB | | jsonpath-plus | 9.0.0 | 580.4 kB | 1.03 MB | | import-in-the-middle | 1.8.1 | 71.67 kB | 785.15 kB | | msgpack-lite | 0.1.26 | 201.16 kB | 281.59 kB | | opentracing | 0.14.7 | 194.81 kB | 194.81 kB | | pprof-format | 2.1.0 | 111.69 kB | 111.69 kB | | @datadog/sketches-js | 2.1.0 | 109.9 kB | 109.9 kB | | semver | 7.6.3 | 95.82 kB | 95.82 kB | | lodash.sortby | 4.7.0 | 75.76 kB | 75.76 kB | | lru-cache | 7.14.0 | 74.95 kB | 74.95 kB | | ignore | 5.3.1 | 51.46 kB | 51.46 kB | | int64-buffer | 0.1.10 | 49.18 kB | 49.18 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 | | 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 | | jest-docblock | 29.7.0 | 8.99 kB | 12.76 kB | | crypto-randomuuid | 1.0.0 | 11.18 kB | 11.18 kB | | koalas | 1.0.2 | 6.47 kB | 6.47 kB | | path-to-regexp | 0.1.10 | 6.38 kB | 6.38 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

@watson watson force-pushed the watson/DEBUG-2532/di branch from 3a18f73 to 7f378db Compare July 10, 2024 09:12
@pr-commenter
Copy link
Copy Markdown

pr-commenter Bot commented Jul 10, 2024

Benchmarks

Benchmark execution time: 2024-09-13 09:28:50

Comparing candidate commit 51168eb in PR branch watson/DEBUG-2532/di with baseline commit 1db4182 in branch master.

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

@watson watson force-pushed the watson/DEBUG-2532/di branch 3 times, most recently from 63272b6 to 733316e Compare July 15, 2024 11:32
@watson watson force-pushed the watson/DEBUG-2532/di branch 2 times, most recently from cb2e46b to 15468a4 Compare July 17, 2024 12:07
@watson watson changed the base branch from master to watson/DEBUG-2567/config-hidden-props July 17, 2024 12:07
@watson watson force-pushed the watson/DEBUG-2567/config-hidden-props branch 2 times, most recently from 35c4813 to dfc947f Compare July 18, 2024 17:33
@watson watson force-pushed the watson/DEBUG-2532/di branch from 15468a4 to 10a69b2 Compare July 18, 2024 17:34
@datadog-datadog-prod-us1
Copy link
Copy Markdown

Library Vulnerabilities

✅ No library vulnerabilities found (scanned 10a69b2).

@watson watson force-pushed the watson/DEBUG-2567/config-hidden-props branch 2 times, most recently from fa300e8 to 0e69d6d Compare July 19, 2024 12:34
@watson watson force-pushed the watson/DEBUG-2532/di branch from 10a69b2 to 39c67f4 Compare July 19, 2024 12:38
@codecov
Copy link
Copy Markdown

codecov Bot commented Jul 19, 2024

Codecov Report

Attention: Patch coverage is 34.61538% with 34 lines in your changes missing coverage. Please review.

Project coverage is 87.74%. Comparing base (d3960fa) to head (4963955).
Report is 2 commits behind head on master.

Files with missing lines Patch % Lines
packages/dd-trace/src/debugger/index.js 19.51% 33 Missing ⚠️
packages/dd-trace/src/proxy.js 75.00% 1 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##           master    #4492      +/-   ##
==========================================
+ Coverage   83.24%   87.74%   +4.50%     
==========================================
  Files           5      286     +281     
  Lines         388    12479   +12091     
  Branches       33       33              
==========================================
+ Hits          323    10950   +10627     
- Misses         65     1529    +1464     

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

@watson watson force-pushed the watson/DEBUG-2532/di branch from 39c67f4 to 3c46a83 Compare July 19, 2024 13:18
Copy link
Copy Markdown
Collaborator Author

watson commented Jul 19, 2024

@watson watson force-pushed the watson/DEBUG-2567/config-hidden-props branch from 0e69d6d to d2c0b2c Compare July 23, 2024 06:48
@watson watson force-pushed the watson/DEBUG-2532/di branch from 3c46a83 to ee3afc9 Compare July 23, 2024 06:48
@watson watson force-pushed the watson/DEBUG-2567/config-hidden-props branch from d2c0b2c to 401da13 Compare July 23, 2024 12:03
@watson watson force-pushed the watson/DEBUG-2532/di branch 2 times, most recently from 7715a01 to 781e729 Compare July 23, 2024 14:11
Comment thread packages/dd-trace/src/debugger/devtools_client/index.js
simon-id
simon-id previously approved these changes Sep 12, 2024
Copy link
Copy Markdown
Member

@simon-id simon-id left a comment

Choose a reason for hiding this comment

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

LGTM for the Remote Config parts

Qard
Qard previously approved these changes Sep 12, 2024
Copy link
Copy Markdown
Contributor

@Qard Qard left a comment

Choose a reason for hiding this comment

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

One minor suggestion, but otherwise LGTM.

Comment thread packages/dd-trace/src/debugger/devtools_client/index.js Outdated
Copy link
Copy Markdown
Member

@simon-id simon-id left a comment

Choose a reason for hiding this comment

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

reapproving after small commit


async function start () {
sessionStarted = true
return session.post('Debugger.enable') // return instead of await to reduce number of promises created
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

This is a non-blocker, but maybe in a future PR you can make methods on Session that will post these messages so that we don't have to have these constant strings hanging around everywhere a post() happens.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

debugger Dynamic Instrumentation & Live Debugger semver-minor

Projects

None yet

Development

Successfully merging this pull request may close these issues.

9 participants