Configuration de la surveillance d' Node.js s via des agents

Pour surveiller les applications d' Node.js s dans votre environnement à l'aide de l'agent Instana, installez le collecteur Instana Node.js. Le collecteur « Instana » ( Node.js ) est un paquet npm que vous ajoutez aux dépendances de vos applications Node.js. Il permet la collecte de métriques et le traçage automatique, ainsi que la transmission des métriques et des traces vers Instana.

Pour plus d'informations sur les autres options de surveillance d' Node.js, consultez la page Options de surveillance d' Node.js.

Configuration de la surveillance

Pour configurer la surveillance d' Node.js s à l'aide de l'agent Instana, procédez comme suit :

  1. Installez le collecteur « Node.js » : Choisissez une méthode d'installation adaptée à votre environnement :

  2. Activez le collecteur « Node.js ».

  3. Si vous utilisez des outils de compilation, configurez-les.

  4. Configurez le collecteur « Node.js ».

Une fois la surveillance configurée, vous pouvez consulter les métriques et les traces associées à vos applications Node.js dans l'interface utilisateur d' Instana. Pour plus d'informations, consultez la section « Affichage des traces et des métriques ».

Installation du collecteur « Node.js » sur différentes plateformes

En fonction de votre environnement, suivez les étapes décrites dans les sections suivantes pour installer le collecteur d' Node.js s. Le tableau suivant répertorie les options d'installation du collecteur disponibles sur différentes plateformes :

Plateformes Installation automatique Installation manuelle
Kubernetes et Red Hat OpenShift [x] [x]
Cloud Foundry [x] [x]
Apigee Microgateway [x]
Next.js [x]

Kubernetes et Red Hat OpenShift

Si votre application Node.js s'exécute dans un environnement Kubernetes et Red Hat OpenShift, vous pouvez installer le collecteur Instana Node.js automatiquement ou manuellement comme suit :

Sur les systèmes en lecture seule, les modules complémentaires natifs compilés pour une version prédéfinie d' Node.js peuvent entraîner des problèmes de compatibilité avec d'autres versions d' Node.js. Le collecteur ne peut pas décompresser les fichiers binaires précompilés, ce qui empêche le chargement de certains modules natifs. Par conséquent, certaines mesures, telles que les données relatives au ramasse-miettes et certaines statistiques sur la boucle d'événements, ne sont pas collectées. Toutefois, la fonction de traçage générale n'est pas affectée. Pour plus d'informations, consultez la section consacrée au dépannage.

Cloud Foundry

Remarque : pour surveiller les applications Cloud Foundry et Node.js, assurez-vous que l 'agent Instana est bien en cours d'exécution sur les nœuds Diego de la plateforme Cloud Foundry.

Pour installer le collecteur Instana Node.js sur Cloud Foundry, sélectionnez l'une des options suivantes :

  • Installation automatique du collecteur (recommandée) : pour Tile 1.177.0 et les versions ultérieures, installez le collecteur Node.js à l'aide du buildpack Instana afin d'automatiser la configuration des applications Node.js sur Cloud Foundry.

  • Installation manuelle du collecteur : pour installer le collecteur manuellement, consultez la section « Installation manuelle du collecteur d' Node.js s ». N'utilisez la méthode manuelle que si l'installation automatique n'est pas possible.

Installation manuelle du collecteur « Node.js »

Avant d'installer le collecteur, veillez à lire attentivement la section « Avant de commencer ».

Vous pouvez installer le collecteur « Node.js » :

Vous pouvez installer le collecteur d' Node.js s ou.

Installation du collecteur sur place

Pour installer le collecteur Instana Node.js, installez le paquet npm@instana/collector dans votre application en exécutant la commande suivante :

npm install --save @instana/collector@latest

Une fois le collecteur installé, activez-le pour configurer la surveillance. Pour plus d'informations, consultez la section « Activer le collecteur d' Node.js s ».

Installation du collecteur à l'échelle de l'entreprise

Vous pouvez également installer le collecteur « Node.js » au niveau global en suivant les étapes suivantes :

  1. Installez le package @instana/collector sur le système cible:

    • Si vous utilisez npm, exécutez la commande suivante :

      npm install -g @instana/collector@latest
      
    • Si vous utilisez yarn, exécutez la commande suivante:

      yarn global add @instana/collector@latest
      

    Si vous installez le collecteur dans une application conteneurisée, vous pouvez ajouter l'instruction précédente à Dockerfile.

  2. Déterminez l'emplacement où le paquet est installé. L'emplacement dépend du système d'exploitation. Pour plus d'informations sur l'emplacement où npm installe les paquets, consultez la documentation d' Node.js relative aux dossiers.

  3. Vérifiez que le package @instana/collector avec toutes ses dépendances est disponible sur le système cible dans un emplacement connu, tel que /path/to/instana/node_modules/@instana/collector.

Une fois le collecteur installé, activez-le pour configurer la surveillance. Pour plus d'informations, consultez la section « Activer le collecteur d' Node.js s ».

Installation du collecteur à partir d'un paquet précompilé

Pour télécharger manuellement le package compressé précompilé du collecteur Instana Node.js, cliquez sur Téléchargement du collecteur Instana Node.js

Remarque : les dépendances requises sont déjà préinstallées, et le paquet compressé fonctionne sur toutes les plateformes prises en charge.

Pour configurer la surveillance, activez le collecteur en suivant les instructions de la section « Activer le collecteur d' Node.js s ».

Activation du collecteur « Node.js »

En fonction des modules utilisés dans votre application Node.js, activez le collecteur comme suit :

  • Si votre application utilise des modules d' CommonJS, suivez les étapes décrites dans la section « CommonJS ».
  • Si votre application utilise des modules ECMAScript, suivez les étapes décrites dans la section ECMAScript.

CommonJS

Pour les applications qui utilisent les modules d' CommonJS, activez le collecteur Node.js en suivant l'une des méthodes suivantes :

  • Utilisez l'indicateur « --require load » pour l'activation.
  • Vous devez inclure et initialiser le collecteur « Node.js » comme première instruction de votre application.

Ces méthodes chargent et initialisent le collecteur d' Node.js s avant le code de votre application.

Charger le drapeau --require

Cette approche est privilégiée.

Pour activer le collecteur dans les applications qui utilisent les modules d' CommonJS, effectuez l'une des opérations suivantes au moment de lancer l'exécutable Node.js.

Veillez à ne pas oublier par inadvertance la src/immediate partie lorsque vous définissez NODE_OPTIONS ou ajoutez le --require paramètre. Le chemin doit commencer par ./ pour que Node.js l'identifie comme un chemin relatif et non comme un identifiant de module. Le chemin est évalué en fonction du répertoire de travail actuel.

  • Définissez la NODE_OPTIONS variable avant de lancer le processus d'activation d' Node.js :

    NODE_OPTIONS="--require ./node_modules/@instana/collector/src/immediate"
     

    Si vous compilez l'application avec l'option « Docker », vous devez définir cette option NODE_OPTIONS en ajoutant la ligne suivante à votre fichier Dockerfile (après la dernière FROM instruction et avant la dernière CMD instruction ou ENTRYPOINT qui lance le node processus) :

    ENV NODE_OPTIONS="--require ./node_modules/@instana/collector/src/immediate"
     
  • Vous pouvez également ajouter le paramètre " --require à la commande qui lance Node.js. Si vous démarrez normalement l'application à l'aide de la commande " node app/index.js, ajoutez un drapeau de chargement supplémentaire " --require. Voir l'exemple suivant :

    node --require ./node_modules/@instana/collector/src/immediate app/index.js
     

    Si cette application est construite et exécutée en utilisant Docker, vous devez modifier le CMD final ou le ENTRYPOINT dans votre Dockerfile.

    Pour plus d'informations sur le paramètre --require, voir -r, --require module dans la Node.js.

CommonJS Manuel obligatoire

Remarque : la ligne d'initialisation du collecteur doit être la première instruction de votre application. Sinon, le collecteur ne peut pas accéder à certaines informations. Pour plus d'informations sur la manière d'ajouter correctement cette ligne, consultez la section « Vérification de l'intégration du collecteur ».
require('@instana/collector')();

// All other require statements must be done after the collector is initialized.
// Note the () after the require statement of the collector which initializes it.


// const express = require('express');
 

Le code précédent initialise le collecteur avec les options de configuration par défaut. Vous pouvez également initialiser le collecteur Instana Node.js à l'aide d'un objet de configuration personnalisé. Pour obtenir la liste des options de configuration valides, consultez la section « Configuration du collecteur » sur Node.js. Pour plus d'informations sur la configuration de la connectivité entre votre application surveillée et l'agent d' Instana, consultez la section « Communication de l'agent ».

ECMAScript

Si votre application utilise ECMAScript et le @instana/collector collecteur installé en tant que dépendance, vous pouvez activer ce dernier en chargeant le collecteur Instana Node.js à l'aide des indicateurs de chargement Node.js.

Si l'application utilise des modules ECMAScript, effectuez l'une des étapes suivantes lorsque vous démarrez l'exécutable du nœud. La définition NODE_OPTIONS ou l'utilisation de --import l'argument initialise le collecteur d' Node.js s avant le code de l'application. Pour plus d'informations sur les modules ECMAScript, consultez la documentation officielle de l' Node.js.

  • Définissez la NODE_OPTIONS variable avant de lancer le processus d'activation d' Node.js :

    Si vous compilez l'application avec l'option « Docker », configurez-la NODE_OPTIONS en ajoutant la ligne suivante à votre Dockerfile fichier (après la dernière FROM instruction et avant le dernier CMD « or ENTRYPOINT » qui lance le node processus) :

    • Utilisez la commande suivante pour importer le collecteur « Instana » (à partir de la version 18.19 de Node.js ) :

      ENV NODE_OPTIONS="--import /path/to/instana/node_modules/@instana/collector/esm-register.mjs"
       
  • Vous pouvez également inclure le --import paramètre lors du démarrage de Node.js. Si vous démarrez votre application avec node app/index.js, ajoutez la --import commande à la fin.

    • Utilisez la commande suivante pour importer le collecteur « Instana » (à partir de la version 18.19 de Node.js ) :

      node --import /path/to/instana/node_modules/@instana/collector/esm-register.mjs app/index.js
       

    Le chargeur initialise automatiquement le collecteur Instana Node.js.

Remarque :
  • Si votre version d' Node.js est antérieure à la version v18.19.0, vous devez utiliser --experimental-loader /path/to/instana/node_modules/@instana/collector/esm-loader.mjs à la place de --import /path/to/instana/node_modules/@instana/collector/esm-register.mjs.
  • L'utilisation de --experimental-loader avec esm-loader.mjs n'est plus prise en charge dans les versions actuelles et sera supprimée lors de la prochaine mise à jour. Pour plus d'informations, consultez la section « Modifications importantes ».

Activer le collecteur sur Windows

Si l'application utilise des modules ECMAScript et que votre système d'exploitation est Windows, ajoutez file:/// au début du chemin d'accès du chargeur ECMAScript :

--import file:///absolute/path/to/instana/node_modules/@instana/collector/esm-register.mjs
 

Configuration des outils de compilation pour le collecteur d' Node.js s

Si vous utilisez un outil de bundling (tel que Webpack ou Rollup) ou un transcompilateur (tel que Babel, Traceur ou le compilateur d' TypeScripttsc), consultez la section suivante pour connaître la procédure d'installation du collecteur Node.js ainsi que toute autre considération relative à votre scénario de build.

Regroupeurs

Lorsque vous pré-traitez votre application serveur Node.js avec un bundler, tel que Webpack ou Rollup, assurez-vous que vous ne bundlez que votre code et non le code de vos dépendances à partir du dossier " node_modules.

Vous devez exclure les dépendances pour les raisons suivantes:

  • Le module @instana/collector ne peut pas être pré-traité avec Webpack. Entre autres problèmes, les instructions require dynamiques utilisées dans votre code ne sont pas résolues correctement.
  • Pour instrumenter des bibliothèques tierces, le paquet « npm@instana/collector » intercepte le require processus de « Node.js ». Cependant, si ces bibliothèques ne sont pas chargées au moment de l'exécution, mais sont plutôt intégrées à votre propre code lors de la compilation, aucun require processus n'est exécuté et l'instrumentation n'est pas appliquée. Par conséquent, le traçage d' Instana ne fonctionne pas ou ne fonctionne que partiellement, c'est-à-dire qu'il ne fonctionne que pour les modules principaux d' Node.js, tels que [... http ], car ces modules sont exclus du regroupement par défaut.

Par conséquent, vous devez configurer votre programme de mise en bundle à l'aide du module webpack-node-externals de sorte que tout ce qui se trouve dans node_modules soit exclu de toutes les transformations de code:

// your webpack.config.js:

const nodeExternals = require('webpack-node-externals');

module.exports = {
  ...
  // externals: nodeModules,
  externals: [nodeExternals()],
  ...
};
 

Si vous utilisez l'interface CLI d' Angular, notamment avec Angular Universal ou SSR, vous devez ajouter "externalDependencies": ["@instana/collector"] (et éventuellement d'autres bibliothèques qu'il @instana/collector instrument) à votre angular.json fichier afin de les exclure du regroupement.

Transpilateurs

Si vous utilisez un transpileur, tel que TypeScript ou Babel, assurez-vous que votre transpileur produit du code CommonJS ou ECMAScript dist.

Initialiser le traceur via les drapeaux de chargement pour CommonJS et ECMAScript.

Pour plus d'informations sur l'accès au SDK dans votre code, voir les modules ECMAScript.

Extensions natives

Le programme de suivi installe les modules complémentaires natifs suivants:

  • gcstats.js: extrait des informations sur la récupération de place.
  • event-loop-stats: extrait des informations sur l'activité de la boucle d'événements.
  • autoprofile: recherche les problèmes de performances ou les goulots d'étranglement. AutoProfile™ est désactivé par défaut. Pour activer AutoProfile™, voir Configuration du collecteurNode.js.

Ces modules complémentaires constituent des dépendances facultatives d' npm. S'ils ne peuvent pas être installés sur votre système, le collecteur fonctionne toujours comme prévu. Si vous rencontrez un problème avec les extensions, consultez la section Dépannage. Pour plus d'informations sur les exigences relatives aux modules complémentaires d' C++, consultez la documentation officielle d' Node.js ou celle de node-gyp.

Désactivation du collecteur « Node.js »

Vous pouvez utiliser des variables d'environnement pour désactiver le collecteur Node.js pour le développement (local). L'infrastructure Express a rempli la variable d'environnement NODE_ENV à cette fin.

Pour désactiver le collecteur Node.js , procédez comme suit:

  1. Chargez le collecteur « Node.js » comme suit :

    if (process.env.NODE_ENV !== 'development') {
      require('@instana/collector')();
    }
     
  2. Démarrez votre application en local avec la variable NODE_ENV définie sur development. Voir cet exemple :

    export NODE_ENV=development
     
    NODE_ENV=development node myApp.js