Convenient wrapper for prom-client to expose product's metrics to prometheus
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();
Available options:
prefix
- prefix for all metric names (by default null)labels
- default labels for all metrics should be type:{ [labelName: string]: any}
nodejsMetricsEnabled
- turn off/on export of default metrics (by default false)nodejsMetricsInterval
- interval of scrapping default metrics (7000 ms by default)
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) - deprecated
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!