Skip to content
A Node.js client for Librato (
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.
.travis.yml update changelog Feb 18, 2019 deploy from travis Feb 18, 2019


librato-node is a Node.js client for Librato Metrics (

build status npm version mit license

Getting Started


yarn add librato-node


Once librato.start is called, a worker will send aggregated stats to Librato once every 60 seconds.

var librato = require('librato-node');

librato.configure({email: '', token: 'ABC123'});

process.once('SIGINT', function() {
  librato.stop(); // stop optionally takes a callback

// Don't forget to specify an error handler, otherwise errors will be thrown
librato.on('error', function(err) {


Use librato.increment to track counts in Librato. On each flush, the incremented total for that period will be sent.

var librato = require('librato-node');

librato.increment('foo');                     // increment by 1
librato.increment('foo', 2);                  // increment by 2
librato.increment('foo', 2, {source: 'bar'}); // custom source


You can send arbitrary measurements to Librato using librato.measure. These will be sent as gauges. For example:

var librato = require('librato-node');

librato.measure('member-count', 2001);
librato.measure('response-time', 500);
librato.measure('foo', 250, {source: 'bar'}); // custom source


Use librato.timing to measure durations in Librato. You can pass it a synchronous function or an asynchronous function (it checks the function arity). For example:

var librato = require('librato-node');

// synchronous
librato.timing('foo', function() {
  for (var i=0; i<50000; i++) console.log(i);

// async without a callback
librato.timing('foo', function(done) {
  setTimeout(done, 1000);

// async with a callback
var workFn = function(done) {
  setTimeout(function() {
    done(null, 'foo');
var cb = function(err, res) {
  console.log(res); // => 'foo'
librato.timing('foo', workFn, cb);
librato.timing('foo', workFn, {source: 'bar'}, cb); // all timing calls also accept a custom source


librato-node includes Express middleware to log the request count and response times for your app. It also works in other Connect-based apps.

var express = require('express');
var librato = require('librato-node');

var app = express();

The key names the middleware uses are configurable by passing an options hash.

librato.middleware({requestCountKey: 'myRequestCount', responseTimeKey: 'myResponseTime'});


By default the librato-node worker publishes data every 60 seconds. Configure this value by passing a period argument to the configure hash.

var librato = require('librato-node');
librato.configure({email: '', token: 'ABC123', period: 5000})

Request Options

You can pass additional options for the HTTP POST to Librato using the requestOptions parameter. See request/request for a complete list of options. For example, to configure a timeout:

var librato = require('librato-node');
librato.configure({email: '', token: 'ABC123', requestOptions: {timeout: 250}})

By default librato-node will retry up to 3 times on connection failures and 5xx responses using an exponential backoff strategy with a 100ms base. These defaults can be overridden using the requestOptions paramter. See requestretry for a list of options. For example, to limit to a single attempt:

var librato = require('librato-node');
librato.configure({email: '', token: 'ABC123', requestOptions: {maxAttempts: 1}})


Please follow our Code of Conduct when contributing to this project.

yarn install
yarn test

Deploying a new version

This module is automatically deployed when a version tag bump is detected by travis. Remember to update the changelog!

yarn version


librato-node is largely based off of Librato's own librato-rack. Visit that repository if you're running Ruby or for more information on Librato Metrics in general.



You can’t perform that action at this time.