Frage

Was ist der beste Weg, um eine Liste von 20 Websites ping alle 5 Minuten (zum Beispiel), um zu wissen, ob die Website reagiert mit HTTP 202 oder nicht?

Die Klacks Idee ist es, die 20 URLS in einer Datenbank zu speichern und nur die Datenbank läuft und jedes ping. Doch was passiert, wenn man nicht antwortet? Was zu denjenigen geschieht danach?

Auch ist es besser, aber no-brainer Lösung? Ich fürchte, die Liste zu 20.000 Websites wachsen kann und dann ist da noch nicht genug Zeit, um sie alle in den 5 Minuten ping ich brauche werden Pingen.

Grundsätzlich bin ich beschreiben, wie Pingdom, UptimeRobot, und die mag Arbeit.

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

Verbesserungsvorschläge?

Dank einem Haufen!

War es hilfreich?

Lösung

Github

Ich mag node.js und ich möchte dieses Problem in Angriff zu nehmen und hoffentlich bald einige Code auf Github teilen dies zu erreichen. Beachten Sie, dass ich nur ein veryy Basis-Setup haben jetzt gehostet unter https://github.com/alfredwesterveld/freakinping

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

PING (ICMP)

Zuerst würde ich gerne wissen, ob Sie wirklich ein Ping (ICMP) tun wollen oder wenn Sie wollen einfach nur wissen, ob die Webseite, kehrt mit Code 200 (OK) und die Zeit messen, es dauert. Ich glaube, aus dem Zusammenhang, dass Sie nicht wirklich wollen, einen Ping zu tun, sondern nur eine HTTP-Anforderung und die Zeit zu messen. Ich frage dies, weil (ich glaube) Pingen von node.js / ruby ??/ Python kann nicht vom normalen Benutzer durchgeführt werden, weil wir Raw Sockets (Root-Benutzer) müssen aus Programmiersprache, der Pingen (ICMP) zu tun. Ich zum Beispiel fanden diese ping Skript in Python (ich glaube auch, sah ich eine einfache ruby-Skript irgendwo obwohl ich bin kein großer Rubin Programmierer), sondern erfordert root-Zugriff. Ich glaube nicht, gibt es sogar noch ein Ping-Modul gibt für node.js.

Message Queue

Auch ist es besser, aber no-brainer Lösung für dieses? Ich bin die Liste Angst kann auf 20000 Websites wachsen und dann es gibt nicht genug Zeit, um sie zu ping alle in den 5 Minuten muss ich sein Pingen.

Grundsätzlich bin ich beschreiben, wie Pingdom, UptimeRobot, und die mag Arbeit.

Was Sie diese Art der Skala erreichen müssen, ist ein Nachrichtenwarteschlange wie zum Beispiel verwenden redis , beanstalkd oder gearmand. Auf der Skala von Pingdom ein Arbeitsprozess wird sich nicht schneiden, aber in Ihrem Fall ist es (ich nehme an) einen Arbeiter tun. Ich denke, (an) redis die schnellste Nachrichtenwarteschlange wegen der C (node.js) Verlängerung, aber dann wieder sollte ich Benchmark gegen beanstalkd, die eine andere populäre Nachrichtenwarteschlange ist (aber noch nicht eine C-Erweiterung haben).

Ich fürchte, die Liste zu 20000 wachsen Webseite

Wenn Sie auf dieser Skala bekommen könnten Sie haben Host mehrere Boxen haben (viele Worker-Threads / Prozesse), um die Last zu bewältigen, aber sie sind nicht in dieser Größenordnung noch und node.js ist wahnsinnig schnell. Es könnte sogar Lage sein, die Last zu bewältigen auch nur mit einem einzigen Box, obwohl ich nicht sicher wissen (was Sie tun müssen / laufen einige Benchmarks).

Datastor / Redis

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

PING: 20000 ops 46189.38 ops/sec 1/4/1.082
SET: 20000 ops 41237.11 ops/sec 0/6/1.210
GET: 20000 ops 39682.54 ops/sec 1/7/1.257
INCR: 20000 ops 40080.16 ops/sec 0/8/1.242
LPUSH: 20000 ops 41152.26 ops/sec 0/3/1.212
LRANGE (10 elements): 20000 ops 36563.07 ops/sec 1/8/1.363
LRANGE (100 elements): 20000 ops 21834.06 ops/sec 0/9/2.287

node_redis (mit hredis (node.js) c-Bibliothek). Ich würde die URLs redis hinzufügen mit sadd .

Ausführen Aufgaben alle 5 Minuten

Dies könnte ohne jede Anstrengung kaum erreicht werden. Ich würde die setInterval(callback, delay, [arg], [...]) verwenden, um immer wieder Reaktionszeit von Servern zu testen. Holen Sie sich alle URLs auf callback von redis mit smembers . Ich würde alle URLs (Nachrichten) auf der Nachrichten-Warteschlange setzt mit rpush .

Überprüfen Response (Time)

Doch was passiert, wenn man nicht Antworten? Was geschieht mit denen, danach?

Ich könnte nicht vollständig diesen Satz verstehen, aber hier geht es. Wenn man es nicht gerade nicht. Sie könnten versuchen, Antwort (Zeit) wieder in 5 Sekunden zu überprüfen oder etwas zu sehen, ob er online ist. Eine präzise Algorithm hierfür sollte entwickelt werden. Diejenigen, danach sollte nichts mit früheren URLs zu tun haben, es sei denn, die auf demselben Server befinden. Auch etwas, das man deutlich darüber nachdenken, ich denke, da dann sollten Sie nicht alle diese URLs auf den gleichen Server zur gleichen Zeit ping aber sie nach oben oder etwas Warteschlange.

Verarbeitung URL

Von dem Arbeitsprozess (vorerst nur eine wäre ausreichend) holt Nachricht (URL) von redis mit brpop Befehl. überprüft Antwortzeit für URL (Nachricht) und nächste URL (Nachricht) aus der Liste holen. Ich würde wahrscheinlich ein paar Anfrage tun gleichzeitige um den Prozess zu beschleunigen.

Andere Tipps

Es gibt keine „grundlegende Art und Weise“, da Sie viele Anwendungsfälle behandeln müssen:

  • http Umleitungen,
  • https-Seiten,
  • Anfrage Timeouts,
  • die CPU-Auslastung des Servers, für Pingen verwenden,
  • die Art des Berichts Sie benötigen (Verfügbarkeit? Uptime? Responsiveness? Ausfallzeiten?)
  • , wie man Aggregat QoS-Messungen durch die Zeit
  • Lebensdauer der Daten, die Sie sammeln (Dutzende von Zielen alle fünf Minuten schnell produziert eine Menge von Daten Pingen)
  • Echtzeit-Benachrichtigungen
  • etc.

Pingdom und dergleichen sind nicht „basic“ Tools, und wenn Sie etwas ähnliches Sie können die für sie oder verlassen sich auf eine bestehende Open-Source-Alternative zu zahlen bereit sind. Ich weiß es sicher, weil ich selbst eine Remote-Monitoring-Anwendung aufgebaut. Es heißt Uptime, es in Node.js und MongoDB geschrieben, und es ist auf GitHub (https://github.com/fzaninotto/uptime) gehostet. Es dauerte mehrere Wochen harter Arbeit, es zu entwickeln, so glauben Sie mir. Es ist NICHT ein Kinderspiel ist

Verwendung Monitoring-Tools wie zabbix, nagios, bla, bla, wo metrische verschiedene Parameter Ihrer Server in Massenzahlen.

, wenn u es in js implementieren möchten, können u ein Zeitintervall-ed HTTP-Anforderung tun, dann, um zu bestimmen http Rückgabestatuscode, und die Verwendung von XPath oder regex bestimmten Elements zu überprüfen ist richtig

für Rubin, ein Dämon-Prozess und verwenden Sie einen Thread-Pool (Multithreading Idee) und URI geöffnet, um den HTTP-Code anzeigen und den Inhalt, die Verwendung von XPath zu überprüfen, ob der Inhalt richtig verhalten.

Wenn Sie neugierig sind, habe ich eine App erstellt Pinger genannt, der dies tut. Es ist gebaut auf Ruby on Rails und Resque:

https://github.com/austinthecoder/pinger

Es gibt einige kostenlose Dienstleistungen hoher Qualität, was uns zur Verfügung stellen eine sehr stabile Webseite Zeit Prüfung und Benachrichtigung. Sie können diese Anweisung überprüfen und überprüfen http://fastjoomlahost.com/how-to- Monitor-Website-up-Zeit

Sie können dies auch in Node.js tun mit dem Knoten-ping-Monitor Paket.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top