Überwachung der Verfügbarkeit von 20 Websites (Ping oder HTTP) in Node.js / RoR

8

Wie kann man am besten alle 20 Minuten eine Liste mit 20 Websites pingen, um zu wissen, ob die Website mit HTTP 202 antwortet oder nicht?

Die beste Idee ist es, die 20 URLs in einer Datenbank zu speichern und einfach die Datenbank auszuführen und jeden einzelnen zu pingen. Was passiert jedoch, wenn man nicht antwortet? Was passiert mit denen danach?

Gibt es dafür auch bessere, aber einfachere Lösungen? Ich fürchte, die Liste kann auf 20000 Websites anwachsen, und dann ist nicht mehr genug Zeit, um alle in den 5 Minuten zu pingen, die ich pingen muss.

Im Grunde beschreibe ich, wie PingDom, UptimeRobot und ähnliche funktionieren.

Ich baue dieses System mit node.js und Ruby on Rails. Ich bin auch geneigt, MongoDB zu verwenden, um die Geschichte aller Pings und Überwachungsergebnisse zu speichern.

Vorschläge?

Vielen Dank!

    
donald 17.01.2011, 01:17
quelle

6 Antworten

9

Github

Ich mag node.js sehr und möchte dieses Problem angehen und hoffentlich bald Code auf github teilen, um dies zu erreichen. Denken Sie daran, dass ich nur eine sehr einfache Grundeinstellung habe, die jetzt auf Ссылка

gehostet wird
  

Was ist der beste Weg, um eine Liste zu pingen?   20 Websites alle 5 Minuten (für   Beispiel), um zu wissen, ob die Website   antwortet mit HTTP 202 oder nicht?

PING (ICMP)

Zuerst würde ich gerne wissen, ob Sie wirklich ein ping (ICMP) machen wollen oder wenn Sie nur wollen wissen, ob die Website mit Code 200 (OK) zurückkehrt und die benötigte Zeit misst. Ich glaube aus dem Kontext, dass man nicht wirklich einen Ping machen will, sondern einfach eine http-Anfrage und die Zeit messen. Ich frage das, weil (glaube ich) das Pingen von node.js / ruby ​​/ python vom normalen Benutzer nicht gemacht werden kann, weil wir rohe Sockets (root user) benötigen, um das Pingen (ICMP) von der Programmiersprache aus zu machen. Ich fand zum Beispiel dieses ping Skript in Python (ich glaube auch, dass ich ein einfaches gesehen habe Ruby-Skript irgendwo, obwohl ich kein wirklich großer Ruby-Programmierer bin), erfordert aber Root-Zugriff. Ich glaube nicht, dass es für node.js noch ein Ping-Modul gibt.

Nachrichtenwarteschlange

  

Auch, gibt es besser, aber kein Kinderspiel   Lösung dafür? Ich habe Angst, die Liste   kann bis zu 20000 Websites und dann wachsen   es ist nicht genug Zeit, um sie anzupingen   alles in den 5 Minuten muss ich sein   pingen.

     

Im Grunde beschreibe ich, wie PingDom,   UptimeRobot, und die Likes arbeiten.

Um diese Art von Skalierung zu erreichen, verwenden Sie eine Nachrichtenwarteschlange wie zum Beispiel redis , Bohnenstange oder Getriebe. Auf der Skala von PingDom wird ein Arbeiterprozess es nicht schneiden, aber in Ihrem Fall wird es (ich nehme an) ein Arbeiter tun. Ich nehme an, dass redis wegen der Erweiterung C (node.js) die schnellste Nachrichtenwarteschlange sein wird, aber dann sollte ich es erneut mit beanstalkd vergleichen, was eine weitere populäre Nachrichtenwarteschlange ist (aber noch keine C-Erweiterung hat) / p>

  

Ich fürchte, die Liste kann auf 20000 anwachsen   Websites

Wenn Sie mit dieser Skalierung arbeiten, müssen Sie möglicherweise mehrere Boxen (viele Worker-Threads / Prozesse) hosten, um die Last zu bewältigen, aber Sie sind noch nicht in dieser Größenordnung und node.js ist schnell verrückt. Es könnte sogar in der Lage sein, diese Last mit nur einer einzigen Box zu bewältigen, obwohl ich nicht sicher weiß (Sie müssen einige Benchmarks ausführen / ausführen).

Datenspeicher / Redis

Ich denke, das konnte ziemlich einfach in node.js erreicht werden (ich mag node.js wirklich). Die Art, wie ich dies tun würde, ist, redis als meinen Datenspeicher zu verwenden, weil es INSANE FAST ist!

%Vor%

unter Verwendung von node_redis (mit der Bibliothek hredis (node.js)). Ich würde die URLs mit sadd hinzufügen.

Führen Sie alle 5 Minuten Aufgaben aus

Dies könnte ohne jede Anstrengung erreicht werden. Ich würde setInterval(callback, delay, [arg], [...]) verwenden, um die Antwortzeit von Servern wiederholt zu testen. Erhalte alle URLs auf callback von redis mit Mitgliedern . Ich würde alle URLs (Nachrichten) in die Nachrichtenwarteschlange stellen, indem Sie rpush verwenden.

Überprüfen der Antwort (Zeit)

  

Was jedoch passiert, wenn man es nicht tut   Antworten? Was passiert mit denen?   danach?

Ich verstehe diesen Satz vielleicht nicht ganz, aber hier geht es. Wenn einer fehlschlägt, schlägt er einfach fehl. Sie könnten versuchen, die Antwort (Zeit) in 5 Sekunden oder etwas zu überprüfen, um zu sehen, ob es online ist. Ein präziser Algorithmus dafür sollte entwickelt werden. Die nachfolgenden sollten nichts mit früheren URLs zu tun haben, außer wenn sie auf demselben Server sind. Auch etwas, worüber du klar denkst, denke ich, denn dann solltest du nicht alle diese URLs gleichzeitig an denselben Server pingen, sondern sie in die Warteschlange stellen oder so etwas.

Verarbeitungs-URL

Vom Worker-Prozess (für den Moment reicht nur eine aus) holen Sie die Nachricht (URL) von Redis mit dem Befehl brpop . Überprüfen Sie die Antwortzeit für die URL (Nachricht) und holen Sie die nächste URL (Nachricht) aus der Liste. Ich würde wahrscheinlich ein paar Anfragen gleichzeitig, um den Prozess zu beschleunigen.

    
Alfred 17.01.2011, 10:03
quelle
5

Es gibt keinen "einfachen Weg", da Sie viele Anwendungsfälle behandeln müssen:

  • Ссылка
  • Ссылка
  • Anfrage Timeouts,
  • die CPU-Auslastung des Servers, den Sie zum Pingen verwenden,
  • die Art des Berichts, den Sie benötigen (Verfügbarkeit? Verfügbarkeit? Reaktionszeit? Ausfallzeit?)
  • wie aggregiert man Qos-Messungen nach Zeit
  • Lebenszeit der Daten, die Sie sammeln (pingen Dutzende von Zielen alle fünf Minuten schnell produziert eine Menge Daten)
  • Echtzeitalarme
  • usw.

Pingdom und dergleichen sind keine "grundlegenden" Werkzeuge, und wenn Sie etwas Ähnliches möchten, können Sie dafür bezahlen oder sich auf eine bestehende Open-Source-Alternative verlassen. Ich weiß es sicher, weil ich selbst eine Fernüberwachungsanwendung aufgebaut habe. Es heißt Uptime, es ist in Node.js und MongoDB geschrieben, und es wird auf GitHub gehostet (https://github.com/fzaninotto/uptime). Es dauerte mehrere Wochen harter Arbeit, um es zu entwickeln, also glauben Sie mir: Es ist kein Kinderspiel.

    
François Zaninotto 03.05.2012 07:38
quelle
0

Verwenden Sie Monitoring-Tools wie zabbix, nagios, blah blah, die verschiedene Parameter Ihrer Server in Massenzahlen metrisch machen können.

Wenn Sie es in js implementieren möchten, können Sie eine http-Anfrage mit Zeitabstand-ed ausführen, dann den HTTP-Rückkehrstatus-Code ermitteln und xpath oder regex verwenden, um bestimmte Elemente zu validieren.

für Ruby, ein Daemon-Prozess und verwenden Sie einen Thread-Pool (Multithreading-Idee) und URI öffnen, um den http-Code und den Inhalt anzuzeigen, verwenden Sie Xpath, um zu überprüfen, ob der Inhalt korrekt verhält.

    
c2h2 17.01.2011 04:55
quelle
0

Wenn Sie neugierig sind, habe ich eine App namens Pinger erstellt, die das tut. Es basiert auf Ruby on Rails und Resque:

Ссылка

    
Austin 09.11.2011 03:24
quelle
0

Es gibt einige kostenlose Qualitätsdienste, die uns eine sehr stabile Website-Up-Zeit-Überprüfung und Benachrichtigung bieten. Sie können diese Anleitung überprüfen und Ссылка

überprüfen     
Phuc 30.04.2014 02:48
quelle
0

Sie können dies auch in Node.js mithilfe des Knotens ping-monitor tun.

    
codelion 09.02.2015 05:16
quelle