Al ejecutar una aplicación Node.js, es necesario tener visibilidad sobre la latencia de las solicitudes, las tasas de error y las dependencias entre servicios para diagnosticar problemas de rendimiento. Managed Service for OpenTelemetry (Tracing Analysis) recopila y visualiza trazas distribuidas de su aplicación, lo que le permite identificar cuellos de botella en sus microservices.
Este tema explica cómo instrumentar una aplicación Node.js con la biblioteca cliente de Jaeger para reportar datos de traza a Tracing Analysis.
Requisitos previos
Antes de empezar, asegúrese de contar con lo siguiente:
Node.js instalado en su computadora
-
La dependencia
jaeger-clientagregada a su proyecto:"dependencies": { "jaeger-client": "^3.12.0" } Un endpoint de recopilador de Jaeger o Zipkin (consulte la sección "Obtener el endpoint del recopilador" a continuación)
Obtener el endpoint del recopilador
Inicie sesión en la consola de Managed Service for OpenTelemetry.
En el panel de navegación izquierdo, haga clic en Cluster Configurations. Luego, haga clic en la pestaña Access point information.
En la barra de navegación superior, seleccione una región. En la sección Cluster Information, active Show Token.
En la sección Client, haga clic en Jaeger o Zipkin.
-
Copie el endpoint de la columna Related Information.

Si su aplicación se ejecuta en un entorno de producción de Alibaba Cloud, utilice un endpoint de Virtual Private Cloud (VPC). De lo contrario, use un endpoint público. Para Zipkin, utilice el endpoint v2 a menos que tenga un motivo específico para usar v1.
Instrumentar su aplicación
Paso 1: Inicializar el tracer
Configure el cliente Jaeger con el nombre de su servicio, la estrategia de muestreo y el endpoint del recopilador.
Reemplace <endpoint> con el endpoint que obtuvo en la sección anterior. El endpoint también está disponible en la página Overview de la consola de Tracing Analysis.
const initTracer = require("jaeger-client").initTracer;
const config = {
serviceName: 'node-service',
sampler: {
type: "const",
param: 1
},
reporter: {
collectorEndpoint: "<endpoint>"
},
};
Paso 2: Crear una instancia de tracer
const tracer = initTracer(config);
Paso 3: Crear y finalizar spans
Un span representa una unidad individual de trabajo. Inicie un span, asocie etiquetas y registros de forma opcional y luego finalícelo para enviar los datos.
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();
Paso 4: Verificar las trazas en la consola
Inicie sesión en la consola de Tracing Analysis y consulte la traza.
Ejemplo completo con Express
Este ejemplo instrumenta una aplicación Express. Cada solicitud entrante se envuelve en un span y se registra una entrada de registro para la ruta /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');
});
Reemplace <endpoint> con su endpoint de recopilador y luego ejecute la aplicación:
node app.js
Envíe una solicitud de prueba:
curl http://127.0.0.1:3000/api
Respuesta esperada:
{"code":200,"msg":"success"}
Marcadores de posición
Reemplace el siguiente marcador de posición con su valor real antes de ejecutar el código:
|
Marcador de posición |
Descripción |
|
|
Endpoint del recopilador de Jaeger obtenido desde la consola de Managed Service for OpenTelemetry. Consulte la sección "Obtener el endpoint del recopilador" anterior. |

