Muster für Überwachung der Integrität von Endpunkten

Implementieren Sie Funktionsprüfungen in einer Anwendung, auf die externe Tools in regelmäßigen Abständen über verfügbar gemachte Endpunkte zugreifen können. Dies kann helfen, die ordnungsgemäße Ausführung von Anwendungen und Diensten zu überprüfen.

Kontext und Problem

Es ist eine bewährte Praxis und oft eine Geschäftsanforderung, Webanwendungen und Back-End-Dienste zu überwachen, um sicherzustellen, dass sie verfügbar sind und einwandfrei funktionieren. Allerdings lassen sich Dienste, die in der Cloud ausgeführt werden, manchmal schwieriger als lokale Dienste überwachen. Beispielsweise haben Sie nicht die volle Kontrolle über die Hostingumgebung, und die Dienste hängen in der Regel von anderen Diensten ab, die von Plattform- und anderen Anbietern bereitgestellt werden.

Es gibt viele Faktoren, die sich auf cloudbasierte Anwendungen auswirken, wie z.B. die Netzwerklatenz, Leistung und Verfügbarkeit der zugrunde liegenden Compute- und Speichersysteme und die Netzwerkbandbreite zwischen ihnen. Aufgrund dieser Faktoren kann der Dienst ganz oder teilweise ausfallen. Daher müssen Sie in regelmäßigen Abständen überprüfen, ob der Dienst ordnungsgemäß funktioniert, um den erforderlichen Verfügbarkeitsgrad sicherzustellen, der Teil Ihrer Vereinbarung zum Servicelevel (SLA) sein kann.

Lösung

Implementieren Sie die Integritätsüberwachung, indem Sie Anforderungen an einen Endpunkt der Anwendung senden. Die Anwendung muss die notwendigen Prüfungen durchführen und eine Statusangabe zurückgeben.

Eine Überwachungsprüfung der Integrität kombiniert typischerweise zwei Faktoren:

  • Die Prüfungen (falls vorhanden), die von der Anwendung oder dem Dienst als Antwort auf die Anforderung zur Überprüfung der Integrität des Endpunkts ausgeführt werden.
  • Die Analyse der Ergebnisse durch das Tool oder Framework, das die Integritätsprüfung durchführt.

Der Antwortcode gibt den Status der Anwendung und optional der von ihr verwendeten Komponenten oder Dienste an. Die Wartezeit- oder Antwortzeitprüfung wird vom Überwachungstool oder -framework durchgeführt. Die Abbildung zeigt eine Übersicht über das Muster.

Übersicht über das Muster

Andere Prüfungen, die vom Code für die Integritätsüberwachung in der Anwendung durchgeführt werden können, sind z.B:

  • Überprüfung der Verfügbarkeit und Antwortzeit eines Cloudspeichers oder einer Datenbank
  • Überprüfung anderer Ressourcen oder Dienste, die sich in der Anwendung befinden oder an anderer Stelle, aber von der Anwendung verwendet werden

Es stehen Dienste und Tools zur Verfügung, die Webanwendungen überwachen, indem sie eine Anforderung an einen konfigurierbaren Satz von Endpunkten senden und die Ergebnisse im Abgleich mit einer Reihe konfigurierbarer Regeln auswerten. Es ist relativ einfach, einen Dienstendpunkt zu erstellen, dessen einziger Zweck es ist, einige Funktionstests auf das System anzuwenden.

Typische Prüfungen, die von den Überwachungstools durchgeführt werden können, sind z.B:

  • Validieren des Antwortcodes. Die HTTP-Antwort 200 (OK) gibt beispielsweise an, dass die Anwendung fehlerfrei antwortet. Das Überwachungssystem kann auch auf andere Antwortcodes prüfen, um umfassendere Ergebnisse zu liefern.
  • Überprüfung des Inhalts der Antwort, um Fehler zu erkennen, auch wenn der Statuscode 200 (OK) zurückgegeben wird. Hierdurch können Fehler erkannt werden, die nur einen Teil der zurückgegebenen Antwort der Webseite oder des Diensts betreffen. Zum Beispiel die Überprüfung des Titels einer Seite oder die Suche nach einer bestimmten Wortgruppe, die angibt, dass die richtige Seite zurückgegeben wurde.
  • Messung der Antwortzeit, die eine Kombination aus der Netzwerklatenz und der Zeit angibt, die die Anwendung für die Ausführung der Anforderung benötigt hat. Ein steigender Wert kann auf ein auftauchendes Problem mit der Anwendung oder dem Netzwerk hinweisen.
  • Überprüfung von Ressourcen oder Diensten außerhalb der Anwendung wie z.B. ein Content Delivery Network, das von der Anwendung verwendet wird, um Inhalte aus globalen Caches bereitzustellen.
  • Überprüfung des Ablaufs von SSL-Zertifikaten.
  • Messung der Antwortzeit eines DNS-Lookups nach der URL der Anwendung zum Messen von DNS-Latenz und DNS-Fehlern.
  • Validierung der URL, die vom DNS-Lookup zurückgegeben wird, um richtige Einträge sicherzustellen. Dies kann helfen, böswillige Umleitungen von Anforderungen bei einem erfolgreichen Angriff auf den DNS-Server zu vermeiden.

Es ist auch nützlich, diese Prüfungen nach Möglichkeit von verschiedenen lokalen oder gehosteten Standorten aus durchzuführen, um die Antwortzeiten zu messen und zu vergleichen. Idealerweise sollten Sie Anwendungen von Standorten aus überwachen, die sich in der Nähe von Kunden befinden, um einen genauen Überblick über die Leistung jedes Standorts zu erhalten. Zusätzlich zur Bereitstellung eines zuverlässigeren Prüfmechanismus können die Ergebnisse Ihnen helfen, den Bereitstellungsort für die Anwendung zu bestimmen und zu entscheiden, ob sie in mehr als einem Rechenzentrum bereitgestellt werden soll.

Außerdem sollten Tests auf alle von Kunden verwendeten Dienstinstanzen angewendet werden, um sicherzustellen, dass die Anwendung für alle Kunden einwandfrei funktioniert. Wenn beispielsweise der Kundenspeicher auf mehr als ein Speicherkonto verteilt ist, sollte der Überwachungsprozess alle diese Konten überprüfen.

Probleme und Überlegungen

Beachten Sie die folgenden Punkte bei der Entscheidung, wie dieses Muster implementiert werden soll:

Validierung der Antwort. Ist zum Beispiel bloß der Statuscode 200 (OK) ausreichend, um zu bestätigen, dass die Anwendung ordnungsgemäß funktioniert? Obwohl dies die grundlegendste Kennzahl für die Anwendungsverfügbarkeit und die Minimalimplementierung dieses Musters ist, liefert es wenig Informationen über die Vorgänge, Trends und mögliche anstehende Probleme in der Anwendung.

Die Anzahl der Endpunkte, die für eine Anwendung verfügbar gemacht werden. Ein Ansatz sieht vor, dass mindestens ein Endpunkt für die Kerndienste, die die Anwendung verwendet, und ein weiterer Endpunkt für Dienste mit geringerer Priorität verfügbar gemacht wird, sodass jedem Überwachungsergebnis unterschiedliche Wichtigkeitsstufen zugewiesen werden können. Erwägen Sie außerdem, weitere Endpunkte, wie z.B. einen für jeden Kerndienst, für mehr Granularität bei der Überwachung verfügbar zu machen. Beispielsweise kann eine Integritätsprüfung die Datenbank, den Speicher und einen externen Geocodierungsdienst einer Anwendung überprüfen, wobei jede Komponente einen anderen Grad an Verfügbarkeit und Antwortzeit erfordert. Die Anwendung kann immer noch funktionieren, auch wenn der Geocodierungsdienst oder eine andere Hintergrundaufgabe für einige Minuten nicht verfügbar ist.

Ob für die Überwachung derselbe Endpunkt verwendet werden soll, der für den allgemeinen Zugriff verwendet wird, wobei aber auf dem Endpunkt für den allgemeinen Zugriff ein bestimmter Pfad gewählt wird, der für die Überprüfung der Integrität bestimmt ist, z.B. „/health“. Auf diese Weise können einige Funktionstests in der Anwendung von den Überwachungstools ausgeführt werden, wie z.B. das Hinzufügen einer neuen Benutzerregistrierung, das Anmelden und die Erteilung eines Testauftrags, während gleichzeitig überprüft wird, ob der allgemeine Zugriffsendpunkt verfügbar ist.

Die Art der Informationen, die im Dienst als Antwort auf Überwachungsanforderungen gesammelt werden sollen, und wie diese Informationen zurückgegeben werden können. Die meisten vorhandenen Tools und Frameworks untersuchen nur den HTTP-Statuscode, den der Endpunkt zurückgibt. Um zusätzliche Informationen zurückzugeben und zu überprüfen, müssen Sie möglicherweise ein Überwachungshilfsprogramm oder einen Dienst selbst erstellen.

Umfang der zu sammelnden Informationen. Eine übermäßige Verarbeitungslast während der Überprüfung kann die Anwendung ausbremsen und somit Auswirkungen auf andere Benutzer haben. Die dafür benötigte Zeit kann das Zeitlimit des Überwachungssystems überschreiten, sodass die Anwendung als nicht verfügbar markiert wird. Die meisten Anwendungen bieten eine Instrumentierung wie Fehlerhandler und Leistungsindikatoren, die die Leistung und detaillierte Fehlerinformationen protokollieren. Dies kann ausreichend sein, anstatt zusätzliche Informationen nach einer Integritätsprüfung zurückzugeben.

Zwischenspeichern des Endpunktstatus. Ein zu häufiges Durchführen der Integritätsprüfung kann mit hoher Systemlast verbunden sein. Wenn der Integritätsstatus beispielsweise über ein Dashboard gemeldet wird, möchten Sie nicht, dass jede Anforderung an das Dashboard eine Integritätsprüfung auslöst. Lassen Sie stattdessen den Systemstatus regelmäßig überprüfen und den Status zwischenspeichern. Machen Sie einen Endpunkt verfügbar, der den Status aus dem Cache zurückgibt.

Konfigurieren der Sicherheit der Überwachungsendpunkte zum Schutz vor öffentlichem Zugriff. Durch diesen kann die Anwendung böswilligen Angriffen ausgesetzt sein, aufgrund der Offenlegung sensibler Informationen gefährdet werden oder Opfer von Denial-of-Service-Angriffen (DoS) werden. Typischerweise sollte dies in der Anwendungskonfiguration erfolgen, damit problemlos eine Aktualisierung ohne Neustart der Anwendung durchgeführt werden kann. Erwägen Sie eine oder mehrere der folgenden Vorgehensweisen:

  • Schützen Sie den Endpunkt, indem eine Authentifizierung angefordert wird. Sie können dies tun, indem Sie einen Authentifizierungssicherheitsschlüssel im Anforderungsheader verwenden oder Anmeldeinformationen mit der Anforderung übergeben, sofern der Überwachungsdienst oder das Tool die Authentifizierung unterstützt.

    • Verwenden Sie einen verborgenen oder ausgeblendeten Endpunkt. Machen Sie z.B. den Endpunkt an einer anderen IP-Adresse verfügbar als an der, die von der standardmäßigen Anwendungs-URL verwendet wird. Konfigurieren Sie den Endpunkt an einem nicht standardmäßigen HTTP-Port, und/oder verwenden Sie einen komplexen Pfad zur Testseite. In der Regel können Sie in der Anwendungskonfiguration zusätzliche Endpunktadressen und -ports angeben und bei Bedarf Einträge für diese Endpunkte dem DNS-Server hinzufügen, um die direkte Angabe der IP-Adresse zu vermeiden.

    • Machen Sie eine Methode auf einem Endpunkt verfügbar, die einen Parameter wie einen Schlüsselwert oder einen Wert für die Betriebsart akzeptiert. Je nach Wert, der für diesen Parameter angegeben wird, kann der Code beim Empfangen einer Anforderung einen oder mehrere bestimmte Tests durchführen oder den Fehler 404 (Nicht gefunden) zurückgeben, wenn der Parameterwert nicht erkannt wird. Die erkannten Parameterwerte können in der Anwendungskonfiguration festgelegt werden.

      DoS-Angriffe haben wahrscheinlich weniger Auswirkungen auf einen separaten Endpunkt, auf dem grundlegende Funktionstests durchgeführt werden, ohne den Betrieb der Anwendung zu beeinträchtigen. Vermeiden Sie im Idealfall Tests, die vertrauliche Informationen preisgeben. Wenn Sie Informationen zurückgeben müssen, die für einen Angreifer nützlich sein könnten, überlegen Sie, wie Sie den Endpunkt und die Daten vor unbefugtem Zugriff schützen können. In diesem Fall reicht es nicht aus, sich nur auf Verschleierung zu verlassen. Außerdem sollten Sie in Erwägung ziehen, eine HTTPS-Verbindung zu verwenden und sensible Daten zu verschlüsseln, obwohl dies die Verarbeitungslast des Servers erhöht.

  • Wie der Zugriff auf einen Endpunkt, der mithilfe der Authentifizierung geschützt ist, erfolgen soll, ist ein Aspekt, der bei der Bewertung von Endpunkten für die Integritätsprüfung und der Bewertung von Endpunkten, die ihn nutzen, berücksichtigt werden muss. Beispielsweise integriert sich die integrierte Integritätsprüfung von App Service in die Authentifizierungs- und Autorisierungsfunktionen von App Service.

Sicherstellen, dass der Überwachungs-Agent richtig funktioniert. Ein Ansatz sieht vor, einen Endpunkt verfügbar zu machen, der einfach einen Wert aus der Anwendungskonfiguration oder einen Zufallswert zurückgibt, der zum Testen des Agents verwendet werden kann.

Stellen Sie außerdem sicher, dass das Überwachungssystem sich selbst überprüft, z.B. durch einen Selbsttest und integrierten Test, um falsche positive Ergebnisse zu vermeiden.

Verwendung dieses Musters

Dieses Muster ist hilfreich:

  • Überwachung von Websites und Webanwendungen auf Verfügbarkeit.
  • Überwachung von Websites und Webanwendungen auf ordnungsgemäßen Betrieb.
  • Überwachung von Diensten auf mittlerer Ebene oder gemeinsam genutzten Diensten, um einen Fehler zu erkennen und zu isolieren, der andere Anwendungen stören könnte.
  • Ergänzen Sie die vorhandene Instrumentierung in der Anwendung, z.B. Leistungsindikatoren und Fehlerhandler. Die Integritätsprüfung macht die Protokollierung und Prüfung in der Anwendung nicht überflüssig. Die Instrumentierung kann nützliche Informationen für ein bestehendes Framework liefern, das Leistungsindikatoren und Fehlerprotokolle überwacht, um Fehlfunktionen oder andere Probleme zu erkennen. Sie kann jedoch keine Informationen liefern, wenn die Anwendung nicht verfügbar ist.

Beispiel

Integritätsprüfungen für ASP.NET sind Middleware und eine Gruppe von Bibliotheken zum Melden der Integrität von App-Infrastrukturkomponenten. Sie stellt ein Framework für die Berichterstellung von Integritätsprüfungen mit einer konsistenten Methode bereit und implementiert dabei viele der oben beschriebenen Methoden. Dies schließt externe Überprüfungen wie Datenbankkonnektivität und spezifische Konzepte wie Livetests und Bereitschaftstests ein.

GitHub-Logo Eine Reihe von Beispielimplementierungen, die ASP.NET-Integritätsprüfungen verwenden, finden Sie auf GitHub.

Überwachen von Endpunkten in von Azure gehosteten Anwendungen

Es folgen Optionen für die Überwachung von Endpunkten in Azure-Anwendungen:

  • Verwenden Sie die integrierten Überwachungsfunktionen von Azure.

  • Verwenden Sie einen Dienst oder ein Framework eines Drittanbieters wie Microsoft System Center Operations Manager.

  • Erstellen Sie selbst ein Hilfsprogramm oder einen Dienst, das/der auf Ihrem eigenen oder einem gehosteten Server ausgeführt wird.

    Auch wenn Azure eine recht umfassende Reihe von Überwachungsoptionen bietet, können Sie zusätzliche Dienste und Tools nutzen, um zusätzliche Informationen bereitzustellen. Application Insights, ein Feature von Azure Monitor, ist für Entwicklerteams konzipiert und hilft Ihnen dabei, die Leistung und Verwendung Ihrer App nachzuvollziehen. Es überwacht Anforderungsraten, Antwortzeiten, Fehlerraten, Abhängigkeitsraten sowie Fehlerraten und kann Ihnen helfen, herauszufinden, ob externe Dienste Sie ausbremsen.

Die Bedingungen, die Sie überwachen können, variieren je nach Hostingmechanismus, den Sie für Ihre Anwendung wählen. Doch alle bieten die Möglichkeit, eine Warnungsregel zu erstellen, die einen Webendpunkt verwendet, den Sie in den Einstellungen für Ihren Dienst angeben. Dieser Endpunkt muss rechtzeitig reagieren, damit das Warnsystem erkennen kann, dass die Anwendung ordnungsgemäß funktioniert.

Weitere Informationen finden Sie unter Erstellen von Warnungsbenachrichtigungen.

Im Fall eines größeren Ausfalls sollte der Clientdatenverkehr an eine Anwendungsbereitstellung weitergeleitet werden können, die in anderen Regionen oder Zonen verfügbar bleibt. Dies ist letztendlich die Gelegenheit, bei der standortübergreifende Konnektivität und globaler Lastenausgleich verwendet werden sollten, abhängig davon, ob die Anwendung intern und/oder extern ausgerichtet ist. Dienste wie Azure Front Door, Azure Traffic Manager oder CDNs können den Datenverkehr basierend auf dem Anwendungsstatus, der von Integritätstests bereitgestellt wird, regionsübergreifend weiterleiten.

Azure Traffic Manager ist ein Routing- und Lastenausgleichsdienst, der Anforderungen an bestimmte Instanzen Ihrer Anwendung auf Grundlage einer Reihe von Regeln und Einstellungen verteilen kann. Zusätzlich zu den Routinganforderungen pingt Traffic Manager regelmäßig eine URL, einen Port und einen relativen Pfad, die/den Sie angeben, um festzustellen, welche Instanzen der in seinen Regeln definierten Anwendung aktiv sind und auf Anforderungen reagieren. Wenn der Statuscode 200 (OK) erkannt wird, markiert Traffic Manager die Anwendung als verfügbar. Alle anderen Statuscodes bewirken, dass Traffic Manager die Anwendung als offline markiert. Sie können den Status in der Traffic Manager-Konsole anzeigen und die Regel so konfigurieren, dass Anforderungen an andere Instanzen der Anwendung umgeleitet werden, die antworten.

Traffic Manager wartet jedoch nur eine bestimmte Zeit lang auf eine Antwort von der Überwachungs-URL. Daher müssen Sie sicherstellen, dass Ihr Code zur Überprüfung des Integritätsstatus in dieser Zeit ausgeführt wird, wobei die Netzwerklatenz für den Roundtrip vom Traffic Manager zu Ihrer Anwendung und zurück berücksichtigt werden muss.

Der folgende Leitfaden kann für die Implementierung dieses Musters relevant sein: