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

Goodluckhf/uMetrics

Repository files navigation

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!

About

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

Resources

License

Stars

Watchers

Forks

Packages

No packages published