Monitoramento de aplicações TypeScript: métricas e alertas do A ao Z

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Introdução: Por que o monitoramento é crítico para aplicações TypeScript

\n

TypeScript é uma ferramenta poderosa para criar aplicações web escaláveis, mas mesmo o código da mais alta qualidade não está imune a falhas em produção. Sem um sistema de monitoramento, você corre o risco de descobrir problemas através dos usuários, e não de alertas automáticos. Neste artigo, abordaremos o ciclo completo de configuração de monitoramento: desde a coleta de métricas até o envio de notificações.

\n

Abordaremos os três pilares fundamentais da observability: métricas (indicadores numéricos do sistema), logs (registros detalhados de eventos) e tracing (rastreamento de requisições). Daremos atenção especial à integração com ferramentas populares — Prometheus, Grafana e Sentry.

\n\n

1. Métricas principais para aplicações TypeScript

\n

Antes de configurar alertas, é necessário definir quais métricas são críticas para sua aplicação. Vamos dividi-las em três grupos:

\n\n

1.1 Métricas de negócio

\n

Refletem a saúde da aplicação do ponto de vista do usuário:

\n
    \n
  • Número de requisições por segundo (RPS) — mostra a carga no servidor
  • \n
  • Tempo de resposta (latência) — percentis p50, p95, p99
  • \n
  • Número de erros — status 4xx e 5xx
  • \n
  • Usuários ativos — sessões, conexões WebSocket
  • \n
\n\n

1.2 Métricas técnicas

\n

Mostram o estado da infraestrutura:

\n
    \n
  • CPU e Memória — uso do processador e vazamentos de memória
  • \n
  • Event Loop Lag — atrasos no loop de eventos do Node.js
  • \n
  • Garbage Collection — frequência e duração da coleta de lixo
  • \n
  • HTTP connection pool — número de conexões abertas
  • \n
\n\n

1.3 Exemplo: coleta de métricas com Prometheus em TypeScript

\n

Instale a biblioteca prom-client para Node.js:

\n
npm install prom-client @types/prom-client
\n\n

Crie o arquivo metrics.ts:

\n
import client from 'prom-client';\nimport express, { Request, Response } from 'express';\n\n// Cria um registro de métricas\nconst register = new client.Registry();\nclient.collectDefaultMetrics({ register });\n\n// Métrica personalizada: número de requisições HTTP\nconst httpRequestCounter = new client.Counter({\n  name: 'http_requests_total',\n  help: 'Total number of HTTP requests',\n  labelNames: ['method', 'route', 'status_code'],\n  registers: [register],\n});\n\n// Histograma de tempo de resposta\nconst httpRequestDuration = new client.Histogram({\n  name: 'http_request_duration_seconds',\n  help: 'Duration of HTTP requests in seconds',\n  labelNames: ['method', 'route', 'status_code'],\n  buckets: [0.1, 0.5, 1, 2, 5],\n  registers: [register],\n});\n\n// Middleware para coleta de métricas\nexport function metricsMiddleware(req: Request, res: Response, next: Function) {\n  const end = httpRequestDuration.startTimer();\n  res.on('finish', () => {\n    const labels = {\n      method: req.method,\n      route: req.route?.path || 'unknown',\n      status_code: res.statusCode.toString(),\n    };\n    httpRequestCounter.inc(labels);\n    end(labels);\n  });\n  next();\n}\n\n// Endpoint para o Prometheus\nexport function metricsEndpoint(req: Request, res: Response) {\n  res.set('Content-Type', register.contentType);\n  res.send(register.metrics());\n}
\n\n

2. Configuração de alertas: da teoria à prática

\n

Os alertas devem ser inteligentes — muitos falsos positivos cansam a equipe. Use a regra dos "três sigmas" para anomalias e valores limite para métricas críticas.

\n\n

2.1 Regras de alertas no Prometheus

\n

Crie o arquivo alerts.yml:

\n
groups:\n  - name: typescript-app\n    rules:\n      - alert: HighErrorRate\n        expr: |\n          rate(http_requests_total{status_code=~"5.."}[5m]) \n          / \n          rate(http_requests_total[5m]) > 0.05\n        for: 2m\n        labels:\n          severity: critical\n        annotations:\n                

Blogs

Book Recommendations