Crear perfiles de aplicaciones Node.js
En esta página se describe cómo modificar tu aplicación Node.js para capturar datos de creació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 Conceptos de la creación de perfiles.
.Tipos de perfil de Node.js:
- Montículo
- Tiempo real
Versiones de lenguaje Node.js compatibles:
- Node.js 14 o una versión posterior
- Para consultar la política de lanzamientos de Node.js, consulta la programación de lanzamientos.
Versiones compatibles del agente de creación de perfiles:
- Se admite la versión más reciente del agente. Por lo general, no se admiten las versiones que tengan más de un año. Te recomendamos que uses la versión más reciente del agente.
Sistemas operativos compatibles:
- Linux. La creación de perfiles de aplicaciones Node.js es compatible con los 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 de Linux Alpine, consulta Ejecutar en Linux Alpine.
Entornos admitidos:
- 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 Crear perfiles de aplicaciones que se ejecutan fuera de Google Cloud).
Habilitar la API Profiler
Antes de usar el agente de creación de perfiles, asegúrate de que la API Profiler subyacente esté habilitada. Puedes comprobar el estado de la API y habilitarla si es necesario mediante la CLI de Google Cloud o la consola de Google Cloud :
CLI de gcloud
Si aún no has instalado 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
.
Google Cloud consola
-
Enable the required API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin
), which contains theserviceusage.services.enable
permission. Learn how to grant roles. Si se muestra API habilitada, significa que la API ya está habilitada. Si no es así, haz clic en el botón Habilitar.
Asignar un rol de gestión de identidades y accesos a una cuenta de servicio
Si vas a implementar tu aplicación en recursos de Google Cloud y usas la cuenta de servicio predeterminada sin haber modificado las concesiones de roles de esa cuenta, puedes saltarte esta sección.
Si haces alguna de las siguientes acciones, debes conceder a la cuenta de servicio el rol de gestión de identidades y accesos Agente de Cloud Profiler (roles/cloudprofiler.agent
):
- Estás usando la cuenta de servicio predeterminada, pero has modificado sus concesiones de roles.
- Estás usando una cuenta de servicio creada por un usuario.
- Si usas Workload Identity, concede el rol Agente de Cloud Profiler a la cuenta de servicio de Kubernetes.
Para asignar un rol de gestión de identidades y accesos a una cuenta de servicio, puedes usar laGoogle Cloud consola o la CLI de Google Cloud. 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, sustituye lo siguiente:
- GCP_PROJECT_ID: tu ID de proyecto.
- MY_SVC_ACCT_ID: el nombre de tu cuenta de servicio.
Para obtener información detallada, consulta el artículo Gestionar el acceso a proyectos, carpetas y organizaciones.
Usar Cloud Profiler
En todos los entornos admitidos, se usa Profiler instalando el paquete @google-cloud/profiler
, añadiendo una instrucción require
a la aplicación y, a continuación, desplegando la aplicación de la forma habitual.
Antes de instalar @google-cloud/profiler
El paquete @google-cloud/profiler
depende de un módulo integrado. Los binarios precompilados de este módulo integrado están disponibles para Linux y Alpine Linux en Node 14 y 16. No se requieren dependencias adicionales.
@google-cloud/profiler
usa node-pre-gyp
para determinar qué archivo binario precompilado se va a instalar.
Cuando se usa @google-cloud/profiler
en otros entornos que no tienen archivos binarios precompilados, se usa el módulo node-gyp
para compilar archivos binarios.
Para obtener información sobre las dependencias necesarias para compilar archivos 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, haz lo siguiente:
npm install @google-cloud/profiler
Si también usas el agente Trace, cuando modifiques tu aplicación, importa el paquete Profiler después del paquete del agente Trace (@google-cloud/trace-agent
).
Compute Engine
En Compute Engine, haga lo siguiente:
Instala la versión más reciente de Cloud Profiler:
npm install @google-cloud/profiler
Modifica el código
require
de tu aplicación para crear un objetoserviceContext
que asigne aservice
el nombre del servicio cuyo perfil se está creando. También puedes asignar aversion
la versión del servicio que se está creando el perfil. Consulta Argumentos de nombre y versión del servicio para obtener más información sobre estas opciones de configuración:
GKE
En GKE, haz lo siguiente:
Modifica tu Dockerfile para instalar el paquete Profiler:
FROM node:10 ... RUN npm install @google-cloud/profiler
Modifica el código
require
de tu aplicación para crear un objetoserviceContext
que asigne aservice
el nombre del servicio cuyo perfil se está creando. También puedes asignar aversion
la versión del servicio que se está creando el perfil. Consulta Argumentos de nombre y 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 en el entorno estándar de App Engine, el código require
es similar al siguiente:
En App Engine, los parámetros service
y version
se derivan del entorno, por lo que no es necesario especificarlos. Por lo tanto, no es necesario que crees un objeto serviceContext
.
Análisis de datos
Una vez que Profiler haya recogido datos, podrá verlos y analizarlos mediante la interfaz de Profiler.
En la Google Cloud consola, ve a la página Perfilador:
También puedes encontrar esta página mediante la barra de búsqueda.
Argumentos de nombre y versión del servicio
Cuando carga el agente de Profiler, especifica un argumento service-name y un argumento service-version opcional para configurarlo.
El nombre del servicio permite a Profiler recoger datos de perfil de todas las réplicas de ese servicio. El servicio de creación de perfiles asegura una frecuencia de recogida de un perfil por minuto, de media, para cada nombre de servicio en cada combinación de versiones y zonas de servicio.
Por ejemplo, si tienes un servicio con dos versiones que se ejecutan en réplicas de tres zonas, el creador de perfiles creará una media de seis perfiles por minuto para ese servicio.
Si usas nombres de servicio diferentes para tus réplicas, tu servicio se perfilará con más frecuencia de la necesaria, con una sobrecarga correspondientemente mayor.
Al seleccionar un nombre de servicio, ten en cuenta lo siguiente:
Elige un nombre que represente claramente el servicio en la arquitectura de tu aplicación. La elección del nombre del servicio es menos importante si solo ejecutas un servicio o una aplicación. Es más importante si tu aplicación se ejecuta como un conjunto de microservicios, por ejemplo.
No utilices ningún valor específico del proceso, como un ID de proceso, en la cadena service-name.
La cadena service-name debe coincidir con esta expresión regular:
^[a-z0-9]([-a-z0-9_.]{0,253}[a-z0-9])?$
Una buena práctica es usar una cadena 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 perfil de varias instancias y mostrarla correctamente. Se puede usar para marcar diferentes versiones de tus servicios a medida que se implementan. La interfaz de usuario de Profiler te permite filtrar los datos por versión del servicio. De esta forma, puedes comparar el rendimiento de versiones anteriores y más recientes del código.
El valor del argumento service-version es una cadena de formato libre, pero los valores de este argumento suelen ser números de versión, como 1.0.0
o 2.1.2
.
Registro de agentes
El agente de creación de perfiles puede registrar información. Para habilitar el registro,
establece la opción logLevel
al iniciar el agente.
Los valores de logLevel
admitidos son los siguientes:
0
: inhabilita todos los registros del agente.1
: habilita el registro de errores.2
: habilita el registro de advertencias (predeterminado).3
: habilita el registro de información.4
: habilita el registro de depuración.
Define el valor de logLevel
en el mismo objeto que proporciona el contexto del servicio:
require('@google-cloud/profiler').start({
serviceContext: { ... }
logLevel: 3
});
Ejecutar con Linux Alpine
El agente de creació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, significa que faltan algunas dependencias de compilación en tu archivo Dockerfile:
ERR! stack Error: not found: make
Para solucionar este problema, añade la siguiente instrucción a la fase de compilación de tu archivo 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 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 del agente.
El error indica que las imágenes de Docker con Linux Alpine no tienen instalados los certificados SSL raíz de forma predeterminada. Estos certificados son necesarios para que el agente de creación de perfiles se comunique con la API Profiler. Para resolver este error, añade el siguiente comando apk
a tu Dockerfile:
FROM alpine
...
RUN apk add --no-cache ca-certificates
Después, debes volver a compilar y desplegar la aplicación.
Problemas conocidos
El agente de creación de perfiles de Node.js interfiere con la salida normal del programa. El programa puede tardar hasta una hora en cerrarse después de que se hayan completado todas las tareas. Cuando emites una señal SIGINT, por ejemplo, con Ctrl-C
, el proceso finaliza correctamente.
Siguientes pasos
- Seleccionar los perfiles que se van a analizar
- Interactuar con el gráfico tipo llamas
- Filtrar el gráfico tipo llamas
- Centrar el gráfico tipo llamas
- Comparar perfiles