Aplicacao backend
Kmind APM para Node.js
Monitore APIs, workers e servicos Node.js com traces automaticos, metricas do runtime e logs correlacionados. A biblioteca funciona em modo fail-open: uma falha de telemetria nunca impede sua aplicacao de iniciar ou responder requisicoes.
O que voce precisa antes de iniciar
- Uma aplicacao com Node.js 18.19+ ou 20.6+ e acesso ao npm.
- Acesso ao Console Kmind para criar um servico Backend / APM Node.
- Acesso HTTPS de saida do servidor para
ingest.kmind.com.br.
NEXT_PUBLIC_*, imagens publicas ou repositorios. Guarde-a no gerenciador de segredos da sua plataforma.1. Crie a integracao no Console
- Em Clusters, escolha o ambiente onde o backend sera executado.
- Adicione um servico do tipo Backend / APM Node.
- Conclua o wizard e copie a service key exibida na conexao.
- Cadastre a chave como segredo no ambiente de deploy da API ou worker.
applicationName estavel para cada aplicacao em execucao. Por exemplo, orders-api e billing-worker podem ser identificados separadamente no Console.2. Instale e inicialize antes da aplicacao
Instale o pacote no projeto. Para a instrumentacao automatica detectar Express, NestJS, HTTP, bancos de dados e outros modulos suportados, carregue o Kmind antes deles.
npm install kmind-apm
# Producao com JavaScript compilado
node --require kmind-apm/init dist/main.js
# Desenvolvimento com TypeScript e tsx
node --require kmind-apm/init --import tsx src/main.tsConfigure as variaveis no ambiente que executa o processo. Em producao, prefira os secrets do provedor a um arquivo .env versionado.
# .env
KMIND_APPLICATION_NAME=orders-api
KMIND_SERVICE_KEY=kms_COLE_A_CHAVE_PRIVADA_AQUI
KMIND_OTLP_ENDPOINT=https://ingest.kmind.com.br/v1/server
# Controles opcionais
KMIND_APM_ENABLED=true
KMIND_TRACE_SAMPLE_RATE=1
KMIND_CAPTURE_LOGS=true
KMIND_APM_DEBUG=falseTambem e possivel chamar init manualmente, desde que essa seja a primeira importacao da aplicacao e aconteca antes de framework, driver de banco ou cliente HTTP.
import { init } from "kmind-apm";
init({
applicationName: "orders-api",
serviceKey: process.env.KMIND_SERVICE_KEY,
});
// Importe Express, NestJS, banco de dados e clientes HTTP somente depois.3. Configure um encerramento seguro
Em APIs que controlam o proprio processo, finalize o SDK durante o desligamento. Isso da tempo para enviar o lote final sem atrasar o encerramento indefinidamente.
import { stopTracing } from "kmind-apm";
const server = app.listen(3000);
async function shutdown() {
server.close();
await stopTracing();
}
process.on("SIGTERM", () => void shutdown());
process.on("SIGINT", () => void shutdown());4. Valide a instalacao
- Publique a aplicacao com as variaveis configuradas.
- Faca uma requisicao real para um endpoint da API.
- Confira os logs do processo para erros de rede ou de configuracao.
- No Kmind, abra Aplicacoes e localize o
KMIND_APPLICATION_NAMEconfigurado.
# Confirme a versao instalada
npm list kmind-apm
# Teste a API a partir de um cliente
curl https://api.exemplo.com/healthKMIND_APM_DEBUG=true exibe apenas diagnosticos de inicializacao no stderr. Use temporariamente para investigar e retorne para false apos concluir.Logs, erros e console
O logger do pacote grava JSON no stdout ou stderr e, quando KMIND_CAPTURE_LOGS=true, envia a mesma informacao ao Kmind com o traceId e spanId ativos. Use-o para eventos de negocio e falhas que precisam aparecer no Logs Explorer.
import { logger } from "kmind-apm";
logger.info("Pedido criado", { order_id: order.id, total: order.total });
logger.warn("Provedor esta lento", { provider: "pagamentos", timeout_ms: 1200 });
logger.error("Pagamento recusado", { order_id: order.id, error_code: error.code });Para Express, os middlewares opcionais registram requisicoes de diagnostico e erros nao tratados. O errorHandler deve ser o ultimo middleware da cadeia.
import express from "express";
import { errorHandler, requestLogger } from "kmind-apm";
const app = express();
app.use(requestLogger);
app.get("/orders/:id", (req, res) => {
res.json({ id: req.params.id });
});
app.use(errorHandler);Trace distribuido entre frontend e backend
Quando uma aplicacao usa o Kmind APM Web e chama uma API instrumentada, o cabecalho W3C traceparent mantem o mesmo trace entre navegador e servidor. O APM Node extrai esse contexto automaticamente.
- No frontend, inclua o host da API em
propagateTraceTo. - No CORS da API, permita o cabecalho
traceparentem chamadas cross-origin. - Nao substitua ou remova esse cabecalho em middlewares ou proxies.
// Kmind APM Web
init({
applicationName: "portal-cliente",
clientKey: "kmw_...",
propagateTraceTo: ["api.exemplo.com"],
});
// API: mantenha o traceparent recebido e inicialize kmind-apm antes do framework.Configuracao avancada
import { init } from "kmind-apm";
init({
applicationName: "orders-api",
serviceKey: process.env.KMIND_SERVICE_KEY,
endpoint: "https://ingest.kmind.com.br/v1/server",
sampleRate: 0.25,
captureLogs: true,
enabled: true,
debug: false,
});applicationName: nome exibido no Kmind. Se omitido, usaKMIND_APPLICATION_NAME,OTEL_SERVICE_NAMEounode-service.sampleRateeKMIND_TRACE_SAMPLE_RATE: amostragem de traces novos entre0e1. Comece com1e reduza apenas quando o volume justificar.captureLogseKMIND_CAPTURE_LOGS: habilitam ou desabilitam apenas a exportacao de logs dologger.enabled: falseouKMIND_APM_ENABLED=false: desliga a coleta sem alterar o comportamento da aplicacao.
A service key define tenant, cluster e servico no gateway. Nao informe orgId, headers de tenant ou credenciais de infraestrutura no codigo da aplicacao.
Desempenho e confiabilidade
A instrumentacao envia traces, metricas e logs de forma assincrona. O exportador de metricas roda a cada 60 segundos, usa timeout de cinco segundos e limita uma exportacao simultanea. Se o gateway estiver indisponivel, a aplicacao continua atendendo suas requisicoes normalmente.
Inicialize o pacote uma unica vez por processo. Chamadas repetidas de initsao seguras, mas nao inicializam um segundo SDK. Para reduzir volume, use amostragem em vez de criar logica manual nos endpoints.
Troubleshooting
A aplicacao nao aparece no Console
Verifique KMIND_SERVICE_KEY, KMIND_APPLICATION_NAME, acesso de saida para o gateway e se houve ao menos uma requisicao apos o deploy. Habilite KMIND_APM_DEBUG=true temporariamente para diagnosticar a inicializacao.
Nao ha traces automaticos
Garanta que kmind-apm/init seja carregado antes de Express, NestJS, drivers de banco e clientes HTTP. Reinicie o processo depois de corrigir a ordem dos imports.
Logs ficam em zero
Confirme KMIND_CAPTURE_LOGS=true e use o logger exportado pelo pacote. Logs de bibliotecas externas e chamadas diretas a console.log nao sao reenviados automaticamente.
Nao ha trace entre frontend e API
Confirme propagateTraceTo no frontend, o CORS da API para traceparent e a instrumentacao do backend antes dos imports do framework.
Atualizar ou remover
# Atualizar
npm install kmind-apm@latest
npm list kmind-apm
# Remover
npm uninstall kmind-apmPara remover completamente, retire kmind-apm/init ou a chamada de init, os middlewares opcionais e as variaveis KMIND_* do ambiente antes de publicar uma nova versao.
