inspector-influx
TypeScript icon, indicating that this package has built-in type declarations

2.10.0 • Public • Published

inspector-influx

Typescript Metrics Reporter for InfluxDB.

NPM Version License CI Status

This library is made for inspector-metrics node module and is meant to be used with nodejs.
It uses node-influx as influxdb client.

Take a look at the Documentation.

install

npm install --save inspector-influx

basic usage

For influxDB v1:

import { DefaultSender, InfluxMetricReporter } from "inspector-influx";
import { MetricRegistry, Timer } from "inspector-metrics";

// influxdb config from https://github.com/node-influx/node-influx/blob/master/src/index.ts#L80
const dbConfig = {
    "username": "admin",
    "password": "admin",
    "database": "example-db",
    "hosts": [
        { "host": "influx", "port": 8086 }
    ]
};

const sender = new DefaultSender(dbConfig);
const reporter: InfluxMetricReporter = new InfluxMetricReporter({
    sender,
});
const registry: MetricRegistry = new MetricRegistry();
const requests: Timer = registry.newTimer("requests");

reporter.setLog(global.console);
reporter.addMetricRegistry(registry);

// need ot wait for the reporter to start
await reporter.start();

// example usage
setInterval(() => {
    // should report a few milliseconds
    requests.time(() => {
        let a = 0;
        let b = 1;
        for (let i = 0; i < 1e6; i++) {
            a = b + i;
        }
    });
}, 100);

For influxDB v2:

import { ClientOptions } from "@influxdata/influxdb-client";
import { Influxdb2Sender, InfluxMetricReporter } from "inspector-influx";
import { MetricRegistry, Timer } from "inspector-metrics";

const clientOptions: ClientOptions = {
    url: 'http://localhost:8087',
    token: '<my-secret-token>' // have a look at the examples (/examples/influxdb-2x)
}
const reporter = new InfluxMetricReporter({
    sender: new Influxdb2Sender(clientOptions, 'testing', 'test-bucket', [], 'ms', {
    batchSize: 10,
    defaultTags: {},
    flushInterval: 0,
    maxBufferLines: 10_000,
    maxRetries: 3,
    maxRetryDelay: 3000,
    minRetryDelay: 1000,
    retryJitter: 1000,
    writeFailed: function(error, lines, failedAttempts) { console.log(error, lines, failedAttempts)},
    }),
    log: null,
    minReportingTimeout: 30,
    reportInterval: 5000
})

const registry: MetricRegistry = new MetricRegistry();
const requests: Timer = registry.newTimer("requests");

reporter.setLog(global.console);
reporter.addMetricRegistry(registry);

// need ot wait for the reporter to start
await reporter.start();

// example usage
setInterval(() => {
    // should report a few milliseconds
    requests.time(() => {
        let a = 0;
        let b = 1;
        for (let i = 0; i < 1e6; i++) {
            a = b + i;
        }
    });
}, 100);

reporting events

import { InfluxMetricReporter } from "inspector-influx";
import { Event } from "inspector-metrics";

const reporter: InfluxMetricReporter = ...

// need ot wait for the reporter to start before reporting events
await reporter.start();

// build an ad-hoc event
const event = new Event<number>("application_started")
    .setValue(1.0)
    .setTag("mode", "test")
    .setTag("customTag", "specialValue");

// send the event to influxdb
await reporter.reportEvent(event);

multi process support (nodejs cluster)

By default forked processes are sending the metrics as inter-process message
to the master process. The InfluxMetricReporter is listening for those messages
and report the metrics from the other processes.

To disable this behavior set the DisabledClusterOptions when creating an instance.

In each case you should set the pid as reporter tag.

import { DefaultSender, InfluxMetricReporter } from "inspector-influx";
import { tagsToMap, DisabledClusterOptions, MetricRegistry, Timer } from "inspector-metrics";

const dbConfig = {...};
const sender = new DefaultSender(dbConfig);
const reporter: InfluxMetricReporter = new InfluxMetricReporter({
    clusterOptions: new DisabledClusterOptions(),
    sender,
});

// set "pid" to process id
reporter.setTags(tagsToMap({
    pid: `${process.pid}`,
}));

License

MIT

Package Sidebar

Install

npm i inspector-influx

Weekly Downloads

20

Version

2.10.0

License

MIT

Unpacked Size

45.9 kB

Total Files

15

Last publish

Collaborators

  • rstiller