Monitoramento Avançado de Aplicações TypeScript: Métricas e Alertas

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

Monitoramento Avançado de Aplicações TypeScript: Métricas e Alertas

\n

No desenvolvimento moderno, o monitoramento foi além da simples verificação "o servidor está vivo?". Para aplicações TypeScript que operam em ambientes distribuídos complexos, é necessário um sistema avançado de observabilidade. Não basta apenas registrar erros — é preciso coletar métricas personalizadas de desempenho, configurar alertas inteligentes e construir dashboards para análise preditiva. Neste artigo, veremos como implementar um monitoramento profissional de aplicações TypeScript usando ferramentas modernas e melhores práticas.

\n\n

1. Coleta de Métricas Personalizadas de Desempenho

\n

Métricas básicas (CPU, memória) muitas vezes não fornecem uma visão completa. Para aplicações TypeScript, métricas de negócio e métricas de tempo de execução são criticamente importantes. Vejamos a configuração da coleta de métricas personalizadas usando a biblioteca prom-client (cliente Prometheus para Node.js).

\n\n

Tipos de Métricas Personalizadas

\n
    \n
  • Counter (contador) — para contar eventos (requisições, erros).
  • \n
  • Gauge (medidor) — para valores que podem aumentar e diminuir (número de conexões ativas).
  • \n
  • Histogram (histograma) — para distribuição de valores (tempo de resposta).
  • \n
  • Summary (resumo) — para quantis de tempo de execução.
  • \n
\n\n

Exemplo: Registro de Métricas Personalizadas em TypeScript

\n
import client from 'prom-client';\nimport express, { Request, Response } from 'express';\n\n// Criando um registro de métricas\nconst register = new client.Registry();\nclient.collectDefaultMetrics({ register });\n\n// Contador personalizado de erros\nconst errorCounter = new client.Counter({\n  name: 'app_errors_total',\n  help: 'Total number of application errors',\n  labelNames: ['type', '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'],\n  buckets: [0.01, 0.05, 0.1, 0.5, 1, 2, 5],\n  registers: [register],\n});\n\n// Gauge de usuários ativos\nconst activeUsers = new client.Gauge({\n  name: 'active_users_count',\n  help: 'Number of currently active users',\n  labelNames: ['user_type'],\n  registers: [register],\n});\n\nconst app = express();\n\n// Middleware para medir o tempo das requisições\napp.use((req: Request, res: Response, next) => {\n  const end = httpRequestDuration.startTimer();\n  res.on('finish', () => {\n    end({ method: req.method, route: req.path, status: res.statusCode });\n  });\n  next();\n});\n\n// Endpoint para métricas\napp.get('/metrics', async (req: Request, res: Response) => {\n  res.set('Content-Type', register.contentType);\n  res.end(await register.metrics());\n});\n\n// Simulação de erro\napp.get('/error', (req: Request, res: Response) => {\n  errorCounter.inc({ type: 'validation', code: '400' });\n  res.status(400).send('Bad Request');\n});\n\napp.listen(3000, () => console.log('Server on port 3000'));
\n\n

2. Integração com Prometheus e Grafana

\n

As métricas coletadas precisam ser exportadas e visualizadas. O Prometheus consultará nosso endpoint /metrics, e o Grafana exibirá os dados em dashboards.

\n\n

Configuração do Prometheus para Aplicação TypeScript

\n
# prometheus.yml\nglobal:\n  scrape_interval: 15s\nscrape_configs:\n  - job_name: 'typescript-app'\n    static_configs:\n      - targets: ['localhost:3000']\n    metrics_path: '/metrics'\n    # Adicionando rótulos de ambiente\n    relabel_configs:\n      - source_labels: [__address__]\n        target_label: instance\n        regex: '([^:]+):.*'\n        replacement: '${1}'
\n\n

Consultas Avançadas PromQL para Análise

\n
    \n
  • rate(app_errors_total[5m]) — taxa de erros nos últimos 5 minutos.
  • \n
  • histogram_quantile(0.95, rate(http_request_durati
  • \n

Blogs

Book Recommendations