New:Introducing Socket Scanning for VS Code Marketplace Extensions.Learn more →
Get Started

@opentelemetry/instrumentation-runtime-node

Package Overview
Dependencies
Maintainers
6
Versions
42
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@opentelemetry/instrumentation-runtime-node

OpenTelemetry instrumentation for Node.js Performance measurement API

latest
Source
npmnpm
Version
0.36.0
Version published
Weekly downloads
8.5M
-27.72%
Maintainers
6
Weekly downloads
 
Created
Source

OpenTelemetry Node.js Runtime Metrics Instrumentation

NPM Published Version Apache License

This module provides automatic metric instrumentation that exposes measurements from the Performance measurement APIs (i.e. perf_hooks). It can also emit OpenTelemetry logs for uncaught exceptions. When a configured logger provider exposes forceFlush() (for example, the SDK LoggerProvider), this instrumentation calls it immediately after emitting the uncaught-exception log record as a best-effort attempt to reduce log loss on process termination.

Supported Versions

  • Node.js ^18.19.0 || >=20.6.0

Example

npm install --save @opentelemetry/sdk-node @opentelemetry/exporter-prometheus
npm install --save @opentelemetry/instrumentation-runtime-node
import { NodeSDK } from '@opentelemetry/sdk-node';
import { PrometheusExporter } from '@opentelemetry/exporter-prometheus';
import { RuntimeNodeInstrumentation } from '@opentelemetry/instrumentation-runtime-node';

const prometheusExporter = new PrometheusExporter({
  port: 9464,
  startServer: true
});

const sdk = new NodeSDK({
  metricReader: prometheusExporter,
  instrumentations: [new RuntimeNodeInstrumentation({
    monitoringPrecision: 5000,
  })],
});

sdk.start()

NodeSDK is the full OpenTelemetry SDK for Node.js that is a layer of abstraction on top of the @opentelemetry/sdk-metrics and @opentelemetry/sdk-trace-* packages. By specifying metricReader, it will initialize the metrics SDK and creates a MeterProvider. @opentelemetry/exporter-prometheus will output metrics collected by registered instrumentation on a /metrics endpoint.

Go to localhost:9464/metrics, and you should see:

# HELP nodejs_performance_event_loop_utilization Event loop utilization
# UNIT nodejs_performance_event_loop_utilization 1
# TYPE nodejs_performance_event_loop_utilization gauge
nodejs_performance_event_loop_utilization 0.010140079547955264

On the very first metrics collection the event loop utilization and time metrics may report zero or near-zero values while the instrumentation establishes a baseline.

Options

RuntimeNodeInstrumentation's constructor accepts the following options:

nametypeunitdefaultdescription
monitoringPrecisionintmillisecond10The resolution in milliseconds for the event loop delay histogram (perf_hooks.monitorEventLoopDelay). A smaller value gives finer-grained delay samples at the cost of more overhead. Has no effect on event loop utilization or time metrics.
captureUncaughtExceptionbool-falseWhether to emit a LogRecord for uncaught exceptions (severity FATAL). Uses the uncaughtExceptionMonitor process event.
applyCustomExceptionAttributesfunction-undefinedOptional callback to attach custom attributes to emitted exception log records.

Semantic Conventions

This instrumentation emits metrics defined in the experimental @opentelemetry/semantic-conventions (^1.29.0) for the nodejs and v8js runtime namespaces.

Metrics collected

MetricShort Description
nodejs.eventloop.timeCumulative duration the event loop has been in each state
nodejs.eventloop.utilizationEvent loop utilization ratio (0.0–1.0)
nodejs.eventloop.delay.minMinimum event loop delay
nodejs.eventloop.delay.maxMaximum event loop delay
nodejs.eventloop.delay.meanMean event loop delay
nodejs.eventloop.delay.stddevStandard deviation of event loop delay
nodejs.eventloop.delay.p5050th-percentile event loop delay
nodejs.eventloop.delay.p9090th-percentile event loop delay
nodejs.eventloop.delay.p9999th-percentile event loop delay
v8js.gc.durationGarbage Collection pause duration by type
v8js.memory.heap.space.sizeTotal pre-allocated size of a heap space
v8js.memory.heap.usedUsed heap memory in a heap space
v8js.memory.heap.space.available_sizeAvailable size in a heap space
v8js.memory.heap.space.physical_sizeCommitted (physical) size of a heap space
v8js.resource.activeCount of active resources keeping the event loop alive

Attributes collected

AttributeShort Description
nodejs.eventloop.stateState of the event loop (active, idle)
v8js.gc.typeType of Garbage Collection (major, minor, incremental, weakcb)
v8js.heap.space.nameName of the V8 heap space
v8js.resource.typeType of active resource

License

Apache 2.0 - See LICENSE for more information.

Keywords

perf_hooks

FAQs

Package last updated on 06 Oct 2026

Related posts