Monitoramento de Erros com Sentry no React + Vite: Guia Completo

monitoramento-de-erros-com-sentry-no-react-+-vite:-guia-completo

capa
Se você desenvolve com React + Vite , integrar o Sentry pode ser o passo mais inteligente para garantir observabilidade, rastrear bugs em produção e entender o que está acontecendo com seus usuários —  antes que eles reclamem.

Neste artigo, você vai aprender:

  • O que é o Sentry e por que usá-lo
  • Como integrá-lo em um projeto React + Vite
  • Como testar, personalizar e tirar proveito real da ferramenta
  • e muitos mais

O que é o Sentry?

O Sentry é uma ferramenta de monitoramento de erros em tempo real. Ele captura exceções, mostra o contexto (usuário, navegação, ambiente) e ainda integra com ferramentas como Slack, GitHub e Jira.

Por que usar Sentry em React?

  • Stack trace completo com source maps (achei melhor que Datadog e Dynatrace)
  • Captura de erros não tratados e warnings
  • Agrupamento inteligente de problemas
  • Performance monitoring (opcional)

Se liga no Trace detalhado disso:

No código:

<div className="flex h-screen flex-col bg-white">
      <Header />
      <div className="flex w-full flex-col items-center">
        <Search
          setRecord={setRecord}
          setId={handlePatient}
          selectedPatientId={patientId}
        />
        {data.length > 0 && (
          <Records data={data as Data} setNextRecord={setNextRecord} />
        )}
       // erro proposital
        <button
          onClick={() => {
            throw new Error("This is your first error!");
          }}
        >
          Break the world
        </button>
      </div>
    </div>

No Sentry: Um tracing claríssimo de entender (arrochado demais).

sentry
Issue Tracing

Passo a passo: Integrando Sentry em um projeto React + Vite

1. Crie uma conta no Sentry

Acesse sentry.io e crie um projeto do tipo React. Em seguida verá uma tela para preencher nome, email, nome da organização (Pode ser seu nome mesmo), Localização do Storage (Coloquei US) e clique em continuar.

Após isso, verá a Tela de boas vindas. Basta clicar no botão START.

welcome
Welcome

2. Configuração do SDK

Faça a Seleção da plataforma em questão: REACT

sdk

E Configure o React SDK, que fornecerá os comando de instalação e um código de incorporação para colocar no seu código. Eu criei um helperzinho para organizar e separar responsabilidades (S do SOLID mandou lembraças). Mais a frente mostro como ficou o código final.

other

Obs.: Tracing e Session Replay, por padrão, na configuração, apenas o Error Monitoring vem marcado, mas podemos marcar as duas outras opções de Tracing e Session Replay. O resultado é a imagem abaixo:

tracing

Criei a branch sentry-integration para isolar a feature.

git checkout -b sentry-integration

3. Instale o pacote do Sentry no seu projeto

pnpm install @sentry/react

4. Configurar o init

Criei um helper dentro de src/lib/monitoring/sentry.setup.ts

import * as Sentry from "@sentry/react";
// poderia estar em outro canto, inclusive
declare global {
  interface ImportMeta {
    env: {
      VITE_SENTRY_DSN: string;
    };
  }
}

Sentry.init({
  dsn: import.meta.env.VITE_SENTRY_DSN,
  // Setting this option to true will send default PII data to Sentry.
  // For example, automatic IP address collection on events
  sendDefaultPii: true,
  integrations: [
    Sentry.browserTracingIntegration(),
    Sentry.replayIntegration()
  ],
  // Tracing
  tracesSampleRate: 1.0, // Capture 100% of the transactions
  // Set 'tracePropagationTargets' to control for which URLs distributed tracing should be enabled
  tracePropagationTargets: ["localhost", /^https://yourserver.io/api/],
  // Session Replay
  replaysSessionSampleRate: 0.1, // This sets the sample rate at 10%. You may want to change it to 100% while in development and then sample at a lower rate in production.
  replaysOnErrorSampleRate: 1.0 // If you're not already sampling the entire session, change the sample rate to 100% when sampling sessions where errors occur.
});

Dica: use variável de ambiente (import.meta.env.VITE_SENTRY_DSN) para proteger seu DSN no build.

E importei no main.tsx

import React from 'react'
import ReactDOM from 'react-dom/client'
import App from './App.tsx'

import "./lib/monitoring/sentry.setup";

ReactDOM.createRoot(document.getElementById('root')!).render(
  
    
  
)

Configurando Source Maps

Um ponto muito importante: Quando você builda seu projeto (com Vite, Webpack, etc), o código JavaScript é:

  • Minificado (nomes de variáveis viram a, b, etc)
  • Transpilado (de TS para JS, por exemplo)
  • Compactado em poucos arquivos

Isso torna os erros ilegíveis no ambiente de produção.

Exemplo de erro sem Source Map:

TypeError: Cannot read properties of undefined (reading 'x')
at a.js:1:3249

Ou seja: você não tem ideia de onde isso aconteceu no seu código-fonte real.

Para que servem os Source Maps no Sentry?

Eles fazem o mapeamento entre o código minificado e o código original. Com isso, o Sentry consegue:

  • Mostrar o arquivo original (Ex.: App.tsx, main.tsx)
  • Mostrar a linha e coluna exata (senão, bem próxima.rsrs)
  • Mostrar variáveis com nomes reais

Como gerar e enviar Source Maps com Vite

  1. Gere os source maps no build (Vite já faz por padrão):
vite build --sourcemap

Ou no vite.config.ts:

export default defineConfig({
  build: {
    sourcemap: true
  }
})

Ou simplemente execute esse comando abaixo fornecido pelo próprio Sentry, conforme imagem abaixo:

setup

é uma maneira automatizada e simplificada de configurar upload de source maps no seu projeto.

O que ele faz?

Esse comando roda o Sentry Wizard , que:

  1. Detecta automaticamente seu framework (como Vite, Next.js, React, etc). No caso, identificou que era como Vite e alterou o vite.config.js adicionando o seguinte (tudo que está abaixo do // adiconado pelo Sentry Wizard):
import { sentryVitePlugin } from "@sentry/vite-plugin";
.
.
.

// https://vite.dev/config/
export default defineConfig({
  plugins: [react(), tailwindcss(), 
 // adicionado pelo Sentry Wizard
  sentryVitePlugin({
    org: "werliton-silva",
    project: "javascript-react"
  })],

  resolve: {
    alias: {
      // eslint-disable-next-line no-undef
      '@': path.resolve(__dirname, './src'),
    },
  },
// adicionado pelo Sentry Wizard
  build: {
    sourcemap: true
  }
})
  1. Instala e configura o @sentry/cli
  2. Adiciona scripts no seu package.json para:
  • Criar uma nova versão (release)
  • Gerar e enviar os source maps para o Sentry

Segurança

Nunca commite seu SENTRY_AUTH_TOKEN no repositório. Guarde-o em variáveis de ambiente seguras no seu CI/CD (como GitHub Actions, Vercel, etc).

Se você não subir os source maps:

O erro ainda será capturado, mas será difícil entender onde e por que aconteceu, ou seja, você perde quase todo o valor do Sentry.

5. Teste de erro

Inclui o erro proposital para verificar a captura de erros pelo Sentry. Adicionei o código abaixo no App.tsx

...jsx

...

O erro será reportado no painel do Sentry com stack trace, arquivo e linha exata e muitas outras informações. Além disso, ele envia um email te avisando (muito massa!). Daria uns 2 a 3 outros posts. Comenta aqui se quiser ver nos próximos.

Recursos avançados

Captura manual: Pode ser utilizado com o bom e velho try catch

try {
  // código
} catch (error) {
  Sentry.captureException(error)
}

ou usando a api do Sentry. Por exemplo para captura de mensagem customizada:

Sentry.captureMessage("Botão de compra clicado sem produto selecionado")

ou captura de Informações do usuário:

Sentry.setUser({
  id: "123",
  email: "usuario@exemplo.com",
  username: "usuario123"
})

Claro que tem mais outras opções (vide a bula da documentação).

Monitoramento de performance (opcional)

O BrowserTracing já ativa o monitoramento de rotas, tempo de carregamento, interações, etc. No painel do Sentry, você pode ver em Frontend > Web Vitals:

  • Tempo até o primeiro paint (FCP), TTFB, FCP

Boas práticas

  • Use release e environment para rastrear erros por versão
  • Nunca envie erros em modo de desenvolvimento (process.env.NODE_ENV)
  • Combine com alertas no Slack (ou seu app de fofoca preferido) para agir rápido
  • Ative source maps no build de produção (Webpack/Vite configurados corretamente já fazem isso)

Conclusão

Adicionar o Sentry ao seu projeto React + Vite é rápido e extremamente valioso. Ele não só te avisa sobre erros, como te mostra o porquê e onde eles aconteceram com contexto real.

Se você quer elevar o nível da sua aplicação e garantir uma experiência fluida para o usuário, essa é uma das integrações mais simples e poderosas que você pode fazer.

Diz aí…

Qual ferramenta de monitoramento você usa hoje? Será que ela entrega tudo isso?

Total
0
Shares
Leave a Reply

Your email address will not be published. Required fields are marked *

Previous Post
seo-topic-clusters:-complete-guide,-examples-&-free-templates

SEO Topic Clusters: Complete Guide, Examples & Free Templates

Next Post
convert-yaml-to-interactive-diagrams-online-–-visualize-yaml-as-graph-or-tree-with-jsonviewer.tools

Convert YAML to Interactive Diagrams Online – Visualize YAML as Graph or Tree with jsonviewer.tools

Related Posts