Ao executar uma aplicação Node.js, você precisa de visibilidade sobre a latência das requisições, as taxas de erro e as dependências entre serviços para diagnosticar problemas de desempenho. O Managed Service for OpenTelemetry (Tracing Analysis) coleta e visualiza rastreamentos distribuídos da sua aplicação para ajudar a identificar gargalos em microsserviços.
Este tópico orienta você na instrumentação de uma aplicação Node.js com a biblioteca de cliente Jaeger para relatar dados de rastreamento ao Tracing Analysis.
Pré-requisitos
Antes de começar, verifique se você tem:
Node.js instalado na sua máquina
-
A dependência
jaeger-clientadicionada ao seu projeto:"dependencies": { "jaeger-client": "^3.12.0" } Um endpoint de coletor Jaeger ou Zipkin (consulte a seção "Obter o endpoint do coletor" abaixo)
Obter o endpoint do coletor
Faça login no console do Managed Service for OpenTelemetry.
No painel de navegação à esquerda, clique em Cluster Configurations. Em seguida, clique na aba Access point information.
Na barra de navegação superior, selecione uma região. Na seção Cluster Information, ative a opção Show Token.
Na seção Client, clique em Jaeger ou Zipkin.
-
Copie o endpoint da coluna Related Information.

Se sua aplicação executa em um ambiente de produção da Alibaba Cloud, utilize um endpoint de Virtual Private Cloud (vpc). Caso contrário, use um endpoint público. Para Zipkin, prefira o endpoint v2, a menos que tenha um motivo específico para usar o v1.
Instrumentar sua aplicação
Etapa 1: Inicializar o tracer
Configure o cliente Jaeger com o nome do serviço, a estratégia de amostragem e o endpoint do coletor.
Substitua <endpoint> pelo endpoint obtido na seção anterior. Esse endpoint também está disponível na página Overview no console do Tracing Analysis.
const initTracer = require("jaeger-client").initTracer;
const config = {
serviceName: 'node-service',
sampler: {
type: "const",
param: 1
},
reporter: {
collectorEndpoint: "<endpoint>"
},
};
Etapa 2: Criar uma instância do tracer
const tracer = initTracer(config);
Etapa 3: Criar e finalizar spans
Um span representa uma única unidade de trabalho. Inicie um span, anexe tags e logs opcionalmente e finalize-o para enviar os dados.
const span = tracer.startSpan("say-hello");
// Attach metadata as key-value tags (appears in the trace detail view)
span.setTag("tagKey-01", "tagValue-01");
// Record a timestamped log entry (appears in the span's log timeline)
span.log({event: "timestamp", value: Date.now()});
// Finish the span to flush it to the collector
span.finish();
Etapa 4: Verificar rastreamentos no console
Faça login no console do Tracing Analysis e visualize o rastreamento.
Exemplo completo com Express
Este exemplo instrumenta uma aplicação Express. Cada requisição recebida é encapsulada em um span, e uma entrada de log é registrada para a rota /api.
const express = require("express");
const initTracer = require("jaeger-client").initTracer;
const app = express();
const config = {
serviceName: 'node-service',
sampler: {
type: "const",
param: 1
},
reporter: {
collectorEndpoint: "<endpoint>"
},
};
const tracer = initTracer(config);
// Middleware: start a span for every incoming request
app.all('*', function (req, res, next) {
req.span = tracer.startSpan("say-hello");
next();
});
// Route handler: log a timestamp and finish the span
app.get("/api", function (req, res) {
const span = req.span;
span.log({event: "timestamp", value: Date.now()});
req.span.finish();
res.send({code: 200, msg: "success"});
});
app.listen(3000, '127.0.0.1', function () {
console.log('start');
});
Substitua <endpoint> pelo seu endpoint de coletor e execute a aplicação:
node app.js
Envie uma requisição de teste:
curl http://127.0.0.1:3000/api
Resposta esperada:
{"code":200,"msg":"success"}
Marcadores de posição
Substitua o seguinte marcador de posição pelo valor real antes de executar o código:
|
Marcador de posição |
Descrição |
|
|
Endpoint do coletor Jaeger obtido no console do Managed Service for OpenTelemetry. Consulte a seção "Obter o endpoint do coletor" acima. |

