Skip to content

Instantly share code, notes, and snippets.

@sysdig-blog
Created March 19, 2019 13:38
Show Gist options
  • Save sysdig-blog/ed98dcf647edcac88d9dc4aaab70fb51 to your computer and use it in GitHub Desktop.
Save sysdig-blog/ed98dcf647edcac88d9dc4aaab70fb51 to your computer and use it in GitHub Desktop.
Prometheus metrics code instrumentation Javascript
const client = require('prom-client');
const express = require('express');
const server = express();
const register = new client.Registry();
// Probe every 5th second.
const intervalCollector = client.collectDefaultMetrics({prefix: 'node_', timeout: 5000, register});
const counter = new client.Counter({
name: "node_my_counter",
help: "This is my counter"
});
const gauge = new client.Gauge({
name: "node_my_gauge",
help: "This is my gauge"
});
const histogram = new client.Histogram({
name: "node_my_histogram",
help: "This is my histogram",
buckets: [0.1, 5, 15, 50, 100, 500]
});
const summary = new client.Summary({
name: "node_my_summary",
help: "This is my summary",
percentiles: [0.01, 0.05, 0.5, 0.9, 0.95, 0.99, 0.999]
});
register.registerMetric(counter);
register.registerMetric(gauge);
register.registerMetric(histogram);
register.registerMetric(summary);
const rand = (low, high) => Math.random() * (high - low) + low;
setInterval(() => {
counter.inc(rand(0, 1));
gauge.set(rand(0, 15));
histogram.observe(rand(0,10));
summary.observe(rand(0, 10));
}, 1000);
server.get('/metrics', (req, res) => {
res.set('Content-Type', register.contentType);
res.end(register.metrics());
});
console.log('Server listening to 8080, metrics exposed on /metrics endpoint');
server.listen(8080);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment