pm2-tools
v0.2.0
Published
Different tools to work with PM2 and its programatic interface.
Downloads
4
Maintainers
Readme
PM2 - Tools
This package contains a few tools to monitor and use PM2 behind a load balancer like ELB in AWS.
REST - Interface
Will start a server on the specified port with currently the following endpoints
/healthcheck
=> returns 200 if at least one of the watched processes is still live/metrics
=> wraps thepm2 list
command and returns the following structure
{
"processes": [{
"process": {
"memory": "<usage in bytes>",
"cpu": "<cpu usage in %>"
},
"restarts": "<number of restarts>",
"status": "<current process status (online...)>",
"name": "<name of the app>"
}],
"metrics": {
"<name>": "<metric data>"
}
}
Usage
Let your application run with PM2, either via JSON or directly via command line and additionally run this script.
'use strict';
const RestService = require('pm2-tools').RestService;
const app = new RestService({
monitor_apps: ['my-application'] // if you just want to monitor specific apps
});
app.connect().then(function () {
app.listen(7979)
});
The passed options monitor_apps
allows you to control which PM2 applications you want to monitor. If not passed all will be monitored.
Via PM2
Another possibility is to also start the status/metric server with PM2.
{
"apps": [
{
"name": "status",
"script": "src/status.js",
"instances": 1,
"max_memory_restart": "200M"
},
{
"name": "my-app",
"script": "src/server.js",
"instances": 4,
"max_memory_restart": "200M",
"exec_mode": "cluster"
}
],
}
The only important config is the the above described monitor_apps
which needs to be set to ['my-app']
to deliver the correct status, else we would take status into account too and would never get a bad healthcheck.
For Docker finally start with pm2 --no-daemon pm2.json
to keep Docker alive or without --no-daemon
for any other environment.
Metrics
There are 4 different built in metrics.
- Counter => a simple counter which requires no params
- MultiCounter => like counter but accepts one additional param to count for examples requests paths
- Average => a simple average counter to measure response times
- MultiAverage => like average it accepts an additional param that allows to measure for example different averages of request paths
Usage
Register
Before using a custom metric it needs to be registered.
var MultiAverage = require('pm2-tools').Metrics.MultiAverage;
instance.registerMetric('request_time_by_path', new MultiAverage());
Sending data to metrics
The application it self can use the MessageBus
to publish metrics.
var MessageBus = require('pm2-tools').MessageBus;
var bus = new MessageBus();
bus.publish('request_time_by_path', new Date() - start, '/my-url');