Best Practices für die Überwachung von Webanwendungen [geschlossen]


77

Wir beenden unsere Webanwendung und planen die Bereitstellung. Ein sehr wichtiger Aspekt bei der Bereitstellung in der Produktion ist die Überwachung des Systemzustands. Ein kleines Team von Entwicklern / Supportmitarbeitern macht es für uns sehr wichtig, frühzeitig über potenzielle Probleme informiert zu werden und diese zu beheben, bevor sie Auswirkungen auf die Benutzer haben.

Die Verwendung von Nagios-Nähten ist eine gute Option, Sie möchten jedoch mehr Meinungen zu den besten Überwachungstools / -praktiken für Webanwendungen im Allgemeinen und speziell für Django-Apps erhalten. Ich würde auch Empfehlungen darüber begrüßen, was neben der offensichtlichen CPU, dem Speicher, dem Speicherplatz und der Datenbankkonnektivität überwacht werden sollte.

Unsere Web-App ist in Django geschrieben, wir laufen unter Linux (Ubuntu) unter Apache + Fast CGI mit PostgreSQL-Datenbank.

BEARBEITEN Wir haben eine vollständig virtualisierte Umgebung unter Linode.

EDIT Wir django-Protokollierung verwenden , so dass wir eine Möglichkeit , getrennte Informationen, Fehler, kritische Fragen haben, usw.


Ich habe darüber nachgedacht, ein einfaches externes Überwachungstool zu schreiben und es möglicherweise in der Google App Engine auszuführen, damit Benutzer ohne Zugriff auf einen zweiten Server es verwenden können. Es würde nur bestimmte URLs auf bestimmte Antwortcodes überprüfen. Dies würde viele einfache Anwendungsfälle abdecken, da Sie strengere Tests in Ihrer App konfigurieren und relevante Codes bei einem Fehler zurückgeben könnten. Gibt es so etwas schon?
Andy Baker

Schauen Sie sich den benutzerdefinierten Pingdom-Monitortyp an - royal.pingdom.com/2008/07/14/…
Hugo Rodger-Brown

Antworten:


38

Nagios ist gut, es ist gut, wenn Systemtests (Selenium) regelmäßig ausgeführt werden.

Edit: Hyperic und Groundwork sehen auch interessant aus.

Es gibt wahrscheinlich ein Test-Suite-System, mit dem Sie auch weiterhin alles unter Druck testen können. Ich kann mich nicht an den Namen erinnern, vielleicht kann jemand unten einen erwähnen.

Andere Dinge, die ich gerne mache:

Das beste Motto für die Infrastruktur lautet immer reparieren, erkennen, reparieren. Steh auf, gehe der Wurzel auf den Grund und heile / verhindere es, wenn du kannst.

Da ein System auf vielen Ebenen existiert, sollten wir auf vielen Ebenen testen:

Bearbeiten: Lassen Sie alle Fehler oder Warnungen per E-Mail direkt an Ihren Fallmanager senden. Auf diese Weise können Sie Ereignisse an einem Ort verfolgen.

1) Verbindung : Überwachen Sie Ihre Internetverbindung vom Server und von außen. Protokolliere das irgendwo

2) Server : Überwachen Sie alle Prozesse, die Sie benötigen, um sicherzustellen, dass sie ausgeführt werden und den Server nicht fixieren. Verwenden Sie einen HP Server oder etwas Ähnliches mit einer Hardwarefehlerbenachrichtigung, die auf BIOS-Ebene ausgeführt werden kann. Benachrichtigen und protokollieren Sie, wenn dies der Fall ist.

3) Software : Identifizieren Sie die Schlüsselsoftware, die immer ausgeführt werden muss. Stellen Sie gegebenenfalls die Leistungsstufen ein und überwachen Sie sie. Nagios sollte dabei helfen können. Unter Windows kann es etwas mehr sein. Wenn eine Ausnahme auftritt, sollten Sie in der Lage sein, ein Skript daraus auszuführen, um Prozesse automatisch neu zu starten. Mein Traumsystem ermöglicht es mir, mit Servern per SMS zu interagieren, wenn der Server dies als Ausnahme ansieht, die ich entweder zulassen muss, oder als eine Ausnahme, die automatisch auftritt, wenn ich nicht per SMS kündige. Eines Tages..

4) Remote-Stromversorgung : Stellen Sie sicher, dass Sie über Funktionen zum Zurücksetzen der Remote-Stromversorgung verfügen. Möglicherweise möchten Sie wöchentliche Neustarts planen, wenn Sie jemals Windows für irgendetwas verwenden.

5) Testen der Geschäftslogik : Führen Sie regelmäßig Skripts aus, um den Workflow Ihres Systems zu testen. Selenium kann wahrscheinlich etwas davon erreichen, aber ich mag es auch, die Ergebnisse zu protokollieren, um zu sagen, dass dies zu diesem Zeitpunkt lief und diese Dateien Fehler hatten. Wenn möglich, lassen Sie das System sich selbst durch Ihre Skripte überwachen.

6) Backups : Erstellen Sie ein Backup, das Sie festlegen und vergessen können. Wenn Sie Dinge in virtuelle Maschinen integrieren können, ist dies ideal, da Sie jeden Teil Ihrer Infrastruktur überall skalieren, verschieben oder bereitstellen können. Ich hatte Fälle, in denen ich einen toten Server auf meinen Laptop verschoben habe und ihn in VMware laufen ließ, während ich ein Problem behoben habe.


Vielen Dank für die ausführliche Antwort. Wir haben eine vollständig virtuelle Umgebung (das habe ich der Frage hinzugefügt). Gute Punkte in Bezug auf Backups und die Verwendung von Selen für Systemtests.
Sergey Golovchenko

Bitte. Ich bin motiviert, faul zu sein und Systeme so weit wie möglich selbst überwachen zu lassen. Der schwierige Teil ist, die Grenze zu ziehen ... damit ich immer wieder neue Sachen bauen kann!
Jas Panesar

Ich habe eine andere Sache vergessen: Lassen Sie alle Fehler oder Warnungen per E-Mail direkt an Ihren Fallmanager senden. Auf diese Weise können Sie Ereignisse an einem Ort verfolgen.
Jas Panesar

13

Die Überwachung der Anzahl der Verbindungen zu Ihrem Webserver und Ihrer Datenbank ist eine weitere gute Sache, die Sie verfolgen sollten. Wenn man durch das Dach schießt, hungert wahrscheinlich etwas nach Ressourcen und die Baustelle steht kurz vor dem Untergang.

Stellen Sie außerdem sicher, dass Sie regelmäßig eine URL anfordern, die einen angemessenen End-to-End-Test des Systems darstellt. Wenn Ihre Site die Suche unterstützt, lassen Sie Nagios eine Suche ausführen. Dies sollte sicherstellen, dass der Suchindex, der Webserver und der Datenbankserver fehlerfrei sind.

Stellen Sie außerdem sicher, dass Ihre Anwendungen Ihnen E-Mails senden, wenn Ihre Benutzer einen Fehler sehen oder eine nicht behandelte Ausnahme vorliegt. Auf diese Weise wissen Sie, wie die Anwendung vor Ort fehlschlägt.


Danke, ja, wir haben eine Suche, ein guter Punkt in Bezug auf den Suchindex.
Sergey Golovchenko

12

Wenn ich eine Art von Test auswählen müsste, wäre es, die Endbenutzerfunktionalität des Systems zu testen. Das Wichtigste ist der Benutzer. Während das Testen von Dingen wie Datenbankverfügbarkeit, Server-Verfügbarkeit usw. wichtig ist, deckt das Testen von Workflows durch Ihr System über ein Remote-UI-Testsystem alle diese Grundlagen ab. Wenn Sie wissen, dass die kritischen Teile Ihres Systems dem Endbenutzer zur Verfügung stehen, wissen Sie, dass Ihr System in Ordnung ist.

  1. Identifizieren Sie die wichtigen Workflows in Ihrem System. Wenn Sie beispielsweise eine E-Commerce-Website geschrieben haben, können Sie einen Workflow für "Nach einem Produkt suchen, ein Produkt in den Warenkorb legen und ein Produkt kaufen" identifizieren.
  2. Priorisieren Sie die Workflows und erstellen Sie zuerst Tests mit höherer Priorität. Sie können jederzeit zusätzliche Tests hinzufügen, nachdem Sie die Produktion eingeführt haben.
  3. Erstellen Sie UI-Tests mit einem der verfügbaren UI-Test-Frameworks. Es gibt eine Reihe von kostenlosen und kommerziellen UI-Test-Frameworks, die automatisiert ausgeführt werden können. Erstellen Sie zuerst eine Reihe von Kerntests, die sich mit kritischen Arbeitsabläufen befassen.
  4. Richten Sie mindestens einen Remote-Standort ein, von dem aus Tests ausgeführt werden sollen. Sie möchten jeden Aspekt Ihres Systems testen, dh aus der Ferne testen. Ist die Internetverbindung hergestellt? Läuft der Webserver? Funktioniert die Verbindung zum Datenbankserver? Usw. Wenn Sie aus der Ferne testen, stellen Sie sicher, dass Ihr System für die Außenwelt verfügbar ist, was bedeutet, dass es höchstwahrscheinlich Ende-zu-Ende funktioniert. Sie können diese Tests auch intern ausführen, aber ich denke, es ist wichtig, sie extern auszuführen.
  5. Stellen Sie sicher, dass Ihre Lösung sowohl Berichterstellung als auch Benachrichtigung enthält. Wenn einer Ihrer kritischen Workflow-Tests fehlschlägt, möchten Sie, dass jemand davon erfährt, um das Problem so schnell wie möglich zu beheben. Wenn eine unkritische Aufgabe fehlschlägt, möchten Sie möglicherweise nur Berichte erstellen, um Probleme außerhalb des Bandes zu beheben.

Diese Endbenutzertests sollten die Überwachung des Systems in Ihrem Rechenzentrum nicht ausschließen. Ich möchte jedoch wiederholen, dass Endbenutzertests die wichtigste Art von Tests sind, die Sie für eine Webanwendung durchführen können.


8

Ahhh, Überwachung. Wie ich dich und deine Schwingungen um 3 Uhr morgens liebe.

Im Wesentlichen benötigen Sie eine Möglichkeit, den internen Status Ihrer Anwendung sowohl zu einem bestimmten Zeitpunkt als auch über einen bestimmten Zeitraum hinweg zu überprüfen (letzteres ist sehr wichtig, um Probleme zu erkennen, bevor sie auftreten). Eine andere Art, es zu betrachten, ist das verherrlichte Testen von Einheiten.

Wir haben unser eigenes (sehr schönes) Überwachungssystem, daher kann ich Nagios oder andere Apps nicht kommentieren. Unser Anwendungsfall ähnelt jedoch Ihrem (CGI-App auf Apache).

  1. Fügen Sie eine Methode vom Typ logging.monitor () hinzu, mit der Informationen auf der Festplatte protokolliert werden. Dies sollte zumindest die Protokollierung einfacher Zahlen und Zahlenbestimmungen unterstützen (die Zuordnung von Schlüssel => Wert kann unglaublich praktisch sein).
  2. Haben Sie einen Prozess, der die Überwachungsprotokolle kratzt und in einer Datenbank speichert.
  3. Haben Sie einen Prozess, der die Datenbankinformationen nimmt, sie mit Regeln vergleicht und Warnungen sendet. Denken Sie daran, dass etwas schuppig sein kann. Nur weil du einmal einen 404 hast, heißt das noch lange nicht, dass die App nicht funktioniert.
  4. Sie können Warnungen stummschalten (sehr nützlich für die Wartung oder zum Lesen Ihrer E-Mails).

Das ist alles ziemlich hoch. Wichtig ist, dass Sie den Verlauf der Anwendung im Laufe der Zeit im Verlauf haben. Daraus können Sie dann Regeln erstellen (möglicherweise nur SQL-Rohabfragen, die Sie irgendwo in eine Konfiguration eingefügt haben), die besagen: "Wenn sich die Abfragen pro Sekunde verdoppelt haben, senden Sie eine SlashDotted-Warnung" oder "Wenn 50% der Antworten 404 sind, senden Sie eine." aufmerksam". Es verblüfft auch das Management, weil Sie jeden Kommentar darüber quantifizieren können, ob er hoch, runter, schnell oder langsam ist.

Zu den zu überwachenden Dingen gehören (andere haben diese wahrscheinlich auch erwähnt): http-Status, Portzugriff, http-Laden, Datenbankladen, offene Verbindung, Abfrageverzögerung, Serverzugriff (ssh, Ping), Abfragen pro Sekunde, Anzahl der Arbeitsprozesse, Fehlerprozentsatz , Fehlerrate.

Einfache End-to-End-Tests sind ebenfalls sehr praktisch, können jedoch spröde sein. Es ist am besten, sie einfach zu halten, aber Sie sollten eine haben, die versucht, Kernelemente der App (Caching, Datenbank, Authentifizierung) zu berühren.



5

Die interne Protokollierung ist in Ordnung und gut, aber wenn Ihre gesamte App ausfällt oder Ihre Box / Umgebung abstürzt, müssen Sie auch eine externe Überprüfung durchführen. http://www.pingdom.com/ war für mich sehr zuverlässig.

Mein einziger anderer Rat ist, dass ich nicht zu viel Zeit damit verbringen würde . Mein bestes Beispiel ist Twitter. Wie viel Energie haben sie in das System gesteckt, um halb sterben zu können, anstatt nur diese Zeit und Energie in das Werfen von mehr Hardware / Skalieren zu investieren?

Die Chancen stehen gut, dass Sie im Stich gelassen werden. Ihre Protokollierungs- und Gesundheitssysteme werden sowieso fehlen.


4

Die wichtigste Möglichkeit zur Überwachung einer Online-Site ist die externe Überwachung. Das Ziel sollte darin bestehen, Ihre Website so zu überwachen, dass sie die Nutzung der Website durch Ihre Benutzer am besten widerspiegelt. In 99% der Fälle ist es relativ einfach, die Grundursache zu finden, sobald Sie wissen, dass Ihre Website extern nicht verfügbar ist. Das Wichtigste ist, so schnell wie möglich zu wissen, dass Ihre Kunden Ihre Website nicht laden können.

Dies bedeutet im Allgemeinen die Verwendung eines externen Leistungsüberwachungsdienstes. Sie reichen vom sehr niedrigen Ende (mon.itor.us, pingdom) bis zum oberen Ende (Webmetrics, Gomez, Keynote). Und wie immer bekommen Sie, wofür Sie bezahlen. Folgende Dinge sollten Sie beim Einkauf für einen Überwachungsdienst beachten:

  • Die Größe und Verteilung des Überwachungsnetzwerks
  • Gibt an, ob die Überwachungslösung Ihre Site mit einem echten Browser überwachen kann oder nicht (andernfalls testen Sie Ihre Site nicht wie ein echter Benutzer).
  • Die Skriptsprache (um die Transaktionen für Ihre Site zu skripten)
  • Die Support-Abteilung hilft Ihnen dabei und bietet Fachwissen zur korrekten Überwachung

Viel Glück!



2

Haben Sie auch darüber nachgedacht, die Funktionalität zu überwachen? Ein Skript (entweder in einer Skriptsprache wie Perl oder Pyton oder mit einem Tool wie WebTest ), das mit Ihrer Anwendung kommuniziert und einige wichtige Schritte wie Anmelden, Kaufen usw. ausführt , ist sehr hilfreich.


Vielen Dank für die Funktionsprüfung
Sergey Golovchenko

2

Abgesehen davon, was überwacht werden soll, was bereits beantwortet wurde, müssen Sie sicherstellen, dass Sie - unabhängig davon, welches System Sie verwenden - bei jeder Anforderung nur eine Benachrichtigung über einen Fehler erhalten, der mehrmals auftritt. Oder Ihr Posteingang hat nicht mehr genügend Speicherplatz :) Außerdem ist es einfach ärgerlich ...

Verteilen Sie die Standby-Schichten auf das Support- / Entwicklerteam, damit nicht jeden Abend eine Person auf Abruf sein muss. Das wird die Leute zermürben. Überwachung ist eine gute Sache , aber jeder muss die Chance bekommen, ab und zu ein Leben zu führen. Ihr Handy, das für ein paar Nächte um 2 Uhr morgens summt, wird ziemlich bald sehr alt, vertrauen Sie mir. Und nicht jeder Entwickler ist an Support rund um die Uhr gewöhnt. Daher müssen Sie das Gleichgewicht zwischen Überwachung und Missbrauch der Überwachung finden.

Grundsätzlich sollten Sie unterschiedliche Eskalationsstufen haben. Wenn der Himmel nicht fällt, definieren Sie nachts ein Fenster " Gelassenheit jetzt ", in dem kleinere Eskalationsstufen nicht ausgehen.



2

Sie können sich AlertGrid ansehen . Mit dieser Webanwendung können Sie Warnungen filtern und an Ihr Team weiterleiten (weltweit). Es hat auch eine gute Möglichkeit zu überwachen, ob etwas nicht passiert ist.


1

Um Richard Levasseur zu paraphrasieren: Ah, Überwachungstools, wie Ihre Unvollkommenheiten mich frustrieren. Es scheint kein perfektes Werkzeug zu geben; Nagios ist ziemlich einfach einzurichten, aber die Benutzeroberfläche ist etwas altmodisch und auf jedem überwachten Server muss ein Daemon ausgeführt werden. Zenoss hat eine viel schönere Benutzeroberfläche, einschließlich Trenddiagrammen der Ressourcennutzung, aber es verwendet SNMP, daher muss man sich damit auskennen, damit es richtig funktioniert, und die Dokumentation ist nicht die beste - es gibt Hunderte von Seiten, aber es ist wirklich schwer zu tun Finden Sie genau die Informationen, die Sie benötigen, um loszulegen.

Freunde von mir haben auch Cacti und Hyperic empfohlen , aber ich habe keine persönlichen Erfahrungen damit.

Eine letzte Sache - eine der anderen Antworten schlug vor, ein Tool auszuführen, das Ihre Site belastet. Ich würde nicht empfehlen, dies auf Ihrer Live-Site zu tun, es sei denn, Sie haben eine zuverlässige Ruhephase, in der niemand darauf trifft. Selbst dann könnten Sie es unerwartet herunterfahren. Es ist viel besser, einen Staging-Server zu haben, auf dem Sie Auslastungstests ausführen können, bevor Sie Änderungen in die Produktion übernehmen.


+1 für Kakteen, erforscht seit einiger Zeit die Option Kakteen + RRDTool
Sergey Golovchenko

0

Einer unserer Kunden nutzt Techout (www.techout.com) und ist sehr zufrieden mit dem Service.

Für Benachrichtigungen, egal welcher Art oder wie viele, fallen keine Gebühren an. Sie bieten E-Mail-, Voicemail- und SMS-Benachrichtigungen an - und wenn etwas Wichtiges passiert, ein Anruf von einer lebenden Person, um Ihnen zu helfen.

Alles basiert auf Service - Sie installieren die Software nicht und haben einen Berater, der mit Ihnen zusammenarbeitet, um den besten Ansatz für Ihr Unternehmen zu ermitteln. Es ist einer der bequemsten Überwachungsdienste für Webanwendungen , da sie sich um alles kümmern.


0

Ich möchte nur hinzufügen, dass Sie die Fehlerwahrscheinlichkeit etwas basierend auf der Historie vergangener Fehler vorhersagen und diese beheben können. Wenn Sie bei internen Tests in kleinerem Maßstab die Häufigkeit und den Schweregrad von Problemen grafisch darstellen, die bis zu diesem Punkt behoben wurden, erhalten Sie einen Überblick über vorhersehbare neue Probleme. Wenn seit einiger Zeit alles fehlerfrei läuft, sind die beiden Problemquellen die jüngsten Änderungen oder Skalierbarkeitsprobleme.

Aus dem oben Gesagten geht hervor, dass Skalierbarkeit Ihre einzige Sorge ist, aber ich erwähne nur den Test der Häufigkeit früherer Fehler, da die Teams, in denen ich war, ausnahmslos glauben, dass sie den letzten Fehler behoben haben und es keine mehr gibt. Bis es gibt.


0

Das Ändern der Zeile ein wenig, etwas, das ich wirklich nützlich finde und das die Überwachung meiner Apps stark verändert hat, besteht darin, irgendwo Javascript-Ausnahmen zu protokollieren. Es gibt eine sehr schöne Implementierung, die diese direkt von den Browsern der Benutzer in Google Analytics protokolliert. Dies ist ein Muss für Javascript-zentrierte Webanwendungen und kann Ihnen Ergebnisse liefern, die direkt auf den Browsern der Benutzer basieren. Dies kann zu sehr unerwarteten Fehlern führen (iE und mobiler Browser sind schmerzhaft).

Haftungsausschluss: Mein Beitrag unten

http://www.directperformance.com.br/en/javascript-debug-simples-com-google-analytics


-1

Für die Überwachung der Internetpräsenz würde ich den Dienst vorschlagen, an dem ich arbeite: Sucuri NBIM (Network-based Integrity Monitor).

Es führt Verfügbarkeits- und Integritätsprüfungen durch und sucht nach Änderungen an Ihrer Internetpräsenz (Websites, DNS, WHOIS, Header usw.) und nach Verbindungsverlust. Es ist kostenlos und Sie können es ausprobieren hier .

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.