Menu Chiudi

APM (RUM-JS)

L’agent JavaScript di Elastic, APM Real User Monitoring (RUM) fornisce metriche dettagliate delle prestazioni e il monitoraggio degli errori delle applicazioni Web. Ha il supporto integrato per piattaforme e framework popolari e API per la strumentazione personalizzata. L’agent supporta inoltre la funzionalità di distributed tracing per tutte le richieste in uscita. Ciò consente di analizzare le prestazioni in tutta l’architettura di microservizi, il tutto in un’unica visualizzazione.

L’agent utilizza le API di temporizzazione del browser, ad esempio Navigation Timing Resource Timing, Paint Timing, User Timing, ecc., e acquisisce le seguenti informazioni:

Tra le capacità di RUM agent c’è anche quella di comprendere il modo in cui l’utente percepisce le prestazioni di una pagina web andando oltre il caricamento della pagina stessa, l’agent supporta l’acquisizione delle seguenti metriche di reattività :

  • First contentful paint (FCP)
  • Largest contentful paint (LCP)
  • First input delay (FID)
  • Total blocking time (TBT)
  • Cumulative layout shift (CLS)
  • Long Tasks
  • User Timing

L’analisi di queste metriche è al di fuori dello scopo del presente documento.

Il RUM agent è in sostanza un JavaScript che, nel caso del nostro test condotto in lab, viene iniettato in modo automatico nella pagina richiesta dal web browser del client, sfruttando la funzionalità (sub_filter) del NGINX web server, facendo il replacement di un testo con un altro che include il JavaScript, alcuni ulteriori campi di interesse ma soprattutto le istruzioni per inviare le informazioni acquisite al APM Server il quale poi le inoltrerà al modulo Logstash per la digital transformation, mediante il quale verranno aggiunti ulteriori campi ed infine lo stream verra inviato all’analytic OpenSearch per lo store e conseguente visualizzazione nell’apposita dashboard.

Di seguito si riporta lo stream “apm-transaction” relativo alla applicazione analizzata in lab.

Come nel caso dell’estensione del browser anche in questo caso le metriche consentono di poter effettuare il breackdown del Page Load Time, cioè il tempo di caricamento complessivo di una pagina web viene scomposto in una serie di metriche che permettono di evidenziare il contributo dei singoli elementi funzionali al tempo complessivo, permettendo di poterli aggregare identificando :

  • Browser Time
  • Server Time
  • Application Time
  • Network Time

In questo modo non solo è possibile usare il Page Load Time come metrica per evidenziare la digitital experience reale di un utente, ma è anche possibile individuare il contributo che il network, il server, l’applicazione e il browser hanno sul tempo complessivo aggregato.

Risulterà quindi assai facile poter confrontare client diversi tra loro quando accedono alla medesima URL, nonché visualizzare il trending di una metrica in funzione dei client, dei site/host groups/geo localizzzaioni/server/urls …

In sintesi questi sono stati i dati raccolti dal test.

Page Load Time = 178,95 ms

Network             =        6,63 ms      –      rappresenta il 3,7% del Page Load Time

Server                 =       0,28 ms      –      rappresenta il 0,16% del Page Load Time

Applicazione      =       10,72 ms     –      rappresenta il 6% del Page Load Time

Web Browser    =     162,07 ms     –      rappresenta il 90,56% del Page Load Time

Page Views        =             1415

In dettaglio

E’ altresì possibile effettuare il drill-down di una transazione ed analizzarne lo SPAN mediante il tracing, individuando in questo modo il contributo di script, css, image etc.

I valori di Page Load Time e le conseguenti metriche, che esprimono la digital experience percepita dagli utenti, sono molto simili a quanto ottenuto con la tecnica che prevedeva l’installazione dell’estensione al web browser.

Questa soluzione come nel caso dell’estensione al web browser permette di bypassare qualsiasi problema di encryption, e di mostrare le reali urls richiamate anche nel caso di una connessione https ma con il vantaggio di non dover distribuire ed installare nulla sui client ma di agire o a livello applicativo o sfruttare le potenzialità del web server per fare la java injection senza la necessità di modificare l’applicazione.

Per continuare a leggere :