Crea perfiles de aplicaciones Node.js

En esta página, se describe cómo modificar tu aplicación de Node.js para capturar datos de generación de perfiles y enviarlos a tu proyecto de Google Cloud. Para obtener información general sobre la creación de perfiles, consulta el artículo sobre conceptos de creación de perfiles.

Tipos de perfil para Node.js:

  • Montón
  • Tiempo

Versiones de lenguaje compatibles con Node.js:

  • 10.4.1 o superior en la rama de la versión 10.x.
  • 12.0.0 o superior en la rama de la versión 12x.
  • 14.0.0 o superior en la rama de la versión 14.x.
  • Para obtener información sobre la política de actualización de Node.js, consulta Versiones.

Versiones compatibles del agente de generación de perfiles:

  • Se admite la versión más reciente del agente. Por lo general, no se admiten las actualizaciones de más de un año. Te recomendamos usar la versión más reciente del agente.

Sistemas operativos compatibles:

  • Linux. La generación de perfiles de aplicaciones de Node.js es compatible con kernels de Linux, cuya biblioteca C estándar se implementa con glibc o con musl. Para obtener información sobre la configuración específica de los kernels Linux Alpine, consulta la sección sobre ejecución en Linux Alpine.

Entornos compatibles:

Habilita la API de Profiler

Antes de usar el agente de generación de perfiles, asegúrate de que la API de Profiler subyacente esté habilitada. Puedes verificar el estado de la API y habilitarla, si es necesario, con la herramienta de línea de comandos gcloud del SDK de Cloud o Cloud Console:

SDK de Cloud

  1. Si aún no instalaste el SDK de Cloud en tu estación de trabajo, consulta SDK de Google Cloud.

  2. Ejecuta el siguiente comando:

    gcloud services enable cloudprofiler.googleapis.com
    

Para obtener más información, consulta gcloud services

Cloud Console

  1. Ve al panel API y servicios (APIs & Services):

    Ir a API y servicios (APIs & Services)

  2. Selecciona el proyecto que usarás para acceder a la API.

  3. Haz clic en el botón Add APIs and Services (Agregar API y servicios).

    Agregar API y servicios

  4. Busca API de Profiler.

  5. En los resultados de la búsqueda, selecciona API de Cloud Profiler.

    Si no ves la API de Cloud Profiler en la lista, selecciona la API de Stackdriver Profiler.

  6. Si se muestra API habilitada, la API ya está habilitada. De lo contrario, haz clic en el botón Habilitar.

Usa Cloud Profiler

En todos los entornos compatibles, debes usar Profiler para instalar el paquete @google-cloud/profiler, agregar una declaración require a tu aplicación y, luego, implementarla de la manera habitual.

Antes de instalar @google-cloud/profiler

El paquete @google-cloud/profiler depende de un módulo nativo. Los objetos binarios compilados previamente para este módulo nativo están disponibles para todas las combinaciones de lenguajes y plataformas compatibles. Para determinar qué objeto binario compilado previamente istalar, @google-cloud/profiler usa node-pre-gyp.

Instalación

Para instalar la versión más reciente de Cloud Profiler, sigue estos pasos:

    npm install --save @google-cloud/profiler

Si también usas el agente de Trace, cuando modifiques tu aplicación, importa el paquete de Profiler después del paquete de agente de Trace (@google-cloud/trace-agent). Si deseas obtener más información, consulta cómo configurar Cloud Trace para Node.js.

Compute Engine

En Compute Engine, sigue estos pasos:

  1. Instala la versión más reciente de Cloud Profiler:

    npm install --save @google-cloud/profiler
    
  2. Modifica el código require de tu aplicación a fin de crear un objeto serviceContext que asigne a service el nombre del servicio para el que se genera el perfil. De manera opcional, puedes asignar a version la versión del servicio para el que se genera el perfil. Consulta Argumentos del nombre y la versión del servicio para obtener más información sobre estas opciones de configuración:

    require('@google-cloud/profiler').start({
      serviceContext: {
        service: 'your-service',
        version: '1.0.0',
      },
    });

GKE

En GKE, sigue estos pasos:

  1. Modifica tu Dockerfile para instalar el paquete de Profiler:

    FROM node:10
    ...
    RUN npm install @google-cloud/profiler
    
  2. Modifica el código require de tu aplicación a fin de crear un objeto serviceContext que asigne a service el nombre del servicio para el que se genera el perfil. De manera opcional, puedes asignar a version la versión del servicio para el que se genera el perfil. Consulta Argumentos del nombre y la versión del servicio para obtener más información sobre estas opciones de configuración:

    require('@google-cloud/profiler').start({
      serviceContext: {
        service: 'your-service',
        version: '1.0.0',
      },
    });

App Engine

En el entorno flexible de App Engine y el entorno estándar de App Engine, el código require es similar al siguiente:

require('@google-cloud/profiler').start();

En App Engine, los parámetros service y version derivan del entorno, por lo que no tienes que especificarlos. Por lo tanto, no necesitas crear un objeto serviceContext.

Analiza datos

Una vez que Profiler haya recopilado los datos, podrás verlos y analizarlos con la interfaz de Profiler. Para comenzar a usar esta interfaz, consulta la sección sobre cómo abrir la interfaz de Profiler.

Argumentos de la versión y del nombre del servicio

Cuando cargas el agente de Profiler, especificas un argumento de nombre del servicio y un argumento de la versión del servicio opcional para configurarlo.

El nombre del servicio permite que Profiler recopile datos de generación de perfiles para todas las réplicas de ese servicio. El servicio del generador de perfiles garantiza una tasa promedio de recopilación de un perfil por minuto para cada nombre de servicio en cada combinación de zonas y versiones del servicio.

Por ejemplo, si tienes un servicio con dos versiones que se ejecutan en réplicas en tres zonas, el generador de perfiles creará un promedio de 6 perfiles por minuto para ese servicio.

Si usas nombres de servicio diferentes para tus réplicas, se generarán los perfiles del servicio con más frecuencia que la necesaria y con una sobrecarga más alta.

Cuando selecciones un nombre de servicio, ten en cuenta lo siguiente:

  • Elige un nombre que represente de forma clara el servicio en la arquitectura de tu aplicación. La elección del nombre del servicio es menos importante si solo ejecutas un único servicio o aplicación. Por ejemplo, es más importante si tu aplicación se ejecuta como un conjunto de microservicios.

  • Asegúrate de no usar ningún valor específico del proceso, como un ID de proceso, en la string de nombre del servicio.

  • La string de nombre del servicio debe coincidir con esta expresión regular:

    ^[a-z]([-a-z0-9_.]{0,253}[a-z0-9])?$

Un buen lineamiento es usar una string estática, como imageproc-service, como nombre del servicio.

La versión del servicio es opcional. Si especificas la versión del servicio, Profiler puede agregar información de generación de perfiles de varias instancias y mostrarla correctamente. Se puede usar para marcar diferentes versiones de tus servicios a medida que se implementan. La IU de Profiler te permite filtrar los datos por versión del servicio. De esta manera, puedes comparar el rendimiento de las versiones anteriores y más recientes del código.

El valor del argumento de la versión del servicio es una string de formato libre, pero los valores de este argumento suelen verse como números de versión, por ejemplo, 1.0.0 o 2.1.2.

Registro de agente

El agente de generación de perfiles puede informar los datos de registro. Para habilitar el registro, configura la opción logLevel cuando inicies el agente. Los valores logLevel admitidos son los siguientes:

  • 0: inhabilita todos los registros del agente.
  • 1: habilita el registro de errores.
  • 2: habilita el registro de advertencias (configuración predeterminada).
  • 3: habilita el registro de información.
  • 4: habilita el registro de depuración.

Configura el valor logLevel en el mismo objeto que proporciona el contexto del servicio:

require('@google-cloud/profiler').start({
    serviceContext: { ... }
    logLevel:       3
});

Ejecuta con Linux Alpine

El agente de generación de perfiles de Node.js para Linux Alpine solo es compatible con las configuraciones de Google Kubernetes Engine.

Si usas imágenes de Docker que se ejecutan con Linux Alpine (como golang:alpine o solo alpine), es posible que veas el siguiente error de autenticación:

connection error: desc = "transport: authentication handshake failed: x509: failed to load system roots and no roots provided"

Ten en cuenta que, para ver el error, debes tener habilitado el registro de agente.

El error indica que las imágenes de Docker con Linux Alpine no tienen los certificados SSL raíz instalados de forma predeterminada. Esos certificados son necesarios para que el agente de creación de perfiles se comunique con la API de Profiler. Para resolver este error, agrega el siguiente comando apk a tu Dockerfile:

FROM alpine
...
RUN apk add --no-cache ca-certificates

Luego, debes volver a compilar y volver a implementar tu aplicación.

Problemas conocidos

El agente de creación de perfiles para Node.js interfiere en la salida normal del programa. El programa puede tardar hasta una hora en salir después de completar todas las tareas. Cuando emites un SIGINT, por ejemplo, mediante Ctrl-C, el proceso finaliza sin problemas.

¿Qué sigue?

Para obtener más información sobre el gráfico y los controles de Profiler, consulta la página sobre cómo usar la interfaz de Cloud Profiler. Para obtener información avanzada, consulta los siguientes temas: