Skip to content

Instantly share code, notes, and snippets.

@mhdawson
Last active July 13, 2018 08:33
Show Gist options
  • Save mhdawson/ead071dde71f71ae5af11ccbaca4f1ec to your computer and use it in GitHub Desktop.
Save mhdawson/ead071dde71f71ae5af11ccbaca4f1ec to your computer and use it in GitHub Desktop.

Diagnostic tooling is important to the consumers of Node.js. It is used both in development and in production in order to investigate problems. The failure of one of these tools may be as big a problem for an end user as a bug within the runtime itself.

The Node.js project has assessed the tools and their relative importance and put them into one of the following tiers.

  • Tier 1 - Tool must always be working for all Current and LTS Node.js releases. A release will not be shipped if the test suite for the tool is not green. For a tool to be considered for inclusion in this tier it must have a good test suite and that test suite and a job must exist in the Node.js CI so that it can be run as part of the release process. No commit to master should break this tool if the next release is within 1 month.

  • Tier 2 - Must be working for all LTS releases. An LTS release will not be shipped if the test suite for the tool is not green. For a tool to be considered for inclusion in this tier it must have a good test suite and that test suite and a job must exist in the Node.js CI so that it can be run as part of the release process.

  • Tier 3 - If possible its test suite will be run at least nightly in the Node.js CI and issues opened for failures. Does not block shipping a release.

  • Tier 4 - Does not block shipping a release.

  • Unclassified - tool is new or does not have the required testing in the Node.js CI in order to qualify for a higher tier.

The choice of which tier a particular tool will be assigned to, will be a collaborative decision between Diagnostics WG and Release WG. Some of the criteria considered might be:

  • The tool fits into a key cateogry as listed below
  • Whether the tool is actively used by the community
  • Availability of alternatives
  • Impact to the overall ecosystem if the tool is not working
  • Availability of reliable test suite that can be integrated into our CI
  • Availability of maintainer or community collaborator who will help resolve issues when there are CI failures.
  • The tool is maintained the Node.js foundation Github org

The current categories of tools that fall under these Tiers are:

  • FDDC
  • Tracing fill this is

The following tools are currently assigned to Tiers as follows

Tier 1

Tier 2

Tier 3

Tier 4

Not yet classified

Tool Type Tool Name Regular Testing In Node.js CI Integrated with Node.js Target Tier
FFDC node-report No No 1
Heap/mem llnode ? No 2
Heap/mem mdb_v8 No No 4
Heap/mem node-heapdum No No 2
Profiler V8 cpu profiler No Yes 1
Profiler V8 heap profiler No Yes 1
Profiler V8 sampling heap profiler No Yes 1
Tracing trace_events No Yes 1
APM Async Hooks ? Yes 1
Debugger V8 Debug protocol No Yes 1
Debugger Command line Debug Client ? Yes 1
Debugger Chrome Dev tools ? No 3
Tracing DTrace No Partial 3
Tracing LTTng No Removed ? N/A
Tracing ETW No Partial 3
Profiling Linux perf No Partial ?
Profiling Windows xperf No ? ?
Profiling Ox No No to early
Profiling node-clinic No No to early
Debugger Chakracore -time-travel No data source only to early

????

  • SystemTap - nothing specific to Node?
  • eBPF tracing tool - anything specific to Node (nodegc and nodestat, anything else)?
@Flarna
Copy link

Flarna commented Jul 13, 2018

Does Tool Type APM refer to the products from e.g. Elastic, New Relic, AppDynamics, Dynatrace,...?

If yes I would not bind them to Tool Name "Async Hooks" as above products do much more than context tracing using AsyncHooks.

Actually "Async Hooks" is not a tool it's a core functionality used (and needed) by APM tools. But also other tools like node-clinic or bubbleprof and as far as I know even node core in Domains use and need it.

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