@map-colonies/telemetry - v9.0.0

Telemetry

This package goal is to make the experience of configuring and working with OpenTelemetry easier.

Check the autogenerated documentation here.

Below are short examples for tracing and metrics. More examples are available at the examples folder, and the various opentelemetry repos.

The following code shows a simple example of how to work with tracing. please notice that you need to manually install any auto-instrumentation library that you require.

import { Tracing } from '@map-colonies/telemetry';
import { trace } from '@opentelemetry/api';

const tracing = new Tracing();

tracing.start();

const tracer = trace.getTracer('tracing-name')

const span = tracer.startSpan('some-action');

span.setAttribute('some-attribute');

// DO STUFF

span.end();

tracing.stop().then(() => console.log('done'));

Another way to initialize tracing with custom resource:

import { Tracing } from '@map-colonies/telemetry';
import { Resource } from '@opentelemetry/resources';

const resource = new Resource({ 'service.version': number, 'service.name': 'my-service-name' });

const tracing = new Tracing([], resource);
...

The following code shows a simple example of how to work with metrics.

import { Metrics } from '@map-colonies/telemetry';

const metrics = new Metrics('sample-meter');

const meter = metrics.start();

const counter = meter.createCounter('sample_counter');

counter.add(1);

metrics.stop().then(() => console.log('done'));

The package provides a middleware for Express that will automatically measure the duration of each request and the number of requests. In addition, the middleware can be configured to collect NodeJS metrics.

import { collectMetricsExpressMiddleware } from '@map-colonies/telemetry/prom-metrics';
import express from 'express';
import { Registry } from 'prom-client';

const prom = collectMetricsExpressMiddleware({ registry: new Registry(), labels: { meow: 'a' } });

app.use('/metrics', prom);
app.get('/', (req, res) => {
res.json({ x: 'd' });
});

app.listen(8080, () => console.log('server listening on 8080'));
Note

If you are not running the express-openapi-validator middleware, its recommended to turn off the includeOperationId option in the collectMetricsExpressMiddleware function as the operation label will always be null.

Based on the official OpenTelemetry conventions

Link to full documentation

name allowed value default value description
TELEMETRY_SERVICE_NAME string package.json name The name of the service to put as attribute
TELEMETRY_SERVICE_VERSION string package.json version The version of the service to put as attribute
TELEMETRY_HOST_NAME string os.hostname() The value of the hostname attribute to use, will override the hostname

name allowed value default value description
TELEMETRY_TRACING_ENABLED 'true', 'false' 'false' Should Tracing be enabled
TELEMETRY_TRACING_URL* string http://localhost:4318/v1/traces The URL to the OpenTelemetry Collector
TELEMETRY_TRACING_RATIO float 1 The amount of traces to sample (0-1)
TELEMETRY_TRACING_DEBUG 'true', 'false' 'false' Enable debug mode for tracing which enables opentelemetry debug log and console trace export

* required (only when tracing is enabled).

name allowed value default value description
TELEMETRY_METRICS_ENABLED 'true', 'false' 'false' Should Metrics be enabled
TELEMETRY_METRICS_URL* string http://localhost:4318/v1/metrics The URL to the OpenTelemetry Collector
TELEMETRY_METRICS_INTERVAL number 15000 The interval in milliseconds between sending data to the collector

* required (only when metrics is enabled).

Run the command npm run release -- to bump the version in all the files and create a changelog.

For more detailed documentation and examples check: https://github.com/conventional-changelog/standard-version