Node.js y OpenTelemetry

Esta página está diseñada para desarrolladores de aplicaciones que deseen recopilar datos de Cloud Trace para aplicaciones de Node.js mediante OpenTelemetry. OpenTelemetry es un conjunto de bibliotecas de instrumentación para recopilar datos de seguimiento y métricas, que funcionan con varios backends. Para recopilar seguimientos con OpenTelemetry y Node.js, debes hacer lo siguiente, como se describe en esta página:

  • Instala los paquetes de OpenTelemetry.
  • Configurar tu aplicación para exportar intervalos a Cloud Trace
  • Configura tu plataforma.

Para obtener información sobre las versiones, consulta los siguientes vínculos:

A fin de obtener los detalles más recientes sobre OpenTelemetry para Node.js, junto con documentación y ejemplos adicionales, consulta OpenTelemetry.

Antes de comenzar

Verifica que la API de Cloud Trace esté habilitada para tu proyecto de Google Cloud:

  1. Haz clic en el siguiente botón o selecciona API y servicios en Google Cloud Console y selecciona API de Cloud Trace:

    Ir a la API de Trace

  2. En la página API de Cloud Trace, si se muestra un botón etiquetado como Habilitar, haz clic en él. Si no se muestra este botón, la API de Cloud Trace está habilitada para el proyecto seleccionado.

Instala, inicializa y usa el cliente

OpenTelemetry ofrece tres maneras de instrumentar tu aplicación:

  • Instrumentación automática para aplicaciones de Node.js
  • Seguimiento manual
  • Instrumentación automática para aplicaciones web

En las siguientes secciones, se muestra el caso de uso de cada instrumentación.

Instrumentación automática

El módulo @opentelemetry/node proporciona instrumentación automática para aplicaciones de Node.js.

La instrumentación automática identifica automáticamente lo siguiente en tu aplicación:

  • Frameworks, como Express
  • Protocolos comunes, como HTTP, HTTPS y gRPC
  • Bases de datos, como MySQL, MongoDB, Redis y PostgreSQL
  • Otras bibliotecas de tu aplicación

La instrumentación automática ofrece un seguimiento listo para usar, por lo que no es necesario que realices cambios de código en ninguna de las bibliotecas que usas. El código de instrumentación realiza automáticamente las siguientes acciones:

  • Extrae un identificador de contexto de seguimiento de las solicitudes entrantes para permitir el seguimiento distribuido, si corresponde.
  • Garantiza que el contexto de seguimiento actual se propague mientras la transacción pasa por una aplicación.
  • Agrega el identificador de contexto de seguimiento a las solicitudes salientes, lo que permite que el seguimiento distribuido continúe con el siguiente salto, si corresponde.
  • Crea y finaliza intervalos.

El módulo usa complementos para instrumentar automáticamente la aplicación a fin de producir intervalos y proporcionar un seguimiento de extremo a extremo con solo algunas líneas de código.

Instrumentación manual

El módulo de seguimiento manual, @opentelemetry/tracing, proporciona un control completo sobre la instrumentación y la creación de intervalos. No carga async_hooks. No usa el almacenamiento local de continuación o ningún complemento de instrumentación de forma predeterminada. El seguimiento manual tiene menos implicaciones de sobrecarga de rendimiento en comparación con el módulo de instrumentación automática.

Instrumentación automática para aplicaciones web

El módulo @opentelemetry/web proporciona instrumentación y seguimiento automáticos para aplicaciones web. Recopila datos de rendimiento del lado del usuario, incluida la latencia y los seguimientos distribuidos, que te brindan la información para diagnosticar problemas del frontend y supervisar el estado general de la aplicación.

En las siguientes instrucciones, se muestra cómo usar el módulo de instrumentación automática para Compute Engine y Google Kubernetes Engine.

Compute Engine

Instala los siguientes paquetes:

npm install --save @opentelemetry/api
npm install --save @opentelemetry/node
npm install --save @opentelemetry/tracing
npm install --save @google-cloud/opentelemetry-cloud-trace-exporter

Agrega el siguiente código a tu app para inicializar y registrar el exportador:

const opentelemetry = require('@opentelemetry/api');
const {NodeTracerProvider} = require('@opentelemetry/node');
const {SimpleSpanProcessor} = require('@opentelemetry/tracing');
const { TraceExporter } = require('@google-cloud/opentelemetry-cloud-trace-exporter');
// Enable OpenTelemetry exporters to export traces to Google Cloud Trace.
// Exporters use Application Default Credentials (ADCs) to authenticate.
// See https://developers.google.com/identity/protocols/application-default-credentials
// for more details.
const provider = new NodeTracerProvider();

// Initialize the exporter. When your application is running on Google Cloud,
// you don't need to provide auth credentials or a project id.
const exporter = new TraceExporter();

// Configure the span processor to send spans to the exporter
provider.addSpanProcessor(new SimpleSpanProcessor(exporter));

GKE

Agrega lo siguiente a la sección Dockerfile:

RUN npm install --save @opentelemetry/api
RUN npm install --save @opentelemetry/node
RUN npm install --save @opentelemetry/tracing
RUN npm install --save @google-cloud/opentelemetry-cloud-trace-exporter

Agrega el siguiente código a tu app para inicializar y registrar el exportador:

const opentelemetry = require('@opentelemetry/api');
const {NodeTracerProvider} = require('@opentelemetry/node');
const {SimpleSpanProcessor} = require('@opentelemetry/tracing');
const { TraceExporter } = require('@google-cloud/opentelemetry-cloud-trace-exporter');
// Enable OpenTelemetry exporters to export traces to Google Cloud Trace.
// Exporters use Application Default Credentials (ADCs) to authenticate.
// See https://developers.google.com/identity/protocols/application-default-credentials
// for more details.
const provider = new NodeTracerProvider();

// Initialize the exporter. When your application is running on Google Cloud,
// you don't need to provide auth credentials or a project id.
const exporter = new TraceExporter();

// Configure the span processor to send spans to the exporter
provider.addSpanProcessor(new SimpleSpanProcessor(exporter));

Aplicación de muestra mediante el uso del framework de Express

La instrumentación Express de OpenTelemetry te permite recopilar datos de seguimiento de forma automática y exportarlos al backend que elijas, lo que te brinda observabilidad a sistemas distribuidos.

Para usar OpenTelemetry en aplicaciones que usan el framework Express, completa los siguientes pasos:

  1. Instala los siguientes paquetes:

    npm install --save @opentelemetry/plugin-http
    npm install --save @opentelemetry/plugin-express
    
  2. Agrega el siguiente código a tu app, que cargue todos los complementos compatibles:

    const { NodeTracerProvider } = require('@opentelemetry/node');
    const provider = new NodeTracerProvider();
    

Para ver un ejemplo básico, consulta el ejemplo de OpenTelemetry Express.

Crea un intervalo personalizado

Puedes agregar información adicional al seguimiento creado por el sistema mediante la creación de un intervalo personalizado.

Para crear un intervalo personalizado, agrega lo siguiente al código fuente:


// Initialize the OpenTelemetry APIs to use the
// NodeTracerProvider bindings
opentelemetry.trace.setGlobalTracerProvider(provider);
const tracer = opentelemetry.trace.getTracer('basic');

// Create a span.
const span = tracer.startSpan('foo');

// Set attributes to the span.
span.setAttribute('key', 'value');

// Annotate our span to capture metadata about our operation
span.addEvent('invoking work');

// simulate some random work.
for (let i = 0; i <= Math.floor(Math.random() * 40000000); i += 1) { }

// Be sure to end the span.
span.end();
  • getTracer muestra una instancia del rastreador, en la que basic es el nombre del rastreador o la biblioteca de instrumentación. Esto indica a OpenTelemetry quién está creando intervalos.

  • foo es el nombre del intervalo personalizado.

  • invoking work es el nombre del evento de muestra. Aquí se muestra cómo usar la API de addEvent.

Para obtener un ejemplo básico de cómo crear un intervalo personalizado, consulta el ejemplo de OpenTelemetry.

Configura tu plataforma

Puedes usar Cloud Trace en Google Cloud y otras plataformas.

Ejecuta en Google Cloud

Cuando tu aplicación se ejecuta en Google Cloud, no necesitas proporcionar credenciales de autenticación en el formato de una cuenta de servicio a la biblioteca cliente. Sin embargo, debes asegurarte de que tu plataforma de Google Cloud tenga habilitado el permiso de acceso a la API de Cloud Trace.

Para obtener una lista de los entornos compatibles de Google Cloud, consulta Compatibilidad con el entorno.

Para las siguientes opciones de configuración, la configuración predeterminada del permiso de acceso habilita la API de Cloud Trace:

  • Entorno flexible de App Engine
  • Entorno estándar de App Engine

  • Google Kubernetes Engine (GKE)

  • Compute Engine

  • Cloud Run

Si usas permisos de acceso personalizados, debes asegurarte de que el permiso de acceso a la API de Cloud Trace esté habilitado:

  • Para obtener información sobre cómo configurar los permisos de acceso para tu entorno mediante Google Cloud Console, consulta Configura tu proyecto de Google Cloud.

  • Para los usuarios gcloud, especifica los permisos de acceso mediante la marca --scopes y, también, incluye el permiso de acceso a la API de Cloud Trace trace.append. Por ejemplo, para crear un clúster de GKE solo con la API de Cloud Trace habilitada, sigue estos pasos:

    gcloud container clusters create example-cluster-name --scopes=https://www.googleapis.com/auth/trace.append

Ejecuta de forma local y en otros lugares

Si tu aplicación se ejecuta fuera de Google Cloud, debes proporcionar credenciales de autenticación en forma de una cuenta de servicio a la biblioteca cliente. La cuenta de servicio debe contener la función de agente de Cloud Trace. Para obtener más instrucciones, consulta Cómo crear una cuenta de servicio.

Las bibliotecas cliente de Google Cloud usan las credenciales predeterminadas de la aplicación (ADC) para encontrar las credenciales de tu aplicación. Estas credenciales se proporcionan mediante la configuración de la variable de entorno GOOGLE_APPLICATION_CREDENTIALS:

Linux/macOS

    export GOOGLE_APPLICATION_CREDENTIALS=path-to-your-service-accounts-private-key

Windows

    set GOOGLE_APPLICATION_CREDENTIALS=path-to-your-service-accounts-private-key

PowerShell:

    $env:GOOGLE_APPLICATION_CREDENTIALS="path-to-your-service-accounts-private-key"

Cómo ver los seguimientos

Después de la implementación, puedes ver los seguimientos en el visor de seguimientos de Cloud Console.

Ir a la página del Lector de seguimiento

Soluciona problemas

Para obtener información sobre cómo solucionar problemas con Cloud Trace, ve a la página de solución de problemas.