A node.js client for Librato Metrics (


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

$ npm install 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 

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(errres) {
  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})

You can pass additional options (such as timeout) for the HTTP POST to Librato using the requestOptions parameter. See request/request for a complete list of options.

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

$ git clone && cd librato-node
$ npm install
$ npm test

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.