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!
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 wirdWas 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?
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.
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).
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.
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.
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.
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.
Es gibt keinen "einfachen Weg", da Sie viele Anwendungsfälle behandeln müssen:
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.
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.
Sie können dies auch in Node.js mithilfe des Knotens ping-monitor tun.
Tags und Links ruby ruby-on-rails-3 node.js pingdom