nest-prometheus
v1.0.0
Published
NestJS module for Prometheus
Downloads
8
Readme
NestJS module for Prometheus
This library has taken an idea from the @willsoto/nestjs-prometheus
Installation
# npm
$ npm install --save nest-prometheus
# yarn
$ yarn add nest-prometheus
Usage
import { Module } from '@nestjs/common';
import { PrometheusModule } from 'nest-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 'nest-prometheus';
@Module({
imports: [
PrometheusModule.register({
path: '/mymetrics',
}),
],
})
export class AppModule {}
Disabling default metrics collection
import { Module } from '@nestjs/common';
import { PrometheusModule } from 'nest-prometheus';
@Module({
imports: [
PrometheusModule.register({
defaultMetrics: {
enabled: false,
},
}),
],
})
export class AppModule {}
Configuring the default metrics
import { Module } from '@nestjs/common';
import { PrometheusModule } from 'nest-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 'nest-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';
import { InjectMetric } from 'nest-prometheus';
@Injectable()
export class Service {
constructor(@InjectMetric('metric_name') public counter: Counter<string>) {}
}
Setting default labels
import { Module } from '@nestjs/common';
import { PrometheusModule } from 'nest-prometheus';
@Module({
imports: [
PrometheusModule.register({
defaultLabels: {
app: 'My app',
},
}),
],
})
export class AppModule {}
See the docs for more information.
Available metrics
Counter
import { makeCounterProvider } from 'nest-prometheus';
Gauge
import { makeGaugeProvider } from 'nest-prometheus';
Histogram
import { makeHistogramProvider } from 'nest-prometheus';
Summary
import { makeSummaryProvider } from 'nest-prometheus';
Providing a custom controller
If you need to implement any special logic or have access to the controller (e.g., to customize Swagger), you can provide your own controller (or subclass) of the default controller.
Here is a basic example which should be enough to extend or customize in any way you might need.
// my-custom-controller.ts
import { PrometheusController } from 'nest-prometheus';
import { Controller, Get, Res } from '@nestjs/common';
import { Response } from 'express';
@Controller()
class MyCustomController extends PrometheusController {
@Get()
async index(@Res() response: Response) {
await super.index(response);
}
}
import { Module } from '@nestjs/common';
import { PrometheusModule } from 'nest-prometheus';
import { MyCustomController } from './my-custom-controller';
@Module({
imports: [
PrometheusModule.register({
controller: MyCustomController,
}),
],
})
export class AppModule {}
Change Log
See Changelog for more information.
Contributing
Contributions welcome! See Contributing.
Author
Mostafa Gholami
mst-ghi