node package manager
We need your input. Help make JavaScript better: Take the 2017 JavaScript Ecosystem survey »

iopipe

IOpipe Analytics & Distributed Tracing Agent

Coverage Status npm version styled with prettier

This package provides analytics and distributed tracing for event-driven applications running on AWS Lambda.

Installation & usage

Install by requiring this module, passing it an object with your project token (register for access), and it will automatically monitor and collect metrics from your applications running on AWS Lambda.

If you are using the Serverless Framework to deploy your lambdas, check out our serverless plugin.

Example:

const iopipeLib = require('iopipe');
 
const iopipe = iopipeLib({ token: 'PROJECT_TOKEN' });
 
exports.handler = iopipe((event, context) => {
  context.succeed('This is my serverless function!');
});

Configuration

Methods

You can configure your iopipe setup through one or more different methods - that can be mixed, providing a config chain. The current methods are listed below, in order of precendence. The module instantiation object overrides all other config values (if values are provided).

  1. Module instantiation object
  2. IOPIPE_* environment variables
  3. An iopipe package.json entry
  4. Default values

Options

token (string: required)

If not supplied, the environment variable $IOPIPE_TOKEN will be used if present. Find your project token

timeoutWindow (int: optional = 150)

By default, IOpipe will capture timeouts by exiting your function 150ms early from the AWS configured timeout, to allow time for reporting. You can disable this feature by setting timeoutWindow to 0 in your configuration. If not supplied, the environment variable $IOPIPE_TIMEOUT_WINDOW will be used if present.

const iopipe = require('iopipe')({ token: 'PROJECT_TOKEN', timeoutWindow: 0})

debug (bool: optional = false)

Debug mode will log all data sent to IOpipe servers to STDOUT. This is also a good way to evaluate the sort of data that IOpipe is receiving from your application. If not supplied, the environment variable $IOPIPE_DEBUG will be used if present.

const iopipe = require('iopipe')({
  token: 'PROJECT_TOKEN',
  debug: true
});
 
exports.handler = iopipe((event, context, callback) => {
  // Do things here. We'll log info to STDOUT.
});

plugins (array: optional)

Plugins can extend the functionality of IOpipe in ways that best work for you. Just follow the guides for the plugins listed below for proper usage:

Example:

const tracePlugin = require('@iopipe/trace');
 
const iopipe = require('iopipe')({
  token: 'PROJECT_TOKEN',
  plugins: [tracePlugin()]
});
 
exports.handler = iopipe((event, context, callback) => {
  // Run your fn here
});

package.json Configuration

You can configure iopipe within a package.json entry. An example of that is here. Config options are the same as the module instantiation object, except for plugins. Plugins should be an array containing mixed-type values. A plugin value can be a:

  • String that is the name of the plugin
  • Or an array with plugin name first, and plugin options second
{
  "name": "my-great-package",
  "dependencies": {
    "@iopipe/trace": "^0.2.0",
    "@iopipe/profiler": "^0.1.0"
  },
  "iopipe": {
    "token": "wow_token",
    "plugins": [
      "@iopipe/trace",
      ["@iopipe/profiler", {"enabled": true}]
    ]
  }
}

IMPORTANT: You must install the plugins as dependencies for them to load properly in your environment.

License

Apache 2.0