@betsys-nestjs/monitoring
TypeScript icon, indicating that this package has built-in type declarations

8.3.0 • Public • Published

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}): DynamicModule;
}
  • platformType You can chose between grpc and express that automatically initialize request logging
  • registerController (default = true) allows you to disable metrics controllers completely
  • hasClusterMetrics (default = false) bootstraps the module in cluster mode

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}): DynamicModule;
}
  • registerController (default = true) allows you to disable metrics controllers completely

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.

Readme

Keywords

none

Package Sidebar

Install

npm i @betsys-nestjs/monitoring

Weekly Downloads

2

Version

8.3.0

License

MIT

Unpacked Size

23.8 kB

Total Files

27

Last publish

Collaborators

  • betsys-development
  • pawelnowak1
  • andrejsoucek
  • jammie88
  • jiraspe2
  • jakubschneller
  • javor454
  • krizacekcz
  • flyrell