Skip to content

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

License

Notifications You must be signed in to change notification settings

ukitgroup/uMetrics

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

20 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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!

About

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

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • JavaScript 100.0%