JavaScript-Agent-API
Die Agent-API JavaScript und die Web-REST-API sind unterschiedlich. Die Web-REST-API kann verwendet werden, um Abfragen zu den gesammelten Daten durchzuführen und eine neue Website zu konfigurieren.
Der Agent JavaScript stellt eine API bereit, die auf überwachten Websites verfügbar ist. Ihre Website kann mit der API des JavaScript Agenten interagieren, um die gesammelten Daten anzureichern oder zu konfigurieren, benutzerdefinierte Ereignisse zu senden und vieles mehr.
JavaScript agent-Versionen
Sie können alle Versions-Updates, Funktionen und Fehlerbehebungen für den Instana Javascript (Weasel) Agent in der Changelog-Datei auf GitHub einsehen.
Das globale Objekt
Der Instana-JavaScript-Agent definiert eine neue globale Funktion mit dem Namen ineum. Diese Funktion steht unmittelbar nach dem JavaScript-Snippet im HTML-Dokument zur Verfügung. Das bedeutet, dass die Funktion auch dann existiert, wenn der Agent selbst nicht heruntergeladen wird. Dies wurde so implementiert, damit ineum-API-Aufrufe einfach und effizient sind.
Wenn der Agent noch nicht heruntergeladen ist, stellt ineum alle ausgeführten API-Aufrufe in eine Warteschlange. Nachdem der Agent heruntergeladen wurde, werden diese API-Aufrufe synchron in der Reihenfolge ausgeführt, in der sie getätigt wurden. Von diesem Zeitpunkt an wird ineum durch eine Funktion ersetzt, die API-Aufrufe sofort ausführt.
API-Struktur
Alle Aufrufe von ineum folgen der gleichen Struktur wie dargestellt:
ineum(commandName, ...args);
Parameter
In der folgenden Tabelle sind die Parameter aufgeführt:
| Parameter | Beschreibung |
|---|---|
commandName (string) |
Bezeichnet den auszuführenden Befehl. Zum Beispiel, um Metadaten zu setzen oder einen Fehler zu melden. |
...args |
Die tatsächlichen Argumente für den jeweiligen Befehl. Die Anzahl der Argumente und deren Typ sind für jeden Befehl spezifisch. |
ineum gibt nie etwas zurück (außer dem Befehl getPageLoadId).TypeScript-Typdefinitionen
TypeScript benutzer können die vom Projekt bereitgestellten Typdefinitionen installieren und verwenden DefinitelyTyped projekt bereitgestellt werden.
npm install --save @types/ineum
APIs
In den folgenden Abschnitten werden die verfügbaren Befehlsnamen mit ihren Argumenten beschrieben.
Überwachungsschlüssel
Überwachungsschlüssel können über den Befehl key eingestellt werden. Der Überwachungsschlüssel ist sichtbar, wenn Sie Websites in der Instana-Benutzeroberfläche konfigurieren.
ineum('key', trackingKey);
Parameter
In der folgenden Tabelle sind die Parameter aufgeführt:
| Parameter | Beschreibung |
|---|---|
trackingKey (string) |
Der Überwachungsschlüssel für die Websitekonfiguration in Instana. |
Beispiel
Innerhalb der Benutzerschnittstelle von Instana wird eine korrekte Konfiguration angezeigt.
Überwachungsschlüssel wechseln
Modellieren Sie jede Ihrer Umgebungen (Produktion, Staging und Test) als eindeutige Websites in Instana, um je nach Bereitstellung unterschiedliche Überwachungsschlüssel für den Agenten JavaScript zu konfigurieren. Wenn die Überwachungsschlüssel bereits vorhanden sind, speichern Sie die Überwachungsschlüssel in Ihrem Konfigurationsmanagementsystem und verwenden Sie den gespeicherten Wert, um den Überwachungsschlüssel zu ersetzen.
Wenn die Website nur aus statischen Dateien besteht oder kein Konfigurationsmanagementsystem zur Verfügung steht, können Sie ein Tool wie Google Tag Manager verwenden, mit dem Sie Code-Snippets für Ihre Website verwalten können. Alternativ können Sie die Überwachungsschlüssel auch fest codieren und eine Prüfung im Webbrowser durchführen.
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');
}
Berichts-URL
Beacons werden über HTTP GET und POST an das Reporting URL übertragen, um die Überwachungsdaten an Instana zu liefern.
ineum('reportingUrl', reportingUrl);
Parameter
In der folgenden Tabelle sind die Parameter aufgeführt:
| Parameter | Beschreibung |
|---|---|
reportingUrl (string) |
Die URL, an die die Überwachungsdaten der Website gesendet werden. |
Beispiel
Eine korrekte Konfiguration wird in der Instana-Benutzeroberfläche für die Benutzer des Produkts SaaS angezeigt. Lokale Benutzer müssen die richtige URL anhand ihres konfigurierten EUM-Endpunkts identifizieren.
Mehrere Backends
In einigen Fällen kann es wünschenswert sein, dass ein JavaScript Agent an mehrere Backends berichtet. In diesem Fall verwenden Sie den Befehl reportingBackends , damit der Agent JavaScript an mehrere Backends berichtet.
ineum('reportingBackends', reportingBackends);
Parameter
In der folgenden Tabelle sind die Parameter aufgeführt:
| Parameter | Beschreibung |
|---|---|
reportingBackends (ReportingBackend[]) |
Ein Array von ReportingBackend Objekten. Jedes der Objekte definiert ein Backend, an das die Überwachungsdaten der Website gesendet werden. |
Das Objekt ReportingBackend ist wie abgebildet:
{
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.
}
Der Befehl reportingBackends ist mit Instana Release 230 und höher verfügbar.
Beispiel
ineum('reportingBackends', [
{ reportingUrl: 'http://backend1.example.com', key: 'monitoring key 1' },
{ reportingUrl: 'http://backend2.example.com', key: 'moniroting key 2' }
]);
reportingBackends hat Vorrang vor dem Befehl reportingUrl . Nach dem Aufruf des Befehls reportingBackends wird jeder Aufruf des Befehls reportingUrl ignoriert.Seite
Instana kann Website-Messdaten nach logischen Seiten segmentieren. Dazu benötigt es einen Hinweis auf die Seite, die der Nutzer gerade anschaut. Dieser Seitenname kann mit dem Befehl page festgelegt werden. Stellen Sie die page so früh wie möglich ein. Sie können die page ändern, um Änderungen am Dokument darzustellen (z. B. bei einseitigen Anwendungen). Dies ermöglicht es Instana, zusätzlich zum Laden der Seite auch die Seitenübergänge zu verfolgen.
ineum('page', pageName);
Seitenübergangsereignisse werden immer dann aufgezeichnet, wenn der Seitenname über die API geändert wird - mit Ausnahme des ersten Aufrufs dieser API während der Ladephase der Seite.
Um Seiten zu definieren, verwenden Sie logische Namen wie product detail page oder payment selection anstelle von window.title oder window.href. Die Verwendung von product detail page oder payment selection führt zu weniger Seiten, die einen direkten Bezug zum bestehenden Code haben. Die Verwendung von window.title oder window.href hingegen führt zu zahlreichen nachverfolgten Seiten, die in den meisten Fällen von Nutzen sind, da window.title Produktnamen enthält.
Instana bietet Beispielprojekte, die zeigen, wie man sinnvolle Seitennamen für verschiedene Frameworks und Bibliotheken sammelt. Stellen Sie eine Pull- oder Support-Anfrage für ein fehlendes Framework oder eine Bibliothek.
Parameter
In der folgenden Tabelle sind die Parameter aufgeführt:
| Parameter | Beschreibung |
|---|---|
pageName (string) |
Der Name der Seite. |
Beispiel
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');
Automatische Seitenerkennung
Die Website-Überwachung von Instana erkennt automatisch Seitenänderungen bei einseitigen Webanwendungen. Diese Funktion wird seit der Website JavaScript agent 1.7.1 unterstützt.
Für JavaScript agent 1.8.0 und höher werden die Werte für die Seitenübergangsdauer automatisch erfasst, wenn es sich bei Ihrer Website um eine Single Page Application (SPA) handelt und die automatische Seitenerkennung aktiviert ist. Hier wird die Zeit angegeben, die für einen Seitenwechsel benötigt wird.
Die automatische Seitenerkennung dient zur Verfolgung und Aufzeichnung von Seitenwechselereignissen und diese Funktion ist standardmäßig deaktiviert. Um die automatische Seitenerkennung zu aktivieren, haben Sie eine der folgenden Möglichkeiten:
Fügen Sie den Befehl
autoPageDetectionAPI in den HTML-Kopf ein.Konfigurieren Sie die automatische Instrumentierung der Website mit dem folgenden Befehl:
ineum('autoPageDetection', enabled);
Parameter
In der folgenden Tabelle sind die Parameter aufgeführt:
| Parameter | Beschreibung |
|---|---|
enabled (boolean) |
So aktivieren Sie die automatische Seitenerkennung |
Beispiel
ineum('autoPageDetection', true);
// page changes will be detected once set to true
Logische Seitennamen und Regex-Zuordnungen festlegen
Sie können den Parameter mappingRule verwenden, um logische Seitennamen festzulegen, die ein Array regulärer Ausdrücke bereitstellen, um URL Änderungen zuzuordnen und durch den angegebenen Namen zu ersetzen.
ineum('autoPageDetection', {mappingRule: [[/.*urlRegex.*/i, 'Page Name']]});
Um den Dokumententitel als Seitennamen festzulegen, müssen Sie den Parameter titleAsPageName auf true setzen.
ineum('autoPageDetection', {titleAsPageName: true});
Wenn Sie die automatische Instrumentierung der Website so konfigurieren, dass die automatische Seitenerkennung aktiviert ist, wird der Pfad URL standardmäßig als Seitenname festgelegt.
Wenn die automatische Seitenerkennung aktiviert ist und ein Popstate-Ereignis auftritt, prüft der Agent JavaScript auf der Grundlage von Popstate-Ereignissen auf Seitenübergänge. Häufig tritt ein Popstate-Ereignis auf, wenn Sie die Vor- und Zurück-Tasten eines Browsers zum Navigieren verwenden. Bei einigen Anwendungen mit statischen Inhalten kann es erforderlich sein, dass der Agent Popstate-Ereignisse ignoriert, da diese Ereignisse falsche Seitenübergänge erzeugen können. Der Agent JavaScript ignoriert Popstate-Ereignisse für Seitenwechsel, wenn der Parameter ignorePopstateEvent auf true gesetzt ist.
ineum('autoPageDetection', {ignorePopstateEvent: true});
Parameter
In der folgenden Tabelle sind die Parameter aufgeführt:
| Parameter | Beschreibung |
|---|---|
mappingRule (RegExp[], string) |
Ein Array von RegExp Objekten, die der URL des Seitenwechsels entsprechen, wird durch die angegebene Zeichenkette ersetzt. Ist das Mapping-Ergebnis leer, wird dieser Übergang ignoriert. Stellen Sie keine Zuordnungsregeln bereit, wenn titleAsPageName auf true gesetzt ist. |
titleAsPageName (boolean) |
Wenn diese Option auf true gesetzt ist, wird der Dokumententitel als Seitenname in den Seitenübergangs-Baken verwendet. Wenn diese Option auf false gesetzt ist, werden entweder die Seite URL oder die Zuordnungsregeln als Seitenname in den Seitenübergangssignalen verwendet. |
ignorePopstateEvent (boolean) |
Wenn dieser Wert auf true gesetzt ist, ignoriert der Agent JavaScript Popstate-Ereignisse, die vom Browser erzeugt werden, wenn er Seitenübergänge erkennt. |
Beispiel
Wenn Ihr URL beispielsweise https://example.com/accounts/checkUserDetails enthält, können Sie in der Instana-Benutzeroberfläche den Übergang zur Seite User Details sehen.
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.
Darüber hinaus können Sie komplexere Seitennamen festlegen, wie im folgenden Beispiel gezeigt:
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']]});
Benutzer identifizieren
Benutzerspezifische Informationen können optional mit den an Instana übermittelten Daten gesendet werden. Diese Informationen können dann verwendet werden, um weitere Funktionen freizuschalten, wie z. B.:
- Berechnen Sie die Anzahl der von Fehlern betroffenen Benutzer
- So filtern Sie Daten für bestimmte Benutzer
- Um zu sehen, welcher Benutzer einen Seitenaufbau oder Ajax-Aufruf initiiert hat.
Instana verknüpft standardmäßig keine benutzeridentifizierbaren Informationen mit Beacons. Beachten Sie die jeweiligen Datenschutzgesetze, wenn Sie sich dafür entscheiden, dies zu tun. In Instana ist die Benutzer-ID eine transparente string , die nur zur Berechnung bestimmter Metriken verwendet wird. Daher erfolgt die Identifizierung der Benutzer über eine Benutzer-ID. userName und userEmail können auch verwendet werden, um Zugang zu mehr Filtern und einer effektiven Präsentation von Benutzerinformationen zu haben.
Der synchrone Aufruf dieser API beim Laden der Seite, z. B. durch Rendering der Informationen in das HTML-Dokument auf der Serverseite, trägt dazu bei, dass alle Beacons Nutzerinformationen tragen, die eindeutigen oder betroffenen Nutzerstatistiken korrekt sind und die Beacons bei der Analyse korrekt gefiltert und gruppiert werden.
ineum('user', userId, userName, userEmail);
Parameter
In der folgenden Tabelle sind die Parameter aufgeführt:
| Parameter | Beschreibung |
|---|---|
userId (stringoptional) |
Eine Kennung für den Benutzer. |
userName (stringoptional) |
Der Benutzername. |
userEmail (stringoptional) |
Die E-Mail-Adresse des Benutzers. |
Sie können null oder undefined für Werte angeben, die Sie nicht festlegen möchten.
Beispiel
// 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');
Sitzungsüberwachung
Die Sitzungsverfolgung kann genutzt werden, um Einblicke in die Aktivitäten der Endnutzer beim Laden von Seiten zu gewinnen. Die Sitzungsverfolgung ermöglicht es Instana, die Auswirkungen auf den Endbenutzer zu bestimmen, wenn keine definierten Benutzerinformationen vorliegen.
Um Sitzungen zu verfolgen, verwendet der Agent JavaScript die localStorage browser-API, nachdem er den Aufruf trackSessions getätigt hat. Technisch gesehen ist eine Sitzung eine zufällige ID, die zusammen mit zwei Zeitstempeln im Browser localStorage unter dem Schlüssel in-session gespeichert wird.
Die Verantwortung für die Einhaltung der Datenschutzbestimmungen liegt beim Aufrufenden dieser API.
Sitzung initialisieren/wiederverwenden
Diese API startet eine neue Sitzung oder verwendet eine vorhandene Sitzung, wenn dies möglich ist.
ineum('trackSessions', sessionInactivityTimeout, sessionTerminationTimeout);
Parameter
In der folgenden Tabelle sind die Parameter aufgeführt:
| Parameter | Beschreibung |
|---|---|
sessionInactivityTimeout (numberoptional) |
Beschreibt, wie lange eine Sitzung seit dem letzten Aufruf von trackSessions in Millisekunden aktiv bleibt. Der Standardwert ist drei Stunden. |
sessionTerminationTimeout (numberoptional) |
Beschreibt, wie lange eine Sitzung seit dem ersten Aufruf von trackSessions in Millisekunden aktiv bleibt. Der Standardwert ist sechs Stunden. |
Sie können null oder undefined für Werte angeben, die Sie nicht festlegen möchten.
Beispiel
// Starts tracking sessions with the default timeouts
ineum('trackSessions');
// or specify custom timeouts
ineum('trackSessions', 900000 /* 15min */, 3600000 /* 1h */);
Sitzung beenden
Beendet die momentan aktive Sitzung (sofern vorhanden) und entfernt die gespeicherten Daten aus dem Verzeichnis localStorage.
ineum('terminateSession');
Beispiel
// Starts tracking sessions with the default timeouts
ineum('trackSessions');
// after some time…
ineum('terminateSession');
Metadaten
Metadaten können verwendet werden, um Seitenaufbau und Ajax-Aufrufe zu annotieren. Verwenden Sie Metadaten, um die UI-Konfigurationswerte, Einstellungen, Funktionsflags oder jeden zusätzlichen Kontext zu verfolgen, der für die Analyse nützlich sein könnte.
ineum('meta', key, value);
Parameter
In der folgenden Tabelle sind die Parameter aufgeführt:
| Parameter | Beschreibung |
|---|---|
key (string) |
Der Schlüssel (key) des Schlüsselwertpaares, das Sie als Metadaten hinzufügen möchten. |
value (string) |
Der Schlüssel (value) des Schlüsselwertpaares, das Sie als Metadaten hinzufügen möchten. |
Beispiel
ineum('meta', 'version', '1.42.3');
ineum('meta', 'role', 'admin');
Back-End-Trace-ID des Seitenaufbaus
Als Teil des Seitenladens kann eine Backend-Trace-ID definiert werden, um eine Korrelation zwischen Front-End und Back-End zu ermöglichen. Weitere Informationen finden Sie unter Backend-Korrelation. Die Definition der Backend-Trace-ID ist erforderlich, um eine Korrelation zwischen der Backend- und der Front-End-Verarbeitung von Seitenladungen herzustellen. Sie ist für die Korrelation zwischen den Anfragen XMLHttpRequest oder fetch nicht erforderlich. Eine Trace-ID muss eine Hex-Zeichenkette mit 16 oder 32 Zeichen sein.
ineum('traceId', traceId);
Parameter
| Parameter | Beschreibung |
|---|---|
traceId (string) |
Die Trace-ID des zugehörigen Back-End-Trace. |
Beispiel
ineum('traceId', '89jkbds891jkn321');
URLs vom Tracking ausschließen
Mit Hilfe dieser API können Sie mehrere reguläre Ausdrücke definieren. Bei mindestens einer Übereinstimmung kommt es nicht zu einer Datenübertragung an Instana. Die regulären Ausdrücke werden in den folgenden Szenarien ausgewertet:
- Auswertung gegen die URLs der Dokumente (die in der Adressleiste sichtbaren URLs, d.h.
window.location.href). Alle Datenübertragungen an Instana werden deaktiviert, wenn einer der regulären Ausdrücke zutrifft. - Auswertung anhand der URLs von Ressourcen, z. B. der URLs von JavaScript und CSS-Dateien. Es werden keine Informationen über Ressourcen, die einem der regulären Ausdrücke entsprechen, an Instana übermittelt.
- Auswertung gegen die Ziel-URLs der HTTP -Aufrufe, zum Beispiel durch
XMLHttpRequestundfetch. Es werden keine Informationen über HTTP Aufrufe, die einem der regulären Ausdrücke entsprechen, an Instana übermittelt.
ineum('ignoreUrls', ignoreUrls);
Instana unterstützt auch das Entfernen von Geheimnissen aus Dokument-URLs, d.h. aus der URL, die in der Adressleiste des Browsers sichtbar ist (siehe die API für Geheimnisse ). Beachten Sie jedoch, dass die in den URLs von Dokumenten gespeicherten Geheimnisse fast allen Dritten bekannt sind. Wir haben eine spezielle Beispielanwendung mit einer Beschreibung, die zeigt, warum Geheimnisse, die in Dokument-URLs gespeichert sind, anfällig dafür sind, an Dritte weitergegeben zu werden. Weitere Einzelheiten finden Sie in dieser Beispielanwendung und -beschreibung. Sie können jedoch die Erfassung aller Überwachungsdaten für diese URLs über diese API ignorieren.
Parameter
In der folgenden Tabelle sind die Parameter aufgeführt:
| Parameter | Beschreibung |
|---|---|
ignoreUrls (RegExp[]) |
Ein Array von RegExp Objekten entspricht den URLs, die Sie ignorieren möchten. |
Beispiel
ineum('ignoreUrls', [
/\/comet.+/i,
/\/ws.+/i,
/.*(&|\?)secret=.*/i
]);
Schwärzen von Geheimnissen aus URLs
Abfrageparameter in gesammelten URLs können sensible Daten enthalten. Daher unterstützt der Agent JavaScript die Angabe von Mustern für Abfrageparameterschlüssel, deren Werte geschwärzt werden. Das Redigieren erfolgt innerhalb des JavaScript -Agenten, d. h. innerhalb des Webbrowsers. Daher gelangen die Geheimnisse nicht zur Verarbeitung auf die Instana-Server und stehen nicht für die Analyse in der Benutzeroberfläche zur Verfügung oder werden über die API abgerufen.
ineum('secrets', secrets);
Wenn ein Abfrageparameter mit einem Eintrag aus der Liste übereinstimmt, wird der Wert unkenntlich gemacht und nicht an das Instana-Backend gesendet. Wenn keine ineum('secrets') definiert ist, verwendet Instana standardmäßig [/key/i, /secret/i, /password/i] als passende Regel.
Parameter
In der folgenden Tabelle sind die Parameter aufgeführt:
| Parameter | Beschreibung |
|---|---|
secrets (RegExp[]) |
Ein Array von RegExp Objekten, die mit den Schlüsselnamen der Abfrageparameter übereinstimmen und deren Werte als Geheimnisse behandelt werden. |
Beispiel
ineum('secrets', [/account/i, /user/i]);
Zum Beispiel wird https://example.com/accounts/status?account=acount_name&user=user_name gesammelt und als https://example.com/accounts/status?account=<redacted>&user=<redacted> angezeigt.
/account/<account id>/status) oder Matrixparameter (/account;accountId=<account id>/status) als Geheimnisse zu behandeln.Schwärzen von Fragmenten aus URLs
Die Fragmente der gesammelten URLs könnten sensible Informationen enthalten. Daher unterstützt der Agent JavaScript die Angabe von Mustern für Fragmentwerte, die auf der Grundlage des Pfads URL geschwärzt werden können. Diese Schwärzung erfolgt innerhalb des JavaScript Agenten im Webbrowser. Dadurch wird verhindert, dass sensible Informationen die Instana-Server zur Verarbeitung erreichen. Sensible Informationen bleiben für die Analyse in der Benutzeroberfläche oder den Abruf über die API unzugänglich.
ineum('fragment', fragment);
Wenn ein Segment Ihres URL Pfads mit einem Eintrag in der Liste übereinstimmt, wird der Fragmentwert geschwärzt und nicht an das Instana-Backend gesendet. Standardmäßig werden in Instana die Fragmente von URL nicht bearbeitet.
Parameter
In der folgenden Tabelle sind die Parameter aufgeführt:
| Parameter | Beschreibung |
|---|---|
fragment (RegExp[]) |
Ein Array mit einem RegExp Objekt, das dem URL Pfad entspricht, dessen Fragment geschwärzt wird. |
Beispiel
ineum('fragment', [/example.com/i]);
Zum Beispiel wird https://example.com/accounts/status?account=acount_name#fragmentinformation gesammelt und als https://example.com/accounts/status?account=acount_name#<redacted> angezeigt.
Benutzertimings vom Tracking ausschließen
Instana sammelt automatisch Markierungen und Maßnahmen, die über die User-Timing-API vorgenommen werden, und verwandelt sie in benutzerdefinierte Ereignisse. Dies bedeutet, dass die User-Timing-API als herstellerneutrale Methode verwendet werden kann, um die reinen Timingdaten an Instana zu melden.
Mithilfe der User-Timing-API können Sie mehrere reguläre Ausdrücke definieren, die, wenn mindestens einer übereinstimmt, nicht zu einer Sammlung bestimmter User-Timings führen. Standardmäßig werden die folgenden Bedingungen ignoriert:
- React's User-Timings: die Zeichen und Takte, die mit dem ⚛️ oder ⛔ Emoji beginnen
- Angulars User-Timings: die Marken und Maße, die mit
Zone - Marken und Maßnahmen, deren Namen entweder mit
startoderend
ineum('ignoreUserTimings', ignoreUserTimings);
Parameter
In der folgenden Tabelle sind die Parameter aufgeführt:
| Parameter | Beschreibung |
|---|---|
ignoreUserTimings (RegExp[]) |
Ein Array von RegExp-Objekten, die mit den Namen von Markern und Kennzahlen von Benutzertimings übereinstimmen, die ignoriert werden sollen. |
Beispiel
ineum('ignoreUserTimings', [
/^\u269B/,
/^\u26D4/,
/^Zone(:|$)/,
/mySecretTiming/i
]);
Ausschluss von URL Abfrageparametern und Fragmenten von der Verfolgung
Standardmäßig sammelt der Agent JavaScript die vollständige URL, die alle Parameter enthält. Sie können den Agenten so konfigurieren, dass er nur Parameter für die URLs sammelt, die einer bestimmten Liste regulärer Ausdrücke entsprechen. Die Parameter der ausgeschlossenen URLs werden nicht verfolgt.
Auf der Grundlage der angegebenen Liste regulärer Ausdrücke verfolgt der Agent JavaScript URLs wie folgt:
- Wenn die URL mit einem Eintrag der Liste übereinstimmt, wird die gesamte URL, die alle Parameter enthält, gesammelt.
- Wenn die URL nicht mit einem Eintrag der Liste übereinstimmt, werden Abfrageparameter und Fragmente der URL nicht an das Instana-Backend gesendet.
- Wenn die angegebene Liste leer ist, wird das Standardverhalten angewandt, und die vollständige URL mit ihren Parametern wird verfolgt.
ineum('queryTrackedDomainList',queryTrackedDomainList);
Die folgenden Szenarien erläutern die Bedingung, wenn URL ein Geheimnis oder ein Fragment enthält, das mit Hilfe von ineum('secrets', secrets) oder ineum('fragment', fragment) geschwärzt wurde:
- Wenn URL mit einem Eintrag in
queryTrackedDomainListübereinstimmt, wird das gesamte URL mit dem geschwärzten Geheimnis oder Fragment an das Instana-Backend gesendet. - Wenn URL nicht mit einem Eintrag in
queryTrackedDomainListübereinstimmt, werden alle Parameter ausgeschlossen, bevor URL an das Instana-Backend gesendet wird.
Parameter
| Parameter | Beschreibung |
|---|---|
queryTrackedDomainList (RegExp[]) |
Ein Array von RegExp Objekten, die mit den Namen der URLs übereinstimmen, die Sie verfolgen möchten, einschließlich aller ihrer Parameter. |
Beispiel
Im folgenden Beispiel werden die URLs, die mit der Regex /\/comet.+/i, /\/ws.+/i oder /example.com/i übereinstimmen, vollständig mit ihren Parametern erfasst:
ineum('queryTrackedDomainList', [
/\/comet.+/i,
/\/ws.+/i,
/example.com/i
]);
Unterstützung von W3C trace headers für Backend-Korrelation
Wenn ein Browser eine Anfrage an einen entfernten Server sendet und der Instana-Agent den entfernten Server überwacht, dann kann die Antwort des Servers den HTTP Header Server-Timing enthalten, um dem Instana-Agenten, der im Browser läuft, die backendTraceId zur Verfügung zu stellen. Wenn OpenTelemetry im Remote Server aktiviert ist, kann der tracestate HTTP Header den backendTraceId enthalten.
tracestate und traceparent sind W3C-defined Kopfzeilen, die für die Korrelation von verteilten Trace-IDs verwendet werden. Weitere Informationen über W3C Trace-Header finden Sie unter Trace-Kontextebene.
Wenn Sie davon ausgehen, dass der Remote-Server OpenTelemetry verwenden kann und den backendTraceId im tracestate -Header bereitstellt, muss der Instana-Agent im Browser die enableW3CHeaders -API auf true setzen, um den backendTraceId -Wert in den W3C -Headern zu verwenden.
Sie können die backendTraceId an drei verschiedenen Stellen einstellen: über die Kopfzeile Server-Timing , die Kopfzeile tracestate und manuell über die API traceId im Browser. Die Reihenfolge dieser Ansätze ist wie folgt:
- Wenn
enableW3CHeadersaktiviert ist, haben Sie zwei Möglichkeiten. Extrahieren Sie zunächst den Werttracestateaus den Metadaten der aktuellen Seitetraceparentund verwenden Sie ihn. Wenn Sietracestatenicht abrufen können, wird eine 16 Zeichen lange Zeichenkette generiert und verwendet, die mit W3C trace context kompatibel ist. - Wenn
enableW3CHeadersdeaktiviert ist, überprüfen Sie zunächst, ob die APItraceIdaufgerufen wird. Wenn die APItraceIdaufgerufen wird, dann verwenden Sie die ID alsbackendTraceId. Wenn dietraceIdAPI nicht aufgerufen wird, wird der HTTP Header Server-Timing geparst, um diebackendTraceIdzu erhalten. - Wenn keiner der oben genannten Werte verfügbar ist, können Sie Beacons nicht mit Backend-Traces verknüpfen.
ineum('enableW3CHeaders',true);
Parameter
In der folgenden Tabelle sind die Parameter aufgeführt:
| Parameter | Beschreibung |
|---|---|
enabled (boolean) |
Das Kennzeichen zum Deaktivieren oder Aktivieren dieser Funktion. |
Beispiel
Das folgende Beispiel zeigt, dass die W3C Kopfzeilen aktiviert sind:
ineum('enableW3CHeaders', true);
Maximale Wartezeit nach dem Seitenaufbau konfigurieren
Um zusätzliche Metriken zu sammeln, wartet der Agent JavaScript, bis die folgenden Bedingungen erfüllt sind. Zum Beispiel die erste Eingangsverzögerung und die kumulative Layout-Verschiebung.
- Alle Metriken sind verfügbar
- Die Seite wird entladen (z.B. Registerkarte wird geschlossen)
- Bis eine maximale Wartezeit verstrichen ist
Sie können diese API verwenden, um die maximale Wartezeit zu rekonfigurieren. Standardmäßig wartet Instana bis zu einer Sekunde, nachdem das Laden der Seite beendet ist, d.h. das Ereignis onLoad endet.
ineum('maxMaitForPageLoadMetricsMillis', durationMillis);
Parameter
In der folgenden Tabelle sind die Parameter aufgeführt:
| Parameter | Beschreibung |
|---|---|
durationMillis (Nummer) |
Die maximale Zeit in Millisekunden, die nach Beendigung des Seitenladevorgangs gewartet werden soll, bevor der Page Load Beacon gesendet wird. |
Beispiel
ineum('maxMaitForPageLoadMetricsMillis', 500);
Seitenaufbau-ID abrufen
Manchmal kann es nützlich sein, die ID der geladenen Seite manuell zu erhalten, z. B. wenn man eine benutzerdefinierte Korrelation durchführen möchte. Diese Funktion gibt undefined zurück, solange der Agent JavaScript nicht geladen ist. Nachdem der Agent JavaScript geladen wurde, gibt er immer die gleiche string zurück.
ineum('getPageLoadId');
Zurückgegebene Werte
Die Seitenlade-ID als string oder undefined.
Beispiel
var pageLoadId = ineum('getPageLoadId');
console.log(pageLoadId);
Fehler-Tracking
Manuelle Fehlerberichterstellung
Es ist möglich, abgefangene Fehler zu melden. Diese Option kann verwendet werden, um Instana mit Frameworks und Bibliotheken zu integrieren, die nicht erfasste Fehler abfangen.
ineum('reportError', error, opts);
Parameter
In der folgenden Tabelle sind die Parameter aufgeführt:
| Parameter | Beschreibung |
|---|---|
error (Error oder string) |
JavaScript-Objekt vom Typ Error oder eine Fehlernachricht. |
opts (ErrorReportingOptsoptional) |
Ein Objekt, das wie folgt aussieht. |
{
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.
}
Beispiel
ineum('reportError', new Error('Something failed'), {
componentStack: '…',
meta: {
widgetType: 'chart'
}
});
Integration von 'React'
Es ist möglich, bessere Fehlereinblicke zu erhalten, wenn Sie den JavaScript Agent mit React Fehlergrenzen integrieren. Konkret bedeutet dies, dass zusätzlich zu den Fehler-Stacktraces (Funktions-Stacktraces) auch Komponenten-Stacktraces zur Verfügung stehen.
Das folgende Code-Snippet zeigt, wie der Code componentDidCatch von React erweitert werden kann, um diese Integration zu erreichen. Weitere Informationen zum Lebenszyklus von componentDidCatch finden Sie in der React-Dokumentation.
componentDidCatch(error, info) {
ineum('reportError', error, {
componentStack: info.componentStack
});
// your regular error boundary code
}
Integration von 'Angular 2+'
Angular fängt standardmäßig alle Fehler ab und protokolliert sie in der Konsole. Das bedeutet, dass der Bearbeiter von JavaScript keinen Zugriff auf diese Fehler hat. Das folgende TypeScript-Snippet zeigt, wie die von Angular abgefangenen Fehler mit Instana integriert werden können.
Weitere Informationen über Angular-Fehlerbehandlungsprogramme finden Sie in der Angular-Dokumentation.
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…
}
Vue-Integration
Vue kann einen globalen Handler für nicht abgefangene Fehler zuweisen, die von der Anwendung propagiert werden. Das folgende Code-Snippet zeigt, wie die Fehlerbehandlung von Vue in Instana integriert werden kann.
Weitere Informationen über Vue-Fehlerbehandlungsprogramme finden Sie in der Vue-Dokumentation.
app.config.errorHandler = (err, instance, info) => {
ineum('reportError', err);
// your regular error handling code
}
Fehler vom Tracking ausschließen
Es ist möglich, explizit das Melden bestimmter Fehler an Instana zu stoppen. Dies kann dazu verwendet werden, bekannte oder nicht behebbare Fehler zu ignorieren.
ineum('ignoreErrorMessages', ignoreErrorMessages);
Parameter
In der folgenden Tabelle sind die Parameter aufgeführt:
| Parameter | Beschreibung |
|---|---|
ignoreErrorMessages (RegExp[]) |
Ein Array von RegExp-Objekten, die mit den Fehlern übereinstimmen, die vom Fehler-Tracking ausgeschlossen werden sollen. |
Beispiel
ineum('ignoreErrorMessages', [/^script error/i]);
Einblicke in Scriptfehler
Websites, in die viele Skripte von Drittanbietern eingebettet sind, stoßen in der Regel auf eine konstante Anzahl von Script Errors. Instana bietet eine Anleitung, wie diese Fehler zugänglich gemacht werden können, d.h. wie man Zugriff auf die eigentliche Fehlermeldung und den Stack erhält. Manchmal kann es vorkommen, dass Sie diese Anweisungen nicht befolgen können, z. B. weil der Drittanbieter die erforderliche Kopfzeile Access-Control-Allow-Origin nicht hinzufügt. Für diese Fälle bietet Instana alternative Möglichkeiten zur Verbesserung des Einblicks in Script Errorss.
Dieser Mechanismus ist kein Patentrezept. Sie erhalten einen besseren Überblick und es werden mehr hilfreiche Fehler angezeigt, aber Sie sehen immer noch (eine geringere Anzahl von) Script Errors. Weitere Informationen finden Sie in den Leitlinien für die Herkunftsländer.
Explizites Tracking von DOM-Ereignislistener-Fehlern
Dadurch wird der Instana-Agent in den Aufrufstapel jedes DOM-Ereignis-Listeners aufgenommen. Der Instana-Agent fügt automatisch try/catch Anweisungen um die Funktionen der Ereignis-Listener. Dies ermöglicht eine bessere Einsicht in Cross-Origin-Fehler.
Diese Funktion ist standardmäßig inaktiviert, da der Nutzen für die meisten unserer Kunden fragwürdig ist. Außerdem ist nicht gewährleistet, dass auf diese Weise bessere Informationen über Skriptfehler gesammelt werden können, da die Webbrowser begonnen haben, diese Lücke im Web-Sicherheitsmodell zu schließen.
ineum('wrapEventHandlers', enabled);
Parameter
In der folgenden Tabelle sind die Parameter aufgeführt:
| Parameter | Beschreibung |
|---|---|
enabled (boolean) |
Das Kennzeichen zum Deaktivieren oder Aktivieren dieser Funktion. |
Beispiel
ineum('wrapEventHandlers', true);
Explizites Tracking von Timerfehlern
Dadurch wird der Instana-Agent in den Aufrufstapel aller Zeitgeber aufgenommen. Der Instana-Agent fügt automatisch try/catch Anweisungen um die Funktionen der Timer-Handler. Dies ermöglicht eine bessere Einsicht in Cross-Origin-Fehler.
Diese Funktion ist standardmäßig inaktiviert, da der Wert für die meisten unserer Kunden fragwürdig ist. Außerdem ist nicht gewährleistet, dass auf diese Weise bessere Informationen über Skriptfehler gesammelt werden können, da die Webbrowser begonnen haben, diese Lücke im Web-Sicherheitsmodell zu schließen.
ineum('wrapTimers', enabled);
Parameter
In der folgenden Tabelle sind die Parameter aufgeführt:
| Parameter | Beschreibung |
|---|---|
enabled (boolean) |
Das Flag zum Aktivieren oder Deaktivieren dieser Funktion. |
Beispiel
ineum('wrapTimers', true);
Scriptfehler ignorieren
Wenn Sie mit einem der oben genannten Mechanismen keine Einblicke in Skriptfehler erhalten können, sollten Sie verhindern, dass diese an Instana gemeldet werden. Dies kann nützlich sein, um sicherzustellen, dass die Fehlerstatistiken verwertbar bleiben. Mit dem folgenden Snippet können Sie das Melden von Scriptfehlern an Instana stoppen.
ineum('ignoreErrorMessages', [/^script error/i]);
Angepasste Ereignisse melden
Weitere Informationen zu globalen benutzerdefinierten Ereignissen finden Sie auf der Seite Ereignisse.
Benutzerdefinierte Ereignisse ermöglichen die Berichterstattung über nicht standardmäßige Aktivitäten, wichtige Interaktionen und benutzerdefinierte Zeitpunkte an Instana. Dies kann insbesondere bei der Analyse nicht abgefangener Fehler (Breadcrumbs) und bei der Verfolgung weiterer Leistungsmetriken hilfreich sein.
ineum('reportEvent', eventName, {
duration: duration,
timestamp: timestamp,
backendTraceId: backendTraceId,
error: error,
componentStack: componentStack,
meta: meta,
customMetric: customMetric
});
Parameter
In der folgenden Tabelle sind die Parameter aufgeführt:
| Parameter | Beschreibung |
|---|---|
eventName (string) |
Legt fest, welche Art von Ereignis auf Ihrer Website eingetreten ist, das zur Übertragung eines benutzerdefinierten Beacons führen könnte. |
timestamp (number, optional ) |
Ein Zeitstempel gibt an, zu welchem Zeitpunkt das Ereignis stattgefunden hat. Wird auf now() - duration zurückgesetzt, wenn sie nicht definiert ist. |
duration (number, optional ) |
Die Dauer des Ereignisses in Millisekunden. |
backendTraceId (string, optional ) |
Verwenden Sie diesen Parameter, um ein Beacon mit einem Back-End-Trace zu verknüpfen. Sein Wert muss eine Hex-Zeichenkette mit 16 oder 32 Zeichen sein. |
error (Error, optional ) |
Ein JavaScript Fehlerobjekt, um mehr Kontext zu liefern. Wenn Sie das Auftreten eines Fehlers melden möchten, verwenden Sie die spezielle API für Fehlerberichte. |
componentStack (string, optional ) |
Eine Zeichenfolge, die eine Komponentenhierarchie darstellt. Wird in der Regel von komponentenbasierten Frameworks bereitgestellt. |
maxMetadataKeys (number, optional ) |
Die maximale Anzahl der Metadatenschlüssel, die in einem Beacon gesendet werden. Der Standardwert ist auf 25 eingestellt. |
meta (object, optional ) |
Ein JavaScript Objekt mit string Werten, das verwendet werden kann, um Metadaten nur für dieses einzelne Ereignis an Instana zu senden. Im Gegensatz zur Verwendung der Metadaten-API sind diese Metadaten nicht in den nachfolgenden Baken enthalten. |
customMetric (number, optional ) |
Eine benutzerdefinierte metrische Daten mit einer Genauigkeit von bis zu vier Dezimalstellen. Nehmen Sie keine sensiblen Informationen in diese Metrik auf. |
Beispiel
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
});
Back-End-Korrelation von Cross-Origin-Anforderungen
Die Back-End-Korrelation von Instana funktioniert, indem angepasste Header für Anforderungen des Typs XMLHttpRequest/fetch festgelegt werden. Der Agent JavaScript setzt diese Kopfzeilen, die dann vom Server gelesen werden. Innerhalb des Browsers beschränkt die Same-Origin-Policy die Übertragung von angepassten Headern. Genauer gesagt können benutzerdefinierte Kopfzeilen nur für Anfragen gleichen Ursprungs oder für Anfragen an andere Ursprünge, die die Übertragung benutzerdefinierter Kopfzeilen erlauben, festgelegt werden. So kann beispielsweise eine Website, die von https://example.com:443 bedient wird, standardmäßig nicht von XMLHttpRequestauf https://shop.example.com:443 verweisen, da es sich um zwei unterschiedliche Ursprünge handelt.
Um diese Sicherheitsbeschränkung zu umgehen, gibt es das Cross-Origin Resource Sharing (CORS). Mit CORS kann der Cross-Origin-Ressourcenzugriff für Ursprünge ermöglicht werden. Wenn Sie in Ihrer Anwendung bereits über Cross-Origin-Ressourcenzugriff verfügen, verwenden Sie wahrscheinlich bereits einige CORS-Header.
Um die Instana-Backend-Korrelation zu aktivieren, führen Sie die folgenden Schritte aus:
Ermöglichen Sie Cross-Origin-Anforderungen für die Korrelation-Header von Instana durch serverseitige Antwort mit den folgenden Headern.
Hinweis: Ihr Server muss sowohl bei Preflight-Anfragen als auch bei regulären Anfragen mit diesen Headern antworten. Preflight-Anfragen (identifizierbar über die MethodeOPTIONSHTTP ) werden vom Browser ausgeführt, um zu überprüfen, ob Anfragen an den Server gestellt werden können.Access-Control-Allow-Origin: https://your-origin.example.com Access-Control-Allow-Headers: X-INSTANA-T, X-INSTANA-S, X-INSTANA-LInformieren Sie den JavaScript -Agenten, dass CORS korrekt konfiguriert ist und dass er diese Korrelations-Header setzen muss:
ineum('allowedOrigins', urls);
Parameter
In der folgenden Tabelle sind die Parameter aufgeführt:
| Parameter | Beschreibung |
|---|---|
urls (RegExp[]) |
Ein Array von RegExp-Objekten, die mit zulässigen URLS übereinstimmen. |
Seit
Der Befehl allowedOrigins ist mit Instana Release 185 und höher verfügbar. Verwenden Sie den Aliasnamen whitelistedOrigins bei älteren Releases.
Alias
Der Befehl whitelistedOrigins ist ein veralteter Aliasname für allowedOrigins.
Beispiel
ineum('allowedOrigins', [/.*api\.example\.com.*/]);
Prüfen Sie, ob Ihre Anwendung nach diesen Änderungen korrekt funktioniert. Wenn Sie den JavaScript Agenten anweisen, Backend-Korrelationsheader hinzuzufügen (d. h. Ursprünge zuzulassen) , ohne CORS auf der Serverseite zu konfigurieren, besteht eine hohe Wahrscheinlichkeit, dass Ihre Website beschädigt wird!
Erfassen von HTTP Anfrage- oder Antwort-Headern
Die HTTP Anfrage- oder Antwort-Header von XMLHttpRequest oder fetch Anfragen können vom JavaScript Agenten erfasst werden. Sie können die HTTP Kopfzeilen, die der Agent JavaScript erfassen soll, mit dem Befehl captureHeaders definieren.
Innerhalb des Browsers schränkt die Same-Origin-Policy den Zugriff auf benutzerdefinierte Kopfzeilen ein. Ohne CORS-Konfiguration ( Cross-Origin Resource Sharing ) ist der Agent JavaScript möglicherweise nicht in der Lage, alle HTTP -Header zu erfassen. Um CORS zu aktivieren, siehe Cross-Origin Request Backend Correlation. Mit CORS können nur die CORS-konformen Anfrage- oder Antwort-Header und die in Access-Control-Expose-Headers definierten Header vom JavaScript -Agenten erfasst werden.
Parameter
In der folgenden Tabelle sind die Parameter aufgeführt:
| Parameter | Beschreibung |
|---|---|
captureHeaders (RegExp[]) |
Ein Array von RegExp Objekten, die dem Schlüssel der HTTP Anfrage- oder Antwort-Header entsprechen, die der JavaScript Agent erfassen soll. |
Seit
Der Befehl captureHeaders ist ab Instana Release 216 verfügbar.
Beispiel
ineum('captureHeaders', [/content-type/i]);