Back-End-Korrelation
Instana nutzt Backend-Korrelation, um Verbindungen zwischen Nutzeraktivitäten – wie beispielsweise Website-Besuchen – und den im Backend oder auf der Serverseite erstellten Inhalten herzustellen. Bei der Back-End-Korrelation werden folgende Details angezeigt:
- Die Back-End-Arbeit, die von Websiteaktivitäten ausgeführt wird.
- Die Aktivitäten, die die Back-End-Arbeit in der Traceansicht verursacht haben.
- Die in der Back-End-Arbeit verwendeten Hilfsparameter, die nicht durch die Traceerstellung in der Traceansicht erfasst wurden.
Die Links werden durch die Offenlegung von Back-End-Trace-IDs für Web-Browser eingerichtet. Der „ JavaScript “-Agent ruft die Backend-Trace-IDs ab und fügt sie in die Beacons ein, die an die Server von Instana gesendet werden.
Die Back-End-Korrelation wird für drei Beacontypen und drei Ereignistypen unterstützt:
- Seitenaufbau
- Ressourcen-oder Asset-Abrufdaten.
- HTTP Anfragen über die
XMLHttpRequestundfetchAPIs.
Die Back-End-Korrelation erfolgt automatisch. Manchmal ist jedoch eine automatische Back-End-Korrelation aus den folgenden Gründen nicht möglich:
- Die Standard-Websicherheitseinstellungen (zum Beispiel der
Timing-Allow-Originim Response-Header). - Die Verbindungen über HTTP sind in einigen Browsern nicht sicher.
- Der Browser unterstützt die erforderlichen APIs nicht.
Der automatische Back-End-Korrelationsprozess kann so konfiguriert werden, dass er in den meisten Fällen und in den meisten Browsern funktioniert. Informationen zur Konfiguration finden Sie in den folgenden Abschnitten. Aufgrund der Back-End-Korrelation, die für jeden Beacontyp unterschiedlich funktioniert, sind die Informationen in dieser Dokumentation so strukturiert, dass der Ansatz für jeden Beacontyp erläutert wird.
Wichtige Anmerkung
Sie müssen die in diesem Dokument beschriebenen Schritte nicht befolgen, um die Website-Überwachung von Instana zu nutzen. Die Schritte beschreiben, wie die Back-End-Korrelation verbessert oder aktiviert werden kann, z. B. zur Unterstützung der Back-End-Korrelation für ältere Web-Browser oder zur Unterstützung der Back-End-Korrelation über verschiedene Ursprünge hinweg. Die meisten Back-End-Korrelationen sind automatisch. Führen Sie die folgenden Schritte aus, um die Back-End-Korrelationsabdeckung zu erweitern. Diese Schritte sind optional. Sie können sie in der Reihenfolge befolgen, wenn Sie eine fehlende Back-End-Korrelation ermitteln.
Stellen Sie sicher, dass das Back-End nachverfolgt wird
Instana kann eine Verbindung zwischen Backend- und Website-Aktivitäten herstellen, wenn die Backend-Aktivitäten nachverfolgt werden. Als Voraussetzung für die Korrelation müssen Sie die Erfassung von Backend-Daten, auch Tracing genannt, aktivieren. Informationen zum Aktivieren der Ablaufverfolgung finden Sie unter „Ablaufverfolgung“ auf Instana.
Instana Das Skript zur Website-Überwachung unterstützt die folgenden Arten von Backend-Korrelationstechnologien:
Backend-Korrelation mit „ Instana “-Tracing
Wenn die Protokollierung von „ Instana “ erfolgreich aktiviert wurde, antwortet der protokollierte Prozess mit den Server-Timing Antwort-Headern „ HTTP “. Sie können diese Antwort-Header über die Entwicklertools Ihres Webbrowsers einsehen. Das folgende Bild zeigt den server-timing Antwort-Header „ HTTP “ in den Entwicklertools von Google Chrome :

Wenn Sie bis zu diesem Punkt gekommen sind, können nun die automatischen Mechanismen von Instana anfangen zu funktionieren. Falls Sie Ihre Prozesse bisher noch nicht protokolliert haben, probieren Sie doch einmal Instana aus. Es hilft Ihnen zu bestimmen, ob Sie weiterhin die vollständige und zuverlässige Back-End-Korrelation entsperren möchten, insbesondere in älteren Web-Browsern.
Backend-Korrelation mit dem Trace-Kontext von „ W3C “
Wenn auf dem Backend-Server der Trace-Kontext „ W3C “ aktiviert ist, bindet der verfolgte traceparent Prozess möglicherweise Inhalte als Metadaten in die HTML-Seite ein (siehe Spezifikation ). Das in die HTML-Seite integrierte Skript zur Website-Überwachung „ Instana “ analysiert das traceparent und extrahiert das parent-id als backendTraceId. Dies backendTraceId wird zusammen mit dem „ pageLoad “-Beacon zur Beacon-Korrelation an das Backend von „ Instana “ gesendet.
Wenn eine XMLHttpRequest oder fetch API aufgerufen wird, generiert das Skript zur Website-Überwachung von Instana Metadaten tracestate , die traceparent der Spezifikation für Trace-Kontexte unter W3C entsprechen, und fügt diese als HTTP -Header zur Anfrage hinzu. Der tracestate wird als verwendet backendTraceId und zusammen mit dem XHR-Beacon zur Beacon-Korrelation an das Backend von Instana gesendet.
Ein Backend-Server, der mit „ OpenTelemetry “ kompatibel ist, unterstützt den Trace-Kontext „ W3C “.
Das Konzept der Herkunft verstehen
Wenn Sie mehr über den Back-End-Korrelationsprozess erfahren möchten, müssen Sie über ein gutes Verständnis des Konzepts der Ursprünge verfügen. Der FAQ-Artikel „ Instana “ erläutert, was Sie über Ursprünge wissen müssen, um die folgenden Schritte zu verstehen:
Verbesserung der Korrelation von „ HTTP “-Anfragen ( XMLHttpRequest oder fetch)

Die Verwendung von XMLHttpRequest ` fetchAPI ` in Verbindung mit funktioniert bei allen Aufrufen innerhalb derselben Herkunft zuverlässig. Aufgrund der Same-Origin-Policy und Cross-Origin ist die automatische Korrelation von Aufrufen an das Backend von „ HTTP “ nicht möglich.
Um die Backend-Korrelation bei mehreren Ursprüngen zu ermöglichen, wird das Cross-Origin Resource Sharing ( CORS ) verwendet. CORS ist ein Mechanismus, der kontrollierte Ausnahmen vom Sicherheitsmechanismus der Same-Origin-Policy festlegt. Informationen zu den Einschränkungen, die für Richtlinien mit demselben Ursprung gelten, finden Sie im folgenden Screenshot, in dem beschrieben wird, was erforderlich ist.

Korrelation des Seitenaufbaus verbessern

Back-End-Traces und das Laden von Websiteseiten, d. h. der Abruf der ursprünglichen HTML-Dateien, werden automatisch für Web-Browser korreliert, die Unterstützung Server-Timingverwendet. Durch manuelles Aufdecken der Trace-ID des ersten Seitenaufbaus an den JavaScript-Agenten ist es möglich, die Back-End-Korrelation für alle Web-Browser zu aktivieren. Zum Aktivieren der Back-End-Korrelation müssen Sie die folgenden Schritte ausführen:
Trace-ID auf der Back-End-Seite abrufen
In den folgenden Unterabschnitten wird erläutert, wie Sie die Trace-ID für verschiedene Sprachen abrufen können, die Instana unterstützt. Diese Methoden funktionieren nur, wenn der Backend-Prozess protokolliert wird und wenn eine Protokollierung vorhanden ist oder durch die Anforderung „ HTTP “ erstellt wird.
Abrufen der Trace-ID in „ Java “
In Java ist die Back-End-Trace-ID als Anforderungsattribut für eingehende HTTP-Anforderungen verfügbar. Wenn ein Back-End-Trace vorhanden ist oder erstellt wird, fügt der Agent automatisch das Attribut X-INSTANA-T hinzu. Um diesen Wert im Bereich „ JavaScript “ abzurufen, verwenden Sie den folgenden Befehl:
// via plain Java Servlet request object (standard API)
// http://docs.oracle.com/javaee/6/api/javax/servlet/ServletRequest.html
servletRequest.getAttribute("X-INSTANA-T")
Abrufen der Backend-Trace-ID in „ PHP “
In „ PHP “ steht die Backend-Trace-ID als Wert des $_SERVER Arrays zur Verfügung, wenn Sie eingehende „ HTTP “-Anfragen bearbeiten. Wenn ein Back-End-Trace erstellt wird oder vorhanden ist, fügt der Agent diesem Array automatisch den Wert X-INSTANA-T hinzu. Verwenden Sie den folgenden Befehl, um diesen Wert abzurufen:
// via the $_SERVER superglobal array (standard API)
// http://php.net/manual/en/reserved.variables.server.php
$_SERVER["X-INSTANA-T"]
Abrufen der Backend-Trace-ID in „ Node.js “
Nach der Installation des Collectors unter Node.js und Node.js steht die Backend-Trace-ID als Request-Header in den eingehenden Anfragen unter HTTP zur Verfügung. Wenn ein Backend-Trace vorhanden ist oder erstellt wird, fügt der „ Node.js “-Collector automatisch den X-INSTANA-T Header hinzu. Verwenden Sie den folgenden Befehl, um diesen Wert abzurufen:
// 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')
Abrufen der Backend-Trace-ID in „.NET “
Bei Webanwendungen für „.NET “ erfolgt das Abrufen der Backend-Trace-ID nach dem gleichen Muster wie in den anderen Sprachen. Je nachdem, welches Framework Sie verwenden, müssen Sie verschiedene Ausdrücke verwenden, um die Back-End-Trace-ID zu extrahieren. Der Tracer fügt die Trace-ID dem Kontext der Anwendung auf Anforderung oder Antwort hinzu, die Sie dann wie folgt extrahieren können:
// For ASP.NET WebForms
HttpContext.Current.Items["X-INSTANA-T"]
// For ASP.NET MVC Applications
Context.ApplicationInstance.Context.Items["X-INSTANA-T"]
Abrufen der Trace-ID in „ Ruby “
Der Sprachagent Ruby enthält den aktuellen Tracing-Kontext in ::Instana.tracer.context.
nil wenn derzeit keine Aufzeichnung läuft.::Instana.tracer.context &&
::Instana::Util.id_to_header(::Instana.tracer.context.trace_id)
Abrufen der Trace-ID in „ Python “
Bei Python -Anwendungen hängt die Position der aktuellen Trace-ID davon ab, ob Sie ein synchrones oder asynchrones Framework verwenden.
# 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
Abrufen der Trace-ID in „ Go “
Bei Go-Anwendungen ist die Trace-ID in der aktuellen Spanne verfügbar:
import instana "github.com/instana/go-sensor"
span := opentracing.StartSpan("MySpanName)
spanContext := span.Context().(instana.SpanContext)
traceId := instana.FormatID(spanContext.TraceID)
Trace-ID zum JavaScript-Snippet von Instana hinzufügen
Nachdem Sie die Trace-ID auf der Serverseite abgerufen haben, müssen Sie den Codeausschnitt „ JavaScript “ von Instana um einen Aufruf der Funktion „ ineum('traceId', *TraceID*);API “ erweitern. Dies muss serverseitig erfolgen und wird üblicherweise mithilfe von Template-Engines wie Java JSP und Node.js Express View Engines durchgeführt. Das folgende Beispiel zeigt, wie man das Snippet „ JavaScript “ von „ Instana “ um einen Aufruf der Funktion „ API “ mit der Mustache-Template-Engine erweitert. Andere Template-Engines können eine andere Syntax haben.
<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>
Verbesserung der Korrelation von Ressourcen-oder Asset-Abrufdaten

Die Backend-Korrelation für Ressourcen oder Assets, wie Bilder, JavaScript, und CSS-Dateien, erfolgt automatisch:
- Web-Browser, die Unterstützung Server-Timing.
- Ressourcen oder Assets, die von demselben Ursprung wie das HTML-Dokument bereitgestellt werden.
Um die Back-End-Korrelation zu entsperren, wenn mehrere Ursprünge beteiligt sind, verwenden Sie den Header Timing-Allow-Origin. Dieser Header weist den Server timing allow check an, die Daten für JavaScript sowie für den Agenten unter InstanaJavaScript bereitzustellen.
Informationen zum Entsperren von Back-End-Korrelationsfunktionen für die Ressourcen, die aus anderen Ursprüngen als dem Ursprung des HTML-Dokuments abgerufen werden, finden Sie im folgenden Screenshot:

Verbesserung der Korrelation des Backends von „ OpenTelemetry-compatible “
Wenn der Backend-Server mit „ OpenTelemetry “ kompatibel ist, können Sie den Codeausschnitt unter Instana JavaScript um einen Aufruf von ineum('enableW3CHeaders', true);API erweitern. Wenn der Server die traceparent Metadaten in die HTML-Seite einbettet, kann der Agent unter InstanaJavaScriptparent-id den Inhalt analysieren und als Daten backendTraceId für das Beacon unter pageLoad verwenden.
Mit XMLHttpRequest oder fetch call werden traceparent tracestate und generiert und den ursprünglichen „ HTTP “-Headern hinzugefügt. tracestate wird als backendTraceId für das XHR-Beacon verwendet, das an das Backend unter Instana gesendet wird.