-
Notifications
You must be signed in to change notification settings - Fork 9
docs(configuration): pair threads.preload with preloadRequire for dd-trace #644
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
base: main
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change | ||||
|---|---|---|---|---|---|---|
|
|
@@ -65,27 +65,29 @@ threads: | |||||
| - `maxHeapMemory` — Heap limit per thread (MB) | ||||||
| - `heapSnapshotNearLimit` — Write a `.heapsnapshot` file when a thread nears its heap limit (loadable in Chrome DevTools Memory tab); _Default_: `false`. See [Worker Thread Debugging](./debugging.md#heap-snapshots-near-the-limit) | ||||||
| - `debug` — Enable Node.js inspector; sub-options: `port`, `startingPort`, `host`, `waitForDebugger`. See [Worker Thread Debugging](./debugging.md) | ||||||
| - `preload` <VersionBadge version="v5.2.0" /> — Module, or list of modules, to load (via Node's `--import`) before any Harper or application module on each worker thread. Intended for instrumentation/APM agents that must load first to instrument subsequent module loads. Use the agent's ESM/register entry — e.g. `dd-trace/register.js`, which registers the loader hooks that instrument worker threads (where Harper runs its work); the plain `dd-trace/init` (`--require`) entry only covers the main thread. Bare specifiers resolve against the `node_modules` of your installed [components](../components/overview.md) — so the agent can be shipped as a dependency of a deployed component — and absolute paths are also accepted. Applies to worker threads only (not under Bun). | ||||||
| - `preload` <VersionBadge version="v5.2.0" /> — Module, or list of modules, to load (via Node's `--import`) before any Harper or application module on each worker thread. Intended for instrumentation/APM agents that must load first to instrument subsequent module loads. Use the agent's ESM/register entry — e.g. `dd-trace/register.js`, which installs the ESM loader hooks that produce automatic instrumentation for `import`-loaded modules. As measured on dd-trace 6.x, that entry only registers the loader hooks and never calls `init()`, so `preload` on its own leaves the tracer uninitialized: it still hands out spans with plausible trace ids, but they are no-ops and nothing is ever exported. Pair it with `preloadRequire: dd-trace/init`, which is the entry that actually starts the tracer. `dd-trace/initialize.mjs` is not a single-entry shortcut around this pairing: it gates both its `init()` call and its loader-hook registration behind `isMainThread`, so under `--import` on a worker thread it starts nothing and registers nothing. Bare specifiers resolve against the `node_modules` of your installed [components](../components/overview.md) — so the agent can be shipped as a dependency of a deployed component — and absolute paths are also accepted. Applies to worker threads only (not under Bun). | ||||||
|
|
||||||
| ```yaml | ||||||
| threads: | ||||||
| preload: dd-trace/register.js | ||||||
| preloadRequire: dd-trace/init # starts the tracer | ||||||
| preload: dd-trace/register.js # ESM loader hooks for automatic instrumentation | ||||||
| ``` | ||||||
|
|
||||||
| Or several modules: | ||||||
| Or several modules. The `preloadRequire` pairing still applies — an agent listed here is subject to the same rule as when it is the only entry: | ||||||
|
|
||||||
| ```yaml | ||||||
| threads: | ||||||
| preloadRequire: dd-trace/init # still what starts the tracer | ||||||
| preload: | ||||||
| - dd-trace/register.js | ||||||
| - /opt/instrumentation/agent.mjs | ||||||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This still presents a directly copyable dd-trace configuration with only (
Member
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Good catch — fixed. The multi-module example now carries I did chase down So I've stuck with the two-key pairing and added a line to the sent with Claude Opus 5 |
||||||
| ``` | ||||||
|
|
||||||
| - `preloadRequire` <VersionBadge version="v5.2.0" /> — Same as `preload`, but loads modules via Node's `--require` (CommonJS) instead of `--import`. Use this for agents that document the `--require` path and do not need ESM loader hooks (e.g. `dd-trace/init`, Dynatrace OneAgent). Same resolution rules as `preload`. | ||||||
| - `preloadRequire` <VersionBadge version="v5.2.0" /> — Same as `preload`, but loads modules via Node's `--require` (CommonJS) instead of `--import`. Use this for agents that document the `--require` path (e.g. `dd-trace/init`, Dynatrace OneAgent). Same resolution rules as `preload`. For dd-trace, `dd-trace/init` is the entry that starts the tracer, and it does not register the ESM loader hooks — keep `preload: dd-trace/register.js` alongside it, as shown under `preload` above. | ||||||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. According to the general rules, we should use hyphens (
Suggested change
References
Member
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Not taking this one. The em-dash rule is being over-generalized here.
Two checks: the docs tree has 633 em-dash list-item lines across 63 reference files, and So these are the established convention, not "pre-existing inconsistencies." Applying the suggestion would leave the touched lines inconsistent with every sibling line in the same list. sent with Claude Opus 5 |
||||||
|
|
||||||
| ```yaml | ||||||
| threads: | ||||||
| preloadRequire: dd-trace/init | ||||||
| preloadRequire: dd-trace/init # starts the tracer; pair with preload (see above) | ||||||
| ``` | ||||||
|
|
||||||
| --- | ||||||
|
|
||||||
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.
Could we confirm this as an end-to-end Harper worker setup before documenting it as the dd-trace recipe?
register.jsinstalling loader hooks andinitstarting the tracer does not establish that Harper's actual workerexecArgvcomposition produces exported spans with usable context and shutdown behavior. Please add a reproducible Harper validation (for example, a component emitting a known trace to a test agent) and summarize or link its scope/result; otherwise keep this guidance agent-neutral and describe dd-trace as unverified.