Monitoramento de erros com Sentry: configuração que alerta o que realmente importa
1. Introdução ao Sentry e por que ele é essencial para equipes de desenvolvimento
O Sentry é uma plataforma open-source de monitoramento de erros e desempenho que captura exceções em tempo real, oferecendo visibilidade granular sobre falhas em aplicações. Diferentemente de logs tradicionais — que exigem busca manual e análise de arquivos extensos — o Sentry agrupa automaticamente erros semelhantes, fornece stack traces completos e enriquece cada evento com contexto do ambiente (sistema operacional, navegador, versão do código).
No ecossistema de observabilidade, o Sentry se posiciona como uma ferramenta complementar a soluções como Prometheus (métricas) e APMs tradicionais (New Relic, Datadog). Enquanto Prometheus monitora métricas agregadas (CPU, memória, requisições por segundo), o Sentry foca em exceções individuais, permitindo que desenvolvedores rastreiem a causa raiz de cada erro com precisão cirúrgica.
Para equipes que adotam práticas DevOps e SRE, o Sentry reduz o tempo médio de detecção (MTTD) e o tempo médio de resolução (MTTR), transformando dados brutos de erro em ações direcionadas.
2. Configuração inicial do Sentry: do SDK ao primeiro erro capturado
A configuração começa com a criação de um projeto no dashboard do Sentry (sentry.io) e a obtenção do DSN (Data Source Name), uma string única que conecta sua aplicação ao serviço.
Exemplo em Python (Django/Flask):
# Instalação
pip install sentry-sdk
# Configuração no settings.py
import sentry_sdk
from sentry_sdk.integrations.django import DjangoIntegration
sentry_sdk.init(
dsn="https://examplePublicKey@o0.ingest.sentry.io/0",
integrations=[DjangoIntegration()],
traces_sample_rate=1.0,
environment="production"
)
Exemplo em JavaScript (Node.js/Express):
// Instalação
npm install @sentry/node
// Configuração no app.js
const Sentry = require('@sentry/node');
Sentry.init({
dsn: 'https://examplePublicKey@o0.ingest.sentry.io/0',
environment: 'production',
tracesSampleRate: 1.0,
});
// Middleware de captura de erros
app.use(Sentry.Handlers.errorHandler());
Após configurar, force um erro em sua aplicação:
# Python
1/0 # ZeroDivisionError
# JavaScript
throw new Error('Teste de captura Sentry');
No dashboard, o erro aparecerá com stack trace completo, timestamp e metadados do ambiente. Esse fluxo inicial demonstra como o Sentry transforma uma exceção em um evento rastreável.
3. Personalização de alertas: filtrando o que realmente importa
Alertas genéricos geram ruído e fadiga na equipe. O Sentry permite criar regras baseadas em condições específicas.
Exemplo de regra de alerta no dashboard:
Condição: Quando um erro ocorrer
- Frequência: 10 ocorrências em 5 minutos
- Usuários afetados: > 5
- Ambiente: production
- Nível de severidade: error ou fatal
Ação: Enviar notificação para o canal #erros-criticos no Slack
Para evitar notificações desnecessárias, configure níveis de severidade:
# Python - definindo nível manualmente
sentry_sdk.capture_message("Alerta de baixa severidade", level="warning")
sentry_sdk.capture_exception(ValueError("Erro crítico"), level="fatal")
Integrações com PagerDuty, Slack, e-mail e webhooks permitem direcionar alertas para os canais corretos, enquanto regras de silenciamento temporário suprimem notificações durante janelas de manutenção.
4. Agrupamento e deduplicação de erros: evitando alertas repetitivos
O Sentry usa fingerprints (hashes do stack trace) para agrupar exceções semelhantes. Isso evita que o mesmo erro apareça centenas de vezes no dashboard.
Configuração de agrupamento customizado:
# Python - forçando agrupamento por mensagem
from sentry_sdk import configure_scope
with configure_scope() as scope:
scope.fingerprint = ["{{ default }}", "custom-group"]
sentry_sdk.capture_exception(ValueError("Erro de validação"))
Para erros de alta frequência (ex.: timeouts em endpoints populares), configure rate limiting:
# Regra de supressão temporária
Condição: Erro "TimeoutError" no endpoint /api/checkout
- Se ocorrer > 100 vezes em 1 minuto
- Suprimir notificações por 10 minutos
- Registrar apenas 1 evento a cada 10 segundos
Isso evita que o canal de alertas seja inundado, mantendo a visibilidade sem sobrecarregar a equipe.
5. Contexto enriquecido: adicionando informações que aceleram a depuração
Erros sem contexto são difíceis de depurar. O Sentry permite anexar dados de usuário, sessão e requisição.
Exemplo com breadcrumbs (rastro de navegação):
# Python - adicionando breadcrumbs
from sentry_sdk import add_breadcrumb
add_breadcrumb(
category='auth',
message='Usuário tentou login',
level='info',
data={'username': 'joao.silva', 'ip': '192.168.1.1'}
)
# Captura de variáveis locais
try:
resultado = dividir(10, 0)
except ZeroDivisionError as e:
sentry_sdk.capture_exception(e, extra={
'dividendo': 10,
'divisor': 0,
'funcao': 'dividir'
})
Uso de tags para filtragem:
# JavaScript - adicionando tags
Sentry.setTag('versao_do_app', '2.3.1');
Sentry.setTag('tipo_usuario', 'premium');
try {
processPayment(userId, amount);
} catch (error) {
Sentry.captureException(error, {
extra: { userId, amount }
});
}
Tags permitem filtrar erros por versão, funcionalidade ou segmento de usuário diretamente no dashboard.
6. Monitoramento de desempenho com Sentry: erros e performance lado a lado
O Sentry oferece tracing (APM) integrado, permitindo correlacionar erros com métricas de latência.
Ativação do tracing no Python:
sentry_sdk.init(
dsn="https://examplePublicKey@o0.ingest.sentry.io/0",
traces_sample_rate=0.5, # Amostragem de 50% das transações
profiles_sample_rate=0.2 # Amostragem de profiling
)
Exemplo de transação manual:
# Python - criando transação personalizada
with sentry_sdk.start_transaction(op="task", name="process_order") as span:
span.set_tag("order_id", "12345")
process_order() # Código da função
span.set_data("items_count", 5)
O dashboard de Performance mostra queries lentas, endpoints problemáticos e a correlação direta entre erros e picos de latência. Por exemplo, se um endpoint apresenta 500ms de latência e 20% de taxa de erro, o Sentry destaca essa relação.
7. Estratégias de resposta a incidentes baseadas em alertas do Sentry
Alertas eficientes precisam de playbooks claros. Exemplo de automação com webhook:
# Webhook para criar issue no GitHub
{
"action": "create_issue",
"repository": "minha-empresa/app-producao",
"title": "Erro crítico: falha no checkout",
"body": "Erro capturado pelo Sentry: https://sentry.io/organizations/minha-empresa/issues/12345",
"labels": ["bug", "alta-prioridade"]
}
Definição de SLAs por severidade:
Nível crítico (fatal): 30 minutos para resposta inicial, 2 horas para resolução
Nível médio (error): 2 horas para resposta, 8 horas para resolução
Nível baixo (warning): 24 horas para resposta, 72 horas para resolução
Exemplo prático de resposta a pico de erros:
- Sentry detecta 50 erros "TimeoutError" em 5 minutos no endpoint /api/payment
- Alerta dispara no Slack com link direto para o issue
- Desenvolvedor identifica que um provedor de pagamento externo está lento
- Implementa fallback para provedor secundário
- Marca o issue como resolvido no Sentry
Esse fluxo evita que toda a equipe pare para investigar manualmente.
8. Boas práticas e armadilhas comuns na configuração de alertas
Armadilha 1: Thresholds muito baixos
- Configurar alerta para 1 erro em 1 minuto gera notificações constantes
- Solução: calibrar com base no volume normal da aplicação (ex.: 10 erros em 5 minutos)
Armadilha 2: Ignorar ambientes de staging
- Erros em staging geram alertas desnecessários para produção
- Solução: criar regras específicas por ambiente e silenciar staging
Armadilha 3: Falta de revisão periódica
- Regras de alerta desatualizadas perdem relevância
- Solução: revisão trimestral com a equipe para ajustar thresholds
Boas práticas documentadas como Infrastructure as Code:
# Exemplo de configuração via Terraform (sentry provider)
resource "sentry_rule" "critical_errors" {
organization = "minha-empresa"
project = "app-producao"
name = "Erros críticos em produção"
action_match = "all"
conditions = [
{
id = "sentry.rules.conditions.event_frequency.EventFrequencyCondition"
value = 10
interval = "5m"
}
]
actions = [
{
id = "sentry.rules.actions.notify_event.NotifyEventAction"
}
]
}
Documentar e versionar configurações evita perda de conhecimento quando membros da equipe mudam.
Referências
- Documentação oficial do Sentry: Configuração de SDK — Guia completo de instalação e configuração do SDK em todas as linguagens suportadas.
- Sentry: Alertas e regras de notificação — Documentação detalhada sobre criação de regras de alerta, condições e ações.
- Sentry: Agrupamento de erros e fingerprints — Explicação técnica sobre como o Sentry agrupa exceções e como customizar fingerprints.
- Sentry: Performance Monitoring e Tracing — Guia para ativar o monitoramento de desempenho e correlacionar erros com métricas de latência.
- Sentry: Integrações com Slack, PagerDuty e GitHub — Catálogo de integrações oficiais para notificações e automação de fluxos de trabalho.
- Artigo: Boas práticas para configuração de alertas no Sentry — Blog oficial do Sentry com dicas para evitar ruído e calibrar thresholds.
- Sentry: Infrastructure as Code com Terraform — Documentação do provider Terraform para gerenciar projetos, regras e configurações do Sentry como código.