/nestjs-prometheus

Primary LanguageTypeScriptApache License 2.0Apache-2.0

NestJS Prometheus

Installation

yarn add @willsoto/nestjs-prometheus prom-client
npm install @willsoto/nestjs-prometheus prom-client

Usage

import { Module } from "@nestjs/common";
import { PrometheusModule } from "@willsoto/nestjs-prometheus";

@Module({
  imports: [PrometheusModule.register()],
})
export class AppModule {}

By default, this will register a /metrics endpoint that will return the default metrics.

Changing the metrics http endpoint

import { Module } from "@nestjs/common";
import { PrometheusModule } from "@willsoto/nestjs-prometheus";

@Module({
  imports: [
    PrometheusModule.register({
      path: "/mymetrics",
    }),
  ],
})
export class AppModule {}

Disabling default metrics collection

import { Module } from "@nestjs/common";
import { PrometheusModule } from "@willsoto/nestjs-prometheus";

@Module({
  imports: [
    PrometheusModule.register({
      defaultMetrics: {
        enabled: false,
      },
    }),
  ],
})
export class AppModule {}

Configuring the default metrics

import { Module } from "@nestjs/common";
import { PrometheusModule } from "@willsoto/nestjs-prometheus";

@Module({
  imports: [
    PrometheusModule.register({
      defaultMetrics: {
        // See https://github.com/siimon/prom-client#configuration
        config: {},
      },
    }),
  ],
})
export class AppModule {}

Injecting individual metrics

// module.ts
import { Module } from "@nestjs/common";
import {
  PrometheusModule,
  makeCounterProvider,
} from "@willsoto/nestjs-prometheus";
import { Service } from "./service";

@Module({
  imports: [PrometheusModule.register()],
  providers: [
    Service,
    makeCounterProvider({
      name: "metric_name",
      help: "metric_help",
    }),
  ],
})
export class AppModule {}
// service.ts
import { Injectable } from "@nestjs/common";
import { Counter } from "prom-client";

@Injectable()
export class Service {
  constructor(@InjectMetric("metric_name") public counter: Counter<string>) {}
}

Available metrics

import { makeCounterProvider } from "@willsoto/nestjs-prometheus";
import { makeGaugeProvider } from "@willsoto/nestjs-prometheus";
import { makeHistogramProvider } from "@willsoto/nestjs-prometheus";
import { makeSummaryProvider } from "@willsoto/nestjs-prometheus";