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

Prepare support for Dynamic Instrumentation #4492

Merged
merged 40 commits into from
Sep 13, 2024
Merged

Conversation

watson
Copy link
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
Copy link

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

@pr-commenter
Copy link

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
@datadog-datadog-prod-us1
Copy link

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
Copy link

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.

Copy link
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-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
@watson watson requested review from bengl and Qard September 12, 2024 13:56
simon-id
simon-id previously approved these changes Sep 12, 2024
Copy link
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
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.

packages/dd-trace/src/debugger/devtools_client/index.js Outdated Show resolved Hide resolved
@watson watson dismissed stale reviews from Qard and simon-id via 4f8a99d September 13, 2024 06:31
@watson watson enabled auto-merge (squash) September 13, 2024 06:38
Copy link
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
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.

@bengl bengl dismissed rochdev’s stale review September 13, 2024 14:30

All issues by this reviewer have been addressed.

@watson watson merged commit ba53c01 into master Sep 13, 2024
156 checks passed
@watson watson deleted the watson/DEBUG-2532/di branch September 13, 2024 14:30
juan-fernandez pushed a commit that referenced this pull request Sep 30, 2024
Prepare the Node.js tracer to be used with the Dynamic Instrumentation product
(DI).

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 commit no
information is gathered, but this is a required step once we start to gather
the local state snapshot).

DI features included in this commit:
- 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

Please note, that with this commit it's still not possible to use DI with the
Node.js tracer as support for using the Node.js tracer with DI has not yet been
enabled in the Datadog UI.
juan-fernandez pushed a commit that referenced this pull request Sep 30, 2024
Prepare the Node.js tracer to be used with the Dynamic Instrumentation product
(DI).

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 commit no
information is gathered, but this is a required step once we start to gather
the local state snapshot).

DI features included in this commit:
- 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

Please note, that with this commit it's still not possible to use DI with the
Node.js tracer as support for using the Node.js tracer with DI has not yet been
enabled in the Datadog UI.
juan-fernandez pushed a commit that referenced this pull request Oct 1, 2024
Prepare the Node.js tracer to be used with the Dynamic Instrumentation product
(DI).

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 commit no
information is gathered, but this is a required step once we start to gather
the local state snapshot).

DI features included in this commit:
- 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

Please note, that with this commit it's still not possible to use DI with the
Node.js tracer as support for using the Node.js tracer with DI has not yet been
enabled in the Datadog UI.
juan-fernandez pushed a commit that referenced this pull request Oct 1, 2024
Prepare the Node.js tracer to be used with the Dynamic Instrumentation product
(DI).

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 commit no
information is gathered, but this is a required step once we start to gather
the local state snapshot).

DI features included in this commit:
- 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

Please note, that with this commit it's still not possible to use DI with the
Node.js tracer as support for using the Node.js tracer with DI has not yet been
enabled in the Datadog UI.
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.

9 participants