KI-basiertes Application Monitoring – läuft alles stabil?
Ein Lasttest zeigt, ob eine Anwendung den an sie gestellten Anforderungen gewachsen ist. Kommt ein KI-basiertes Monitoring hinzu, können Schwachstellen im System in Echtzeit aufgedeckt und behoben werden.
Es ist der Worst Case, dennoch leider ein Klassiker: Ein neues Produkt, ein neuer Shop oder ein neuer Dienst geht an den Start – und bricht zusammen. Seiten sind nicht aufrufbar oder Dienste nicht nutzbar, weil sie dem Ansturm nicht gewachsen sind oder weil ein Stellschräubchen nicht richtig funktioniert. Vor allem bei geschäfts- und umsatzkritischen Applikationen können schnell immense Verluste entstehen. Für den Erfolg einer Anwendung sind Zuverlässigkeit und Verfügbarkeit essentiell. Das Schreckensszenario ließe sich rein technisch aber leicht vermeiden. Mit Last- und Performancetests, die vor dem Launch eben genau dies tun: testen, ob die Performance bei zu erwartenden Lastspitzen standhält.
Überlastungsgrenzen, fehlerhafte Anwendungen oder andere Störursachen sollten rechtzeitig erkannt und behoben werden. Bei komplexen Systemlandschaften mit mehreren Services, (Multi-)Cloud-Diensten und eingebundenen Drittanbietern wird die Angelegenheit jedoch schon komplizierter. Hyperscaler brachten hier nicht den gewünschten Effekt, alles beliebig skalieren zu können ohne Lasttests durchführen zu müssen. Technologie-Stacks werden immer größer und binden immer mehr Sprachen, Technologien und Frameworks ein, etwa in Kubernetes-Clustern. Daher ist es nach dem durchgeführten Lasttest äußerst schwierig zu sagen, wo genau ein Engpass, ein Bottleneck, sitzt und woran eine schlechte Performance genau liegt. Reine Lasttests sind dennoch immer noch hilfreich und sie lassen sich sogar smarter gestalten.
Blackbox-Application-Testing
Ein Blackbox-Lasttest prüft ein IT-System mit Hilfe von Lastgeneratoren, die eine realistische, möglichst hohe Last erzeugen. Je nach Szenario wird die Last schrittweise erhöht und so die Anwendung stetig mit mehr Requests unter Stress gesetzt. Dabei werden verschiedene Parameter in mehreren Testphasen erfasst und analysiert. Das kann etwa die Antwortzeit der Anwendung sein, die Anzahl der verarbeiteten Anfragen oder Aktionen und auch die Fehlerrate. Dabei kann der Test herausfinden, wo die Kapazitätsgrenze des Systems liegt, bis die Anwendung zu langsam wird. Wie viele Nutzende können eine Anwendung gleichzeitig beanspruchen, ohne dass die Qualität und User Experience darunter leidet? Es kann auch getestet werden, wie lange ein System eine hohe Last aushält. Die Lastmenge, -frequenz und -dauer sollten möglichst variieren und produktiven Szenarien entsprechen. Aus dem Report, nach Beendigung des Tests, erfolgt die Analyse und die Fehleridentifikation. Nach einer Modifikation der Testobjekte sollte der Test wiederholt werden.
Die Fehleranalyse beim Blackbox-Loadtest ist jedoch komplex. Ein Report kann zum Beispiel den Anstieg X der Antwortzeit bei Laststufe Y ausgeben, aber er zeigt nicht, an welcher Komponente der Fehler liegt, oder ob ein Interface nicht funktioniert. Diese Interpretation obliegt dann dem Entwicklungs- und/oder dem Betriebsteam. Bei vielen Systemkomponenten und vielen unterschiedlichen Sprachen kann das eine zeitraubende Aufgabe sein.
Es können jedoch auch beim reinen Performance-Blackbox-Test Algorithmen oder gar künstliche Intelligenz zum Einsatz kommen, die die Auswertung optimieren. Ein Algorithmus könnte etwa Testkurven vergleichen und so ein bestimmtes Verhalten aufzeigen und vorhersagen. Je mehr Daten vorliegen, umso praktikabler wird der Einsatz von KI. Dafür müssen im Zielsystem Metriken von der Infrastruktur, von den Services und auch Metadaten erhoben werden.
Die Schwierigkeit, als Dienstleister mit einem Lasttest beauftragt zu werden, liegt im fehlenden Einblick in die Abhängigkeiten. Obwohl eine Architekturskizze im Regelfall vorliegt, kann etwa eine Fehldimensionierung so nicht eingeschätzt werden. Hält das System einem Lasttest nicht stand, bleibt uns nur zu sagen: Da stimmt etwas nicht. Den Flaschenhals erkennen wir so nicht.
Überwachung auf der ganzen Linie
Um die genauen Ursachen von Fehlern oder Störungen in komplexen Cloud-Architekturen, vielen Microservices und unterschiedlichen Technologie-Stacks besser, zuverlässiger und schneller zu identifizieren, sollten Monitoring-Tools zum Einsatz kommen. Diese können einen kontinuierlichen Überblick über den Zustand der Anwendungen und Ressourcennutzung in allen Schichten der Infrastruktur erfassen, um Transparenz bis zur Code-Ebene zu generieren. Eine Monitoring-Plattform liefert zudem detaillierte Einblicke und Störungsanalysen in die gesamte Systemlandschaft. Künstliche Intelligenz ermittelt dabei parallel die genauen Störfaktoren, -ursachen und Fehlerquellen und hilft so dabei, die Zeit für die Problembehebung zu reduzieren. Werden Performance-Tests mit Monitoringlösungen kombiniert, sprechen wir vom Whitebox-Lasttest.
Automatisiertes Application Monitoring
Vor einem entsprechenden Lasttest werden initiale Rahmenbedingungen, wie die Zielapplikationen, die Geschäftsprozesse und das Mengengerüst festgelegt. Im Testtool werden die Usecases und Teststeps erstellt und parametrisiert. Die Testinfrastruktur wird in der Cloud dynamisch aufgebaut. Im Anschluss veranschaulichen Dashboards und Reports die Anwendungs-Performance sowie die Ergebnisse. Der technologische Aufbau kann so aussehen: Der Lasttest wird in einem Testplan in JMeter mit Parametern, Usecases und dazugehörigen Teststeps definiert. Jenkins als Open-Source-Lösung für die Integration aller Software-Komponenten ist die zentrale Steuereinheit und funktioniert als Automatisierungs-Server. Die ReportEngine, ein eigenes Reportingwerkzeug der T-Systems MMS, kann alle Testdaten auswerten und so einen einzigen, einheitlichen Report erstellen, unabhängig von den eingesetzten Tools. Das TestRunLog, ein Testmanagementwerkzeug, dokumentiert die Tests und dient als Dashboard, auf dem wir sehen, wo und was getestet wird. In der Cloud, etwa AWS, wird die Test-Infrastruktur über Jenkins provisioniert und hochgefahren. Der JMeter-Controller steuert die JMeter-Agenten, die die Last erzeugen. Kontinuierlich und live werden Metriken innerhalb der Monitoringlösung ausgewertet, die zeigen, ob das Lastszenario wie definiert umgesetzt wird. Mit diesem Testaufbau können wichtige KPIs, z. B. Hardware-Auslastung, Anzahl der Requests oder der aktiven VUs (Virtual Users), live überwacht werden. Ein Szenario könnte etwa sein, über einen Zeitraum von 30 Minuten eine steigende Last aufzubauen bis die Maximallast erreicht wird. In einem Blackbox-Verfahren hätten wir erst nach den 30 Minuten gesehen, wie die Anwendung sich verhalten hätte. Dank des Live-Monitorings sehen wir das in Echtzeit. Das TestRunLog kann sowohl im Corporate Network als auch außerhalb in der Cloud aufgestellt sein, etwa über Azure oder in einem beliebigen Rechenzentrum und damit On-Premise.
KI-unterstütztes Monitoring: Dynatrace
Als Premier-Partner setzen wir Dynatrace als KI-gestützte Monitoring-Lösung ein. Hier spielen die Agenten, die OneAgents, eine besondere Rolle. Sie sammeln die relevanten Monitoring-Daten und Metriken von der Infrastruktur, von den Anwendungen und auch aus der Cloud und liefern sie an Dynatrace.
Dynatrace arbeitet mit einer Anomalie-Detection. Verschiedene Algorithmen werden angewandt, um aus den letzten sieben Tagen eine Vorhersage zu treffen, was passieren könnte. Wenn die Antwortzeit eines Service aufgrund der CPU Usage ansteigt, dann ermittelt Dynatrace dies selbständig, ohne auf einen fixen Schwellenwert angesetzt zu sein. Während beim klassischen Monitoring Alarmierungen nur anhand statischer Werte ausgelöst werden, können moderne Tools wie Dynatrace eine (schwellwertunabhängige) Anomalie erkennen. So kann etwa aus den letzten sieben Tagen oder abhängig von Tag und Stunde ein Lastverhalten zugrunde gelegt werden, aus dem Dynatrace eine Anomalie folgert, indem es Abhängigkeiten der Applikation und Systemkomponenten untereinander beachtet. In Echtzeit erstellt Dynatrace einen Alarm – noch während des Lasttests. Die KI setzt bei der Cross-Analyse ein und kann etwa herausfinden, dass die Applikation zu klein dimensioniert war. Auch das geschieht noch während des Lasttests. Dynatrace erspart so die langwierige Problemsuche, die bei einem Whitebox-Lasttest ohne KI-Einsatz notwendig gewesen wäre.
Ein proprietäres Tool wie Dynatrace zu nutzen ist nicht zwingend nötig. Eine KI-basierte Lösung ließe sich auch selbst programmieren oder als Open-Source-Alternative finden. Dazu fehlen allerdings meist sowohl Wissen als auch Ressourcen im Unternehmen, eine solche Lösung zuverlässig aufzusetzen und einzusetzen. Der klare Vorteil eines proprietären Tools ist die etablierte und ausgereifte Entwicklung, die dazu führt, dass es schnell implementiert und einfach zu bedienen ist. Zudem ist ein Support bei Fragen oder Problemen durchaus hilfreich.
Anwendungsbeispiel:
Mehrere Webauftritte eines großen deutschen Logistikunternehmens sollten zusammengelegt und alle Dienste nach und nach per Lift-and-Shift in die Azure-Cloud transferiert werden. Das betraf auch geschäftsrelevante und umsatzkritische Dienste. Störungen oder Ausfälle eines solchen Dienstes waren inakzeptabel. Für diesen Dienst sollte T-Systems MMS einen Lasttest durchführen, Dynatrace als Monitoring-Lösung ist bereits im Einsatz. Lasttests sollten sowohl sicherstellen, dass die Dienste beim Umzug auf Azure und auf der neuen Website in der Cloud reibungslos laufen. Da in Azure eine andere Architektur aufgebaut ist und sich der Technologie-Stack ändert, ist ein präzises Monitoring erforderlich. Um auch zu erwartende Lastspitzen von Diensten in hochfrequentierten Zeiten wie rund um Weihnachten standhalten zu können, haben wir dafür eine Testinfrastruktur aus über 200 Virtual Machines aufgebaut, die eben diesen Weihnachtsansturm simulieren sollten. Dafür war es nötig, die Test-Infrastruktur in der Cloud aufzubauen. Durch das automatisierte Monitoring und die schnelle Problemanalyse ist es dem Unternehmen nun möglich, zehn Mal mehr Releases pro Jahr herauszubringen als zuvor. Zudem sorgen Schnelligkeit und Ausfallsicherheit für eine hohe Kosteneinsparung. Nicht zuletzt ein ebenfalls sehr wichtiger Faktor: Die dadurch gesicherte Wettbewerbsfähigkeit und Zukunftssicherheit.
Key Benefits
Ein wichtiger Erfolgsfaktor eines zuverlässigen Monitorings: Die IT wird kontinuierlich auf Zuverlässigkeit geprüft und damit der reibungslose Ablauf der Geschäftsprozesse garantiert, die von der IT abhängig sind. Erst in dem Moment zu testen, wenn ein wichtiger Launch bevorsteht oder akute Produktionsschwierigkeiten auftreten, ist allerdings zu kurz gedacht. Es ist natürlich möglich, auch innerhalb kürzester Zeit, in etwa ein bis zwei Wochen, ein Testszenario einzurichten, aber mit mehr Vorlauf können Analysen und damit Abhängigkeiten der Systemkomponenten besser durchgetestet werden. Die automatisierte Bereitstellung der Test-Infrastruktur in der Cloud ermöglicht ein initiales Aufsetzen der Komponenten vor jedem Test und sichert somit die Vergleichbarkeit und Wiederholbarkeit der durchgeführten Testläufe.
Eine Monitoring-Lösung kann unabhängig von Lasttests etabliert bleiben, denn Monitoring-Tools liefern weitreichendere Einsichten. Anbieter wie Dynatrace haben den Vorteil, mit einer guten Out-of-the-Box-Experience und einer einfachen Bedienbarkeit aufzuwarten. Monitoring in Verbindung mit Lasttests in der gesamten Release-Kette vermitteln die Sicherheit, dass es zu jedem Schritt zuverlässige und stabile Releases inklusive der Verbesserungen aus dem vorigen gibt.
Wann soll es losgehen?
Wie alle Software-Tester möchte auch ein Performance-Test-Team so nah wie möglich am Entwicklungsprozess beteiligt sein. So kann es schon Schritt für Schritt mitwirken und kontinuierlich bei den verschiedenen Releases Schwachstellen aufdecken. Lasttest-Projekte, die erst konzipiert werden, wenn bereits Feuer gelöscht werden müssen, können zwar schnell auf die Beine gestellt werden, aber nachhaltiger und wirkungsvoller ist der frühe Einsatz.
Auch wenn viele Unternehmen noch nicht einmal reine Lasttests nutzen, den Hype um Observability- und Application-Performance-Management gibt es zu Recht. Selbst bei kleinem Budget: Ein Lasttest sollte vor einem Launch drin sein, denn können beim Start, beim Launch oder zu Spitzenzeiten Seiten nicht geladen werden, tut das weh. Ein Lasttest allein gibt schon Sicherheit, ein Lasttest in Verbindung mit Monitoring unterstützt smart, schnell und zuverlässig, bevor es zu spät ist.