End2End-Browser
Mit End2End-HTTP prüfe ich schon umfangreich die Erreichbarkeit und Latenzzeit zum Webserver. Es ist aber keine Auswertung echten Anwenderzugriffe. Browser-Plug-ins können aber sehr gut auch Kennzahlen im Browser ermitteln.
Real statt Test
Auch wenn ich mit End2End-HTTP schon die nackte Verbindung zum WebServer prüfe und zudem Kennzahlen des SharePoint-Servers (End2End-SharePoint) mit erfasse so ist es immer nur ein Request pro Zeit auf eine bestimmte URL. Anwender arbeiten natürlich mit einem Browser, der zum Aufbau einer Seite mehrere URLs einsammelt und weitere Skripte o.ä. ausführt und Seiten rendert.
Aktiv ist dabei immer der Benutzer und mich würde schon interessieren, wie flüssig der Anwender arbeiten kann. Das kann meiner Einschätzung nach nur auf dem Client erfasst werden, da der Inhalt der WebServer nicht immer durch eigene Skripte ergänzt werden kann.
Es beginnt ja immer mit dem ersten Aufruf der URL und der abschließenden Meldung des Browser "Rendering done". Zudem lädt der Browser weitere Informationen während dem Zeitenaufbau nach. Insofern frage ich mir, wie diese Daten sinnvoll erfasst werden können. Relevant sehe ich hier
- Performance für das Laden und Rendern der Seite
Das müsste der Browser erfassen können, denn der Browser bekommt die Benutzer-Aktion (Mausklick) mit und meldet letztlich "Renderer done" - Individuelle Performance der Quellen
Wenn der Browser auch jeden einzelnen Request und dessen Latenzzeit und Größe erfassen kann, dann könnte man damit auch die Gegenstellen hinsichtlich Performance weiter messen.
Dass dies technisch möglich ist, zeigen ja die F12-Developer Tools und auch das Page Diagnostics for SharePoint Tool (Siehe End2End-SharePoint). Beide Tools sind aber für eine sinnvolle datensparsame Erfassung aber nicht geeignet.
Also habe ich auf die Suche gemacht und wurde auch fündig:
The Navigation Timing API provides data that can be used to
measure the performance of a web site. Unlike JavaScript-based libraries that
have historically been used to collect similar information, the Navigation
Timing API can be much more accurate and reliable.
Quelle:
https://developer.mozilla.org/en-US/docs/Web/API/Navigation_timing_API
- Navigation Timing API
https://developer.mozilla.org/en-US/docs/Web/API/Navigation_timing_API - chrome.webRequest
https://developer.chrome.com/extensions/webRequest
Use the chrome.webRequest API to observe and analyze traffic and to intercept, block, or modify requests in-flight - Measuring the Critical Rendering Path
https://developers.google.com/web/fundamentals/performance/critical-rendering-path/measure-crp - Mozilla Windows.Performance.Timing (depreciated)
https://developer.mozilla.org/en-US/docs/Web/API/PerformanceTiming - Mozilla Performance.timeOrigin (experimental)
https://developer.mozilla.org/en-US/docs/Web/API/Performance/timeOrigin
Planung
Der Anwender "surft" quasi durch seine Anwendungen und das ist bei weitem nicht nur das Internet sondern auch viele interne Services nutzen mittlerweile HTTP. Damit man dennoch nicht alles erfassen muss, würde ich mit auf die "Hauptseiten" einer Domain-Allowlist beschränken, die für den Mitarbeiter relevant sind. Also immer, wenn der Anwender eine URL aus dieser Liste aufruft, dann erfasst die Extension die Gesamtladezeit der Hauptseite und Latenzzeit/Datenmenge der für die Seite nachgeladenen Zeiten nach Domain. Zumindest in der ersten Version erhoffe ich mir, dass diese Datenmenge für eine Performance-Messung ausreicht. Am Ende habe ich dann
- Eine Liste der aufgerufenen URLs
bestehen aus Domain, URL (hash) mit
Zeitpunkt, Datenmenge, Ladezeit, MB gesamt
Damit sollte man "Beschwerden" des Anwenders anhand der Uhrzeit schon halbwegs gut nachvollziehen können und auch erkennen, ob es nur bestimmte Webseiten betrifft - Eine Liste der Domains mit Min/Max/Avg
Ladezeit und Min/Max/Avg Durchsatz und MB
Gesamt über jede 10 Minuten
Fast alle Webseiten laden irgendetwas woanders nach, z.B. CSS, Bilder, Skripte etc. Wenn man nur die Werte pro Domain zusammenfasst, könnte diese die weitere Analyse unterstützen ohne zu viele Daten zu sammeln
Damit erhalte ich natürlich kein 100% genaues Tracking einzelner Requests, was aber auch hinsichtlich Datenschutz kritisch zu sehen wäre. Es ist auch nicht lückenlos, da der Anwender ja aktiv etwas tun muss. Mit den Zahlen lassen sich dann aber generische End2End-HTTP-Requests erstellen.
Umsetzung
Das ist dann noch die Baustelle. Ich hatte bislang weder Zeit noch Ressourcen ein Browser Plugin zu bauen und die Daten in das End2End-Monitoring zu addieren.