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:
| Coluna | O que é |
|---|---|
| Requisições | requisições por segundo (ou por minuto, em serviços de pouco tráfego) |
| Erros | % das requisições com erro |
| p50 / p95 / p99 | latência: mediana, 95% e 99% das requisições ficam abaixo do valor |
| Tendência | volume 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
- Traces distribuídos — como o context propagation funciona
- SLOs e error budget — definir metas de latência e disponibilidade
- Motor de IA — como o Aegies usa APM para gerar correções