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:
- Node.js 14 o versiones posteriores
- Para obtener información sobre la política de lanzamiento de Node.js, consulta el programa de lanzamiento.
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 conmusl
. 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:
- Compute Engine
- Google Kubernetes Engine (GKE)
- Entorno flexible de App Engine
- Entorno estándar de App Engine
- Fuera de Google Cloud (para obtener información sobre los requisitos de configuración adicionales, consulta cómo generar perfiles de aplicaciones fuera de Google Cloud).
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 Google Cloud CLI o la consola de Google:
CLI de gcloud
Si aún no instalaste Google Cloud CLI en tu estación de trabajo, consulta la documentación de Google Cloud CLI.
Ejecuta el siguiente comando:
gcloud services enable cloudprofiler.googleapis.com
Para obtener más información, consulta gcloud services
Consola de Google Cloud
-
Enable the required API.
Si se muestra API habilitada, la API ya está habilitada. De lo contrario, haz clic en el botón Habilitar.
Otorga un rol de IAM a la cuenta de servicio
Si implementas tu aplicación en recursos de Google Cloud y usas la cuenta de servicio predeterminada y no modificaste los roles otorgados a esa cuenta de servicio, puedes omitir esta sección.
Si realizas alguna de las siguientes acciones, debes otorgarle a la cuenta de servicio
el rol de IAM de
agente de Cloud Profiler (roles/cloudprofiler.agent
):
- Estás usando la cuenta de servicio predeterminada, pero modificaste sus otorgamientos de roles.
- Estás usando una cuenta de servicio creada por el usuario.
- Si usas Workload Identity, otorga el rol de Agente de Cloud Profiler a la cuenta de servicio de Kubernetes.
Puedes otorgar un rol de IAM a una cuenta de servicio mediante la
consola de Google Cloud o Google Cloud CLI. Por ejemplo, puedes usar el comando gcloud projects add-iam-policy-binding
:
gcloud projects add-iam-policy-binding GCP_PROJECT_ID \
--member serviceAccount:MY_SVC_ACCT_ID@GCP_PROJECT_ID.iam.gserviceaccount.com \
--role roles/cloudprofiler.agent
Antes de usar el comando anterior, reemplaza lo siguiente:
- GCP_PROJECT_ID: ID del proyecto
- MY_SVC_ACCT_ID: Es el nombre de la cuenta de servicio.
Para obtener información detallada, consulta Administra el acceso a proyectos, carpetas y organizaciones.
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 integrado. Los objetos binarios precompilados para este módulo integrado están disponibles para Linux y Alpine Linux para Node 14 y 16. No se requieren dependencias adicionales.
@google-cloud/profiler
usa node-pre-gyp
para determinar qué objeto binario compilado previamente instalar.
Cuando se usa @google-cloud/profiler
en otros entornos que no tienen objetos binarios precompilados, se usa el módulo node-gyp
para compilar objetos binarios.
Para obtener información sobre las dependencias necesarias para compilar objetos binarios con node-gyp
, consulta la documentación de instalación de node-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
).
Compute Engine
En Compute Engine, sigue estos pasos:
Instala la versión más reciente de Cloud Profiler:
npm install --save @google-cloud/profiler
Modifica el código
require
de tu aplicación a fin de crear un objetoserviceContext
que asigne aservice
el nombre del servicio para el que se genera el perfil. De manera opcional, puedes asignar aversion
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:
GKE
En GKE, sigue estos pasos:
Modifica tu Dockerfile para instalar el paquete de Profiler:
FROM node:10 ... RUN npm install @google-cloud/profiler
Modifica el código
require
de tu aplicación a fin de crear un objetoserviceContext
que asigne aservice
el nombre del servicio para el que se genera el perfil. De manera opcional, puedes asignar aversion
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:
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:
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.
En la consola de Google Cloud, ve a la página Profiler:
También puedes usar la barra de búsqueda para encontrar esta página.
Argumentos de versión y 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-z0-9]([-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.
Error de compilación
Si ejecutas npm install
y la compilación falla con el siguiente error, entonces
a tu Dockerfile le faltan algunas dependencias de compilación:
ERR! stack Error: not found: make
Para resolver este problema, agrega la siguiente sentencia a la etapa de compilación de tu Dockerfile:
RUN apk add python3 g++ make
Error de autenticación
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?
- Selecciona los perfiles que se analizarán
- Cómo interactuar con el gráfico tipo llama
- Cómo filtrar el gráfico tipo llama
- Enfoca el gráfico tipo llama
- Comparar perfiles