Skip to content

Latest commit

 

History

History
88 lines (74 loc) · 2.92 KB

README.md

File metadata and controls

88 lines (74 loc) · 2.92 KB

uMetrics

Travis Coveralls github branch node npm

GitHub top language GitHub code size in bytes David David

license GitHub last commit semantic-release

Convenient wrapper for prom-client to expose product's metrics to prometheus

Initialize

You just have to initialize Facade class and use it as a Singletone:

const { UMetrics, PullTransport } = require('umetrics');

// Any logger with this interface
const logger = {
	info(msg) {
		console.log(msg);
	},
	warn(msg) {
		console.log(msg);
	},
	error(msg) {
		console.log(msg);
	},
};

// And just initialize Singletone once
const uMetrics = new UMetrics(new PullTransport(logger, 3000), {
	prefix: 'test',
});

uMetrics.start();

Then in your code you have to register new metric name:

uMetrics.register(uMetrics.Metrics.Gauge, 'someMetricName', {
	ttl   : 60 * 1000,
	labels: ['some_label'],
});

labels - you have register label names before setting their values
ttl - metric's time to live (milliseconds)

ttl parameter is very useful. because usually if you use prometheus, you want to watch time series. So you expect that that data will be reset evenly

Using

And use it to collect metrics:

// Yes, you can write the name of metric here
// Inside it' realised with proxy, so you can use it like this
uMetrics.someMetricName.inc(1, { some_label: 'label_value' });

// You can set value
uMetrics.someMetricName.set(10, { some_label: 'label_value' });

Best practise is to wrap with try/catch to secure from uncaught exceptions

try {
	uMetrics.someMetricName.inc(1);
} catch (error) {
	// logging the error here
}

You cant inject another transport. Out of the box you have PullTransport and PushTransport

// You need push transport for scripts which run for not long period
// For example cron
new PushTransport(logger, {
	url: 'pushgatewayurl',
	interval: 2000, //ms
});

See https://prometheus.io/docs/practices/pushing/

Now we have only one Metric type GaugeMetric. Welcome for contribution!