JavaScript agente API

L'API dell'agente JavaScript e l' API Web REST sono diverse. L'API Web REST può essere utilizzata per eseguire query sui dati raccolti e per configurare un nuovo sito web.

L'agente JavaScript espone un'API disponibile sui siti web monitorati. Il vostro sito web può interagire con l'API dell'agente JavaScript per arricchire o configurare i dati raccolti, inviare eventi personalizzati e altro ancora.

JavaScript versioni dell'agente

È possibile visualizzare tutti gli aggiornamenti di versione, le funzionalità e le correzioni di bug per l'agente Instana Javascript (Weasel) nel file Changelog su GitHub.

L'oggetto globale

L'agente Instana JavaScript definisce una nuova funzione globale chiamata ineum. Questa funzione è disponibile subito dopo lo snippet JavaScript all'interno del documento HTML. Ciò significa che la funzione esiste anche quando l'agente stesso non viene scaricato. Ciò è stato fatto per rendere semplici ed efficienti le chiamate API a ineum .

Quando l'agente non è ancora stato scaricato, ineum mette in coda tutte le chiamate API eseguite. Dopo il download dell'agente, queste chiamate API vengono eseguite in modo sincrono nell'ordine in cui sono state effettuate. Da quel momento in poi, ineum viene sostituito da una funzione che esegue immediatamente le chiamate API.

Struttura API

Tutte le chiamate a ineum seguono la stessa struttura mostrata:

ineum(commandName, ...args);
 

Parametri

La tabella seguente elenca i parametri:

Parametro Descrizione
commandName (string) Identifica il comando da eseguire. Ad esempio, impostare i metadati o segnalare un errore.
...args Gli argomenti effettivi del comando. Il numero di argomenti e il loro tipo sono specifici per ogni comando.
Nota: La funzione ineum non restituisce mai nulla (tranne il comando getPageLoadId).

TypeScript definizioni di tipo

TypeScript gli utenti possono installare e utilizzare le definizioni dei tipi fornite dal progetto DefinitelyTyped progetto.

npm install --save @types/ineum
 

API

Le sezioni seguenti descrivono i nomi dei comandi disponibili con i relativi argomenti.

Chiave di monitoraggio

I tasti di monitoraggio possono essere impostati tramite il comando key . La chiave di monitoraggio è visibile quando si configurano i siti web nell'interfaccia utente di Instana.

ineum('key', trackingKey);
 

Parametro

La tabella seguente elenca i parametri:

Parametro Descrizione
trackingKey (string) La chiave di monitoraggio per la configurazione del sito web in Instana.

Esempio

Una configurazione corretta viene mostrata nell'interfaccia utente di Instana.

Commutazione dei tasti di monitoraggio

Modellare ogni ambiente (produzione, staging e test) come siti web unici all'interno di Instana per configurare chiavi di monitoraggio diverse per l'agente JavaScript a seconda della distribuzione. Se le chiavi di monitoraggio sono già disponibili, memorizzare le chiavi di monitoraggio nel sistema di gestione della configurazione e utilizzare il valore memorizzato per sostituire la chiave di monitoraggio.

Se il sito web è costituito esclusivamente da file statici o se non è disponibile un sistema di gestione della configurazione, si può scegliere di utilizzare uno strumento come Google Tag Manager che aiuta a gestire gli snippet di codice per il sito web. In alternativa, è possibile scegliere di codificare le chiavi di monitoraggio ed eseguire un controllo all'interno del browser web.

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

URL di reporting

I beacon vengono trasmessi al sito URL attraverso HTTP GET e POST per fornire i dati di monitoraggio a Instana.

ineum('reportingUrl', reportingUrl);
 

Parametro

La tabella seguente elenca i parametri:

Parametro Descrizione
reportingUrl (string) Il sito URL a cui vengono inviati i dati di monitoraggio del sito web.

Esempio

Una configurazione corretta viene mostrata all'interno dell'interfaccia utente di Instana per gli utenti del prodotto SaaS. Gli utenti in sede devono identificare il sito URL corretto in base all' endpoint EUM configurato.

Più backend

In alcuni casi, potrebbe essere auspicabile che un agente JavaScript faccia rapporto a più backend. In questo caso, utilizzare il comando reportingBackends per fare in modo che l'agente JavaScript invii segnalazioni a più backend.

ineum('reportingBackends', reportingBackends);
 

Parametro

La tabella seguente elenca i parametri:

Parametro Descrizione
reportingBackends (ReportingBackend[]) Un array di oggetti ReportingBackend . Ciascuno degli oggetti definisce un backend a cui vengono inviati i dati di monitoraggio del sito web.

L'oggetto ReportingBackend è come mostrato:

{
  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.
}
 

Il comando reportingBackends è disponibile con Instana Release 230 e successive.

Esempio

ineum('reportingBackends', [
      { reportingUrl: 'http://backend1.example.com', key: 'monitoring key 1' },
      { reportingUrl: 'http://backend2.example.com', key: 'moniroting key 2' }
    ]);
 
Nota: Il comando reportingBackends ha la precedenza sul comando reportingUrl . Dopo l'esecuzione del comando reportingBackends , qualsiasi chiamata al comando reportingUrl viene ignorata.

Pagina

Instana può segmentare le metriche del sito web per pagine logiche. Per farlo, ha bisogno di un indizio sulla pagina che l'utente sta guardando. Il nome della pagina può essere impostato tramite il comando page . Impostate il sito page il prima possibile. È possibile modificare il sito page per presentare le modifiche al documento (ad esempio, per le applicazioni a pagina singola). Ciò consente a Instana di tracciare le transizioni di pagina oltre al caricamento della pagina.

ineum('page', pageName);
 

Gli eventi di transizione della pagina vengono registrati ogni volta che il nome della pagina viene modificato tramite l'API, ad eccezione della prima invocazione dell'API durante la fase di caricamento della pagina.

Per definire le pagine, usare nomi logici come product detail page o payment selection invece di window.title o window.href. Utilizzando product detail page o payment selection si ottiene un minor numero di pagine che hanno una relazione diretta con il codice esistente. Mentre utilizzando window.title o window.href si ottengono numerose pagine tracciate che forniscono valore nella maggior parte dei casi perché window.title contiene nomi di prodotti.

Instana fornisce progetti di esempio che mostrano come raccogliere nomi di pagina significativi per vari framework e librerie. Presentare una richiesta di supporto o di pull per il framework o la libreria mancante.

Parametro

La tabella seguente elenca i parametri:

Parametro Descrizione
pageName (string) Il nome della pagina.

Esempio

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');
 

Rilevamento automatico della pagina

Il monitoraggio dei siti web di Instana rileva automaticamente le modifiche alle pagine per le applicazioni web a pagina singola. Questa funzione è supportata dal sito web JavaScript agent 1.7.1.

Per l'agente JavaScript 1.8.0 e successivi, i valori della durata della transizione della pagina vengono raccolti automaticamente se il sito web è un'applicazione a pagina singola (SPA) e il rilevamento automatico della pagina è abilitato. Indica il tempo impiegato quando si verifica una transizione di pagina.

Il rilevamento automatico della pagina viene utilizzato per tracciare e registrare gli eventi di transizione di pagina; questa funzione è disattivata per impostazione predefinita. Per attivare la funzione di rilevamento automatico delle pagine, utilizzare uno dei seguenti modi:

Parametro

La tabella seguente elenca i parametri:

Parametro Descrizione
enabled (boolean) Per attivare il rilevamento automatico della pagina
Esempio
ineum('autoPageDetection', true);
// page changes will be detected once set to true
 
Impostare i nomi delle pagine logiche e le mappature regex

È possibile usare il parametro mappingRule per impostare nomi di pagine logiche che forniscono un array di espressioni regolari per mappare le modifiche di URL e sostituirle con il nome fornito.

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

Per impostare il titolo del documento come nome della pagina, è necessario abilitare il parametro titleAsPageName a true.

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

Se si configura la strumentazione automatica del sito web per abilitare il rilevamento automatico della pagina, il percorso URL viene impostato come nome della pagina per impostazione predefinita.

Quando il rilevamento automatico delle pagine è abilitato e si verifica un evento popstate, l'agente JavaScript controlla le transizioni di pagina in base agli eventi popstate. Spesso un evento popstate si verifica quando si utilizzano i pulsanti avanti e indietro di un browser per navigare. Alcune applicazioni, tra cui quelle a contenuto statico, potrebbero richiedere all'agente di ignorare gli eventi popstate, poiché questi possono generare false transizioni di pagina. L'agente JavaScript ignora gli eventi popstate per i cambi di pagina quando il parametro ignorePopstateEvent è impostato su true.

ineum('autoPageDetection',  {ignorePopstateEvent: true});
 
Parametro

La tabella seguente elenca i parametri:

Parametro Descrizione
mappingRule (RegExp[], string) Un array di oggetti RegExp che corrispondono a URL della modifica della pagina viene sostituito dalla stringa fornita. Se il risultato della mappatura è vuoto, questa transizione viene ignorata. Non fornire regole di mappatura se titleAsPageName è impostato su true.
titleAsPageName (boolean) Se impostato su true, il titolo del documento viene usato come nome della pagina nei segnalatori di transizione di pagina. Se impostato su false, la pagina URL o le regole di mappatura vengono utilizzate come nome della pagina nei segnalatori di transizione di pagina.
ignorePopstateEvent (boolean) Se impostato su true, l'agente JavaScript ignora gli eventi popstate generati dal browser quando rileva le transizioni di pagina.
Esempio

Ad esempio, se il sito URL contiene https://example.com/accounts/checkUserDetails, è possibile vedere la transizione della pagina alla pagina User Details nell'interfaccia utente di Instana.

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

Inoltre, è possibile impostare nomi di pagina più complessi, come mostrato nell'esempio seguente:

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']]});
 

Identificazione degli utenti

Le informazioni specifiche dell'utente possono essere inviate facoltativamente con i dati trasmessi a Instana. Queste informazioni possono essere utilizzate per sbloccare ulteriori funzionalità, quali:

  • Calcolare il numero di utenti interessati dagli errori
  • Per filtrare i dati per utenti specifici
  • Per vedere quale utente ha avviato il caricamento di una pagina o una chiamata Ajax.

Per impostazione predefinita, Instana non associa alcuna informazione identificabile dall'utente ai beacon. Quando decidete di farlo, fate attenzione alle rispettive leggi sulla protezione dei dati. In Instana, l'ID utente è un string trasparente che viene utilizzato solo per calcolare alcune metriche. Pertanto, l'identificazione degli utenti avviene tramite un ID utente. userName e userEmail possono essere utilizzati per avere accesso a più filtri e a una presentazione efficace delle informazioni dell'utente.

Nota: I dati già trasmessi al server di Instana non possono essere aggiornati retroattivamente. Pertanto, è importante richiamare questa API il prima possibile nel processo di caricamento della pagina.

Richiamare questa API in modo sincrono nel processo di caricamento della pagina, ad esempio renderizzando le informazioni nel documento HTML sul lato server, aiuta a garantire che tutti i beacon contengano informazioni sull'utente, che le statistiche sugli utenti unici o interessati siano corrette e che i beacon siano filtrati e raggruppati correttamente quando vengono analizzati.

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

Parametro

La tabella seguente elenca i parametri:

Parametro Descrizione
userId (string, opzionale) Un identificatore per l'utente.
userName (string, opzionale) Il nome utente.
userEmail (string, opzionale) L'indirizzo email dell'utente.

È possibile passare null o undefined per i valori che non si desidera impostare.

Esempio

// 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');
 

Tracciamento della sessione

Il tracciamento delle sessioni può essere utilizzato per ottenere informazioni sull'attività degli utenti finali attraverso il caricamento delle pagine. Il monitoraggio delle sessioni consente specificamente a Instana di determinare l'impatto sull'utente finale in assenza di informazioni utente definite.

Per tracciare le sessioni, l'agente JavaScript utilizza l'API del browser dopo aver effettuato la chiamata a localStorage aPI del browser dopo aver effettuato la chiamata a trackSessions . Tecnicamente una sessione è un ID casuale che viene memorizzato insieme a due timestamp all'interno di localStorage dei browser sotto la chiave in-session.

La responsabilità del rispetto delle norme sulla privacy è del chiamante di questa API.

Inizializzazione/riutilizzo della sessione

Questa API avvia una nuova sessione o riutilizza una sessione esistente, quando possibile.

ineum('trackSessions', sessionInactivityTimeout, sessionTerminationTimeout);
 
Parametro

La tabella seguente elenca i parametri:

Parametro Descrizione
sessionInactivityTimeout (number, opzionale) Descrive il tempo in cui una sessione rimane attiva dall'ultima chiamata a trackSessions , in millisecondi. L'impostazione predefinita è di tre ore.
sessionTerminationTimeout (number, opzionale) Descrive il tempo in cui una sessione rimane attiva dalla prima chiamata a trackSessions , in millisecondi. L'impostazione predefinita è di sei ore.

È possibile passare null o undefined per i valori che non si desidera impostare.

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

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

Terminare la sessione

Termina la sessione in corso (se presente) e rimuove i dati memorizzati da localStorage.

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

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

Metadati

I metadati possono essere utilizzati per annotare il caricamento delle pagine e le chiamate Ajax. Utilizzare i metadati per tenere traccia dei valori di configurazione dell'interfaccia utente, delle impostazioni, dei flag delle funzioni o di qualsiasi altro contesto che possa essere utile per l'analisi.

ineum('meta', key, value);
 

Parametro

La tabella seguente elenca i parametri:

Parametro Descrizione
key (string) key della coppia chiave-valore che si vuole aggiungere come metadati.
value (string) value della coppia chiave-valore che si vuole aggiungere come metadati.

Esempio

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

ID traccia backend del caricamento della pagina

Durante il caricamento della pagina, è possibile definire un ID di traccia backend per consentire la correlazione tra front-end e back-end. Per ulteriori informazioni, vedere Correlazione backend. La definizione dell'ID di traccia del backend è necessaria per ottenere una correlazione tra l'elaborazione del backend e del front-end dei carichi di pagina. Non è necessario per la correlazione tra le richieste di XMLHttpRequest o fetch . L'ID traccia deve essere una stringa esadecimale di 16 o 32 caratteri.

ineum('traceId', traceId);
 

Parametro

Parametro Descrizione
traceId (string) L'ID della traccia del backend associato.

Esclusione degli URL dal tracciamento

È possibile definire diverse espressioni regolari utilizzando questa API. Con almeno una corrispondenza non risulta la trasmissione di dati a Instana. Le espressioni regolari vengono valutate nei seguenti scenari:

  • Valutazione rispetto agli URL dei documenti (gli URL visibili nella barra degli indirizzi, cioè window.location.href). La trasmissione dei dati a Instana viene disattivata quando una delle espressioni regolari corrisponde.
  • Valutazione rispetto agli URL delle risorse, ad esempio gli URL dei file JavaScript e CSS. Nessuna informazione sulle risorse che corrispondono a una delle espressioni regolari viene trasmessa a Instana.
  • La valutazione rispetto agli URL di destinazione di HTTP chiama, ad esempio, attraverso XMLHttpRequest e fetch. Nessuna informazione sulle chiamate di HTTP che corrispondono a una delle espressioni regolari viene trasmessa a Instana.
ineum('ignoreUrls', ignoreUrls);
 

Instana supporta anche lo stripping dei segreti dagli URL dei documenti, cioè gli URL visibili nella barra degli indirizzi del browser (vedere l'API dei segreti ). Tuttavia, è bene tenere presente che i segreti memorizzati negli URL dei documenti sono quasi accessibili a tutti i terzi. Abbiamo un' applicazione di esempio dedicata con descrizione che mostra perché i segreti memorizzati negli URL dei documenti sono inclini a trapelare a tutti i terzi. Per maggiori dettagli, consultare l'applicazione e la descrizione di questo esempio. Tuttavia, si può scegliere di ignorare la raccolta dei dati di monitoraggio per questi URL attraverso questa API.

Parametro

La tabella seguente elenca i parametri:

Parametro Descrizione
ignoreUrls (RegExp[]) Un array di oggetti RegExp corrisponde agli URL che si desidera ignorare.

Esempio

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

Eliminazione dei segreti dagli URL

I parametri di query negli URL raccolti potrebbero contenere dati sensibili. Pertanto, l'agente JavaScript supporta la specificazione di modelli per le chiavi dei parametri di query i cui valori sono stati redatti. La reazione avviene all'interno dell'agente JavaScript, cioè all'interno del browser web. Pertanto, i segreti non raggiungono i server Instana per l'elaborazione e non sono disponibili per l'analisi nell'interfaccia utente o recuperati tramite API.

ineum('secrets', secrets);
 

Se un parametro di query corrisponde a una voce dell'elenco, il valore viene eliminato e non inviato al backend di Instana. Se non viene definito ineum('secrets') , Instana utilizza [/key/i, /secret/i, /password/i] come regola di corrispondenza predefinita.

Parametro

La tabella seguente elenca i parametri:

Parametro Descrizione
secrets (RegExp[]) Un array di oggetti RegExp che corrispondono ai nomi delle chiavi dei parametri della query, i cui valori sono trattati come segreti.

Esempio

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

Ad esempio, https://example.com/accounts/status?account=acount_name&user=user_name viene raccolto e visualizzato come https://example.com/accounts/status?account=<redacted>&user=<redacted>.

Nota: L'agente JavaScript non supporta il trattamento dei parametri di percorso (/account/<account id>/status) o di matrice (/account;accountId=<account id>/status) come segreti.
Nota: i segreti memorizzati negli URL dei documenti sono quasi invisibili a tutti i terzi. Per ulteriori informazioni, vedere un' applicazione di esempio dedicata con descrizione che mostra perché i segreti memorizzati negli URL dei documenti sono inclini a trapelare a tutte le terze parti.

Ridurre i frammenti dagli URL

Il frammento di URL raccolto potrebbe contenere informazioni sensibili. Pertanto, l'agente JavaScript supporta la specificazione di modelli per i valori dei frammenti che possono essere redatti in base al percorso URL. Questa rielaborazione avviene all'interno dell'agente JavaScript nel browser web. Di conseguenza, si impedisce che le informazioni sensibili raggiungano i server Instana per l'elaborazione. Le informazioni sensibili rimangono inaccessibili per l'analisi nell'interfaccia utente o per il recupero attraverso l'API.

ineum('fragment', fragment);
 

Se un segmento del percorso di URL corrisponde a una voce dell'elenco, il valore del frammento viene eliminato e non inviato al backend di Instana. Per impostazione predefinita, Instana non redime i frammenti di URL.

Parametro

La tabella seguente elenca i parametri:

Parametro Descrizione
fragment (RegExp[]) Un array con un oggetto RegExp che corrisponde al percorso URL il cui frammento è stato eliminato.

Esempio

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

Ad esempio, https://example.com/accounts/status?account=acount_name#fragmentinformation viene raccolto e visualizzato come https://example.com/accounts/status?account=acount_name#<redacted>.

Esclusione dei tempi utente dal tracciamento

Instana raccoglie automaticamente i marcatori e le misure effettuate tramite l' API User-Timing e li trasforma in eventi personalizzati. Ciò significa che l'API User-Timing può essere utilizzata come metodo neutro per segnalare a Instana dati di temporizzazione puri.

Utilizzando l'API User-Timing, è possibile definire diverse espressioni regolari che, quando almeno una di esse corrisponde, non risultano in una raccolta di tempi specifici per l'utente. Per impostazione predefinita, le seguenti condizioni vengono ignorate:

  • I tempi utente di React: i segni e le misure che iniziano con l'emoji ⚛️ o ⛔
  • I tempi utente di Angular: i segni e le misure che iniziano per Zone
  • I marchi e le misure i cui nomi iniziano con start o con end
ineum('ignoreUserTimings', ignoreUserTimings);
 

Parametro

La tabella seguente elenca i parametri:

Parametro Descrizione
ignoreUserTimings (RegExp[]) Una serie di oggetti RegExp che corrispondono ai nomi dei segni di cronometraggio e delle misure dell'utente che si desidera ignorare.

Esempio

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

Esclusione dei parametri di query e dei frammenti di URL dal tracciamento

Per impostazione predefinita, l'agente JavaScript raccoglie l'intero URL, che include tutti i suoi parametri. È possibile configurare l'agente solo per raccogliere i parametri degli URL che corrispondono a un elenco specificato di espressioni regolari. I parametri degli URL esclusi non vengono tracciati.

In base all'elenco di espressioni regolari fornito, l'agente JavaScript traccia gli URL come segue:

  • Se URL corrisponde a una voce dell'elenco, viene raccolto l'intero URL che include tutti i parametri.
  • Se URL non corrisponde a una voce dell'elenco, i parametri della query e i frammenti di URL non vengono inviati al backend di Instana.
  • Se l'elenco fornito è vuoto, viene applicato il comportamento predefinito e viene tracciato l'intero URL con i suoi parametri.
ineum('queryTrackedDomainList',queryTrackedDomainList);
 

I seguenti scenari spiegano la condizione se il sito URL contiene un segreto o un frammento redatto utilizzando ineum('secrets', secrets) o ineum('fragment', fragment):

  • Se URL corrisponde a una voce di queryTrackedDomainList, l'intero URL con il segreto o il frammento redatto viene inviato al backend Instana.
  • Se URL non corrisponde a una voce di queryTrackedDomainList, tutti i parametri vengono esclusi prima di inviare URL al backend di Instana.

Parametro

Parametro Descrizione
queryTrackedDomainList (RegExp[]) Un array di oggetti RegExp che corrispondono ai nomi degli URL che si desidera tracciare, compresi tutti i parametri.

Esempio

Nell'esempio seguente, gli URL che corrispondono alla regex /\/comet.+/i, /\/ws.+/i o /example.com/i vengono raccolti completamente con i relativi parametri:

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

Supporto delle intestazioni di traccia W3C per la correlazione con il backend

Quando un browser invia una richiesta a un server remoto e l'agente Instana monitora il server remoto, la risposta del server potrebbe contenere l'intestazione HTTP Server-Timing per fornire l'indirizzo backendTraceId all'agente Instana che gira nel browser. Se OpenTelemetry è abilitato nel server remoto, l'intestazione tracestate HTTP può contenere l'elemento backendTraceId.

tracestate e traceparent sono intestazioni di W3C-defined utilizzate per correlare gli ID delle tracce distribuite. Per ulteriori informazioni sulle intestazioni di traccia di W3C, vedere Livello di contesto della traccia.

Se si prevede che il server remoto possa usare OpenTelemetry e fornire il valore backendTraceId nell'intestazione tracestate , l'agente Instana nel browser deve impostare l'API enableW3CHeaders su true per utilizzare il valore backendTraceId nelle intestazioni W3C.

È possibile impostare backendTraceId in tre punti diversi: attraverso l'intestazione Server-Timing , l'intestazione tracestate e manualmente utilizzando l'API traceId nel browser. La sequenza di questi approcci è la seguente:

  • Se enableW3CHeaders è abilitato, si hanno due possibilità. Innanzitutto, si estrae il valore tracestate dai metadati della pagina corrente traceparent e lo si utilizza. Se non è possibile recuperare tracestate, viene generata e utilizzata una stringa lunga 16 caratteri compatibile con il contesto di traccia W3C.
  • Se enableW3CHeaders è disabilitato, verificare innanzitutto se l'API traceId viene chiamata. Se viene richiamata l'API traceId , utilizzare l'ID come backendTraceId. Se l'API traceId non viene chiamata, analizzare l'intestazione HTTP Server-Timing per ottenere l'API backendTraceId.
  • Se nessuno dei valori precedenti è disponibile, non è possibile collegare i beacon alle tracce del backend.
ineum('enableW3CHeaders',true);
 

Parametro

La tabella seguente elenca i parametri:

Parametro Descrizione
enabled (boolean) Il flag per disabilitare o abilitare questa funzione.

Esempio

L'esempio seguente mostra che le intestazioni di W3C sono abilitate:

ineum('enableW3CHeaders', true);
 

Configurazione dell'attesa massima dopo il caricamento della pagina

Per raccogliere metriche aggiuntive, l'agente JavaScript attende che si verifichino le seguenti condizioni. Ad esempio, il ritardo del primo ingresso e lo spostamento cumulativo del layout.

  • Tutte le metriche sono disponibili
  • La pagina viene scaricata (ad esempio la scheda viene chiusa)
  • Fino allo scadere di un tempo di attesa massimo

È possibile utilizzare questa API per riconfigurare il tempo massimo di attesa. Per impostazione predefinita, Instana attende fino a un secondo dopo che il caricamento della pagina è terminato, cioè l'evento onLoad finisce.

ineum('maxMaitForPageLoadMetricsMillis', durationMillis);
 

Parametro

La tabella seguente elenca i parametri:

Parametro Descrizione
durationMillis (numero) Il tempo massimo in millisecondi da attendere al termine del caricamento della pagina prima che venga trasmesso il beacon di caricamento della pagina.

Recupero dell'ID di caricamento della pagina

A volte può essere utile ricevere manualmente l'ID del caricamento della pagina, ad esempio quando si vuole effettuare una correlazione personalizzata. Questa funzione restituisce undefined finché l'agente JavaScript non viene caricato. Dopo che l'agente JavaScript è stato caricato, restituisce sempre lo stesso string.

ineum('getPageLoadId');
 

Risultati

L'ID di caricamento della pagina come string o undefined.

Esempio

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

Tracciamento degli errori

Segnalazione manuale degli errori

È possibile segnalare gli errori catturati. Questo può essere usato per integrare Instana con framework e librerie che catturano gli errori non catturati.

ineum('reportError', error, opts);
 
Parametro

La tabella seguente elenca i parametri:

Parametro Descrizione
error (Error o string) JavaScript Error o un messaggio di errore.
opts (ErrorReportingOpts, opzionale) Un oggetto che si presenta come segue.
{
  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.
}
 
Esempio
ineum('reportError', new Error('Something failed'), {
  componentStack: '…',
  meta: {
    widgetType: 'chart'
  }
});
 
Integrazione di React

È possibile ottenere migliori informazioni sugli errori quando si integra l'agente JavaScript con i confini degli errori di React. In particolare, le tracce di stack dei componenti sono disponibili in aggiunta alle tracce di stack degli errori (funzioni).

Il seguente frammento di codice mostra come componentDidCatch di React possa essere esteso per ottenere questa integrazione. Per maggiori informazioni su componentDidCatch ciclo di vita, vedere la documentazione di React.

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

  // your regular error boundary code
}
 
Integrazione di Angular 2+

Angular cattura tutti gli errori per impostazione predefinita e li registra nella console. Ciò significa che l'agente JavaScript non ha accesso a questi errori. Il seguente snippet TypeScript mostra come integrare gli errori catturati di Angular con Instana.

Per ulteriori informazioni sui gestori degli errori di Angular, consultare la documentazione di Angular.

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

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

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

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

Vue può assegnare un gestore globale per gli errori non catturati che vengono propagati dall'applicazione. Il seguente frammento di codice mostra come integrare la gestione degli errori di Vue con Instana.

Per ulteriori informazioni sui gestori degli errori di Vue, consultare la documentazione di Vue.

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

Esclusione degli errori dal tracciamento

È possibile impedire esplicitamente che alcuni errori vengano segnalati a Instana. Questo può essere usato per ignorare errori noti o non risolvibili.

ineum('ignoreErrorMessages', ignoreErrorMessages);
 
Parametro

La tabella seguente elenca i parametri:

Parametro Descrizione
ignoreErrorMessages (RegExp[]) Un array di oggetti RegExp che corrispondono agli errori che si desidera escludere dal tracciamento degli errori.

Approfondimenti sugli errori di script

I siti web che incorporano molti script di terze parti sono soggetti a un numero costante di Script Error. Instana fornisce indicazioni su come rendere accessibili questi errori, ovvero su come ottenere l'accesso al vero messaggio di errore e allo stack. A volte non è possibile seguire queste istruzioni, ad esempio perché la terza parte non aggiunge l'intestazione Access-Control-Allow-Origin necessaria. In questi casi, Instana fornisce mezzi alternativi per migliorare la comprensione di Script Errors.

Questo meccanismo non è una pallottola d'argento. Garantisce una migliore visibilità e un maggior numero di errori di tracciamento utili, ma si vedrà comunque (un numero ridotto di) Script Error. Per ulteriori informazioni, consultare la Guida alle origini incrociate.

Tracciamento esplicito degli errori degli ascoltatori di eventi DOM

Questo inserisce l'agente Instana nello stack di chiamate di ogni ascoltatore di eventi DOM. L'agente Instana inserisce automaticamente le dichiarazioni try/catch intorno alle funzioni degli ascoltatori di eventi. In questo modo è possibile ottenere una migliore comprensione degli errori di origine incrociata.

Questa funzione è disattivata per impostazione predefinita, poiché il suo valore è discutibile per la maggior parte dei nostri clienti. Inoltre, non è garantito che in questo modo si possano raccogliere informazioni migliori sugli errori di script, dato che i browser web hanno iniziato a correggere questa falla nel modello di sicurezza web.

ineum('wrapEventHandlers', enabled);
 
Parametro

La tabella seguente elenca i parametri:

Parametro Descrizione
enabled (boolean) Il flag per disabilitare o abilitare questa funzione.
Tracciamento esplicito degli errori del timer

Questo inserisce l'agente Instana nello stack delle chiamate di tutti i timer. L'agente Instana inserisce automaticamente le dichiarazioni try/catch intorno alle funzioni dei gestori di timer. In questo modo è possibile ottenere una migliore comprensione degli errori di origine incrociata.

Questa funzione è disattivata per impostazione predefinita, poiché il suo valore è discutibile per la maggior parte dei nostri clienti. Inoltre, non è garantito che in questo modo si possano raccogliere informazioni migliori sugli errori di script, dato che i browser web hanno iniziato a correggere questa falla nel modello di sicurezza web.

ineum('wrapTimers', enabled);
 
Parametro

La tabella seguente elenca i parametri:

Parametro Descrizione
enabled (boolean) Il flag per disabilitare o abilitare questa funzione.
Ignorare gli errori di script

Se non siete in grado di ottenere informazioni sugli errori di script utilizzando uno dei meccanismi precedentemente menzionati, potreste voler impedire che vengano segnalati a Instana. Questo può essere utile per garantire che le statistiche sugli errori rimangano utilizzabili. Per impedire che gli errori di script vengano segnalati a Instana, è possibile utilizzare il seguente snippet.

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

Segnalazione di eventi personalizzati

Per ulteriori informazioni sugli Eventi globali personalizzati, consultare la pagina Eventi.

Gli eventi personalizzati consentono di segnalare a Instana attività non standard, interazioni importanti e tempistiche personalizzate. Questo può essere particolarmente utile per analizzare gli errori non catturati (briciole di pane) e per tracciare altre metriche di prestazione.

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

Parametro

La tabella seguente elenca i parametri:

Parametro Descrizione
eventName (string) Definisce il tipo di evento verificatosi sul vostro sito web che potrebbe comportare la trasmissione di un beacon personalizzato.
timestamp (number, opzionale ) Il timestamp indica l'ora in cui si è verificato l'evento. Ricade su now() - duration quando non è definito.
duration (number, opzionale ) La durata in millisecondi dell'evento.
backendTraceId (string, opzionale ) Utilizzare questo parametro per collegare un beacon a una traccia di backend. Il suo valore deve essere una stringa esadecimale di 16 o 32 caratteri.
error (Error, opzionale ) Un oggetto di errore JavaScript per fornire un contesto più ampio. Se vuoi segnalare che si è verificato un errore, utilizza l' API dedicata alla segnalazione degli errori.
componentStack (string, opzionale ) Una stringa che rappresenta la gerarchia dei componenti. Tipicamente forniti da framework basati su componenti.
maxMetadataKeys (number, opzionale ) Il numero massimo di chiavi di metadati da inviare in un beacon. L'impostazione predefinita è 25.
meta (object, opzionale ) Un oggetto JavaScript con valori string , che può essere usato per inviare metadati a Instana solo per questo singolo evento. A differenza dell'uso dell' API dei metadati, questi metadati non sono inclusi nei beacon successivi.
customMetric (number, opzionale ) Dati metrici personalizzati con precisione fino a quattro cifre decimali. Non includere informazioni sensibili in questa metrica.

Esempio

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
});
 

Correlazione backend delle richieste di origine incrociata

La correlazione di backend di Instana funziona impostando intestazioni personalizzate sulle richieste XMLHttpRequest / fetch . L'agente JavaScript imposta queste intestazioni che vengono poi lette dal server. All'interno del browser, il criterio same-origin limita la trasmissione di intestazioni personalizzate. In particolare, le intestazioni personalizzate possono essere impostate solo per le richieste della stessa origine o per le richieste ad altre origini che consentono la trasmissione di intestazioni personalizzate. Ad esempio, per impostazione predefinita, un sito web servito da https://example.com:443 non può fare XMLHttpRequests a https://shop.example.com:443 poiché si tratta di due origini diverse.

Per aggirare questa restrizione di sicurezza, è disponibile la condivisione delle risorse in base all'origine ( CORS). Con CORS, è possibile consentire l'accesso alle risorse da parte delle origini. Se si dispone già di un accesso incrociato alle risorse all'interno della propria applicazione, è molto probabile che si stiano già utilizzando alcune intestazioni CORS.

Per abilitare la correlazione del backend di Instana, completare i passaggi seguenti:

  1. Consentire le intestazioni di correlazione di Instana per le richieste di origine incrociata rispondendo sul lato server con le seguenti intestazioni.

    Nota: il server deve rispondere con queste intestazioni sia per le richieste di preflight che per quelle normali. Le richieste di preflight (identificabili attraverso il metodo OPTIONS HTTP ) vengono eseguite dal browser per verificare che le richieste possano essere inviate al server.
    Access-Control-Allow-Origin: https://your-origin.example.com
    Access-Control-Allow-Headers: X-INSTANA-T, X-INSTANA-S, X-INSTANA-L
    
     
  2. Informare l'agente JavaScript che CORS è configurato correttamente e che deve impostare queste intestazioni di correlazione:

    ineum('allowedOrigins', urls);
     

Parametro

La tabella seguente elenca i parametri:

Parametro Descrizione
urls (RegExp[]) Una matrice di oggetti RegExp per la corrispondenza con gli URL consentiti.

Dal

Il comando allowedOrigins è disponibile con Instana Release 185 e successive. Utilizzare l'alias whitelistedOrigins con le versioni precedenti.

Alias

Il comando whitelistedOrigins è un alias deprecato di allowedOrigins.

Esempio

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

Verificate che l'applicazione funzioni correttamente dopo queste modifiche. L'istruzione all'agente JavaScript di aggiungere intestazioni di correlazione di backend (che consentono le origini) senza configurare CORS sul lato server, ha un'alta probabilità di rompere il vostro sito web!

Cattura delle intestazioni delle richieste o delle risposte di HTTP

Le intestazioni delle richieste HTTP o delle risposte delle richieste XMLHttpRequest o fetch possono essere catturate dall'agente JavaScript. È possibile definire le intestazioni di HTTP che si desidera che l'agente JavaScript catturi con il comando captureHeaders .

All'interno del browser, il criterio same-origin limita l'accesso alle intestazioni personalizzate. Senza la configurazione di CORS (Cross-Origin Resource Sharing ), l'agente JavaScript potrebbe non essere in grado di catturare tutte le intestazioni HTTP. Per abilitare CORS, vedere Correlazione tra richieste di origine incrociata e backend. Con CORS, solo le intestazioni di richiesta o risposta soddisfatte da CORS e quelle definite in Access-Control-Expose-Headers possono essere raccolte dall'agente JavaScript.

Nota: Note: Per le intestazioni nella richiesta, di solito è possibile catturare solo le intestazioni che si aggiungono alla richiesta HTTP, non quelle integrate che vengono aggiunte dal browser. Ad esempio, l'intestazione User-Agent è una stringa caratteristica con cui i server e i peer della rete identificano l'applicazione, il sistema operativo, il fornitore e la versione dell'agente utente richiedente. Viene aggiunto dal browser e non può essere catturato dall'agente JavaScript. Per quanto riguarda le intestazioni nella risposta, se non bloccate dalla politica di origine incrociata, sia le intestazioni integrate che quelle personalizzate dal lato server possono essere catturate dall'agente JavaScript.

Parametro

La tabella seguente elenca i parametri:

Parametro Descrizione
captureHeaders (RegExp[]) Un array di oggetti RegExp che corrispondono alla chiave delle intestazioni delle richieste o delle risposte di HTTP che si vuole che l'agente JavaScript catturi.

Dal

Il comando captureHeaders è disponibile dalla release 216 di Instana.