1.0.1 • Published 1 year ago

nestjs-prometheus-package v1.0.1

Weekly downloads
-
License
ISC
Repository
-
Last release
1 year ago

NestJS Prometheus Module

A biblioteca @nestjs-prometheus-module oferece uma solução simples e eficaz para integrar métricas do Prometheus em sua aplicação NestJS. Com este pacote, você pode monitorar o desempenho e a saúde de sua aplicação de forma detalhada e em tempo real, utilizando do Prometheus.

Instalação

Para instalar a biblioteca config, execute o seguinte comando:

  npm install @nestjs-prometheus-module

Uso

Importando o Módulo

No seu módulo principal (AppModule), importe e configure o MetricsModule com as métricas personalizadas que você deseja utilizar.

import { Module } from '@nestjs/common';
import { MetricsModule } from 'nestjs-prometheus-module';

@Module({
  imports: [
    MetricsModule.register({
      customMetrics: [
        {
          type: 'Counter',
          name: 'mail_sent_status_code',
          help: 'Verifica se o email da ação foi enviado',
          labelNames: ['mail_sent'],
        },
        {
          type: 'Counter',
          name: 'print_url_counter',
          help: 'Verifica se o email da ação foi enviado',
          labelNames: ['received_base64'],
        },
        {
          type: 'Histogram',
          name: 'actions_monitoring_time_response',
          help: 'Duração da solicitação HTTP para retornar o status do URL',
          labelNames: ['action_type'],
          buckets: [15],
        },
        {
          type: 'Counter',
          name: 'custom_action_counter',
          help: 'Contador personalizado para uma ação específica',
          labelNames: ['action'],
        },
        {
          type: 'Histogram',
          name: 'custom_action_histogram',
          help: 'Histograma personalizado para durações de ações',
          labelNames: ['action'],
          buckets: [0.1, 5, 15, 50, 100, 500],
        },
        {
          type: 'Gauge',
          name: 'custom_gauge_metric',
          help: 'Exemplo de métrica gauge personalizada',
          labelNames: ['label1'],
        },
        {
          type: 'Summary',
          name: 'custom_summary_metric',
          help: 'Exemplo de métrica summary personalizada',
          labelNames: ['label2'],
        },
      ],
    }),
  ],
})
export class AppModule {}

Usando o PrometheusMetricsService

Agora, você pode injetar e usar o PrometheusMetricsService em seus serviços para observar e incrementar as métricas.

Exemplo de Serviço

import { Injectable } from '@nestjs/common';
import { PrometheusMetricsService } from 'nestjs-metrics-package';

@Injectable()
export class ExampleService {
  constructor(private readonly metricsService: PrometheusMetricsService) {}

  someAction() {
    const start = Date.now();

    // Realiza alguma ação
    // ...

    const duration = Date.now() - start;
    this.metricsService.observeHistogram('actions_monitoring_time_response', ['someAction'], duration);
    this.metricsService.incrementCounter('print_url_counter', ['exampleBase64']);
    this.metricsService.incrementCounter('mail_sent_status_code', ['sent']);

    // Usando métricas personalizadas
    this.metricsService.incrementCounter('custom_action_counter', ['someAction']);
    this.metricsService.observeHistogram('custom_action_histogram', ['someAction'], duration);
    this.metricsService.setGauge('custom_gauge_metric', ['label1'], 42);
    this.metricsService.observeSummary('custom_summary_metric', ['label2'], duration);
  }
}

Tipos de Métricas

Counter

O Counter é uma métrica que pode apenas aumentar. É ideal para contar eventos como solicitações recebidas, tarefas concluídas, etc.

Exemplo de uso:

  this.metricsService.incrementCounter('custom_action_counter', ['someAction']);

Histogram

O Histogram é usado para medir distribuições de valores, como latências de solicitações ou tamanhos de respostas.

Exemplo de uso:

  const duration = Date.now() - start;
  this.metricsService.observeHistogram('custom_action_histogram', ['someAction'], duration);

Gauge

O Gauge é uma métrica que pode aumentar ou diminuir. É útil para medir valores que podem subir e descer, como a quantidade de memória utilizada.

Exemplo de uso:

  this.metricsService.setGauge('custom_gauge_metric', ['label1'], 42);

Summary

O Summary é usado para calcular estatísticas resumidas como percentis e somas. É útil para medir latências ou tamanhos de resposta em detalhes.

Exemplo de uso:

  const duration = Date.now() - start;
  this.metricsService.observeSummary('custom_summary_metric', ['label2'], duration);

Executando sua Aplicação

Agora, quando você executar sua aplicação NestJS, o PrometheusMetricsService estará disponível para uso nos seus serviços, e o endpoint /metrics irá expor as métricas coletadas para que o Prometheus possa capturá-las.

Conclusão

Ao seguir estes passos, você terá integrado e utilizado com sucesso o PrometheusMetricsService em seu projeto NestJS. Você poderá observar e incrementar suas métricas personalizadas em seus serviços e expô-las via o endpoint /metrics para que o Prometheus possa capturá-las.