Corrélation de back end
Instana utilise la corrélation côté serveur pour établir des liens entre l'activité des utilisateurs, comme les visites sur le site web, et le travail effectué côté serveur. Avec la corrélation de back end, vous pouvez voir les détails suivants:
- Travail d'arrière-plan exécuté par l'activité du site Web.
- Activités à l'origine du travail de back-end dans la vue de trace.
- Paramètres auxiliaires utilisés dans le travail dorsal qui n'ont pas été capturés par la fonction de trace dans la vue de trace.
Les liens sont établis via l'exposition des ID de trace de back end aux navigateurs Web. L'agent d' JavaScript s récupère les identifiants de trace du backend et les intègre dans les balises transmises aux serveurs d' Instana.
La corrélation d'arrière-plan est prise en charge pour trois types de balises et trois types d'événements:
- Les chargements de page
- Les extractions de ressource ou d'actif.
- HTTP demandes via les
XMLHttpRequestAPIfetchet.
La corrélation d'arrière-plan se produit automatiquement. Cependant, il arrive que la corrélation d'arrière-plan automatique ne soit pas possible pour les raisons suivantes:
- Paramètres de sécurité Web par défaut (par exemple,
Timing-Allow-Origindans l'en-tête de réponse). - Les connexions HTTP ne sont pas sécurisées sur certains navigateurs.
- Le navigateur ne prend pas en charge les API requises.
Le processus de corrélation d'arrière-plan automatique peut être configuré pour fonctionner dans la plupart des cas et dans les navigateurs. Voir les sections suivantes pour le configurer. En raison de la corrélation de back end, qui fonctionne différemment par type de balise, les informations de cette documentation sont structurées de manière à ce que l'approche soit expliquée par type de balise.
Important
Il n'est pas nécessaire de suivre les étapes décrites dans ce document pour utiliser la surveillance de sites Web d' Instana. Les étapes décrivent comment améliorer ou activer la corrélation de back end, par exemple pour prendre en charge la corrélation de back end pour les anciens navigateurs Web ou pour prendre en charge la corrélation de back end entre les origines. La plupart des corrélations dorsales sont automatiques. Pour étendre la couverture de corrélation d'arrière-plan, voir les étapes suivantes. Ces étapes sont facultatives. Vous pouvez les suivre dans l'ordre, lorsque vous identifiez une corrélation d'arrière-plan manquante.
Assurez-vous que le backend est tracé
Instana permet d'établir un lien entre l'activité du backend et celle du site web lorsque l'activité du backend est suivie. Comme condition préalable à la corrélation, vous devez activer la collecte de données d'arrière-plan, également connue sous le nom de "traçage". Pour activer le traçage, consultez la section « Traçage » dans Instana.
Instana Le script de surveillance de sites web prend en charge les types suivants de technologies de corrélation backend :
Corrélation backend avec le traçage d' Instana
Lorsque le traçage « Instana » est activé avec succès, le processus tracé renvoie des en-têtes de réponse « Server-TimingHTTP ». Vous pouvez consulter ces en-têtes de réponse à l'aide des outils de développement de votre navigateur Web. L'image suivante montre l'en-tête de réponse server-timing « HTTP » dans les outils de développement d' Google Chrome :

A ce stade, les mécanismes automatiques d'Instana peuvent être utilisés. Si vous ne surveilliez pas vos processus auparavant, essayez la solution proposée sur Instana. Il vous aide à déterminer si vous souhaitez continuer à déverrouiller la corrélation de back end complète et fiable, en particulier dans les navigateurs Web plus anciens.
Corrélation du backend avec le contexte de trace d' W3C
Lorsque le contexte de traçage « W3C » est activé sur le serveur backend, le processus tracé peut intégrer traceparent du contenu sous forme de métadonnées dans la page HTML (voir la spécification ). Le script de surveillance de site web d' Instana, intégré à la page HTML, analyse le traceparent et extrait le parent-id sous la forme de backendTraceId. Cette information backendTraceId est transmise au serveur Instana avec la balise pageLoad afin de permettre la corrélation des balises.
Lorsqu'une requête est XMLHttpRequest envoyée à l'adresse ou fetch API, le script de surveillance du site web Instana génère des traceparent métadonnées tracestate et conformes à la spécification de contexte de traçage W3C et les ajoute à la requête sous forme d'en-têtes HTTP. Le tracestate est utilisé comme backendTraceId et envoyé avec la balise XHR au serveur Instana pour la corrélation des balises.
Un serveur backend compatible avec l' OpenTelemetry prend en charge le contexte de trace de l' W3C.
Comprendre le concept des origines
Si vous souhaitez continuer à en apprendre davantage sur le processus de corrélation d'arrière-plan, vous devez bien comprendre le concept des origines. L'article de la FAQ « Instana » explique ce que vous devez savoir sur les origines pour bien comprendre les étapes suivantes :
Améliorer la corrélation des requêtes d' HTTP ( XMLHttpRequest ou fetch)

La corrélation entre les utilisations de ` fetchAPIXMLHttpRequest ` fonctionne de manière fiable pour tous les appels de même origine. En raison de la politique du même domaine et des interactions inter-domaines, la corrélation automatique entre les appels et le backend d' HTTP s n'est pas possible.
Pour permettre la corrélation en arrière-plan lorsque plusieurs origines sont impliquées, on utilise le partage de ressources entre origines ( CORS ). CORS est un mécanisme qui définit des exceptions contrôlées au mécanisme de sécurité de la politique de même origine. Pour résoudre les restrictions imposées par la règle de même origine, consultez la capture d'écran suivante qui décrit ce qui est requis.

Amélioration de la corrélation des chargements de page

Les traces dorsales et les chargements de page de site Web, c'est-à-dire l'extraction des fichiers HTML initiaux, sont automatiquement corrélés pour les navigateurs Web qui prennent en charge Server-Timing. En exposant manuellement l'ID de trace du chargement de page initial dans l'agent JavaScript, il est possible d'activer la corrélation de back end pour tous les navigateurs Web. Pour activer la corrélation de back end, vous devez effectuer les étapes suivantes:
Extraction de l'ID de trace côté back end
Les sous-sections suivantes expliquent comment récupérer l'identifiant de trace pour les différents langages pris en charge par Instana. Ces méthodes ne fonctionnent que si le processus de fond est tracé et si une trace existe ou est créée par la requête « HTTP ».
Récupération de l'identifiant de trace dans l' Java
En Java, l'ID de trace de back end est disponible en tant qu'attribut de demande pour les demandes HTTP entrantes. Lorsqu'une trace de back end existe ou est créée, l'agent ajoute automatiquement l'attribut X-INSTANA-T . Pour récupérer cette valeur dans la section « JavaScript », utilisez la commande suivante :
// via plain Java Servlet request object (standard API)
// http://docs.oracle.com/javaee/6/api/javax/servlet/ServletRequest.html
servletRequest.getAttribute("X-INSTANA-T")
Récupération de l'identifiant de trace du backend dans l' PHP
Dans PHP, l'identifiant de trace du backend est disponible en tant que valeur du $_SERVER tableau lorsque vous traitez les requêtes entrantes de type « HTTP ». Lorsqu'une trace de back end est créée ou existe, l'agent ajoute automatiquement la valeur X-INSTANA-T à ce tableau. Pour extraire cette valeur, utilisez la commande suivante:
// via the $_SERVER superglobal array (standard API)
// http://php.net/manual/en/reserved.variables.server.php
$_SERVER["X-INSTANA-T"]
Récupération de l'identifiant de trace du backend dans l' Node.js
Une fois les collecteurs Node.js et Node.js installés, l'identifiant de trace du backend est disponible sous forme d'en-tête de requête dans les requêtes entrantes HTTP. Lorsqu'une trace backend existe ou est créée, le collecteur d' Node.js s ajoute automatiquement X-INSTANA-T l'en-tête. Pour extraire cette valeur, utilisez la commande suivante:
// via plain Node.js HTTP request objects (standard API)
// https://nodejs.org/api/http.html#http_class_http_incomingmessage
req.headers['x-instana-t']
// via express.js request objects
// https://expressjs.com/en/4x/api.html#req.get
req.get('x-instana-t')
Récupération de l'identifiant de trace du backend dans l'.NET
Pour les applications web .NET, la récupération de l'identifiant de trace du backend suit le même principe que dans les autres langages. En fonction de l'infrastructure que vous utilisez, vous devez utiliser des expressions différentes pour extraire l'ID de trace de back end. Le traceur ajoute l'ID de trace au contexte de l'application sur demande ou réponse, que vous pouvez ensuite extraire comme suit:
// For ASP.NET WebForms
HttpContext.Current.Items["X-INSTANA-T"]
// For ASP.NET MVC Applications
Context.ApplicationInstance.Context.Items["X-INSTANA-T"]
Récupération de l'identifiant de trace dans l' Ruby
L'agent en langage Ruby conserve le contexte de traçage en cours dans ::Instana.tracer.context.
nil s'il n'y a pas de tracé en cours.::Instana.tracer.context &&
::Instana::Util.id_to_header(::Instana.tracer.context.trace_id)
Récupération de l'identifiant de trace dans l' Python
Pour les applications Python , l'emplacement de l'ID de trace en cours varie selon que vous utilisez une infrastructure synchrone ou asynchrone.
# Synchronous (Django, Flask etc..)
from instana.singletons import tracer
from instana.singletons import async_tracer as tracer
tracer.active_span and tracer.active_span.context.trace_id
Récupération de l'identifiant de trace dans l' Go
Pour les applications Go, l'ID de trace est disponible dans l'étendue en cours :
import instana "github.com/instana/go-sensor"
span := opentracing.StartSpan("MySpanName)
spanContext := span.Context().(instana.SpanContext)
traceId := instana.FormatID(spanContext.TraceID)
Ajout de l'ID de trace au fragment JavaScript d'Instana
Une fois que vous avez récupéré l'identifiant de trace côté serveur, vous devez compléter l'extrait de code JavaScript de Instana en y ajoutant un appel à la méthode ineum('traceId', *TraceID*);API. Cette opération doit être effectuée côté serveur et est généralement réalisée à l'aide de moteurs de modèles, tels que les moteurs de vue JSP ( Java ) et Express ( Node.js ). L'exemple suivant montre comment étendre l'extrait de code « JavaScript » d' Instana en y ajoutant un appel à la fonction « API » avec le moteur de modèles Mustache. D'autres moteurs de modèle peuvent avoir une syntaxe différente.
<script>
(function(i,s,o,g,r,a,m){i['InstanaEumObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','https://eum.instana.io/eum.min.js','ineum');
// API calls as generated by the Instana user interface
ineum('traceId', '*TraceID*');
</script>
Améliorer la pertinence des résultats de recherche de ressources ou d'actifs

La corrélation du backend pour les ressources ou les actifs, tels que les images, JavaScript, et les fichiers CSS, est automatique :
- Navigateurs Web Support Serveur-Calendrier.
- Ressources ou actifs qui sont servis à partir de la même origine que le document HTML.
Pour déverrouiller la corrélation de back end lorsque plusieurs origines sont impliquées, utilisez l'en-tête de réponse Timing-Allow-Origin. Cet en-tête indique au serveur timing allow check de mettre les données à disposition sur JavaScript et de les transmettre à l'agent Instana JavaScript.
Pour déverrouiller les fonctions de corrélation d'arrière-plan pour les ressources qui sont extraites d'origines différentes de l'origine du document HTML, voir la capture d'écran suivante:

Améliorer la corrélation du backend d' OpenTelemetry-compatible
Si le serveur backend prend en charge la fonctionnalité « OpenTelemetry », vous pouvez compléter l'extrait de code Instana JavaScript en y ajoutant un appel à la méthode ineum('enableW3CHeaders', true);API. Si le serveur intègre les traceparent métadonnées dans la page HTML, l'agent Instana JavaScript peut analyser le contenu et parent-id l'utiliser comme backendTraceId données pour la balise pageLoad.
Lors d'un appel XMLHttpRequestfetch ou d'une requête, les traceparent en-têtes et tracestate sont générés et ajoutés aux en-têtes d'origine de HTTP. tracestate est utilisé comme backendTraceId balise XHR envoyée au serveur Instana.