/uMetrics

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

Primary LanguageJavaScriptMIT LicenseMIT

uMetrics

Greenkeeper badge

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();

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

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!