0.1.0 • Published 1 year ago
nestjs-prometheus-setup v0.1.0
Nestjs prometheus setup
import { Module } from '@nestjs/common';
import { PrometheusModule } from 'nestjs-prometheus-setup'
@Module({
imports: [PrometheusModule.fromRoot()]
})
class AppModule {}
Exported metrics
metric | type | labels |
---|---|---|
http_requests_total | Counter | method, route, status |
http_request_duration_seconds_count | Histogram | method, route, status |
http_request_length_bytes_sum | Histogram | method, route, status |
http_response_length_bytes_sum | Histogram | method, 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()