Freigeben über


Eingehende Diagnose für Web-Apps und Dienste mit Application Insights

In diesem Artikel wird erläutert, warum Application Insights die richtige Lösung für den DevOps-Zyklus ist.

Wofür benötigen Sie Application Insights?

Application Insights überwacht Ihre Web-App während der Ausführung. Das Feature informiert Sie über Fehler und Leistungsprobleme und hilft Ihnen zu analysieren, wie Kunden Ihre App nutzen. Es kann für Apps eingesetzt werden, die auf Plattformen wie ASP.NET, Java EE und Node.js ausgeführt werden. Application Insights wird in der Cloud oder lokal gehostet.

Abbildung, die die Komplexität bei der Bereitstellung von Web-Apps veranschaulicht

Es ist unerlässlich, eine moderne Anwendung während der Ausführung zu überwachen. Sie möchten Fehler erkennen, bevor sie Ihren Kunden auffallen. Außerdem möchten Sie Leistungsprobleme ermitteln und beheben, die Ihre Anwendung verlangsamen oder die Benutzererfahrung beeinträchtigen. Und wenn das System zu Ihrer Zufriedenheit ausgeführt wird, möchten Sie wissen, wie die Benutzer die Anwendung nutzen. Verwenden sie beispielsweise die neuesten Features? Sind sie damit erfolgreich?

Moderne Webanwendungen werden in einem Continuous Delivery-Zyklus entwickelt:

  • Sie führen ein neues Feature oder eine Verbesserung ein.
  • Sie beobachten, wie gut es von Benutzern angenommen wird.
  • Sie planen den nächsten Entwicklungsschritt auf der Grundlage dieses Wissens.

Die Beobachtungsphase ist ein wichtiger Bestandteil dieses Zyklus. Application Insights stellt Tools bereit, mit denen Sie die Leistung und Nutzung einer Webanwendung überwachen können.

Der wichtigste Aspekt dieses Prozesses ist die Fehlerermittlung und -diagnose. Wenn bei einer Anwendung ein Fehler auftritt, bedeutet dies zumeist Umsatzverlust. Die Hauptaufgaben eines Überwachungsframeworks sind:

  • Zuverlässige Fehlererkennung
  • Sofortige Benachrichtigung
  • Bereitstellung der Informationen, die Sie für die Problemdiagnose benötigen

Application Insights wurde für diese Aufgaben entwickelt.

Wo kommen Fehler her?

Fehler in Websystemen entstehen in der Regel aufgrund von Konfigurationsproblemen oder unzureichenden Interaktionen zwischen den vielen beteiligten Komponenten. Bei einem Vorfall auf einer Livewebsite müssen Sie als Erstes herausfinden, wo das Problem aufgetreten ist. Durch welche Komponente oder Beziehung wird das Problem verursacht?

Früher war es einfacher: Ein Computerprogramm wurde auf einem einzigen Computer ausgeführt. Vor der Bereitstellung wurde das Programm eingehend von den Entwicklern getestet, danach verloren sie es aus dem Blick oder haben nicht mehr darüber nachgedacht. So mussten sich Benutzer jahrelang mit den verbleibenden Fehlern abfinden.

Dieser Prozess hat sich stark verändert. Ihre App kann auf vielen verschiedenen Geräten ausgeführt werden, und es kann schwierig sein, auf jedem Gerät genau das gleiche Verhalten zu gewährleisten. Durch das Hosten von Apps in der Cloud können Fehler schnell behoben werden. Gleichzeitig unterliegen Apps dadurch einem ständigen Wettbewerb, und die Benutzer erwarten, dass häufig neue Features entwickelt werden.

Unter diesen Umständen sind automatisierte Unittests die einzige Möglichkeit, die Fehleranzahl unter Kontrolle zu halten. Es ist unmöglich, sämtliche Aspekte bei jeder Bereitstellung erneut manuell zu testen. Unittests sind heute ein alltäglicher Teil des Buildprozesses. Tools wie z.B. Xamarin Test Cloud bieten automatisierte Tests der Benutzeroberfläche in verschiedenen Browserversionen. Durch Einsatz solcher Testsysteme hoffen wir, die Menge an Fehlern in einer App auf ein Minimum zu reduzieren.

Webanwendungen verfügen in der Regel über viele Livekomponenten. Neben dem Client (in einer Browser- oder Geräte-App) und dem Webserver besteht wahrscheinlich ein hoher Verarbeitungsbedarf im Back-End. Vielleicht handelt es sich beim Back-End um eine Pipeline aus Komponenten oder um verschiedene unabhängige Bestandteile, die ineinandergreifen. Viele davon entziehen sich Ihrer Kontrolle. Es sind externe Dienste, von denen Sie abhängig sind.

In solchen Konfigurationen kann es schwierig und unwirtschaftlich sein, jeden möglichen Fehlermodus vorherzusehen oder zu testen – das kann nur im Livesystem selbst erfolgen.

Fragen

Im Folgenden einige Fragen, die Sie sich beim Entwickeln eines Websystems stellen sollten:

  • Stürzt Ihre App ab?
  • Was passiert genau? Wenn bei einer Anforderung ein Fehler aufgetreten ist, möchten Sie wissen, wie es dazu gekommen ist. Sie benötigen eine Ereignisablaufverfolgung.
  • Ist Ihre App schnell genug? Wie lange dauert die Antwort auf typische Anforderungen?
  • Kann der Server die Last bewältigen? Wenn die Anforderungsrate steigt, bleibt die Antwortzeit gleich?
  • Wie reaktionsschnell sind die Abhängigkeiten – REST-APIs, Datenbanken und weitere Komponenten, die Ihre App aufruft? Insbesondere, wenn das System langsam reagiert: Liegt das an Ihrer Komponente oder daran, dass ein anderes Element langsam antwortet?
  • Läuft Ihre App oder nicht? Ist sie von überall auf der Welt aus zugänglich? Sie müssen wissen, ob sie hängen bleibt.
  • Was ist die Ursache? Liegt der Fehler an Ihrer Komponente oder einer Abhängigkeit? Liegt ein Kommunikationsproblem vor?
  • Wie viele Benutzer sind betroffen? Wenn mehrere Probleme zu lösen sind – welches ist das wichtigste?

Was ist Application Insights?

Abbildung: Grundlegender Workflow von Application Insights

  1. Application Insights instrumentiert Ihre App und sendet während der Ausführung Telemetriedaten über Ihre App. Sie können das Application Insights SDK in die App integrieren oder die Instrumentierung zur Laufzeit anwenden. Die erste Methode ist flexibler, weil Sie den regulären Modulen eigene Telemetriedaten hinzufügen können.
  2. Die Telemetriedaten werden an das Application Insights-Portal gesendet und dort gespeichert und verarbeitet. Application Insights wird zwar in Azure gehostet, kann aber jede Web-App überwachen, nicht nur Azure-Apps.
  3. Die Telemetriedaten werden in Form von Diagrammen und Tabellen zu Ereignissen angezeigt.

Es gibt zwei Arten von Telemetriedaten: aggregierte Daten und unformatierte Instanzdaten.

  • Instanzdaten können z. B. einen Bericht zu einer Anforderung enthalten, die von Ihrer Web-App empfangen wurde. Sie können die Details zu einer Anforderung über das Suchtool im Application Insights-Portal suchen und überprüfen. Die Instanz umfasst beispielsweise folgende Daten: Antwortzeit der App nach der Anforderung, angeforderte URL und ungefährer Standort des Clients.
  • Aggregierte Daten enthalten z. B. die Anzahl von Ereignissen pro Zeiteinheit, sodass Sie die Anforderungsrate mit den Antwortzeiten vergleichen können. Zu diesen Daten gehören auch Durchschnittswerte von Metriken, wie etwa Antwortzeiten nach Anforderungen.

Die Daten lassen sich in folgende Hauptkategorien unterteilen:

  • An Ihre App gesendete Anforderungen (üblicherweise HTTP-Anforderungen) mit Daten zur URL, zur Antwortzeit und dazu, ob die Anforderung erfolgreich war oder nicht
  • Abhängigkeiten wie REST- und SQL-Aufrufe Ihrer App, ebenfalls mit URI, Antwortzeiten und Erfolgsmeldung
  • Ausnahmen, einschließlich Stapelüberwachungen.
  • Seitenzugriffsdaten, die aus den Browsern der Benutzer stammen
  • Metriken wie Leistungsindikatoren und Metriken, die Sie selbst schreiben
  • Benutzerdefinierte Ereignisse, die Sie zum Nachverfolgen von geschäftlichen Ereignissen verwenden können
  • Protokollablaufverfolgungen, die zum Debuggen verwendet werden.

Fallstudie: Real Madrid CF

Der Webdienst von Real Madrid wird von 450 Millionen Fans auf der ganzen Welt genutzt. Fans greifen sowohl über Webbrowser als auch über die mobilen Apps des Vereins darauf zu. Sie können dort nicht nur Eintrittskarten kaufen, sondern auch auf Informationen und Videoclips zu Ergebnissen, Spielern und den nächsten Begegnungen zugreifen. Sie können mithilfe von Filtern z. B. nach der Anzahl der erzielten Tore suchen. Es gibt auch Links zu sozialen Medien. Das Benutzererlebnis ist hochgradig personalisiert und als bidirektionale Kommunikation gestaltet, um die Fans einzubeziehen.

Die Lösung ist ein System aus Diensten und Anwendungen in Azure. Skalierbarkeit ist eine wesentliche Voraussetzung. Der Datenverkehr variiert und kann vor, während und nach Spielen ein sehr hohes Volumen erreichen.

Für Real Madrid ist es von entscheidender Bedeutung, die Leistung des Systems zu überwachen. Application Insights bietet einen umfassenden Überblick über das gesamte System, um eine zuverlässige und leistungsstarke Dienstausführung sicherzustellen.

Der Verein gewinnt auch detaillierte Einblicke in seine Fans: wo leben sie (nur 3 % in Spanien), für welche Spieler, bisherigen Ergebnisse und bevorstehenden Begegnungen interessieren sie sich, wie reagieren sie auf Spielergebnisse?

Der Großteil dieser Telemetriedaten wird automatisch ohne zusätzlichen Code erfasst – dadurch wurde die Lösung vereinfacht und die operative Komplexität reduziert. Bei Real Madrid verarbeitet Application Insights jeden Monat 3,8 Milliarden Telemetriedaten.

Real Madrid verwendet das Power BI-Modul zur Anzeige dieser Telemetriedaten.

Screenshot: Power BI-Ansicht der Application Insights-Telemetriedaten

Intelligente Erkennung

Die proaktive Diagnose ist ein neues Feature. Application Insights erkennt automatisch eine ungewöhnliche Zunahme der Fehlerraten in Ihrer App und informiert Sie darüber, ohne dass Sie spezielle Konfigurationseinstellungen vornehmen müssen. Der Dienst ist intelligent genug, um gelegentliche Fehler sowie eine Fehlerzunahme zu ignorieren, die aus einer Zunahme der gesendeten Anforderungen resultiert.

Beispielsweise kann in einem der Dienste, von denen Sie abhängig sind, ein Fehler auftreten. Oder vielleicht funktioniert der neue Build, den Sie bereitgestellt haben, nicht einwandfrei. Sie werden davon erfahren, sobald Sie sich Ihre E-Mails anschauen. Sie können auch Webhooks als Trigger für andere Apps verwenden.

Ein weiterer Aspekt: Dieses Feature führt täglich eine detaillierte Analyse Ihrer Telemetrie durch und sucht nach ungewöhnlichen Leistungsmustern, die schwer zu erkennen sind. Das Feature kann beispielsweise unzureichende Leistungsdaten in Zusammenhang mit einer bestimmten geografischen Region oder einer bestimmten Browserversion finden.

In beiden Fällen enthält die Warnung die gefundenen Symptome. Außerdem erhalten Sie die Daten, die Sie für die Problemdiagnose benötigen, z. B. Berichte zu relevanten Ausnahmen.

Screenshot: E-Mail der proaktiven Diagnose

Ein Erfahrungsbericht von Samtec: „Als wir kürzlich einige Features umstellten, fanden wir eine nicht ausreichend skalierte Datenbank, die an die Grenzen ihrer Ressourcen gelangt war und Timeouts verursachte. Als wir das Problem untersuchten, kamen buchstäblich gleichzeitig proaktive Warnungen herein – nahezu in Echtzeit, wie angekündigt. Dank dieser Warnung, zusammen mit den Warnungen der Azure-Plattform, konnten wir das Problem fast sofort beheben. Gesamte Downtime: keine 10 Minuten.

Live Metrics Stream

Die Bereitstellung des neuesten Builds kann eine nervenaufreibende Angelegenheit sein. Wenn es Probleme gibt, sollten Sie sofort darüber Bescheid wissen, damit Sie die Bereitstellung ggf. rückgängig machen können. Live Metrics Stream zeigt Ihnen wichtige Metriken innerhalb von etwa einer Sekunde an.

Screenshot: Livemetriken

Zudem können Sie Fehler oder Ausnahmen sofort anhand einer Stichprobe überprüfen.

Screenshot: Livefehlerereignisse

Anwendungszuordnung

In der App-Übersicht wird automatisch Ihre Anwendungstopologie ermittelt. Außerdem werden Leistungsdaten über die Übersicht gelegt, sodass Sie Leistungsengpässe und problematische Datenflows in Ihrer gesamten verteilten Umgebung schnell und einfach identifizieren können. Mit der App-Übersicht können Sie Anwendungsabhängigkeiten in Azure-Diensten ermitteln.

Sie können ein Problem eingrenzen, indem Sie feststellen, ob es mit dem Code oder den Abhängigkeiten zusammenhängt. So können Sie an einem zentralen Ort einen Drilldown auf die zugehörigen Diagnoseergebnisse durchführen. Beispiel: Bei Ihrer Anwendung tritt aufgrund eines Leistungsabfalls auf der SQL-Ebene ein Fehler auf. Dank der App-Übersicht können Sie den Fehler direkt erkennen und den SQL-Indexratgeber oder Query Insights aufrufen.

Screenshot: App-Übersicht

Application Insights-Protokollanalyse

Mit der Protokollanalyse können Sie beliebige Abfragen in einer leistungsfähigen SQL-ähnlichen Sprache schreiben. Da der gesamte App-Stapel berücksichtigt und verschiedene Perspektiven miteinander verbunden werden, gestaltet sich die Diagnose denkbar einfach. Anschließend können Sie die Leistung des Diensts sowie die Geschäftsmetriken und Kundenerfahrung anhand der richtigen Fragen in Beziehung setzen.

Sie können alle im Portal gespeicherten Telemetrieinstanz- und Metrikrohdaten abfragen. Die Sprache enthält filter-, join- und aggregation-Operationen sowie weitere Vorgänge. Sie können Felder berechnen und statistische Analysen durchführen. Die Daten lassen sich in tabellarischer oder grafischer Form visualisieren.

Screenshot: Analyseabfrage und Ergebnisdiagramm

Folgende Vorgänge werden erheblich vereinfacht:

  • Segmentieren Sie die Anforderungsleistungsdaten Ihrer Anwendung nach Kundenebene, um mehr über das Kundenerlebnis mit Ihrer Anwendung zu erfahren.
  • Suchen Sie während der Überprüfung der Livewebsite nach bestimmten Fehlercodes oder benutzerdefinierten Ereignisnamen.
  • Zeigen Sie Details zur App-Nutzung durch bestimmte Kunden an, um herauszufinden, wie Features abgerufen und angenommen werden.
  • Verfolgen Sie Sitzungen und Antwortzeiten für bestimmte Benutzer, damit Support- und Betriebsteams den Kunden sofortigen Support bieten können.
  • Ermitteln Sie häufig genutzte App-Features, um Fragen zur Priorisierung von Features beantworten zu können.

Ein Erfahrungsbericht von DNN: „Application Insights hat uns den fehlenden Teil der Formel geliefert – jetzt können wir Daten nach Bedarf kombinieren, sortieren, abfragen und filtern. Unser Team konnte seine Fähigkeiten und Erfahrungen in Bezug auf das Suchen von Daten optimal in diese leistungsstarke Abfragesprache einbringen – so konnten wir Erkenntnisse gewinnen und Probleme lösen, von denen wir nicht einmal wussten, dass wir sie hatten. Aus Fragen, die mit ,Ich frage mich, ob...‘ beginnen, entstehen viele interessante Antworten.“

Integration von Entwicklungstools

Application Insights kann in Entwicklungstools integriert werden.

Application Insights konfigurieren

Visual Studio und Eclipse bieten Tools, mit denen Sie die richtigen SDK-Pakete für das von Ihnen entwickelte Projekt konfigurieren können. Zum Hinzufügen von Application Insights gibt es einen Menübefehl.

Wenn Sie ein Ablaufprotokollierungsframework wie Log4N, NLog oder System.Diagnostics.Trace verwenden, haben Sie die Möglichkeit, die Protokolle zusammen mit den anderen Telemetriedaten an Application Insights zu senden. So können Sie die Ablaufverfolgungsdaten einfach mit Anforderungen, Abhängigkeitsaufrufen und Ausnahmen korrelieren.

Suchen nach Telemetriedaten in Visual Studio

Während Sie ein Feature entwickeln und debuggen, können Sie die Telemetriedaten direkt in Visual Studio anzeigen und durchsuchen. Sie können dieselben Suchfunktionen wie im Webportal verwenden.

Wenn Application Insights eine Ausnahme protokolliert, können Sie den Datenpunkt in Visual Studio anzeigen und direkt zum entsprechenden Code springen.

Screenshot: Visual Studio-Suche

Beim Debuggen können Sie die Telemetriedaten auf Ihrem Entwicklungscomputer speichern und in Visual Studio anzeigen, ohne sie an das Portal zu senden. Durch diese lokale Option vermeiden Sie beim Debuggen eventuelle Verwechslungen mit Produktionstelemetriedaten.

Arbeitselemente

Wenn eine Warnung ausgelöst wird, kann Application Insights automatisch ein Arbeitselement in Ihrem Arbeitsüberwachungssystem erstellen.