0.1.0 • Published 1 year ago

nestjs-prometheus-setup v0.1.0

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

Nestjs prometheus setup

import { Module } from '@nestjs/common';
import { PrometheusModule } from 'nestjs-prometheus-setup'

@Module({
  imports: [PrometheusModule.fromRoot()]
})
class AppModule {}

Exported metrics

metrictypelabels
http_requests_totalCountermethod, route, status
http_request_duration_seconds_countHistogrammethod, route, status
http_request_length_bytes_sumHistogrammethod, route, status
http_response_length_bytes_sumHistogrammethod, route, status

Extend options

Change routes to ally the middleware.

class MyPrometheusModule extends PrometheusModule {
  configure(consumer: MiddlewareConsumer) {
    consumer.apply(this.middleware).forRoutes('/api/v1');
  }
}
MyPrometheusModule.fromRoot()

Add new label.

class MyPrometheusModule extends PrometheusModule {
  PROM_LABELS = [...this.PROM_LABELS, 'app_environment'];
  middlewareLabels(request, response, time: number): string[] {
    const labels = this.super(request, response)

    return [...labels, process.env.APP_ENV]
  }
}
MyPrometheusModule.fromRoot()

Add new custom metric.

import { PrometheusModule, Prometheus } from 'nestjs-prometheus-setup'

class MyPrometheusModule extends PrometheusModule {
  httpErrorTotal = new Prometheus.Counter({
    name: `http_error_total`,
    help: 'Counter requests considered errors',
    labelNames: this.PROM_LABELS,
  });

  customMetrics(labels: string[], request, response, time: number) {
    const isError = response.statusCode() == 500
    if(!isError) return

    this.httpErrorTotal
      .labels(...labels)
      .inc();
  }
}
MyPrometheusModule.fromRoot()