What is express-prom-bundle?
The express-prom-bundle package is a middleware for Express.js that integrates Prometheus metrics collection and reporting. It allows you to easily monitor the performance and health of your Express applications by exposing various metrics that Prometheus can scrape.
What are express-prom-bundle's main functionalities?
Basic Setup
This code demonstrates the basic setup of express-prom-bundle in an Express application. It initializes the middleware and includes it in the app, which will start collecting and exposing metrics.
const express = require('express');
const promBundle = require('express-prom-bundle');
const app = express();
const metricsMiddleware = promBundle({ includeMethod: true });
app.use(metricsMiddleware);
app.get('/', (req, res) => {
res.send('Hello World!');
});
app.listen(3000, () => {
console.log('Server is running on port 3000');
});
Custom Metrics
This code demonstrates how to create and use custom metrics with express-prom-bundle. It shows how to define a custom counter and increment it in a route handler.
const express = require('express');
const promBundle = require('express-prom-bundle');
const promClient = require('prom-client');
const app = express();
const metricsMiddleware = promBundle({ includeMethod: true });
app.use(metricsMiddleware);
const customCounter = new promClient.Counter({
name: 'custom_counter',
help: 'Example of a custom counter',
});
app.get('/increment', (req, res) => {
customCounter.inc();
res.send('Counter incremented');
});
app.listen(3000, () => {
console.log('Server is running on port 3000');
});
Custom Metrics Endpoint
This code demonstrates how to customize the endpoint where Prometheus metrics are exposed. By setting the `metricsPath` option, you can change the default `/metrics` endpoint to a custom path.
const express = require('express');
const promBundle = require('express-prom-bundle');
const app = express();
const metricsMiddleware = promBundle({ includeMethod: true, metricsPath: '/custom-metrics' });
app.use(metricsMiddleware);
app.get('/', (req, res) => {
res.send('Hello World!');
});
app.listen(3000, () => {
console.log('Server is running on port 3000');
});
Other packages similar to express-prom-bundle
prom-client
prom-client is a Prometheus client for Node.js that allows you to create and expose custom metrics. Unlike express-prom-bundle, it does not provide middleware for Express, so you need to manually integrate it into your application.
express-status-monitor
express-status-monitor is a simple, self-hosted module based on Socket.io and Chart.js to report realtime server metrics for Express-based applications. It provides a web-based dashboard for monitoring but does not integrate with Prometheus.
express prometheus bundle
express middleware with popular prometheus metrics in one bundle.
Internally it uses prom-client. See: https://github.com/siimon/prom-client
Included metrics:
up
: normally is just 1nodejs_memory_heap_total_bytes
and nodejs_memory_heap_used_bytes
http_request_seconds
: http latency histogram labeled with status_code
Install
npm install express-prom-bundle
Usage
You MUST call app.use(metricsMiddleware)
before the use
-ing your middleware,
otherwise those won't count in http_request_seconds
histogram
const promBundle = require("express-prom-bundle"),
const metricsMiddleware = promBundle({ });
app.use(metricsMiddleware);
app.use();
app.listen(3000);
Options
- prefix: prefix added to every metric name
- whitelist, blacklist: array of strings or regexp specifying which metrics to include/exclude
- buckets: buckets used for
http_request_seconds
histogram
Example
setup std. metrics but exclude up
-metric:
"use strict";
const express = require("express"),
app = express(),
promBundle = require("express-prom-bundle");
app.use(promBundle({
prefix: "demo_app:something"
}));
app.get("/hello", (req, res) => res.send("ok"));
app.listen(3000);
See an advanced example on github
License
MIT