express-status-monitor 0,2,3,0,1,0,3,1 npm


Gitter express-status-monitor on npm npm bitHound Overall Score CircleCI

Simple, self-hosted module based on and Chart.js to report realtime server metrics for Express-based node servers.

Monitoring Page


Demo available here

Support for other Node.js frameworks

Installation & setup

  1. Run npm install express-status-monitor --save
  2. Before any other middleware or router add following line: app.use(require('express-status-monitor')());
  3. Run server and go to /status

Run examples

  1. Go to cd examples/
  2. Run npm i
  3. Run server npm start
  4. Go to


Monitor can be configured by passing options object into expressMonitor constructor.

Default config:

title: 'Express Status',  // Default title
path: '/status',
websocket: existingSocketIoInstance,
spans: [{
  interval: 1,            // Every second
  retention: 60           // Keep 60 datapoints in memory
}, {
  interval: 5,            // Every 5 seconds
  retention: 60
}, {
  interval: 15,           // Every 15 seconds
  retention: 60

Securing endpoint

The HTML page handler is exposed as a pageRoute property on the main middleware function. So the middleware is mounted to intercept all requests while the HTML page handler will be authenticated.

Example using

const ensureLoggedIn = require('connect-ensure-login').ensureLoggedIn()

const statusMonitor = require('express-status-monitor')();
app.get('/status', ensureLoggedIn, statusMonitor.pageRoute)

Credits to @mattiaerre

Example using http-auth

const auth = require('http-auth');
const basic = auth.basic({realm: 'Monitor Area'}, function(user, pass, callback) {
  callback(user === 'username' && pass === 'password');

// Set '' to config path to avoid middleware serving the html page (path must be a string not equal to the wanted route)
const statusMonitor = require('express-status-monitor')({ path: '' });
app.use(statusMonitor.middleware); // use the "middleware only" property to manage websockets
app.get('/status', auth.connect(basic), statusMonitor.pageRoute); // use the pageRoute property to serve the dashboard html page

Using module with in project

If you’re using in your project, this module could break your project because this module by default will spawn its own instance. To mitigate that, fill websocket parameter with your main instance as well as port parameter.

Tests and coverage

In order to run test and coverage use the following npm commands:

npm test
npm run coverage


MIT License © Rafal Wilinski

Top Contributors

RafalWilinski mattiaerre n1try JulienBreux realronchi TravelingTechGuy malixsys capaj cristianossd danielbayerlein jdormit Kerumen soyuka


package version
debug ^2.6.8
on-headers ^1.0.1
pidusage ^1.1.6 ^2.0.3
dev bithound ^1.7.0
chai ^4.1.0
eslint ^4.3.0
istanbul ^0.4.5
mocha ^3.4.2
publish ^0.6.0
sinon ^2.4.1
snyk ^1.37.0


-   0.1.3 zip tar
-   0.1.2 zip tar