APM — Application Performance Monitoring

Monitore latência, erros, traces distribuídos e performance de banco de dados em tempo real.

O que é APM no Aegies

O APM do Dodo Aegies coleta automaticamente traces de cada requisição que entra nos seus serviços, sem amostragem. Isso significa que você vê 100% das requisições — não apenas uma fração — e pode investigar qualquer transação individual que causou um problema.

Após instalar o SDK, o APM ativa automaticamente instrumentação para:

  • Frameworks HTTP (Express, Fastify, Django, Spring Boot, Gin, Rails, etc.)
  • Clientes de banco de dados (PostgreSQL, MySQL, MongoDB, Redis, Elasticsearch)
  • Filas de mensagens (Kafka, RabbitMQ, SQS)
  • Chamadas HTTP de saída e gRPC

Catálogo de serviços

Em APM no dashboard, cada serviço que envia traces aparece com:

ColunaO que é
Requisiçõesrequisições por segundo (ou por minuto, em serviços de pouco tráfego)
Erros% das requisições com erro
p50 / p95 / p99latência: mediana, 95% e 99% das requisições ficam abaixo do valor
Tendênciavolume e erros no intervalo

Contam como requisição os spans em que a chamada entra no serviço (servidor HTTP/gRPC, consumidor de fila ou o primeiro span do trace) — chamadas que o serviço faz para fora não inflam os números.


Página do serviço

Ao clicar em um serviço:

  • Requisições e erros e latência (p50, p95, p99) no tempo;
  • Endpoints: cada rota (GET /api/cart/{id}) com requisições, erros e latência — clique para ver os traces daquele endpoint;
  • Distribuição de latência: quantas requisições caíram em cada faixa de tempo, com as acima do p95 em destaque;
  • Erros mais frequentes, agrupados por endpoint e mensagem, com um trace de exemplo;
  • Dependências: quem chama o serviço e o que ele chama (outros serviços, bancos, filas);
  • atalhos para os traces e os logs do serviço.

Explorador de traces

APM → Traces lista os spans com a mesma DQL do explorador de logs:

service:checkout status:error duration>500ms @http.status_code>=500

Campos prontos: service, resource (endpoint), operation, kind, status, duration (aceita us, ms, s, m, h; número sem unidade é ms), trace_id, span_id; atributos do span com @. Há histograma (ok e erro) com zoom, lista de campos com os valores mais comuns e +/−, e ordenação por mais recentes ou mais lentos.


Detalhe do trace

Ao abrir um trace:

  • Flame graph: cada span é uma barra do tamanho da sua duração, empilhada sob quem o chamou. Clique para ver os detalhes; duplo clique para dar zoom.
  • Cascata: a mesma árvore em linhas, com recolher/expandir, para ver a ordem das chamadas.
  • Tempo por serviço: quanto do tempo do trace foi gasto em cada serviço (tempo próprio, sem contar as chamadas filhas).
  • Painel do span: duração, status, erro e stack trace (eventos de exceção), atributos com +/− para buscar spans parecidos e os logs daquele span ou do trace inteiro (correlacionados por trace_id/span_id).
GET /api/checkout                                    [420ms]
├── authenticate()                                   [12ms]
├── loadCart()                                       [8ms]
├── reserveInventory()                               [310ms]  ← gargalo
│     └── SELECT * FROM inventory WHERE ...          [298ms]
└── chargePayment()                                  [45ms]

Alertas de traces

Em Alerts → Nova regra, escolha o sinal Trace, o serviço e:

  • taxa de erro > % — % de requisições com erro na janela (sem tráfego, a regra fica em “sem dados” em vez de disparar);
  • contagem de spans > — quantos spans casaram na janela.

Um filtro DQL opcional restringe a regra, por exemplo resource:"POST /api/checkout" ou @http.status_code>=500.


Instrumentação manual

Para operações que o SDK não captura automaticamente, você pode criar spans manualmente:

import { aegies } from '@dodo/aegies';

async function processPayment(orderId) {
  return await aegies.trace('processPayment', async (span) => {
    span.setAttribute('order.id', orderId);
    span.setAttribute('payment.method', 'credit_card');

    const result = await chargeGateway(orderId);

    span.setAttribute('payment.status', result.status);
    return result;
  });
}

Detecção automática de anomalias

O Aegies APM analisa o baseline de cada endpoint e detecta:

  • Spike de latência: p99 subiu 3× acima do normal
  • Degradação gradual: p50 aumentando 5% por hora nas últimas 3 horas
  • Query nova e lenta: query que não existia ontem agora representa 40% do tempo total
  • Error rate: passou de 0,1% para 2% sem deploy recente

Cada anomalia detectada é correlacionada com deploys, mudanças de configuração e eventos de infraestrutura para isolar a causa raiz.


Próximos passos