JSPM

  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 26
  • Score
    100M100P100Q84101F
  • License MIT

Node.js performance measurement metrics (cpu, memory, event loop, gc)

Package Exports

  • @esmj/monitor

Readme

Monitor

The @esmj/monitor is module for collecting node metrics from native node API.

Requirements

  • Node 18+

Install

npm install @esmj/monitor

Usage

It works for both Javascript modules (ESM and CJS).

// server.js
import { createMonitoring } from '@esmj/monitor';

const { monitor, metricsHistory } = new createMonitoring();

const { unsubscribe } = monitor.subscribe((metrics) => {
  console.log(metrics);
//   {
//   cpuUsage: { user: 1692, system: 925, percent: 0.26 },
//   eventLoopDelay: {
//     min: 20.07,
//     max: 21.15,
//     mean: 20.78,
//     stddev: 0.38,
//     percentile80: 21.08
//   },
//   eventLoopUtilization: {
//     idle: 992.72,
//     active: 7.85,
//     utilization: 0.01
//   },
//   loadAverage: {
//     minute1: 3.38,
//     minute5: 8.28,
//     minute15: 9.15
//   },
//   memoryUsage: {
//     percent: 5.23,
//     rss: 54.2,
//     heapTotal: 20.2,
//     heapUsed: 17.74,
//     external: 0.9,
//     arrayBuffers: 0.07
//   },
//   gc: { entry: null },
//   process: {
//     pid: 53509,
//     ppid: 53480,
//     platform: 'darwin',
//     uptime: 14.656514084,
//     version: 'v18.12.1'
//   }
// }
});

monitor.start();

setTimeout(() => {
  console.log(metricsHistory.percentile('cpuUsage.percent', 80)); // 1 
  console.log(metricsHistory.percentile('memoryUsage.rss', 80)); // 61
}, 5000);

setTimeout(() => {
  unsubscribe();
  monitor.stop();
  console.log(metricsHistory.percentile('cpuUsage.percent', 80)); // undefined 
  console.log(metricsHistory.percentile('memoryUsage.rss', 80)); // undefined
}, 15000);

API

monitor = new Monitor(options?)

Create a new instance of Monitor.

options?

Type: object

Configure options for the new instance of Monitor.

options.interval?

Type: integer Default: 1000

Measure interval metric.

start()

Monitoring start measure node metric.

stop()

Monitoring stop measure node metric.

subscribe(listener)

Subscribe listener for metrics.

Returns a subscription object with unsubscribe method.

unsubscribe(listener)

Remove subscription.

add(metric)

Monitoring add measure new metric.

metric

Type: Metric

Add new metric to monitoring.

remove(metric)

Remove defined metric from monitoring.

metricsHistory = new MetricsHistory(options.metricsHistory?)

Create a new instance of Monitor.

options?

Type: object

Configure options for the new instance of MetricsHistory.

options.limit?

Type: integer Default: 60

FIFO size of array for calculating percentile and linear regressions.

percentile(key, number)

Returns defined percentile for measured metric

key

Type: String

Path in measured metric structure.

number

Type: Number

Percentile number for FIFO array

trend(key, limit)

Returns linear regression variables slope, yIntercept and predict function for measured metric.

key

Type: String

Path in measured metric structure.

limit

Type: Number

Defined how much records use for calculating linear regression. Default is use all records from FIFO array.