2.0.13 • Published 4 years ago

influx-metrics-middleware v2.0.13

Weekly downloads
6
License
MIT
Repository
github
Last release
4 years ago

influx-metrics-middleware

CircleCI

A customizable, unopinionated express middleware for InfluxDB metrics built on top of node-influx

Installation

npm i influx-metrics-middleware

# or if you prefer yarn

yarn add influx-metrics-middleware

Usage

This middleware uses a handleRequest method similar to an express request handler to handle each request express passes to it. You can utilize everything you love from express and simply call the addToBatch method to add records to a batch which will be sent to the given InfluxDB instance once a certain threshold is reached.

API

  • handle(options: CombinedOptions)
    • passes options to middleware, configures node-influx
    • returns actual middleware
  • handleRequest({ req: express.Request, res: express.Response }, { addToBatch: (point: IPoint | IPoint[]) => void })
    • exposes req & res objects from request
    • allows for addToBatch to be invoked with a single point point or a collection of many

Example

The snippet below is a simple express application with metrics collection for basic request details.

import { createServer } from 'http';
import express from 'express';
import influxMetrics, { FieldType, CombinedOptions } from 'influx-metrics-middleware';

const app = express();
const server = createServer(app);

const influxMetricsOptions: CombinedOptions = {
  host: 'localhost',
  username: 'sample-influx-user',
  password: 'sample-password',
  database: 'sample-database',
  handleRequest: ({ req, res }, { addToBatch }) => {
    // this method will be called on every request
    const start = Date.now();
    res.on('finish', () => {
      // once the request is done, push the related data to the InfluxDB batch
      addToBatch([
        {
          measurement: 'request_data',
          fields: {
            duration: Date.now() - start
          },
          tags: {
            ip: req.ip,
            status: res.statusCode.toString(),
            path: req.originalUrl
          }
        }
      ]);
    });
  },
  batchLimit: 10000,
  disableBatch: false,
  throwErrors: true,
  schema: [
    {
      measurement: 'request_data',
      tags: ['ip', 'status', 'path'],
      fields: {
        duration: FieldType.INTEGER
      }
    }
  ]
};

// initialize the middleware
app.use(influxMetrics.handle(influxMetricsOptions));

app.get('/', (req, res) => {
  res.sendStatus(200);
});

server.listen(3000);

Configuration

Because this package uses node-influx as its foundation, all options for this library can be added to the init options. In addition to that, influx-metrics-middleware contains a few options for its behaviour:

namedefaultdescription
batchLimit1000Push data to InfluxDB after this limit of records is reached. For performance reasons, a higher limit will be better.
disableBatchfalseDisable batching completely and send each new record directly
throwErrorstrueThrow middleware errors
queueFailedBatchtrueRetry failed record upload to InfluxDB
2.0.13

4 years ago

2.0.12

4 years ago

2.0.11

4 years ago

2.0.10

4 years ago

2.0.9

4 years ago

2.0.8

4 years ago

2.0.7

5 years ago

2.0.6

5 years ago

2.0.5

5 years ago

2.0.4

5 years ago

2.0.3

5 years ago

2.0.2

5 years ago

2.0.1

5 years ago

1.0.0

6 years ago

0.1.0

6 years ago

0.0.1

6 years ago