@betsys-nestjs/monitoring
v9.1.0
Published
NestJS prometheus implementations using prom-client library
Downloads
75
Maintainers
Keywords
Readme
Dependencies
| Package | Version | | --------------------------- | ------- | | on-headers | ^1.0.0 | | prom-client | ^14.0.0 | | @betsys-nestjs/config-utils | ^2.0.0 | | @hapi/joi | ^17.0.0 | | @nestjs/common | ^10.0.0 | | @nestjs/config | ^3.0.0 | | @nestjs/core | ^10.0.0 | | @nestjs/platform-express | ^10.0.0 | | @nestjs/swagger | ^7.0.0 | | express | ^4.0.0 | | reflect-metadata | <1.0.0 | | rxjs | ^7.0.0 |
Usage
Just register the module in your application module. If you are not using cluster, use the SimpleMonitoringModule
import {Module} from '@nestjs/common';
import {SimpleMonitoringModule} from '@betsys/nestjs-monitoring';
@Module({
imports: [
SimpleMonitoringModule.forRoot({platformType: express}),
],
})
class AppModule {
}The forRoot module factory function accepts the following parameters:
class SimpleMonitoringModule {
static forRoot({contextType, registerControllers, hasClusterMetrics, enableDefaultMetrics, histogramBuckets}): DynamicModule;
}platformTypeYou can chose betweengrpcandexpressthat automatically initialize request loggingregisterController(default = true) allows you to disable metrics controllers completelyhasClusterMetrics(default = false) bootstraps the module in cluster modeenableDefaultMetrics(default = true) controls whether prom-client's default metrics are collectedhistogramBuckets(default = [0.1, 1, 5, 15, 30, 50, 100, 200, 300, 500, 1000, 2500, 5000, 10000, 20000]) allows you to customize the histogram buckets for request monitoring
If you are using cluster, use the ClusterMonitoringModule
import {Module} from '@nestjs/common';
import {ClusterMonitoringModule} from '@betsys/nestjs-monitoring';
@Module({
imports: [
ClusterMonitoringModule.forRoot({ registerController: true}),
],
})
class AppModule {
}You can use cluster only with express platform.
The forRoot module factory function accepts the following parameters:
class ClusterMonitoringModule {
static forRoot({registerController, enableDefaultMetrics, histogramBuckets}): DynamicModule;
}registerController(default = true) allows you to disable metrics controllers completelyenableDefaultMetrics(default = true) controls whether prom-client's default metrics are collectedhistogramBuckets(default = [0.1, 1, 5, 15, 30, 50, 100, 200, 300, 500, 1000, 2500, 5000, 10000, 20000]) allows you to customize the histogram buckets for request monitoring
Creating your own metrics
To create your own metrics, just create new metrics object and call its methods to add new value to metric. You can
use MonitoringConfig to resolve metrics name to add configured prefix.
For example, simple monitoring service:
import {Injectable} from '@nestjs/common';
import {
MonitoringConfig,
Counter,
Gauge,
InjectMonitoringConfig,
InjectRegistry,
MonitoringConfigInterface,
Registry
} from '@betsys/nestjs-monitoring';
@Injectable()
export class WebsocketMonitoringService {
private readonly messagesSent: Counter<string>;
constructor(
@InjectMonitoringConfig() private readonly config: MonitoringConfigInterface,
@InjectMonitoringRegistry() private readonly registry: Registry,
) {
this.messagesSent = new Counter({
name: this.config.getMetricsName('websocket_messages_sent'),
help: 'count of messages sent over websocket',
labelNames: ['event'],
registers: [registry]
});
}
incrementMessagesSent(event: string): void {
this.messagesSent.inc({event});
}
}To see complete list of options and metrics, check prom-client.
