API de l'agent JavaScript

L'agent « JavaScript » API et Web REST API ne sont pas les mêmes. L'outil « Web REST API » permet d'effectuer des requêtes sur les données collectées et de configurer un nouveau site web.

L'agent « JavaScript » met à disposition une interface de programmation d'applications ( API ) accessible sur les sites web surveillés. Votre site web peut interagir avec l' API de l'agent JavaScript afin d'enrichir ou de configurer les données collectées, d'envoyer des événements personnalisés, et bien plus encore.

JavaScript versions de l'agent

Vous pouvez consulter toutes les mises à jour de version, les nouvelles fonctionnalités et les corrections de bogues concernant l'agent JavaScript « Instana » (Weasel) dans le fichier «Changelog» disponible sur GitHub.

L'objet global

L'agent JavaScript Instana définit une nouvelle fonction globale appelée ineum. Cette fonction est disponible immédiatement après le fragment JavaScript dans le document HTML. Cela signifie que la fonction existe même si l'agent lui-même n'est pas téléchargé. Ainsi, les appels API ineum sont simples et efficaces.

Si l'agent n'est pas encore téléchargé, ineum il met en file d'attente tous les appels à la fonction ` API ` qui ont été exécutés. Une fois l'agent téléchargé, ces appels ` API ` sont exécutés de manière synchrone, dans l'ordre où ils ont été effectués. À partir de ce moment-là, ineum est remplacé par une fonction qui exécute immédiatement des appels à API.

Structure de l'API

Tous les appels ineum suivent la même structure :

ineum(commandName, ...args);
 

Paramètres

Le tableau suivant répertorie les paramètres :

Paramètre Description
commandName (string) Identifie la commande à exécuter. Par exemple, définir des métadonnées ou signaler une erreur.
...args Arguments réels de la commande particulière. Le nombre d'arguments et leur type sont spécifiques à chaque commande.
Remarque : cette fonction ineum ne renvoie jamais de résultat (à l'exception de la commande getPageLoadId).

Définitions de type TypeScript

Les utilisateurs de TypeScript peuvent installer et utiliser les définitions de type fournies par le projet DefinitelyTyped.

npm install --save @types/ineum
 

API

Les sections ci-après décrivent les noms de commande disponibles, avec leurs arguments.

Clé de surveillance

Les touches de surveillance peuvent être définies à l'aide de la commande key La clé de surveillance s'affiche lorsque vous configurez des sites Web dans l'interface utilisateur d' Instana.

ineum('key', trackingKey);
 

Paramètre

Le tableau suivant répertorie les paramètres :

Paramètre Description
trackingKey (string) Clé de surveillance pour la configuration de site Web dans Instana.

Exemple

Une configuration correcte est affichée dans l'interface utilisateur d'Instana.

Commutation des clés de surveillance

Modélisez chacun de vos environnements (production, préproduction et test) comme des sites web distincts dans Instana afin de configurer différentes clés de surveillance pour l'agent JavaScript en fonction du déploiement. Si les clés de surveillance sont déjà disponibles, stockez les clés de surveillance dans votre système de gestion de la configuration et utilisez la valeur stockée pour remplacer la clé de surveillance.

Si le site web se compose uniquement de fichiers statiques ou si aucun système de gestion de la configuration n'est disponible, vous pouvez choisir d'utiliser un outil tel que Google Tag Manager, qui vous aide à gérer les extraits de code de votre site web. Vous pouvez également choisir de définir les clés de surveillance de manière statique et d'effectuer une vérification directement dans le navigateur Web.

if (window.location.hostname === 'example.com') {
  ineum('key', 'production monitoring key');
} else if (window.location.hostname === 'qa.example.com') {
  ineum('key', 'QA monitoring key');
} else {
  ineum('key', 'test monitoring key');
}
 

URL de production de rapports

Les balises sont transmises à l' URL de rapport via HTTP GET et POST afin de transmettre les données de surveillance à Instana.

ineum('reportingUrl', reportingUrl);
 

Paramètre

Le tableau suivant répertorie les paramètres :

Paramètre Description
reportingUrl (string) L'adresse URL à laquelle les données de surveillance du site web sont transmises.

Exemple

Une configuration correcte est présentée dans l'interface utilisateur d' Instana pour les utilisateurs du produit SaaS. Les utilisateurs sur site doivent identifier l'adresse URL appropriée en fonction de leur terminal EUM configuré.

Plusieurs serveurs

Dans certains cas, il peut être souhaitable de générer un rapport d'agent JavaScript vers plusieurs systèmes de back-end. Dans ce cas, utilisez la commande reportingBackends pour que l'agent JavaScript génère un rapport sur plusieurs systèmes de back end.

ineum('reportingBackends', reportingBackends);
 

Paramètre

Le tableau suivant répertorie les paramètres :

Paramètre Description
reportingBackends (ReportingBackend[]) Un tableau d'objets ReportingBackend . Chacun des objets définit un système dorsal auquel les données de surveillance du site Web sont envoyées.

L'objet ReportingBackend se présente comme suit :

{
  reportingUrl: 'http://example.com',  // The URL to which to send website monitoring data to.
  key: 'monitoring key'                // The monitoring key for the website configuration in Instana.
}
 

Cette commande reportingBackends est disponible à partir de la version 230 d' Instana.

Exemple

ineum('reportingBackends', [
      { reportingUrl: 'http://backend1.example.com', key: 'monitoring key 1' },
      { reportingUrl: 'http://backend2.example.com', key: 'moniroting key 2' }
    ]);
 
Remarque : la reportingBackends commande a priorité sur la reportingUrl commande. Une fois que l'appel reportingBackends de commande a été effectué, tout autre reportingUrl appel de commande est ignoré.

Page

Instana peut segmenter les métriques de site Web par page logique. Pour ce faire, il a besoin d'une indication sur la page que l'utilisateur est en train de consulter. Ce nom de page peut être défini par la commande page Fixer le page le plus tôt possible. Vous pouvez changer le page pour présenter les modifications apportées au document (par exemple, pour les applications d'une seule page). Cela permet à Instana de suivre les transitions entre les pages, en plus du chargement de celles-ci.

ineum('page', pageName);
 

Les événements de transition de page sont enregistrés chaque fois que le nom de la page est modifié via l' API, à l'exception de la première invocation de cette API pendant la phase de chargement de la page.

Pour définir des pages, utilisez des noms logiques comme product detail page ou payment selection au lieu de window.title ou window.href. L'utilisation de product detail page ou payment selection permet de réduire le nombre de pages ayant une relation directe avec le code existant. En revanche, l'utilisation de window.title ou window.href donne lieu à de nombreuses pages suivies qui apportent une valeur ajoutée dans la plupart des cas, car window.title contient des noms de produits.

Instana propose des exemples de projets illustrant comment générer des noms de pages pertinents pour divers frameworks et bibliothèques. Déposer une demande d'extraction ou d'assistance pour le cadre ou la bibliothèque manquante.

Paramètre

Le tableau suivant répertorie les paramètres :

Paramètre Description
pageName (string) Nom de la page.

Exemple

ineum('page', 'shopping-cart');

// Do you want to change meta data and the page name at the same time?
// Make sure to change the page name last as this immediately
// triggers a page transition beacon.
ineum('meta', 'product', 'skateboard');
ineum('page', 'article-details');
 

Détection automatique des pages

La surveillance de sites Web de Instana détecte automatiquement les modifications apportées aux pages des applications Web monopages. Cette fonctionnalité est prise en charge depuis le site web JavaScript et l'agent 1.7.1.

Pour l'agent JavaScript 1.8.0 et les versions ultérieures, les valeurs de durée des transitions de page sont collectées automatiquement si votre site web est une application monopage (SPA) et que la détection automatique des pages est activée. Cela indique le temps nécessaire à la transition entre deux pages.

La détection automatique des pages est utilisée pour suivre et enregistrer les événements de transition de page, et cette fonction est désactivée par défaut. Pour activer la fonction de détection automatique des pages, utilisez l'une des méthodes suivantes :

Paramètre

Le tableau suivant répertorie les paramètres :

Paramètre Description
enabled (boolean) Pour activer la détection de page automatique
Exemple
ineum('autoPageDetection', true);
// page changes will be detected once set to true
 
Définir les noms de pages logiques et les correspondances d'expressions régulières

Vous pouvez utiliser le mappingRule paramètre pour définir des noms de pages logiques qui fournissent un tableau d'expressions régulières permettant de détecter les modifications apportées à URL et de les remplacer par le nom indiqué.

ineum('autoPageDetection', {mappingRule: [[/.*urlRegex.*/i, 'Page Name']]});
 

Pour définir le titre du document comme nom de page, vous devez activer le titleAsPageName paramètre. true

ineum('autoPageDetection', {titleAsPageName: true});
 

Si vous configurez l'instrumentation automatique du site Web pour activer la détection automatique des pages, le chemin d'accès URL est défini par défaut comme nom de page.

Lorsque la détection automatique des pages est activée et qu'un événement popstate se produit, l'agent JavaScript vérifie les transitions de page en fonction des événements popstate. Souvent, un événement « popstate » se produit lorsque vous utilisez les boutons « Suivant » et « Précédent » d'un navigateur pour naviguer. Certaines applications, notamment celles qui gèrent du contenu statique, peuvent nécessiter que l'agent ignore les événements popstate, car ceux-ci peuvent générer de fausses transitions de page. L'agent « JavaScript » ignore les événements popstate liés aux changements de page lorsque le ignorePopstateEvent paramètre est défini sur true.

ineum('autoPageDetection',  {ignorePopstateEvent: true});
 
Paramètre

Le tableau suivant répertorie les paramètres :

Paramètre Description
mappingRule (RegExp[], string) Un tableau d'objets ` RegExp ` correspondant à l' URL ation du changement de page est remplacé par la chaîne fournie. Si le résultat du mappage est vide, cette transition est ignorée. Ne définissez pas de règles de mappage si titleAsPageName est défini sur true.
titleAsPageName (boolean) Si cette option est définie sur « true », le titre du document est utilisé comme nom de page dans les balises de transition de page. Si cette option est définie sur « false », le nom de la page utilisé dans les balises de transition de page est soit l' URL, soit les règles de mappage.
ignorePopstateEvent (boolean) Si cette option est définie sur « true », l'agent « JavaScript » ignore les événements « popstate » générés par le navigateur lorsqu'il détecte des transitions de page.
Exemple

Par exemple, si votre URL URL contient https://example.com/accounts/checkUserDetails, vous pouvez alors voir la page basculer vers la page User Details dans l'interface utilisateur d' Instana.

ineum('autoPageDetection',  {mappingRule: [[/.*checkuserdetails.*/i, 'User Details']]});
// Matches the regex and sets page name as User Details
// .*checkuserdetails.* matches the characters in the URL while 'i' modifier represents a case insensitve match.
 

De plus, vous pouvez définir des noms de page plus complexes, comme le montre l'exemple suivant :

ineum('autoPageDetection',  {mappingRule: [[/.*product[0-9]+contains-[A-Za-z]+-productID-account-([A-Za-z].*)\1+/, 'Product Page : id $1'],[/.*aboutPage.*-([A-Za-z].*)/, 'About Page id: $1']]});
 

Identification des utilisateurs

Des informations spécifiques à l'utilisateur peuvent, le cas échéant, être envoyées avec les données transmises à Instana. Ces informations peuvent ensuite être utilisées pour débloquer d'autres capacités telles que :

  • Calculer le nombre d'utilisateurs affectés par les erreurs
  • Pour filtrer les données pour des utilisateurs spécifiques
  • Pour savoir quel utilisateur a déclenché le chargement d'une page ou un appel Ajax.

Par défaut, Instana n'associe aucune information permettant d'identifier l'utilisateur aux balises. Soyez conscient des lois respectives sur la protection des données lorsque vous choisissez de le faire. Dans « Instana », l'identifiant utilisateur est un paramètre transparent string qui sert uniquement à calculer certains indicateurs. L'identification des utilisateurs se fait donc par le biais d'un identifiant. userName et userEmail peut également être utilisé pour accéder à davantage de filtres et bénéficier d'une présentation efficace des informations utilisateur.

Remarque : les données déjà transmises au serveur de Instana ne peuvent pas être modifiées a posteriori. Il est donc important d'appeler cette méthode ` API ` dès que possible lors du chargement de la page.

Le fait d'appeler cette méthode ` API ` de manière synchrone lors du chargement de la page, par exemple en intégrant les informations dans le document HTML côté serveur, permet de s'assurer que toutes les balises contiennent les informations utilisateur, que les statistiques relatives aux utilisateurs uniques ou concernés sont correctes, et que les balises sont correctement filtrées et regroupées lors de l'analyse.

ineum('user', userId, userName, userEmail);
 

Paramètre

Le tableau suivant répertorie les paramètres :

Paramètre Description
userId (string, facultatif) Identificateur de l'utilisateur.
userName (string, facultatif) Nom de l'utilisateur.
userEmail (string, facultatif) Adresse électronique de l'utilisateur.

Vous pouvez transmettre null ou undefined pour les valeurs que vous ne voulez pas définir.

Exemple

// Report everything to Instana
ineum('user', 'hjmna897k1', 'Tom Mason', 'tom@example.com');

// or only some data points
ineum('user', 'hjmna897k1');
ineum('user', null, null, 'tom@example.com');
 

Suivi de session

Le suivi de session peut être utilisé pour obtenir des informations sur l'activité des utilisateurs finaux lors du chargement des pages. Le suivi des sessions permet notamment à Instana d'évaluer l'impact sur les utilisateurs finaux en l'absence d 'informations définies sur les utilisateurs.

Pour suivre les sessions, l'agent JavaScript utilise l' API localStorage du navigateur après avoir effectué la connexion. trackSessions appel. Techniquement, une session est un identifiant aléatoire qui est stocké avec deux horodatages dans les navigateurs localStorage sous la clé in-session

L'appelant de cette API est en charge du respect des réglementations en matière de confidentialité.

Initialiser/Réutiliser une session

Cette API démarre une nouvelle session ou réutilise une session existante, si possible.

ineum('trackSessions', sessionInactivityTimeout, sessionTerminationTimeout);
 
Paramètre

Le tableau suivant répertorie les paramètres :

Paramètre Description
sessionInactivityTimeout (number, facultatif) Décrit la durée pendant laquelle une session reste active depuis le dernier appel trackSessions, en millisecondes. La valeur par défaut est de trois heures.
sessionTerminationTimeout (number, facultatif) Décrit la durée pendant laquelle une session reste active depuis le premier appel de trackSessions, en millisecondes. La valeur par défaut est de six heures.

Vous pouvez transmettre null ou undefined pour les valeurs que vous ne voulez pas définir.

Exemple
// Starts tracking sessions with the default timeouts
ineum('trackSessions');

// or specify custom timeouts
ineum('trackSessions', 900000 /* 15min */, 3600000 /* 1h */);
 

Mettre fin à la session

La commande ci-après met fin à la session en cours d'exécution (le cas échéant) et retire les données stockées de localStorage.

ineum('terminateSession');
 
Exemple
// Starts tracking sessions with the default timeouts
ineum('trackSessions');

// after some time…
ineum('terminateSession');
 

Métadonnées

Les métadonnées peuvent être utilisées pour annoter les chargements de page et les appels AJAX. Utilisez les métadonnées pour suivre les valeurs de configuration de l'interface utilisateur, les paramètres, les indicateurs de fonctionnalité ou tout autre élément contextuel susceptible d'être utile à l'analyse.

ineum('meta', key, value);
 

Paramètre

Le tableau suivant répertorie les paramètres :

Paramètre Description
key (string) key de la paire clé-valeur que vous souhaitez ajouter en tant que métadonnées.
value (string) value de la paire clé-valeur que vous souhaitez ajouter en tant que métadonnées.

Exemple

ineum('meta', 'version', '1.42.3');
ineum('meta', 'role', 'admin');
 

ID de trace de back end de chargement de page

Lors du chargement de la page, il est possible de définir un identifiant de trace côté serveur afin de permettre la corrélation entre le front-end et le back-end. Pour plus d'informations, consultez la section « Corrélation backend ». Il est nécessaire de définir l'identifiant de trace du backend pour établir une corrélation entre le traitement backend et le traitement front-end lors du chargement des pages. Elle n'est pas nécessaire pour la corrélation entre les demandes XMLHttpRequest ou fetch. L'identifiant de la trace doit être une chaîne hexagonale de 16 ou 32 caractères.

ineum('traceId', traceId);
 

Paramètre

Paramètre Description
traceId (string) ID de trace de la trace de back end associée.

Exclusion d'URL du suivi

Vous pouvez définir plusieurs expressions régulières à l'aide de cet outil : API. Si au moins une correspondance est trouvée, cela n'entraîne pas de transmission de données vers Instana. Les expressions régulières sont évaluées dans les scénarios suivants :

  • Vérification par rapport aux URL des documents (les URL visibles dans la barre d'adresse, c'est-à-dire window.location.href). Toute transmission de données vers Instana est désactivée lorsqu'une des expressions régulières correspond.
  • Évaluation par rapport aux URL des ressources, par exemple les URL des fichiers JavaScript et CSS. Aucune information concernant les ressources correspondant à l'une des expressions régulières n'est transmise à Instana.
  • Évaluation par rapport aux URL cibles des appels HTTP, par exemple via XMLHttpRequest et fetch. Aucune information concernant les appels « HTTP » correspondant à l'une des expressions régulières n'est transmise à Instana.
ineum('ignoreUrls', ignoreUrls);
 

Instana prend également en charge la suppression des informations confidentielles des URL des documents, c'est-à-dire l'adresse URL visible dans la barre d'adresse du navigateur (voir la page API ). Cependant, il faut savoir que les secrets stockés dans les URL des documents sont pratiquement divulgués à tous les tiers. Nous proposons une application de démonstration spécifique, accompagnée d'une description, qui explique pourquoi les secrets stockés dans les URL de documents risquent d'être divulgués à tous les tiers. Pour plus de détails, reportez-vous à l'exemple d'application et à la description. Vous pouvez toutefois choisir de désactiver la collecte de toutes les données de suivi pour ces URL via cette page : API.

Paramètre

Le tableau suivant répertorie les paramètres :

Paramètre Description
ignoreUrls (RegExp[]) Un tableau d'objets RegExp correspondant aux URL que vous souhaitez ignorer.

Exemple

ineum('ignoreUrls', [
  /\/comet.+/i,
  /\/ws.+/i,
  /.*(&|\?)secret=.*/i
]);
 

Masquer les informations confidentielles dans les URL

Les paramètres de requête dans les URL collectés peuvent contenir des données sensibles. Par conséquent, l'agent JavaScript prend en charge la spécification de modèles pour les clés de paramètres de requête dont les valeurs sont expurgées. La rédaction se fait au sein de l'agent JavaScript, c'est-à-dire au sein du navigateur web. Par conséquent, les données confidentielles ne sont pas transmises aux serveurs d' Instana. pour y être traitées et ne peuvent donc pas être analysées dans l'interface utilisateur ni récupérées via API.

ineum('secrets', secrets);
 

Si un paramètre de requête correspond à une entrée de la liste, la valeur est masquée et n'est pas transmise au backend d' Instana. Si aucune règle ineum('secrets') n'est définie, Instana utilise par défaut [/key/i, /secret/i, /password/i] comme règle de correspondance.

Paramètre

Le tableau suivant répertorie les paramètres :

Paramètre Description
secrets (RegExp[]) Un tableau d'objets RegExp qui correspondent aux noms des clés des paramètres de la requête et dont les valeurs sont traitées comme des secrets.

Exemple

ineum('secrets', [/account/i, /user/i]);
 

Par exemple, https://example.com/accounts/status?account=acount_name&user=user_name est collecté et affiché sous la forme https://example.com/accounts/status?account=<redacted>&user=<redacted>.

Remarque : l'agent « JavaScript » ne prend pas en charge le traitement des paramètres de chemin (/account/<account id>/status) ou des paramètres de matrice (/account;accountId=<account id>/status) en tant que secrets.
Remarque : les informations confidentielles stockées dans les URL des documents risquent fort d'être divulguées à des tiers. Pour plus d'informations, consultez une application d'exemple dédiée, accompagnée d'une description, qui explique pourquoi les secrets stockés dans les URL de documents risquent d'être divulgués à tous les tiers.

Suppression de fragments dans les URL

Le fragment des URL collectées peut contenir des informations sensibles. Par conséquent, l'agent « JavaScript » prend en charge la définition de modèles pour les valeurs de fragment pouvant être masquées en fonction du chemin d'accès « URL ». Cette modification s'effectue au sein de l'agent JavaScript dans le navigateur Web. De ce fait, les informations sensibles ne parviennent pas aux serveurs d' Instana s pour y être traitées. Les informations sensibles restent inaccessibles pour toute analyse via l'interface utilisateur ou pour toute consultation via l' API.

ineum('fragment', fragment);
 

Si une partie de votre chemin d'accès URL correspond à une entrée de la liste, la valeur du fragment est masquée et n'est pas transmise au backend Instana. Par défaut, Instana ne masque pas les fragments de l'adresse URL.

Paramètre

Le tableau suivant répertorie les paramètres :

Paramètre Description
fragment (RegExp[]) Un tableau contenant un RegExp objet correspondant au chemin d'accès URL dont une partie a été masquée.

Exemple

ineum('fragment', [/example.com/i]);
 

Par exemple, https://example.com/accounts/status?account=acount_name#fragmentinformation est collecté et affiché sous la forme https://example.com/accounts/status?account=acount_name#<redacted>.

Exclusion des données temporelles utilisateur du suivi

Instana collecter automatiquement les marqueurs et les mesures générés via l' API User-Timing et les convertir en événements personnalisés. Cela signifie que l'API User-Timing peut être utilisée comme un moyen neutre du fournisseur pour rapporter des données temporelles pures à Instana.

En utilisant l' API User-Timing, vous pouvez définir plusieurs expressions régulières qui, dès lors qu'au moins l'une d'entre elles correspond, empêchent la collecte de certaines données de chronométrage utilisateur. Par défaut, les conditions suivantes sont ignorées :

  • Les « user-timings » de React : les repères et mesures qui commencent par l'émoji ⚛️ ou ⛔
  • Les « user-timings » de Angular : les repères et les mesures qui commencent par Zone
  • Marques et mesures dont les noms commencent par start ou end
ineum('ignoreUserTimings', ignoreUserTimings);
 

Paramètre

Le tableau suivant répertorie les paramètres :

Paramètre Description
ignoreUserTimings (RegExp[]) Tableau d'objets RegExp mettant en correspondance les marques et les mesures temporelles utilisateur à ignorer.

Exemple

ineum('ignoreUserTimings', [
  /^\u269B/,
  /^\u26D4/,
  /^Zone(:|$)/,
  /mySecretTiming/i
]);
 

Exclure les paramètres de requête et les fragments « URL » du suivi

Par défaut, l'agent « JavaScript » collecte l' URL complète, qui comprend tous ses paramètres. Vous pouvez configurer l'agent de manière à ce qu'il ne collecte les paramètres que pour les URL correspondant à une liste spécifiée d'expressions régulières. Les paramètres des URL exclues ne sont pas suivis.

À partir de la liste d'expressions régulières fournie, l'agent « JavaScript » suit les URL comme suit :

  • Si l' URL e correspond à une entrée de la liste, l' URL e complète, y compris tous les paramètres, est récupérée.
  • Si l'adresse URL ne correspond à aucune entrée de la liste, les paramètres de requête et les fragments de l'adresse URL ne sont pas transmis au backend Instana.
  • Si la liste fournie est vide, le comportement par défaut est appliqué et l' URL e complète, avec ses paramètres, est enregistrée.
ineum('queryTrackedDomainList',queryTrackedDomainList);
 

Les scénarios suivants décrivent la situation dans laquelle l' URL contient un secret ou un fragment masqué à l'aide de ineum('secrets', secrets) ou ineum('fragment', fragment):

  • Si l' URL e correspond à une entrée dans queryTrackedDomainList, l' URL e complet, avec le secret ou le fragment masqué, est envoyé au backend Instana.
  • Si l' URL e ne correspond à aucune entrée dans queryTrackedDomainList, tous les paramètres sont exclus avant l'envoi de l' URL e au backend Instana.

Paramètre

Paramètre Description
queryTrackedDomainList (RegExp[]) Un tableau RegExp d'objets correspondant aux noms des URL que vous souhaitez suivre, y compris tous leurs paramètres.

Exemple

Dans l'exemple suivant, les URL qui correspondent à l'expression régulière /\/comet.+/i, /\/ws.+/i ou /example.com/i sont récupérées dans leur intégralité, avec leurs paramètres :

ineum('queryTrackedDomainList', [
  /\/comet.+/i,
  /\/ws.+/i,
  /example.com/i
]);
 

Prise en charge des en-têtes de trace d' W3C pour la corrélation des backends

Lorsqu'un navigateur envoie une requête à un serveur distant et que l'agent Instana surveille ce serveur, la réponse de ce dernier peut contenir l'en-tête HTTP Server-Timing afin de fournir les informations nécessaires. backendTraceId à l'agent Instana qui s'exécute dans le navigateur. Si l'authentification par nom d'utilisateur et mot de passe ( OpenTelemetry ) est activée sur le serveur distant, l'en-tête tracestateHTTP peut contenir le backendTraceId.

tracestate et traceparent sont des en-têtes « W3C-defined » utilisés pour mettre en correspondance les identifiants de trace distribués. Pour plus d'informations sur les en-têtes de trace d' W3C, consultez la section « Niveau de contexte de trace ».

Si vous pensez que le serveur distant prend en charge la directive « OpenTelemetry » et fournit la valeur backendTraceId dans tracestate l'en-tête, l'agent « Instana » du navigateur doit alors définir la variable enableW3CHeaders « API » sur « true » pour utiliser la backendTraceId valeur dans les en-têtes « W3C ».

Vous pouvez définir le paramètre backendTraceId à trois endroits différents : via Server-Timing l'en-tête, via tracestate l'en-tête, et manuellement en utilisant l' traceIdAPI dans le navigateur. L'ordre de ces étapes est le suivant :

  • Si cette option enableW3CHeaders est activée, vous avez deux possibilités. Commencez par extraire la tracestate valeur des métadonnées de la traceparent page actuelle, puis utilisez-la. Si vous ne parvenez pas à récupérer tracestate, une chaîne de 16 caractères compatible avec le contexte de trace d' W3C est générée et utilisée.
  • Si enableW3CHeaders est désactivé, vérifiez d'abord si la fonction traceId API est appelée. Si la traceId méthode ` API ` est appelée, utilisez l'ID comme backendTraceId. Si la traceId méthode ` API ` n'est pas appelée, analysez l'en-tête `Server-Timing` de la requête ` HTTP ` pour obtenir la valeur backendTraceId.
  • Si aucune des valeurs ci-dessus n'est disponible, vous ne pouvez pas associer les balises aux traces du backend.
ineum('enableW3CHeaders',true);
 

Paramètre

Le tableau suivant répertorie les paramètres :

Paramètre Description
enabled (boolean) Indicateur permettant de désactiver ou d'activer cette fonctionnalité.

Exemple

L'exemple suivant montre que les en-têtes « W3C » sont activés :

ineum('enableW3CHeaders', true);
 

Configuration du délai d'attente maximal après le chargement d'une page

Pour collecter des indicateurs supplémentaires, l'agent « JavaScript » attend que les conditions suivantes soient réunies. Par exemple, le délai de la première entrée et le décalage cumulatif de la disposition.

  • Tous les indicateurs sont disponibles
  • La page est déchargée (par exemple, l'onglet est fermé)
  • Jusqu'à l'écoulement d'un temps d'attente maximum

Vous pouvez utiliser cette API pour reconfigurer le temps d'attente maximal. Par défaut, Instana attend jusqu'à une seconde après la fin du chargement de la page, c'est-à-dire après la fin de l'événement « onLoad ».

ineum('maxMaitForPageLoadMetricsMillis', durationMillis);
 

Paramètre

Le tableau suivant répertorie les paramètres :

Paramètre Description
durationMillis (nombre) Temps maximum en millisecondes à attendre après la fin du chargement de la page avant que la balise de chargement de la page ne soit transmise.

Extraction de l'ID de chargement de page

Il peut parfois être utile de récupérer manuellement l'identifiant de chargement de la page, par exemple lorsqu'on souhaite effectuer une corrélation personnalisée. Cette fonction renvoie undefined si l'agent JavaScript n'est pas chargé. Une fois l'agent JavaScript chargé, il renvoie toujours le même string

ineum('getPageLoadId');
 

Exemple

var pageLoadId = ineum('getPageLoadId');
console.log(pageLoadId);
 

Suivi des erreurs

Génération manuelle de rapports d'erreur

Il est possible de rapporter les erreurs interceptées. Ainsi, vous pouvez intégrer Instana à des infrastructures et à des bibliothèques qui interceptent les erreurs qui ne l'ont pas encore été.

ineum('reportError', error, opts);
 
Paramètre

Le tableau suivant répertorie les paramètres :

Paramètre Description
error (Error ou string) Objet JavaScript Error ou message d'erreur.
opts (ErrorReportingOpts, facultatif) Un objet qui se présente comme suit.
{
  componentStack: '...' // an optional string

  meta: {               // An optional JavaScript object with `string` values which can be used
    widgetType: 'chart' // to send metadata to Instana just for this singular event. In contrast to
  }                     // the usage of the metadata API, this metadata is not included in subsequent
                        // beacons.
}
 
Exemple
ineum('reportError', new Error('Something failed'), {
  componentStack: '…',
  meta: {
    widgetType: 'chart'
  }
});
 
Intégration de React

Vous pouvez obtenir des informations plus précises sur les erreurs en intégrant l'agent JavaScript aux limites d'erreur d' React. Plus précisément, il permet de disposer de traces de piles de composants en plus des traces de piles d'erreurs (fonctions).

Le fragment de code ci-après montre comment le composant componentDidCatch de React peut être étendu pour effectuer cette intégration. Pour plus d'informations sur componentDidCatch le cycle de vie, consultez la documentation d' React.

componentDidCatch(error, info) {
  ineum('reportError', error, {
    componentStack: info.componentStack
  });

  // your regular error boundary code
}
 
Intégration d'Angular 2+

Angular intercepte toutes les erreurs par défaut et les consigne dans la console. Cela signifie que l'agent d' JavaScript s n'a pas accès à ces erreurs. Le fragment TypeScript ci-après montre comment intégrer les erreurs interceptées par Angular à Instana.

Pour plus d'informations sur les gestionnaires d'erreurs d' Angular, consultez la documentation d' Angular.

import { ErrorHandler, NgModule } from '@angular/core';

class CustomErrorHandler implements ErrorHandler {
  handleError(error) {
    ineum('reportError', error);

    // Continue to log caught errors to the console
    console.error(error);
  }
}

@NgModule({
  providers: [{ provide: ErrorHandler, useClass: CustomErrorHandler }],
})
class MyModule {
  // the rest of your application code…
}
 
Intégration de Vue

Vue peut affecter un gestionnaire global pour les erreurs non interceptées qui sont propagées à partir de l'application. L'extrait de code suivant montre comment intégrer la gestion des erreurs de Vue à l' Instana

Pour plus d'informations sur les gestionnaires d'erreurs de Vue, consultez la documentation de Vue.

app.config.errorHandler = (err, instance, info) => {
  ineum('reportError', err);
  // your regular error handling code
}
 

Exclusion d'erreurs du suivi

Il est possible d'arrêter explicitement l'envoi de certaines erreurs à Instana. Cette fonction peut être utilisée pour ignorer des erreurs connues ou non corrigibles.

ineum('ignoreErrorMessages', ignoreErrorMessages);
 
Paramètre

Le tableau suivant répertorie les paramètres :

Paramètre Description
ignoreErrorMessages (RegExp[]) Tableau d'objets RegExp mettant en correspondance les erreurs à exclure du suivi des erreurs.

Analyse des erreurs de script

Les sites web qui intègrent de nombreux scripts tiers se heurtent généralement à un nombre constant de Script Error Instana fournit des conseils sur la manière de rendre ces erreurs accessibles, c'est-à-dire sur la manière d'accéder au message d'erreur réel et à la pile d'appels. Il peut arriver que vous ne puissiez pas suivre ces instructions, par exemple parce que le site tiers n'ajoute pas Access-Control-Allow-Origin l'en-tête nécessaire. Dans ces cas-là, Instana propose d'autres moyens d'approfondir la compréhension de Script Errorss.

Ce mécanisme n'est pas une solution miracle. Il vous offre une meilleure visibilité et vous rencontrez des erreurs de suivi plus utiles, mais vous verrez toujours (un nombre réduit de) Script Errors. Pour plus d'informations, consultez les recommandations relatives aux requêtes inter-origines.

Suivi explicite des erreurs de programme d'écoute d'événement DOM

Cela place l'agent « Instana » dans la pile d'appels de chaque écouteur d'événement DOM. L'agent « Instana » try/catch encadre automatiquement les fonctions des écouteurs d'événements. Ainsi, vous obtenez une meilleure analyse des erreurs d'origine croisée.

Cette fonction est désactivée par défaut car la valeur est discutable pour la plupart de nos clients. En outre, il n'est pas garanti que de meilleures informations sur les erreurs de script puissent être collectées de cette manière, étant donné que les navigateurs web ont commencé à combler cette faille dans le modèle de sécurité web.

ineum('wrapEventHandlers', enabled);
 
Paramètre

Le tableau suivant répertorie les paramètres :

Paramètre Description
enabled (boolean) Indicateur permettant de désactiver ou d'activer cette fonctionnalité.
Suivi explicite des erreurs de temporisateur

Cela ajoute l'agent « Instana » à la pile d'appels de tous les minuteurs. L'agent « Instana » insère automatiquement try/catch des instructions autour des fonctions des gestionnaires de temporisation. Ainsi, vous obtenez une meilleure analyse des erreurs d'origine croisée.

Cette fonction est désactivée par défaut car la valeur est discutable pour la plupart de nos clients. En outre, il n'est pas garanti que de meilleures informations sur les erreurs de script puissent être collectées de cette manière, étant donné que les navigateurs web ont commencé à combler cette faille dans le modèle de sécurité web.

ineum('wrapTimers', enabled);
 
Paramètre

Le tableau suivant répertorie les paramètres :

Paramètre Description
enabled (boolean) Indicateur permettant de désactiver ou d'activer cette fonction.
Ignorer les erreurs de script

Si vous ne parvenez pas à obtenir des informations sur les erreurs de script à l'aide des mécanismes mentionnés précédemment, vous pouvez désactiver leur envoi à Instana. Cela peut être utile pour s'assurer que les statistiques d'erreur restent exploitables. Pour que les erreurs de script ne soient plus envoyées à Instana, vous pouvez utiliser le fragment de code ci-dessous.

ineum('ignoreErrorMessages', [/^script error/i]);
 

Génération de rapports sur les événements personnalisés

Pour plus d'informations sur les événements personnalisés globaux, consultez la page Événements.

Les événements personnalisés permettent de signaler à Instana les activités atypiques, les interactions importantes et les délais personnalisés. Cela peut s'avérer particulièrement utile pour analyser les erreurs non interceptées (fil d'Ariane) et pour suivre davantage d'indicateurs de performance.

ineum('reportEvent', eventName, {
  duration: duration,
  timestamp: timestamp,
  backendTraceId: backendTraceId,
  error: error,
  componentStack: componentStack,
  meta: meta,
  customMetric: customMetric
});
 

Paramètre

Le tableau suivant répertorie les paramètres :

Paramètre Description
eventName (string) Définit le type d'événement qui s'est produit sur votre site web et qui pourrait entraîner la transmission d'une balise personnalisée.
timestamp (number, facultatif) Un horodatage indique l'heure à laquelle l'événement a eu lieu. La valeur now() - duration est spécifiée si l'horodatage n'est pas défini.
duration (number, facultatif) Durée de l'événement en millisecondes.
backendTraceId (string, facultatif) Utilisez ce paramètre pour associer une balise à une trace de back end. Sa valeur doit être une chaîne hexagonale de 16 ou 32 caractères.
error (Error, facultatif) Un objet d'erreur JavaScript pour fournir plus de contexte. Si vous souhaitez signaler une erreur, utilisez l' API dédiée au signalement des erreurs.
componentStack (string, facultatif) Chaîne représentant une hiérarchie de composants. Généralement fournie par des infrastructures reposant sur des composants.
maxMetadataKeys (number, facultatif) Le nombre maximal de clés de métadonnées qui seront envoyées dans une balise. La valeur par défaut est 25.
meta (object, facultatif) Un objet de type « JavaScript » contenant string des valeurs, qui peut être utilisé pour envoyer des métadonnées à Instana uniquement pour cet événement particulier. Contrairement à l'utilisation de la balise de métadonnées API, ces métadonnées ne sont pas incluses dans les balises suivantes.
customMetric (number, facultatif) Données de métrique personnalisées avec une précision jusqu'à quatre décimales. N'incluez pas d'informations sensibles dans cette mesure.

Exemple

ineum('reportEvent', 'login');

ineum('reportEvent', 'full example', {
  timestamp: Date.now(),
  duration: 42,
  backendTraceId: '31ab91fc109223fe',
  error: new Error('whooops – sorry!'),
  componentStack: 'a component stack',
  meta: {
    state: 'running'
  },
  customMetric: 123.2342
});
 

Corrélation de back end des demandes d'origine croisée

La corrélation de back end d'Instana fonctionne via la définition d'en-têtes personnalisés dans les demandes XMLHttpRequest/fetch. L'agent « JavaScript » définit ces en-têtes, qui sont ensuite lues par le serveur. Dans le navigateur, la politique de même origine restreint la transmission des en-têtes personnalisés. Plus précisément, les en-têtes personnalisés ne peuvent être définis que pour les requêtes de même origine ou pour les requêtes vers d'autres origines qui autorisent la transmission d'en-têtes personnalisés. Par exemple, par défaut, un site web desservi par https://example.com:443 ne peut pas faire de XMLHttpRequestà https://shop.example.com:443 car il s'agit de deux origines différentes.

Pour contourner cette restriction de sécurité, le partage de ressources entre origines ( CORS ) est disponible. Avec CORS, des origines peuvent être autorisées pour l'accès aux ressources d'origine croisée. Si vous avez déjà accès à des ressources d'origine croisée dans votre application, vous utilisez probablement déjà des en-têtes CORS.

Pour activer la corrélation du backend d' Instana, procédez comme suit :

  1. Autorisez les en-têtes de corrélation d'Instana pour les demandes d'origine croisée en répondant côté serveur avec les en-têtes ci-après.

    Remarque : votre serveur doit renvoyer ces en-têtes aussi bien pour les requêtes de pré-vérification que pour les requêtes standard. Les requêtes de pré-vérification (identifiables via la OPTIONS méthode ` HTTP `) sont exécutées par le navigateur afin de vérifier si des requêtes sont susceptibles d'être envoyées au serveur.
    Access-Control-Allow-Origin: https://your-origin.example.com
    Access-Control-Allow-Headers: X-INSTANA-T, X-INSTANA-S, X-INSTANA-L
    
     
  2. Indiquez à l'agent d' JavaScript s que CORS est correctement configuré et qu'il doit définir les en-têtes de corrélation suivants :

    ineum('allowedOrigins', urls);
     

Paramètre

Le tableau suivant répertorie les paramètres :

Paramètre Description
urls (RegExp[]) Tableau d'objets RegExp mettant en correspondance les URL autorisées.

Depuis

Cette allowedOrigins commande est disponible à partir de la version 185 d' Instana. Utilisez l'alias whitelistedOrigins avec les versions plus anciennes.

Alias

La commande whitelistedOrigins est un alias déprécié pour allowedOrigins.

Exemple

ineum('allowedOrigins', [/.*api\.example\.com.*/]);
 

Vérifiez que votre application fonctionne correctement après ces modifications. Si vous demandez à l'agent d' JavaScript d'ajouter des en-têtes de corrélation backend (c'est-à-dire d'autoriser les origines) sans configurer l' CORS e côté serveur, vous risquez fort de rendre votre site Web inaccessible!

Capturer les en-têtes des requêtes ou des réponses d' HTTP

Les en-têtes de requête ou de réponse « HTTP » des requêtes XMLHttpRequestfetch ou peuvent être capturés par l'agent JavaScript. Vous pouvez définir les en-têtes HTTP que vous souhaitez que l'agent JavaScript capture à l'aide de la captureHeaders commande.

Dans le navigateur, la règle de même origine restreint l'accès aux en-têtes personnalisés. Sans configuration du partage de ressources entre origines ( CORS ), l'agent JavaScript risque de ne pas pouvoir capturer tous les en-têtes HTTP. Pour activer la fonctionnalité « CORS », consultez la section «Cross-Origin Request Backend Correlation ». Avec l'option « CORS », seuls les en-têtes de requête ou de réponse qui respectent la règle « CORS » et ceux définis dans « Access-Control-Expose-Headers » peuvent être collectés par l'agent « JavaScript ».

Remarque : En ce qui concerne les en-têtes dans les requêtes, vous ne pouvez généralement capturer que ceux que vous ajoutez à la requête HTTP, et non ceux intégrés par défaut par le navigateur. Par exemple, l'en-tête User-Agent est une chaîne de caractères distinctive qui permet aux serveurs et aux nœuds du réseau d'identifier l'application, le système d'exploitation, le fournisseur et la version de l'agent utilisateur à l'origine de la requête. Il est ajouté par le navigateur et ne peut pas être capturé par l'agent JavaScript. En ce qui concerne les en-têtes de réponse, s'ils ne sont pas bloqués par la politique inter-origines, l'agent JavaScript peut capturer aussi bien les en-têtes intégrés que les en-têtes personnalisés provenant du serveur.

Paramètre

Le tableau suivant répertorie les paramètres :

Paramètre Description
captureHeaders (RegExp[]) Un tableau RegExp d'objets correspondant à la clé des en-têtes de requête ou de réponse de type « HTTP » que vous souhaitez voir capturés par l'agent JavaScript.

Depuis

Cette captureHeaders commande est disponible à partir de la version 216 d' Instana.