Häufig gestellte Fragen zur Website-Überwachung

Sie können sich die FAQs zur Website-Überwachung durchlesen.

Terminologie

Was ist der Unterschied zwischen einer mehrseitigen und einer einseitigen Anwendung?

In einer Single-Page-Anwendung wird der Inhalt im Browser fast ausschließlich mithilfe von ` JavaScript ` geändert, um ein einzelnes HTML-Dokument zu modifizieren. Der Browser lädt nur eine einzige Seite und verlässt diese in der Regel nicht. Häufig wird eine Single-Page-Anwendung mithilfe eines Frameworks für die Entwicklung von Single-Page-Anwendungen ( JavaScript ) wie Angular und React erstellt. Ein Beispiel für eine Website, die diese Architektur nutzt, ist Instana.

In einer mehrseitigen Anwendung stellt jeder Abschnitt der Anwendung eine eigene Seite dar, die der Browser einzeln laden muss. Die Seiten können dynamische JavaScript Elemente enthalten, sind aber nicht für die Abwicklung von Übergängen zwischen verschiedenen Teilen der Anwendung verantwortlich. Ein Beispiel für eine mehrseitige Anwendungswebsite ist Wikipedia.

Die Art Ihrer Anwendung hat Einfluss darauf, wie Instana diese Anwendung überwacht.

Was ist der Unterschied zwischen Seitenaufrufen, Ladevorgängen und Übergängen?

Einseitige und mehrseitige Anwendungen funktionieren aus technischer Sicht anders. Dieser Unterschied ist wesentlich, um die Leistung und damit die Benutzererfahrung zu beurteilen. Diese Begriffe helfen Ihnen, die Verwendung einer Website zu kommunizieren.

  • Laden der Seite: Der Abruf des ursprünglichen HTML-Dokuments und aller nachfolgenden Aktionen bis zur nächsten Navigation im Browser. Zum Beispiel eine Navigation, die den Aufbau eines neues HTML-Dokument erfordert. In der Regel wird der Inhalt der Website auf dem Server als HTML gerendert und anschließend an den Nutzer übermittelt. Eine mehrseitige Anwendung besteht ausschließlich aus dem Laden von Seiten.

  • Seitenübergänge: Websites können den Inhalt ändern, den die Benutzer mit JavaScriptbetrachten. Im Gegensatz zum Laden von Seiten verwenden Seitenübergänge keine klassische Browsernavigation. In der Regel werden neue Website-Inhalte über JavaScript geladen und anschließend in HTML umgewandelt. Diese HTML wird dann in das Dokument eingefügt, um das vorhandene Dokument aufzubereiten oder zu ersetzen. Einzelseitenanwendungen verwenden dieses Verfahren. Bei Einzelseitenanwendungen ist die Anzahl der Seitenübergänge größer als beim Laden von Seiten.

    Ein Seitenwechsel wird ausgelöst, wenn der Seitenname mithilfe von ` API ` geändert wird.

  • Seitenaufruf: Der Begriff "Seitenaufruf" wird eingeführt, um die allgemeine Aktivität auf einer Website unabhängig von der implementierten Architektur zu beurteilen. Seitenaufrufe sind die Summe der Seitenaufbau- und Seitenwechselvorgänge.

Was ist ein Beacon?

Der „ JavaScript “-Agent übermittelt an die „ Instana “-Server kompakte Überwachungsdaten, die modellspezifische Ereignisse abbilden, die im Lebenszyklus eines Seitenaufrufs auf einer Website auftreten (z. B. das Laden der Seite, das Abrufen von Ressourcen und „ HTTP “-Anfragen). Der Begriff „Beacon“ stammt aus der Beacon-Spezifikation der „ W3C “.

Was ist ein Ursprung (Origin)?

Ursprünge sind ein zentraler Bestandteil der Websicherheitsmechanismen. Weitere Informationen zu Ursprüngen finden Sie unter „Cross-Origin Resource Sharing“ ( CORS ). Die Kombination aus Schema (auch als Protokoll bezeichnet), Hostname und Port bildet eine Herkunftsadresse. Siehe das folgende Beispiel unter URL :

https://shop.example.com/articles/hoverboard/ratings
 

Die vorangehende Funktion URL hat den Ursprung https://shop.example.com.

- Scheme: `https`
- Hostname: `shop.example.com`
- Port: 443 (based on the default for the HTTPS protocol)
 

Zwei Ursprünge sind identisch, wenn alle drei Teile (Schema, Hostname und Port) gleich sind. Die folgenden Beispiele sind alle ungleich zueinander:

  • https://shop.example.com
  • http://shop.example.com
  • https://example.com
  • http://example.com

Same-Origin-und Cross-Origin-Aufrufe oder gemeinsame Ressourcennutzung ist eine Terminologie, die häufig verwendet wird, wenn Sie Ursprünge erwähnen. Der Web-Sicherheitsmechanismus „Same-Origin-Policy“ und die Mechanismen für den Austausch von Ressourcen zwischen verschiedenen Ursprüngen sind allgemein bekannt. Wenn sich die Ursprungsquelle (die Quelle des HTML-Dokuments) und die Zielquelle (die Quelle eines API-Servers) unterscheiden, gilt ein Aufruf als „Cross-Origin“-Aufruf und nicht als „Same-Origin“-Aufruf.

Der Begriff „Ursprünge“ darf nicht mit dem ähnlichen, sich jedoch in Umsetzung und Absicht deutlich davon unterscheidenden Begriff „Standorte“ verwechselt werden.

Metriken

Was bedeuten die Messdaten der Website?

Die meisten der Website-Messdaten werden von den verschiedenen W3C-Spezifikationen empfangen. Insbesondere

Instana verwendet gängige Web-Begriffe aus dem Web Vitals-Projekt.

Instana hält sich so weit wie möglich an diese Terminologie. Instana verwendet die folgenden Kennzahlen:

  • onLoad -Zeit: Diese Ablaufsteuerung gilt für jedes Laden von Seiten und modelliert die Zeit bis zum Abschluss einer Navigation (d. h., das Ladedrehfeld wird gestoppt). Sie ist als loadEventEnd - fetchStart definiert (siehe Navigationsablaufsteuerung). Innerhalb der Benutzeroberfläche wird zwischen „ onLoad Time“ und „ onLoad Event Time“ unterschieden, um die terminologischen Unterschiede zwischen der Benutzeroberfläche von Instana und der Spezifikation für Navigationszeiten deutlich zu machen.
  • DOM: Eine Variation des Timings, das im Navigationstiming definiert ist. Diese Metrik ist als domContentLoadedEventStart - domLoading definiert (siehe Navigationsablaufsteuerung). Sie wird als nützlichere Timing-Aufgliederung betrachtet als die Verarbeitungszeit des Navigationszeitpunkts. Sehen Sie sich das folgende Diagramm an, um die DOM-Zeit zu verstehen.
  • Kinder: Eine Variation des Zeitpunkts, der im Navigationszeitpunkt definiert ist. Diese Metrik ist als loadEventEnd - domContentLoadedEventStart definiert (siehe Navigationsablaufsteuerung). Es wird als eine hilfreichere Timing-Aufgliederung betrachtet als die onLoad -Zeiten des Navigationszeitpunkts. Sehen Sie sich das folgende Diagramm an, um die Zeit für untergeordnete Elemente zu verstehen.

Für Nutzer der Web REST API „ Instana “ wird ein Endpunkt unter API angezeigt, über den Informationen zu den technischen Metrik-IDs abgerufen werden können (metricId). Die in der Antwort dieses Endpunkts genannten Metrik-IDs können verwendet werden, um Metriken über verschiedene REST-Web-APIs zur Website-Überwachung von Instana abzufragen.

Abbildung 1. Schwankungen bei der Navigationszeit
Navigationsablaufsteuerung-Variation

Warum sind manche Website-Kennzahlen nicht immer verfügbar oder weisen seltsame Werte auf?

Die wichtigsten Faktoren sind Benutzerinteraktion und Web-Browser-Unterstützung.

Für einige Metriken innerhalb des Zeitrahmens, in dem die Metriken erfasst werden, ist eine Benutzerinteraktion erforderlich, z. B. 'Verzögerung bei der ersten Eingabe'. Ohne Benutzerinteraktion ist kein Messwert verfügbar.

Der zweite wichtige Faktor ist die Web-Browser-Unterstützung. Einige Metriken erfordern Web-Browser-Funktionen, die noch nicht allgemein unterstützt werden, z. B. die modernen Web-Vitals. Ein nicht unterstütztes Web-Browser-Feature bedeutet, dass einige Websites als Ganzes, einige Seiten oder das Laden einer einzelnen Seite möglicherweise keine Informationen zu einer Metrik enthalten (z. B. zum kumulativen Layout-Shift). Unterschiede in der Web-Browser-Unterstützung können auch zu verwirrenden Situationen führen. Beispiel: FCP (First-Contentful Paint) wird weiter unterstützt als LCP (Largest-Contentful Paint). Infolgedessen führen statistische Aggregationen über eine Reihe von Beobachtungen zu LCP-Werten, die kleiner sind als die FCP-Werte. Obwohl die Überwachung für das Laden einer einzelnen Seite schwierig ist, können statistische Aggregationen für eine Gruppe von Seitenladevorgängen auftreten, wenn die Web-Browser-Unterstützung unterschiedlich ist, wie in den folgenden Beispielen gezeigt.

  • Beobachtete Werte für 'First-Contentful Paint': 1000 ms, 1400 ms, 1600 ms Mittelwert: 1333ms.
  • Beobachtete Größte-Contentful Paint-Werte: 1000 ms, UNSUPPORTED METRIC, 1600 ms. Mittelwert: 1300ms.

Warum sind die aufgezeichneten Zeiten für einige meiner Anrufe unter HTTP so ungewöhnlich hoch?

Instana Die Website-Überwachung erfasst die Zeit zwischen dem Beginn der Anfrage (XMLHttpRequest#send) und dem Erfolgsereignis (XMLHttpRequest#onreadystatechange) mit readyState === 4. Die folgenden Faktoren wirken sich auf die Zeit zwischen den beiden vorhergehenden Ereignissen aus:

  • HTTP-Umleitungen
  • DNS-Suchzeit
  • Es ist an der Zeit, Verbindungen zu TCP oder TLS herzustellen
  • Serverantwortzeiten
  • Anforderungswarteschlangenzeiten
  • Latenz und Durchsatz
  • Anforderungs- und Antwortgrößen
  • Seitendrosselungen

Bei der Seitenregulierung entscheiden Browser möglicherweise, die Verarbeitung für nicht sichtbare Webseiten zu drosseln oder gar zu stoppen. Die Seitenauslagerung ist höchstwahrscheinlich der Grund für die hohen Ladezeiten. Weitere Informationen finden Sie inGoogle s Blogbeitrag zu diesem Thema oder auf der entsprechenden Seite „ Mozilla Developer Network: Page Visibility“ unter API.

Warum fehlen die geografischen Angaben?

Die Website-Überwachung von Instana erfasst geografische Informationen auf der Grundlage von IP-Adressen oder Geolokalisierung. Die IP-Adressinformationen werden über den Reverse-Proxy-Server erfasst. Falls die geografischen Informationen in der Benutzeroberfläche zur Website-Überwachung fehlen, können Sie überprüfen, ob der Berichts URL us des „ JavaScript “-Agenten so konfiguriert ist, dass er den Reverse-Proxy-Server umgeht und die Daten direkt an den internen Überwachungsendpunkt (in der Regel 2999) sendet.

Der Reverse-Proxy-Server wird im Rahmen der selbst gehosteten (lokalen) Einrichtung von „ Instana “ automatisch installiert. Weitere Informationen finden Sie unter „Bereitstellung des Überwachungsendpunkts für Endbenutzer “.

Datenerfassung

Wie werden diese Informationen erfasst?

Die Website-Überwachung von Instana basiert auf einer Open-Source-Bibliothek namens „weasel “. Weasel sammelt die Informationen aus dem „Browser Navigation Timing“- API us und übermittelt sie in einer effizienten Form. Weitere Informationen zu Weasel finden Sie im Quellcode unter GitHub.

Welche Browser werden unterstützt?

Der JavaScript-Agent unterstützt alle gängigen Browser. Einige APIs und JavaScript-Sprachfunktionen werden in älteren Browsern jedoch nicht unterstützt. In diesen Fällen kann der JavaScript -Agent möglicherweise nicht alle gewünschten Datenpunkte wie Navigations-, Ressourcen-und Farbablaufsteuerungsinformationen erfassen.

In alten Browsern (alle Browser vor Internet Explorer 6) kann das Laden des JavaScript -Agenten fehlschlagen. Daher werden keine Daten erfasst.

Wie gehen Sie mit Browsern um, die das „navigation-timing“- API nicht unterstützen?

Für Browser, die das „navigation-timing“- API nicht unterstützen, liefert „ Instana “ ungefähre Zeitangaben. Diese Timings sind nicht zuverlässig und verlassen sich daher nicht zu sehr auf sie für diese Spuren. Wenn Instana bei den Ladezeiten von Seiten auf Schätzwerte zurückgreifen muss, werden diese Werte aus den Statistiken ausgeschlossen, d. h., Schätzwerte fließen nicht in aggregierte Ladezeiten wie Mittelwert, Minimalwert und Maximalwert ein.

Warum werde ich von „ AdBlock “ oder ähnlichen Browser-Erweiterungen blockiert?

Während die meisten der Ad-Blocking-Erweiterungen erstellt werden, um keine Werbung anzuzeigen, die meisten von ihnen entwickeln sich zu Erweiterungen, die Website-Besitzer daran hindern, ihre Benutzer zu verfolgen. Das Überwachungsskript „ Instana “ taucht in vielen Werbeblocker-Erweiterungen auf. Wenn Sie Kontrolle über Ihre Benutzer haben, können Sie sie bitten, das EUM-Script in ihrer Ad-Blocking-Erweiterung zuzulassen.

Welche Fehler können bei einer Anfrage an HTTP auftreten?

Der „ JavaScript “-Agent läuft in dem Webbrowser, der Anfragen an HTTP sendet. Der Agent „ JavaScript “ erfasst die häufigen Fehler von HTTP, darunter den Client-Fehler mit dem HTTP -Antwortcode 4XX und den Server-Fehler mit dem HTTP -Antwortcode 5XX, die durch den HTTP -Antwortcode identifiziert werden. Der Agent kann außerdem die folgenden Fehler erkennen, wenn der Webbrowser unvollständige HTTP -Anfragen verarbeitet:

Welche HTTP-Header werden verwendet?

Der „ JavaScript “-Agent verwendet die folgenden „ HTTP “-Header, um eine Korrelation mit dem Backend zu erreichen.

  • Anforderungsheader (an das Back-End):
    • X-INSTANA-T
    • X-INSTANA-S
    • X-INSTANA-L
  • Antwortheader (zum Front-End):
    • Server-Timing

Warum gibt es keine Daten für GoogleBot und Ähnliches?

Da es Bots gibt, die die APIs von JavaScript manipulieren, um vorhersehbare oder reproduzierbare Ergebnisse zu erzielen, erkennen und blockieren der Agent und die Server von Instana JavaScript die Datenerfassung durch verschiedene Bots. Das Blockieren der Datenerfassung wirkt sich positiv auf das Scraping des Web aus, führt aber leider zu Problemen, wenn die Benutzererfahrung überwacht werden soll. Zum Beispiel: GoogleBot's JavaScript API :

  • Date.now() gibt nicht die aktuelle Uhrzeit in Millisekunden zurück, sondern einige scheinbar festgelegte Zeitmarken. Daher kann die Dauer, die durch die Streunung von zwei Zeitmarken aufgezeichnet wird, die von Date.now() angefordert werden, nicht anerkannt werden.
  • Math.random() und crypto.getRandomValues() geben Werte aus einem Pool vordefinierter Werte zurück. Dies führt zu Problemen mit clientseitig generierten IDs, z. B. zu falschen Back-End-Korrelationsreferenzen.

An welche Endpunkte von „ HTTP “ senden Benutzer Anfragen (für „ SaaS “)?

Sie müssen keinerlei Einstellungen vornehmen, damit die Daten korrekt an die Plattform „ SaaS “ von Instana übertragen werden. Die Instana-Benutzerschnittstelle stellt immer das korrekte Tracking-Snippet dar, das die erforderlichen URLs enthält. Weitere Informationen zu Endpunkten finden Sie auf der Seite „Endpunkte für die Website-Überwachung“.

Ist es möglich, die HTTP-Endpunkte (für SaaS) zu verwenden?

Versuchen Sie nicht, die Endpunkte von HTTP über einen Proxy abzurufen. Instana bietet keinen Support für Proxy-Konfigurationen oder für Probleme, die durch die Verwendung eines Proxys entstehen können. Falls Sie dennoch einen Proxy einrichten möchten (oder müssen), könnten Ihnen die folgenden Tipps hilfreich sein:

  • Legen Sie die richtigen HTTP-Header für Host fest.
  • Beachten Sie den Unterschied zwischen den eum.instana.io -und eum-{region}.instana.io -Servern.
  • Stellen Sie sicher, dass die Server unter Instana die IP-Adressen der Benutzer erkennen. Sende einen X-FORWARDED-FOR Header mit der IP-Adresse des Benutzers an die Server von Instana. Alternativ können Sie einen „ X-REALER-IPHTTP “-Header (nicht X-REAL-IP) an die „ Instana “-Server senden, der die IP-Adresse des Benutzers enthält.
  • Geben Sie alle HTTP-Header durch, die die Instana-Server in den Antwortteil aufnehmen.
  • Führen Sie kein Caching im Proxy durch.

Werden Daten von WebSockets erfasst?

Der JavaScript-Agent von Instana erfasst keine Informationen über WebSockets. WebSockets verfügen über kein semantisches Modell, das Instana effektiv überwachen könnte, abgesehen von den Nachrichten, die zwischen Client und Server ausgetauscht werden. Da „ WebSocket “-Nachrichten beliebige Formate haben (lediglich Zeichenfolgen oder Bytes), kann „ Instana “ keinerlei Rückschlüsse auf den Status der Anfrage, der Antwort, des Erfolgs oder des Fehlers ziehen.

Obwohl Sie theoretisch jede Nachricht, die über WebSockets gesendet oder empfangen wird, an die Server von Instana weiterleiten können, bringt eine solche Weiterleitung mehrere Probleme mit sich:

  • Hohe Wahrscheinlichkeit der Erfassung sensibler Daten, die niemals in einem Überwachungssystem landen dürfen.
  • Von jedem Nutzer werden umfangreiche Datenmengen erfasst, was für die Nutzer mit einem zusätzlichen Aufwand verbunden ist.
  • Typischerweise ein geringes Signal-Rausch-Verhältnis in den erfassten Daten.
  • Da in den Daten kein standardisiertes semantisches Modell vorhanden ist, kann Instana den Zugriff auf die Daten für Sie nicht optimieren.

Aus diesen Gründen erfasst Instana keine Daten über WebSockets automatisch. Einige Kunden implementieren jedoch Anforderungs-oder Antwort-und Subskriptionsmechanismen in WebSockets. Weitere Informationen finden Sie in der Dokumentation zu benutzerdefinierten Ereignissen unter API. Mit dem benutzerdefinierten Ereignis „ API “ können Sie eine Backend-Korrelation für Systeme mit „ WebSocket-based “-Anfragen oder -Antworten realisieren.

Warum ist eum.js der Initiator aller XMLHttpRequest- und Fetch-Aufrufe?

Instana JavaScript Der Agent nutzt die XMLHttpRequest und fetch APIs der Webbrowser, um Informationen über die von Websites ausgeführten Aufrufe zu erhalten. Durch diese Konfiguration wird der „ JavaScript “-Agent ( eum.js ) in den Entwicklertools des Webbrowsers als Auslöser angezeigt, wie der folgende Screenshot zeigt. Der Agent „ Instana “ JavaScript scheint diese Anrufe zu tätigen. Diese Aufrufe werden jedoch von der Website getätigt, die Instana überwacht.

Der „ JavaScript “-Agent von Instana kommuniziert direkt nur mit Servern, die im „ JavaScript “-Snippet definiert sind, das in der Benutzeroberfläche von „ Instana “ angezeigt wird oder für lokale Bereitstellungen angepasst wurde.

Abbildung 2. Die Chrome-Entwicklertools zeigen „ eum.js “ als Urheber aller „ XMLHttpRequest “- und „fetch“-Aufrufe an
Chrome Developer-Tools mit eum.js als Initiator aller XMLHttpRequest -und Fetch-Aufrufe

Was passiert bei Nutzern mit einer schlechten Internet- oder Netzwerkverbindung?

Zwei Fälle sind möglich:

  1. Die Website-Besucher sind möglicherweise nicht in der Lage, unseren JavaScript-Agenten herunterzuladen. In diesen Fällen können keine Daten erfasst werden.
  2. Datenübertragungsanforderungen von Ihren Websitebesuchern an unsere Server funktionieren möglicherweise nicht. Instana In diesen Fällen wird kein erneuter Zustellversuch unternommen, und Instana speichert die Daten auch nicht für eine spätere Zustellung.

Warum enthält unser Script-Tag das Attribut defer?

Häufig werden Fragen zum „ JavaScript “-Snippet, zu dessen Struktur und zu dem von „ Instana “ gewählten Ansatz gestellt. Das Snippet ist sorgfältig entworfen, um die Bedürfnisse der Kunden auszugleichen. Die folgenden Abschnitte geben einige Einblicke in diese Fragen.

Tradeoffs

Unter Website-Überwachung versteht man die Erfassung aller relevanten Daten bei möglichst geringen Auswirkungen auf die Endnutzer, was einen Kompromiss darstellt. Der Kompromiss ist am einfachsten mit dem JavaScript -Snippet zu beachten, das Benutzer auf ihren Websites einbetten. Die folgenden Überlegungen haben zu dem aktuellen Entwurf geführt.

Umfassende Überwachung des JavaScript-Initialisierungsprozesses

Moderne Einzelseitenanwendungen führen JavaScript als Teil ihres Initialisierungsprozesses aus. Häufig umfasst dieser Initialisierungsprozess „ HTTP “-Anfragen. Kunden erwarten detaillierte Überwachungsdaten für diesen Initialisierungsprozess. Zwar kann ein Teil der Überwachungsdaten nachträglich erfasst werden, doch lassen sich einige wichtige Informationen (beispielsweise detaillierte Einblicke in Anfragen an HTTP und Backend-Korrelationen) nur erfassen, wenn der Agent vor dem Aufruf der Website JavaScript ausgeführt wird.

Ausfallsicherheit bei Serverausfällen

Neben der Blockierung des HTML-Parsers kann das Fehlschlagen des Abrufs einer JavaScript -Datei dramatische Auswirkungen auf das Laden von HTML-Dokumenten haben, wie z. B. das Blockieren der verschiedenen Ereignisse, die im Rahmen des Parsing-, Lade-und Ausführungsprozesses für HTML-Dokumente und über diese defekte Website auftreten.

Synchrone JavaScript-Agent-API-Aufrufe

Der „ JavaScript “-Agent von Instana bietet eine Schnittstelle ( API ), über die er konfiguriert, Seitennamen festgelegt, benutzerdefinierte Ereignisse ausgelöst und vieles mehr werden kann. Der „ API “ ist benutzerfreundlich und einfach zu bedienen; seine Verwendung ist vom Ladevorgang des „ JavaScript “-Agenten unabhängig.

Insgesamt eine gute Erfahrung

Instana verfügt über eine große Bandbreite an Nutzern mit unterschiedlichen Fähigkeiten und unterschiedlichem Fachwissen in den Bereichen Webentwicklung und Webüberwachung. Die Lösung muss verschiedene Anwendungsfälle erfüllen.

Abwägung der Vor- und Nachteile unseres Ansatzes

Verwenden Sie unter Instana ein Skript-Tag, das das defer Attribut enthält. Dieses Attribut verhindert, dass der HTML-Parser blockiert wird, und ermöglicht gleichzeitig den meisten Kunden von Instana eine umfassende Überwachung des Initialisierungsprozesses von JavaScript. In manchen Fällen reicht ein async Script-Tag aus. In anderen Szenarios ist ein Parser-blockierendes, synchrones Herunterladen und Ausführen von Scripts ausreichend. Bei den meisten modernen Web-Frameworks und Ansätzen für ihre Ladeprozeduren ist das Attribut defer am effektivsten.

Ein weiteres Problem ist die Ausfallsicherheit bei Serverfehlern. Wenn der „ JavaScript “-Agent von „ Instana “ nicht geladen werden kann, können erweiterte „ JavaScript-loading “-Mechanismen den Agent ausgleichen. Ein hervorragender CDN-Partner (Akamai) und großzügige Cache-Control-Header, die auch veraltete Inhalte berücksichtigen, beugen diesem Risiko vor, ohne den ständigen Mehraufwand, der durch die Mechanismen der erweiterten Cache- JavaScript-loading s entsteht.

Entfernen oder Ersetzen des defer Attributs

Wie in den vorherigen Abschnitten erwähnt, wird die Entscheidung, async over deferzu verwenden oder keines der beiden zu verwenden, auf die aufgelisteten Kompromisskriterien reduziert. Alle drei Lademethoden sind für den „ JavaScript “-Agenten von „ Instana “ vollkommen geeignet. Allerdings sind die Verfügbarkeit der Instrumentierungen und Hooks von „ Instana “ sowie die Verfügbarkeit von Überwachungsdaten davon betroffen. Wenn Sie das Ladeverhalten optimieren möchten, überprüfen Sie Folgendes:

Weisen Sie window.fetch einer lokalen Variablen zu und verwenden diese Variable dann weiter, um HTTP-Anfragen zu stellen? Vergewissern Sie sich, dass der „ Instana “-Agent geladen ist, bevor Sie die Zuweisung vornehmen window.fetch. Alternativ können Sie den Code so ändern, dass immer der globale verwendet wird. Apollo-link-http ist eine Bibliothek, die dieses Muster verwendet.

  • Führen Sie „ HTTP “-Anfragen durch, bevor das Ereignis „ DOMContentLoaded “ ausgelöst wird? Wenn Sie das Attribut „deferred“ entfernen, erhalten Sie möglicherweise einen besseren Einblick.

Debugprotokollierung für den JavaScript-Agenten aktivieren

„ JavaScript “ von Instana unterstützt Debug-Protokollierung, mit der Sie zusätzliche Einblicke in Fehlkonfigurationen, Datenübertragung, Limits und vieles mehr gewinnen können. Um die Debug-Protokollierung für den „ JavaScript “-Agenten zu aktivieren, ändern Sie im Überwachungs-Snippet den Wert „ URL “ in den „ JavaScript “-Agenten.

Bearbeiten Sie das Überwachungssnippet und ersetzen Sie die Dateireferenzen von eum.min.js auf eum.debug.js, wie im folgenden Snippet gezeigt.

<!-- before -->
<script defer crossorigin="anonymous" src="https://{{hostname}}/eum.min.js"></script>

<!-- after -->
<script defer crossorigin="anonymous" src="https://{{hostname}}/eum.debug.js"></script>
 

Gibt es Grenzwerte für die Menge der gesammelten Daten?

Der Agent „ JavaScript “ verfügt über ein Datenerfassungslimit pro Browser-Registerkarte, um „ Instana “-Systeme und -Benutzer vor Fehlkonfigurationen und zirkulären Überwachungsmustern zu schützen. Es gibt folgende Grenzwerte:

  • Jeder übertragene Beacon (außer für Seitenressourcen, hier gelten zusätzlich zu den später erwähnten spezifischeren Regeln weitere Regeln)
    • max. pro 10 s: 128
    • max. pro 10 min: 4096
    • Maximale Seitenlast: 8096
  • Seitenwechsel
    • max. pro 10 s: 32
    • Max. pro 10 Min.: 128
  • Angepasste Ereignisse
    • max. pro 10 s: 32
    • Max. pro 10 Min.: 128
  • HTTP Anruf-Beacons, die durch die Verwendung von window.fetch
    • max. pro 10 s: 32
    • Max. pro 10 Min.: 256
  • HTTP Anruf-Beacons, die durch die Verwendung von window.XMLHttpRequest
    • max. pro 10 s: 32
    • Max. pro 10 Min.: 256

Sensible Daten

Erfassen Sie Daten, anhand derer Nutzer eindeutig identifiziert werden können?

Standardmäßig enthält der Agent „ Instana “ JavaScript keine Daten, anhand derer Benutzer eindeutig identifiziert werden können. Zudem wendet der Agent unter InstanaJavaScript keine Techniken wie Geräte- oder Browser-Fingerprinting an.

Benutzerspezifische Daten können über die Benutzer- API an Instana übermittelt werden.

Was tun Sie mit den Benutzerdaten, die an Instana übertragen werden?

Die Benutzer- API kann von Kunden so konfiguriert werden, dass sie Informationen zur Identifizierung des Benutzers an Instana übermittelt. Diese Informationen werden nur verwendet, um die im Produkt sichtbaren Funktionen bereitzustellen. Instana interpretiert diese Daten nicht auf andere Weise und korreliert auch nicht über mehrere Kunden hinweg.

Ist es möglich, Benutzerdaten zu löschen, nachdem diese an Instana übertragen wurden?

Instana unterstützt gelegentliche Löschanträge, beispielsweise zur Einhaltung der DSGVO. Sollten Sie mit häufigen oder regelmäßigen Löschanfragen rechnen, übermitteln Sie stattdessen anonymisierte Daten an Instana (z. B. gehashtete Benutzer-IDs).

Werden IP-Adressen anonymisiert?

IP-Adressen werden anonymisiert. Standardmäßig werden das letzte Oktett von IPv4 -Adressen und die letzten 80 Bit von IPv6 -Adressen auf Nullen gesetzt. Strengere Anonymisierungsregeln können über die Registerkarte „Konfiguration“ im Dashboard einer Website innerhalb der Benutzeroberfläche von „ Instana “ konfiguriert werden.

Wie erhält man Zugriff auf die IP-Adressen der Nutzer?

Der JavaScript -Agent hat keinen Zugriff auf IP-Adressen. Auf Benutzer-IP-Adressen wird über die Netzverbindungen zugegriffen, die sie zu den Servern herstellen. Die von den JavaScript -Agenten empfangenen Daten werden von den Servern mit anonymisierten IP-Adressenaufbereitet.

Verwendet Instana Cookies?

Die Website-Überwachung selbst verwendet keine Cookies.

Verwendet „ InstanalocalStorage “ oder sessionStorage?

Standardmäßig nutzt der Agent „ Instana “ JavaScript die Technologien localStorage sessionStorage und nicht. localStorage wird jedoch verwendet, wenn Sie die Sitzungsüberwachungaktivieren. Standardmäßig ist die Funktion zur Sitzungsverfolgung im Agenten „ Instana “ JavaScript nicht verfügbar.

Wo speichert „ Instana “ die Daten zur Website-Überwachung?

Wo die Website-Überwachungsdaten gespeichert werden, hängt von der jeweiligen Instana-Installation ab. In der Regel werden die Daten entweder in der Amazon- oder der Google -Cloud gespeichert, und zwar entweder in deren europäischer oder US-amerikanischer Region. Anhand der im Tracking-Snippet unter Instana angezeigten „ reportingUrl “ sowie der Liste der Berichts-Endpunkte für JavaScript -Agenten können Sie feststellen, wo Ihre Daten gespeichert sind.

Speichert CDN (Akamai) Nutzerdaten?

Die Benutzer laden den JavaScript-Agenten über das von Akamai bereitgestellte Content-Delivery Network (CDN) herunter. Akamai sammelt und speichert persönliche Daten zum Servicebetrieb. Weitere Informationen finden Sie in den Akamai-FAQ.

Auswirkungen der Websicherheit

Ich habe bereits eine Content-Security-Policy eingerichtet. Muss ich noch etwas tun?

Der JS-Agent „ Instana “ wird asynchron von geladen eum.instana.io und kann über „ HTTP “ (S) geladen werden. Überprüfen Sie, ob das Laden von Scripts aus dieser Domäne möglich ist.

Daten werden bei Bildladungen, GET-Anfragen an HTTP und Anfragen an POST (mit XMLHttpRequest) an Instana übermittelt. Die Ursprünge, die für die Datenübertragung verwendet werden, werden im Tracking-Snippet angezeigt.

Die folgende Definition einer Content-Security-Policy zeigt, was für das SaaS-Produkt von Instana erforderlich ist:

script-src *.instana.io;
img-src *.instana.io;
connect-src *.instana.io;
 

Bei der selbst gehosteten Version wird der JS-Agent „ Instana “ vom selbst gehosteten Backend geladen und nicht von eum.instana.io der Domain. Um das Agent-Skript zu laden, müssen die vorangehenden Content-Security-Policy*.instana.io Definitionswerte wie durch die spezifische Netzwerkdomäne ersetzt werden, die vom selbst gehosteten Backend verwendet wird.

Wie wirkt sich die Same-Origin-Policy auf die Website-Überwachung aus?

Die Same-Origin-Policy ist eines der grundlegendsten Sicherheitskonzepte für Websites. Jede Website unterliegt der Richtlinie, da alle Web-Browser sie durchsetzen. Als Anbieter von Website-Überwachungsdiensten hat Instana keinen Einfluss auf die Sicherheit Ihrer Website oder Ihres Browsers. Instana kann nur innerhalb der vorgegebenen Sicherheitsbeschränkungen funktionieren. Leider schränkt dies die Überwachungsfunktionen von „ Instana “ ein.

  • Browser beschränken den Zugriff auf Fehlermeldungen und Stack-Traces auf Scripte mit gleichem Ursprung.
  • Browser schränken die zulässigen HTTP-Header für Cross-Origin-Anforderungen ein. Daher ist eine Back-End-Korrelation nicht immer möglich.

Um diese Funktionen bei mehreren Ursprüngen zu nutzen, können Sie Cross-Origin Resource Sharing ( CORS ) verwenden. CORS ist ein Mechanismus, der kontrollierte Ausnahmen vom Sicherheitsmechanismus der Same-Origin-Policy festlegt. In der folgenden Abbildung wird detailliert beschrieben, was getan werden muss, um die von der Same-Origin-Policy auferlegten Einschränkungen anzugehen.

Weitere Informationen zu den Backend-Korrelationsmechanismen von „ Instana “ und dazu, wie sich die Web-Sicherheit auf diese Mechanismen auswirkt, finden Sie unter „Backend-Korrelation “.

Abbildung 3. Endbenutzerüberwachung mit domänenübergreifender Unterstützung
Abbildung zur Veranschaulichung der domänenübergreifenden Endbenutzerüberwachung.

Warum sind detaillierte Aufschlüsselungen des Ressourcenabrufs nicht immer verfügbar?

Die Verfügbarkeit von Einblicken in Netzzeiten, Cachingstatistiken und Assetgrößen hängt von Funktionen für das Ressourcentimingab. Diese Funktionen sind in den meisten modernen Web-Browsern verfügbar, wenn sie von derselben Ursprungsrichtlinie zugelassen werden.

Um Einblicke in die Herkunft https://cdn.example.com:443 von ressourcenübergreifenden Ressourcen zu ermöglichen (beispielsweise die Herkunft eines HTML-Dokuments, das von einer anderen Domain https://example.com:443 geladen wird), können Sie den Header Timing-Allow-Origin „ HTTP “ verwenden. Die folgende Abbildung zeigt, wie der Header festgelegt wird. Weitere Informationen finden Sie auch in der Spezifikation des Ressourcentimings.

Abbildung 4. Endbenutzerüberwachung mit domänenübergreifender Unterstützung
Abbildung zur Veranschaulichung der domänenübergreifenden Endbenutzerüberwachung.

Wie kann ich mir einen Überblick über Skriptfehler verschaffen?

Bei Websites, auf denen viele Scripts von Drittanbietern eingebettet sind, treten in der Regel immer mehr Scriptfehler auf. Script Error gibt JavaScript -Fehler in Scripts anderer Anbieter an. Aus Sicherheitsgründen schränken Web-Browser den Zugriff auf JavaScript -Fehler von Scripts anderer Anbieter ein, indem sie die tatsächliche Fehlernachricht durch Script Error ersetzen und den Stack-Trace löschen.

Im Web können Sie mithilfe der folgenden Methoden Einblicke in Script Errorgewinnen:

  • Sie können Webbrowser anweisen, Fehlermeldungen und Stack-Traces offenzulegen, indem Sie angeben, dass das Script des Drittanbieters keine vertraulichen Daten enthält.
  • Sie können Schlupflöcher im Websicherheitsmodell verwenden (nicht empfohlen und funktioniert nicht garantiert).

Es wird empfohlen, die erste Option zu verwenden, da dies die designierte und richtige Methode ist, um Script Error Insights zu erhalten. Gehen Sie wie folgt vor, um die erste Option zu implementieren:

  • Fügen Sie ein crossorigin="anonymous"-Attribut zu Script-Tags hinzu.
  • Stellen Sie sicher, dass die HTTP-Antwort mit der Quelle des Scripts einen Access-Control-Allow-Origin-Antwort-Header sendet.
Abbildung 5. Fehlerverfolgung über verschiedene Ursprünge hinweg
Bild zur Erläuterung der Cross-Origin-fähigen Fehlerverfolgung.

Sollte ich „ Instana “ für meine Anwendungsfälle im Bereich Business Analytics nutzen?

Einige Anwendungsfälle im Bereich Business Analytics lassen sich mit den Daten abdecken, die von Instana erfasst werden. Instana konzentriert sich darauf, ein Produkt mit erstklassiger Leistung anzubieten, und ist daher kein Ersatz für ein spezielles Business-Analytics-Produkt.

JavaScript-Stack-Trace-Übersetzung

Was ist JavaScript-Stack-Trace-Übersetzung?

Die JavaScript-Stack-Trace-Übersetzung stellt innerhalb von Instana klare und besser verwertbare Stack-Traces bereit.

Before:
at http://shop-demo-app.instana.io/static/js/main.b1510333.chunk.js:1:1559

After:
at ProductDetails.js 26:11
 

Das Problem mit nicht übersetzten Stack-Trace-Zeilen ist, dass die Fehler nicht verwertbar sind. Entwickler arbeiten mit vielen (in der Regel kleinen) Dateien. Aus Leistungsgründen werden diese Dateien in einem gebündelten und minimierten Format an die Browser der Nutzer übermittelt, was dazu führt, dass Dateinamen, Zeilen- und Spaltennummern in den Stack-Traces nicht lesbar oder verwertbar sind.

Bei einem übersetzten Stack-Trace ist klar, dass der Fehler, der in …/main.b1510333.chunk.js:1:1559 auftritt, tatsächlich at ProductDetails.js 26:11ist.

Wie funktioniert die JavaScript-Stack-Trace-Übersetzung?

Die Übersetzung erfolgt mithilfe von Quellzuordnungen. Quellenmaps ermöglichen es uns, nicht umsetzbare Stack-Traces in umsetzbare Stack-Traces zu übersetzen. Genauer gesagt, ermöglichen sie die Übersetzung von Verweisen auf Dateien, Namen, Zeilen und Spalten in die tatsächlichen Quelltext-Pendants.

Um dies zu erreichen, führt „ Instana “ die folgenden Schritte aus:

  1. Der JavaScript-Agent meldet JavaScript-Fehler an Instana-Server. Angenommen, der Stack-Trace enthält die Zeile at http://shop-demo-app.instana.io/static/js/main.b1510333.chunk.js:1:1559.
  2. Die Server von Instana versuchen, die Datei „ JavaScript “ herunterzuladen, um die für diese Datei zuständige Quellkarte zu ermitteln.
  3. Die Antwort von „ HTTP “ wird analysiert, und „ Instana “ sucht nach Verweisen auf Quellzuordnungen.
  4. Wenn auf eine Source-Map-Datei verwiesen wird, lädt Instana diese Datei über eine GET-Anfrage an HTTP herunter oder durchsucht die vom Benutzer hochgeladenen Source-Map-Dateien.
  5. Wenn der Download oder die Suche erfolgreich ist, wird die Quellenmapdatei verwendet, um die Datei, den Namen, die Zeile und die Spalte zu übersetzen.

Sehen Sie sich die folgenden Schritte für die Stack-Trace-Zeile at http://shop-demo-app.instana.io/static/js/main.b1510333.chunk.js:1:1559an.

  1. Den Instana-Servern wird ein Fehler gemeldet.
  2. Die Instana-Server geben eine HTTP-GET-Anforderung an http://shop-demo-app.instana.io/static/js/main.b1510333.chunk.js aus.
  3. Die Quellenzuordnungsreferenz //# sourceMappingURL=main.b1510333.chunk.js.map befindet sich in der JavaScript -Datei.
  4. Die Source-Map-Datei http://shop-demo-app.instana.io/static/js/main.b1510333.chunk.js.map wird über eine GET-Anfrage an HTTP heruntergeladen oder ist in den hochgeladenen Source-Map-Dateien zu finden.
  5. Die Quellenzuordnung wird syntaktisch analysiert und der Stack-Trace lesbar gemacht.

Wie genau ruft Instana Dateien von unseren Servern ab?

Sobald „ Instana “ den Stack-Trace erkennt, sendet es automatisch Anfragen an „ HTTP “, um die Dateien „ JavaScript “ und die Source-Map-Dateien abzurufen. Der folgende Aufruf zeigt die nächste Darstellung der durchgeführten Aufrufe:

curl -H 'Accept: */*' \
  # Use a fake user-agent to bypass simple bot blockers
  -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36' \
  {{url of JavaScript or source map files}}
 

Mit dem obigen Befehl können Sie ermitteln, welche Konfigurations Instana en erforderlich sind, um die Dateien „ JavaScript “ und „source map“ von Ihren Servern herunterzuladen. Die Anfragen an „ HTTP “ werden von Servern gesendet, die unter AWS ( Amazon Web Services ) oder Google Cloud betrieben werden. Fortgeschrittene Mechanismen zur Bot-Erkennung blockieren möglicherweise Anfragen, die von AWS oder Google Cloud stammen. Erwägen Sie daher, zusätzliche Header zu konfigurieren, die Instana an Ihre Server senden muss, um Mechanismen zur Bot-Erkennung zu umgehen.

Wie kann ich sicherstellen, dass die „ Instana “-Server eine Verbindung über TCP oder TLS herstellen können?

Die Server unter Instana senden Anfragen von Servern unter AWS oder Google Cloud. Daher sind die Dateien „ JavaScript “ und „source map“ über das Internet abrufbar. Außerdem müssen Sie sicherstellen, dass Ihr Server über eine funktionierende „ TLS “-Konfiguration mit einer vollständigen Zertifikatskette verfügt. Sie können auf mögliche Probleme mit „ TLS “ prüfen, indem Sie den kostenlosen „ SSL “-Test von SSL Labs/Qualys nutzen oder die folgenden Befehle ausführen:

openssl s_client -showcerts -connect {{YOUR_DOMAIN_HERE}}:443
 

Warum treten bei der Verwendung des EUM-Snippets „ Instana “ in strengen Umgebungen (z. B. bei SCOM- oder XML -Parsern) Syntaxfehler vom Typ „ JavaScript “ auf, und wie kann ich das beheben?

In strengen Umgebungen, wie beispielsweise der System Center Operations Manager (SCOM)-Webkonsole, kann der EUM- JavaScript -Snippet „ Instana “ einen Syntaxfehler auslösen. Dieser Fehler tritt auf, weil das Snippet auf die automatische Semikoloneinfügung (ASI) von JavaScript's zurückgreift, die in manchen Umgebungen bei der Vorverarbeitung, Umwandlung oder Validierung von JavaScript -Code unterschiedlich behandelt wird.

Problem:

Der ursprüngliche Codeausschnitt enthält folgende Zeile:

n.l = 1 * new Date

Zwar funktioniert dies dank ASI in den meisten Browsern, doch in strengen Umgebungen wird es möglicherweise nicht korrekt verarbeitet, was zu Syntaxfehlern führen kann.

Lösungen:

Wählen Sie einen der folgenden Ansätze, um das Problem zu beheben:

Option 1: Ein Semikolon explizit einfügen

n.l = 1 * new Date;

Option 2: Verwendung der Funktionsaufruf-Syntax

n.l = 1 * new Date();

Option 3: Verwenden Sie „ Date.now ()“ (empfohlen)

n.l = Date.now();

Diese Lösung ist die robusteste, da sie explizit ist, nicht auf ASI oder Typumwandlung beruht und in allen „ JavaScript “-Umgebungen konsistent funktioniert.

Option 4: CDATA verwenden (nur für XHTML- oder „ XML “-Umgebungen)

Wenn Ihre Umgebung Seiten als XHTML ausliefert oder diese über XML -Parser verarbeitet, schließen Sie das Skript in CDATA ein:

<script>
//<![CDATA[
  (function(s,t,a,n){s[t]||(s[t]=a,n=s[a]=function(){n.q.push(arguments)},
  n.q=[],n.v=2,n.l=Date.now());})(window,"InstanaEumObject","ineum");

  ineum('reportingUrl', 'https://<region>.instana.io');
  ineum('key', 'YOUR_KEY');
  ineum('trackSessions');
//]]>
</script>
Hinweis: CDATA behebt Probleme beim Parsen von „ XML “, nicht jedoch Syntaxfehler wie „ JavaScript “. Speziell für die SCOM-Webkonsole sollten Sie die Optionen 1 bis 3 verwenden.

Vollständiges, aktualisiertes Beispiel-Snippet

<script>
  (function(s,t,a,n){s[t]||(s[t]=a,n=s[a]=function(){n.q.push(arguments)},
  n.q=[],n.v=2,n.l=Date.now());})(window,"InstanaEumObject","ineum");

  ineum('reportingUrl', 'https://<region>.instana.io');
  ineum('key', 'YOUR_KEY');
  ineum('trackSessions');
</script>
<script defer crossorigin="anonymous" src="https://eum.instana.io/eum.min.js"></script>

Wann dieser Fix angewendet werden sollte:

Wenden Sie diese Korrektur an, wenn Sie die Bereitstellung in Umgebungen mit strenger Auswertung von „ JavaScript “ vornehmen, wie beispielsweise in Unternehmensverwaltungskonsolen (SCOM), Systemen mit strengen Content Security Policies oder in jeder anderen Umgebung, in der das Standard-Snippet Syntaxfehler verursacht.

Wie kann ich immer die aktuellste Version des EUM-Skripts für „ Instana “ erhalten, ohne die Website zu aktualisieren?

Sie können eine der beiden folgenden Möglichkeiten nutzen, um sicherzustellen, dass Ihre Website stets das aktuellste EUM-Skript von Instana lädt:

  • Hosten Sie das Skript auf Ihrem eigenen CDN oder Server

    Sie können das neueste EUM-Skript für „ Instana “ herunterladen und auf Ihrem eigenen CDN oder Server hosten, um die volle Kontrolle über Updates zu behalten, ohne den Code Ihrer Website ändern zu müssen.

  1. Laden Sie das neueste Skript unter Instana herunter.
  2. https://yourdomain.com/js/eum.min.jsLaden Sie das Skript auf Ihre eigene Domain oder Ihr CDN hoch (zum Beispiel ).
  3. Verweise in deinem HTML-Code auf das Skript.
    <script defer src="https://yourdomain.com/js/eum.min.js"></script>
Wenn Sie das EUM-Skript „ Instana “ auf Ihrem eigenen CDN oder Server hosten, profitieren Sie von mehreren wesentlichen Vorteilen:
  • So müssen Sie Ihre Website nicht bei jeder neuen Skriptversion aktualisieren.
  • Stellt sicher, dass das Skript von einem vertrauenswürdigen, selbst verwalteten Host bereitgestellt wird.
  • Die Anforderung für „ Subresource Integrity “ ( SRI ) entfällt, da die Website über Ihre eigene Domain und nicht über einen Drittanbieter bereitgestellt wird.
  • Verwenden Sie die Website Instana URL ohne Angabe einer Version
    Sie können das EUM-Skript „ Instana “ direkt von der offiziellen Seite InstanaURL aufrufen, ohne eine Version anzugeben:
    <script defer src="https://eum.instana.io/eum.min.js"></script>

    Wenn Sie das EUM-Skript „ Instana “ direkt über die offizielle URL InstanaURL aufrufen, ohne eine Version anzugeben, lädt der Browser automatisch die neueste Version.

    Bei dieser Methode können Sie die Skriptintegrität nicht mit „ SRI “ überprüfen.