1.0.31 • Published 1 year ago

opentelemetry-custom-metrics v1.0.31

Weekly downloads
-
License
UNLICENSED
Repository
github
Last release
1 year ago

OpenTelemetry Custom Metrics for NestJS

CodeQL Node.js CI OpenTelemetry Custom Metrics for NestJS

Description

OpenTelemetry module for Nest.

Install

npm i opentelemetry-custom-metrics @opentelemetry/sdk-node --save

Other required dependencies for Prometheus config:

@opentelemetry/exporter-prometheus

Usage

Create otelSDK.ts file

import * as process from 'process';
import { NodeSDK } from '@opentelemetry/sdk-node';
import { PrometheusExporter } from '@opentelemetry/exporter-prometheus';
import { AsyncLocalStorageContextManager } from '@opentelemetry/context-async-hooks';

const otelSDK = new NodeSDK({
    metricReader: new PrometheusExporter({
        port: 8081,
    }),
    contextManager: new AsyncLocalStorageContextManager(),
});

export default otelSDK;

process.on('SIGTERM', () => {
    otelSDK
        .shutdown()
        .then(
            () => console.log('SDK shut down successfully'),
            (err) => console.log('Error shutting down SDK', err),
        )
        .finally(() => process.exit(0));
});

Add otelSDK to your main.ts

import otelSDK from './otelSDK';

async function bootstrap() {
    await otelSDK.start();
    ...

Import OpenTelemetryCustomMetricsModule in your app.module.ts

import { OpenTelemetryCustomMetricsModule } from 'opentelemetry-custom-metrics';

@Module({
    imports: [
        OpenTelemetryCustomMetricsModule.forRootAsync(),
...

Add decorators to your methods

app.controller.ts

import { AccessMetric, TimeToProcessMetric } from 'opentelemetry-custom-metrics';
@AccessMetric()
@TimeToProcessMetric()
public async handle(): Promise<void> {

Available decorators:

@AccessMetric() - counts the number of times a method is called
@TimeToProcessMetric() - exposes a gauge and a histogram with the time it took to process the method (time spent on async calls is not included)

Add your own custom metrics

import { MetricService, MetricType } from 'opentelemetry-custom-metrics';

constructor(private metricService: MetricService) {
    this.metricService.addCounter('my_counter');
    this.metricService.addHistogram('my_histogram');
    this.metricService.addObservableCounter('my_observable_counter');
    this.metricService.addObservableGauge('my_observable_gauge');
    this.metricService.addUpDownCounter('my_up_down_counter');
    this.metricService.addObservableUpDownCounter('my_observable_up_down_counter');
}

handle() {
    ...
    this.metricService.observe('my_counter', 1);
    this.metricService.observe('my_histogram', 10);
    this.metricService.observe('my_observable_counter', 1);
    this.metricService.observe('my_observable_gauge', 10);
    this.metricService.observe('my_up_down_counter', 1);
    this.metricService.observe('my_observable_up_down_counter', 1);
}

Go to http://localhost:8081/metrics to see the metrics

1.0.29

1 year ago

1.0.31

1 year ago

1.0.30

1 year ago

1.0.28

1 year ago

1.0.27

1 year ago

1.0.26

1 year ago

1.0.25

1 year ago

1.0.24

1 year ago

1.0.23

1 year ago

1.0.22

1 year ago

1.0.21

1 year ago

1.0.20

1 year ago

1.0.19

1 year ago

1.0.17

1 year ago

1.0.16

1 year ago

1.0.15

1 year ago

1.0.14

1 year ago

1.0.13

1 year ago

1.0.12

1 year ago

1.0.11

1 year ago

1.0.10

1 year ago

1.0.9

1 year ago

1.0.8

1 year ago

1.0.7

1 year ago

1.0.6

1 year ago

1.0.5

1 year ago

1.0.4

1 year ago

1.0.3

1 year ago

1.0.2

1 year ago

1.0.1

1 year ago

1.0.0

1 year ago