dd-trace-js icon indicating copy to clipboard operation
dd-trace-js copied to clipboard

Prepare support for Dynamic Instrumentation

Open watson opened this issue 1 year ago • 6 comments

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

  • [x] Add tests
  • [x] Go over remaining TODO comments and resolve any that needs resolving before merging

watson avatar Jul 09 '24 12:07 watson

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

github-actions[bot] avatar Jul 09 '24 12:07 github-actions[bot]

Benchmarks

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

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

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

pr-commenter[bot] avatar Jul 10 '24 09:07 pr-commenter[bot]

Library Vulnerabilities

:white_check_mark: No library vulnerabilities found (scanned 10a69b2).

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 :warning:
packages/dd-trace/src/proxy.js 75.00% 1 Missing :warning:
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     

:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Have feedback on the report? Share it here.

codecov[bot] avatar Jul 19 '24 12:07 codecov[bot]

  • #4549 Graphite
  • #4492 Graphite 👈
  • #4638 Graphite
  • master

This stack of pull requests is managed by Graphite. Learn more about stacking.

Join @watson and the rest of your teammates on Graphite Graphite

watson avatar Jul 19 '24 13:07 watson

It would make assigning a code owner easier if this was its own folder directly under packages (which we could also decide to actually release as its own package later on).

rochdev avatar Aug 29 '24 19:08 rochdev