Profiler des applications Node.js
Cette page explique comment modifier votre application Node.js pour capturer des données de profilage et les envoyer à votre projet Google Cloud. Pour obtenir des informations générales sur le profilage, consultez la page Concepts du profilage.
Types de profil pour Node.js :
- Tas de mémoire
- Durée d'exécution
Versions de langages compatibles avec Node.js :
- Node.js 14 ou version ultérieure
- Pour en savoir plus sur les règles de version pour Node.js, consultez la page Calendrier de publication.
Versions d'agent de profilage compatibles :
- La version la plus récente de l'agent est compatible. En général, les versions datant de plus d'un an ne sont pas compatibles. Nous vous recommandons d'utiliser la version la plus récente de l'agent.
Systèmes d'exploitation compatibles :
- Linux. Le profilage d'applications Node.js est compatible avec les noyaux Linux dont la bibliothèque C standard est intégrée à
glibc
oumusl
. Pour obtenir des informations de configuration spécifiques aux noyaux Linux Alpine, reportez-vous à la page Exécution sous Linux Alpine.
Environnements compatibles :
- Compute Engine
- Google Kubernetes Engine (GKE)
- Environnement flexible App Engine
- Environnement standard App Engine
- Pour en savoir plus sur les exigences de configuration supplémentaires concernant l'exécution en dehors de Google, consultez la page Profiler des applications s'exécutant en dehors de Google Cloud.
Activer l'API Profiler
Avant d'utiliser l'agent de profilage, assurez-vous que l'API Profiler sous-jacente est activée. Vous pouvez vérifier l'état de l'API et l'activer, si nécessaire, à l'aide de Google Cloud CLI ou de Google Cloud Console :
CLI gcloud
Si vous n'avez pas encore installé Google Cloud CLI sur votre poste de travail, consultez la documentation de Cloud CLI.
Exécutez la commande suivante :
gcloud services enable cloudprofiler.googleapis.com
Pour en savoir plus, consultez les sections sur gcloud services
Console Google Cloud
-
Enable the required API.
Si API activée s'affiche, cela signifie que l'API est déjà activée. Sinon, cliquez sur le bouton Activer.
Attribuer un rôle IAM à un compte de service
Si vous déployez votre application sur des ressources Google Cloud, si vous utilisez le compte de service par défaut et que vous n'avez pas modifié les autorisations de rôle accordées à ce compte de service, vous pouvez ignorer cette section.
Si vous effectuez l'une des opérations suivantes, vous devez attribuer au compte de service le rôle IAM Agent Cloud Profiler (roles/cloudprofiler.agent
):
- Vous utilisez le compte de service par défaut, mais vous avez modifié ses autorisations de rôle.
- Vous utilisez un compte de service créé par l'utilisateur.
- Vous utilisez Workload Identity. Accordez le rôle Agent Cloud Profiler au compte de service Kubernetes.
Vous pouvez attribuer un rôle IAM à un compte de service à l'aide de la console Google Cloud ou de Google Cloud CLI. Par exemple, vous pouvez utiliser la commande 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
Avant d'utiliser la commande précédente, remplacez les éléments suivants:
- GCP_PROJECT_ID : ID de votre projet
- MY_SVC_ACCT_ID : nom de votre compte de service.
Pour en savoir plus, consultez la page Gérer l'accès aux projets, aux dossiers et aux organisations.
Utiliser Cloud Profiler
Dans tous les environnements compatibles, pour utiliser Profiler vous devez installer le package @google-cloud/profiler
, ajouter une instruction require
à votre application, puis déployer l'application de la manière habituelle.
Avant d'installer @google-cloud/profiler
Le package @google-cloud/profiler
dépend d'un module intégré. Les fichiers binaires prédéfinis de ce module intégré sont disponibles pour Linux et Alpine Linux pour les versions 14 et 16 de Node. Aucune dépendance supplémentaire n'est requise.
@google-cloud/profiler
utilise node-pre-gyp
pour déterminer le fichier binaire prédéfini à installer.
Lorsque vous utilisez @google-cloud/profiler
dans d'autres environnements qui ne disposent pas de binaires précompilés, le module node-gyp
est utilisé pour créer des binaires.
Pour en savoir plus sur les dépendances requises pour créer des binaires avec node-gyp
, consultez la documentation d'installation de node-gyp
.
Installation
Pour installer la dernière version de Cloud Profiler, procédez comme suit :
npm install --save @google-cloud/profiler
Si vous utilisez également l'agent Trace, lors de la modification de votre application, importez d'abord le package de l'agent Trace (@google-cloud/trace-agent
), puis celui de Profiler.
Compute Engine
Avec Compute Engine, procédez comme suit :
Installez la dernière version de Cloud Profiler :
npm install --save @google-cloud/profiler
Modifiez le code
require
de votre application pour créer un objetserviceContext
qui attribue àservice
le nom du service profilé. Vous pouvez éventuellement attribuer àversion
la version du service en cours de profilage. Pour en savoir plus sur ces options de configuration, consultez la section Arguments de nom et de version de service.
GKE
Avec GKE, procédez comme suit :
Modifiez votre Dockerfile pour installer le package Profiler :
FROM node:10 ... RUN npm install @google-cloud/profiler
Modifiez le code
require
de votre application pour créer un objetserviceContext
qui attribue àservice
le nom du service profilé. Vous pouvez éventuellement attribuer àversion
la version du service en cours de profilage. Pour en savoir plus sur ces options de configuration, consultez la section Arguments de nom et de version de service.
App Engine
Pour les environnements flexible et standard App Engine, le code require
ressemble à ce qui suit :
Dans App Engine, les paramètres service
et version
sont dérivés de l'environnement. Vous n'avez donc pas besoin de les spécifier. Vous n'avez pas non plus besoin de créer un objet serviceContext
.
Analyser des données
Une fois que Profiler a collecté des données, vous pouvez les afficher et les analyser dans son interface.
Dans la console Google Cloud, accédez à la page Profiler:
Vous pouvez également accéder à cette page à l'aide de la barre de recherche.
Arguments de nom et de version de service
Lorsque vous chargez l'agent Profiler, vous devez spécifier un argument de nom de service et un argument facultatif de version de service pour le configurer.
Le nom de service permet à Profiler de collecter des données de profilage pour toutes les instances dupliquées de ce service. Le service du profileur assure un taux de collecte de l'ordre d'un profil par minute, en moyenne, et ce pour chaque nom de service dans chaque combinaison de zones et de versions de service.
Par exemple, si deux versions d'un service s'exécutent sur des instances dupliquées dans trois zones, le profileur créera en moyenne six profils par minute pour ce service.
Si vous utilisez différents noms de service pour vos instances dupliquées, votre service sera profilé plus souvent que nécessaire, entraînant une surcharge proportionnelle.
Lorsque vous sélectionnez un nom de service, respectez ces instructions :
Choisissez un nom qui représente clairement le service dans votre architecture d'application. Le choix du nom de service est moins important si vous n'exécutez qu'un seul service ou qu'une seule application. En revanche, il est plus important lorsque votre application s'exécute sous la forme d'un ensemble de microservices, par exemple.
Assurez-vous de ne pas utiliser de valeurs spécifiques au processus, telles qu'un ID de processus, dans la chaîne du nom de service.
La chaîne du nom de service doit correspondre à l'expression régulière ci-dessous :
^[a-z0-9]([-a-z0-9_.]{0,253}[a-z0-9])?$
Nous vous recommandons d'utiliser une chaîne statique, telle que imageproc-service
, comme nom de service.
La version de service est facultative. Si vous la spécifiez, Profiler peut regrouper les informations de profilage de plusieurs instances et les afficher correctement. Vous pouvez spécifier ce paramètre pour marquer différentes versions de vos services au fur et à mesure de leur déploiement. L'interface utilisateur de Profiler vous permet de filtrer les données par version de service. De cette façon, vous pouvez comparer les performances des versions de code les plus anciennes et les plus récentes.
La valeur de l'argument service-version est une chaîne de forme libre, mais les valeurs de cet argument ressemblent généralement à des numéros de version, par exemple 1.0.0
ou 2.1.2
.
Journaliser avec l'agent
L'agent de profilage peut collecter des informations de journalisation. Pour activer la journalisation, définissez l'option logLevel
lors du démarrage de l'agent.
Les valeurs logLevel
acceptées sont les suivantes :
0
: désactive complètement la journalisation de l'agent.1
: active la journalisation des erreurs.2
: active la journalisation des avertissements (valeur par défaut).3
: active la journalisation des informations.4
: active la journalisation du débogage.
Définissez la valeur logLevel
dans le même objet qui fournit le contexte de service :
require('@google-cloud/profiler').start({
serviceContext: { ... }
logLevel: 3
});
Exécuter avec Linux Alpine
L'agent de profilage Node.js pour Linux Alpine n'est compatible qu'avec les configurations Google Kubernetes Engine.
Erreur de compilation
Si vous exécutez npm install
et que la compilation échoue avec l'erreur suivante, certaines dépendances de compilation manquent dans votre Dockerfile:
ERR! stack Error: not found: make
Pour résoudre ce problème, ajoutez l'instruction suivante à l'étape de compilation de votre fichier Dockerfile:
RUN apk add python3 g++ make
Erreur d'authentification
Si vous utilisez des images Docker exécutées avec Linux Alpine (par exemple, golang:alpine
ou simplement alpine
), l'erreur d'authentification suivante peut s'afficher:
connection error: desc = "transport: authentication handshake failed: x509: failed to load system roots and no roots provided"
Sachez que pour que cette erreur apparaisse, vous devez avoir activé la journalisation avec l'agent.
L'erreur indique que lorsque les images Docker sont exécutées avec Linux Alpine, les certificats SSL racine ne sont pas installés par défaut. Ces certificats sont nécessaires pour que l'agent de profilage puisse communiquer avec l'API du profileur. Pour résoudre cette erreur, ajoutez la commande apk
suivante à votre fichier Dockerfile :
FROM alpine
...
RUN apk add --no-cache ca-certificates
Vous devez ensuite recompiler et redéployer votre application.
Problèmes connus
L'agent de profilage de Node.js interfère avec la sortie normale du programme. L'exécution de toutes les tâches du programme peut prendre jusqu'à une heure. Lorsque vous émettez une commande SIGINT, par exemple en utilisant Ctrl-C
, le processus se termine correctement.
Étape suivante
- Sélectionner les profils à analyser
- Interagir avec le graphique de type "flamme"
- Filtrer le graphique de type "flamme"
- Effectuer un focus à partir d'un graphique de type "flamme"
- Comparer des profils