DEV Community

Cover image for Como usar / integrar o Sentry no NestJS
Marcelo Zapatta
Marcelo Zapatta

Posted on

3 1 1 1

Como usar / integrar o Sentry no NestJS

Fala galera, tudo bem? Como o Sentry não tem um suporte nativo para o framework NestJS, criei esse passo a passo de como realizar sua integração. Há alguns tutoriais utilizando Interceptors do Nest mas o correto seria utilizar as ExceptionFilter, devido o sentry capturar apenas Exceptions, além de ficar um código bem mais simples e fácil de configurar 😊

1. Primeiro crie um projeto no Sentry como NodeJS

Página do sentry para criar um projeto

2. Guarde a URL que foi gerada na parte do DNS:

Local no sentry para pegar a URL DNS

3. Instale as dependências



yarn add @sentry/node @sentry/tracing

// or

npm install @sentry/node @sentry/tracing


Enter fullscreen mode Exit fullscreen mode

4. Inclua uma chave SENTRY_DNS dentro do seu .env contendo a url do seu projeto:

Utilize a URL que foi obtida no passo 2 após a geração do projeto



SENTRY_DNS=https://xxx@xxx.ingest.sentry.io/xxx


Enter fullscreen mode Exit fullscreen mode

5. Crie uma ExceptionFilter

Iremos criar uma ExceptionFilter dentro do Nest. para isso dentro de src inclua um arquivo chamado sentry.filter.ts com o seguinte conteúdo:



import { Catch, ArgumentsHost } from '@nestjs/common';
import { BaseExceptionFilter } from '@nestjs/core';
import * as Sentry from '@sentry/node';


@Catch()
export class SentryFilter extends BaseExceptionFilter {
  catch(exception: unknown, host: ArgumentsHost) {
    Sentry.captureException(exception);
    super.catch(exception, host);
  }
}


Enter fullscreen mode Exit fullscreen mode

Estamos gerando uma ExceptionFilter genérica que pega qualquer tipo de Exception devido o decorator @Catch() estar vazio. Além disso estamos estendendo ela a partir da BaseExceptionFilter que é a classe padrão do Nest que lida com exceptions. Dessa forma, não iremos alterar o comportamento original quando uma exception for lançada, devido no final do código é chamado o método da classe pai que lida com as exceptions: super.catch(exception, host);

6. Incluir script do Sentry no main.ts do Nest

Agora basta chamar o método de inicialização do Sentry e realizar a importação do ExceptionFilter criado globalmente dentro do seu main.ts no método bootstrap():



// outros importers
import { HttpAdapterHost, NestFactory } from '@nestjs/core';
import * as Sentry from '@sentry/node';
import { SentryFilter } from './filters/sentry.filter';


async function bootstrap() {
  // …
  // Inicia o Sentry passando o DNS incluso no .env
  Sentry.init({
    dsn: process.env.SENTRY_DNS,
  });


  // Importa o filtro globalmente capturando todas as exceptions em todas as rotas
  const { httpAdapter } = app.get(HttpAdapterHost);
  app.useGlobalFilters(new SentryFilter(httpAdapter));

  // …
}


bootstrap();


Enter fullscreen mode Exit fullscreen mode

Pronto! Finalizada a configuração🎉🎉, dessa forma estamos pegando todas as exceptions do sistema mas você pode customizar o ExceptionFilter para barrar e obter apenas exceptions específicas.

Referências

Sentry docs Node.JS: https://docs.sentry.io/platforms/node/
ExceptionFilters NestJS: https://docs.nestjs.com/exception-filters

Top comments (0)

The best way to debug slow web pages cover image

The best way to debug slow web pages

Tools like Page Speed Insights and Google Lighthouse are great for providing advice for front end performance issues. But what these tools can’t do, is evaluate performance across your entire stack of distributed services and applications.

Watch video

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay