Question

Quelle est la meilleure façon de ping une liste de 20 sites toutes les 5 minutes (par exemple) afin de savoir si le site répond avec HTTP 202 ou non?

L'aucune idée brainer est de sauver les 20 URLS dans une base de données et il suffit d'exécuter la base de données et ping chacun. Cependant, ce qui se passe quand on ne répond pas? Qu'advient-il les après?

Aussi, est-il mieux, mais la solution non-tête pour cela? Je crains que la liste peut atteindre 20000 sites et il n'y a pas assez de temps pour les ping toutes les 5 minutes, je dois être pinger.

En fait, je décris comment Pingdom, UptimeRobot, et aime le travail.

Je construis ce système en utilisant Node.js et Ruby on Rails. Je suis également enclin à utiliser MongoDB pour sauver l'histoire de tous les pings et le suivi des résultats.

Suggestions?

Merci un groupe!

Était-ce utile?

La solution

Github

Je aime vraiment Node.js et je voudrais aborder ce problème et nous espérons partager bientôt un code sur GitHub pour y parvenir. Gardez à l'esprit que je n'ai une configuration de base veryy actuellement hébergé https://github.com/alfredwesterveld/freakinping

  

Quelle est la meilleure façon de ping une liste de   20 sites toutes les 5 minutes (pour   par exemple) afin de savoir si le site   avec HTTP 202 répond ou non?

PING (ICMP)

D'abord, je voudrais savoir si vous voulez vraiment faire un ping (ICMP) ou si vous voulez juste savoir si le retour du site avec le code 200 (OK) et mesurer le temps qu'il faut. Je crois que le contexte que vous ne voulez pas vraiment faire un ping, mais juste une requête http et mesurer le temps. Je demande cela parce que (je crois) de pinger Node.js / ruby ??/ python ne peut pas être fait par un utilisateur normal car nous avons besoin raw sockets (utilisateur root) pour faire le pinger (ICMP) du langage de programmation. Je trouve par exemple ce script ping en python (je crois aussi que j'ai vu simple scénario ruby ??quelque part, bien que je ne suis pas un programmeur rubis vraiment grand) mais nécessite un accès root. Je ne crois pas qu'il y ait même pas encore un module de ping là-bas pour Node.js.

Message Queue

  

Aussi, est-il mieux, mais doux euphémisme   solution pour cela? Je crains que la liste   peut atteindre 20000 sites, puis   il n'y a pas assez de temps pour les ping   tous dans les 5 minutes que je dois être   pinger.

     

En fait, je décris comment Pingdom,   UptimeRobot, et aime le travail.

Ce que vous devez réaliser ce type d'échelle est d'utiliser une file d'attente de message comme par exemple Redis , beanstalkd ou gearmand. A l'échelle de Pingdom un processus de travail ne va pas le couper, mais dans votre cas (je suppose) un travailleur fera. Je pense (en supposant) Redis sera la file d'attente de messages le plus rapide en raison de la C (Node.js) l'extension, mais là encore je dois référence contre beanstalkd, qui est une autre file d'attente d'un message populaire (mais n'a pas encore une extension C).

  

Je crains que la liste peut atteindre 20000   sites

Si vous obtenez à cette échelle que vous pourriez avoir héberger plusieurs boîtes (un grand nombre de threads de travail / processus) pour gérer la charge mais vous n'êtes pas encore à cette échelle et Node.js est rapide fou. Il pourrait même être en mesure de gérer cette charge même avec une seule boîte, même si je ne suis pas sûr (que vous devez faire / exécuter certains points de référence).

Banque de données / Redis

Je pense que cela pourrait se faire assez facilement dans Node.js (je aime vraiment Node.js). La façon dont je le faire est d'utiliser Redis comme mon datastore, car il est FOU RAPIDEMENT!

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 (avec hredis (Node.js) bibliothèque c). Je voudrais ajouter les URL à l'aide Redis sadd.

Exécuter des tâches toutes les 5 minutes

Cela pourrait se faire sans peine aucun effort. J'utiliser le setInterval(callback, delay, [arg], [...]) pour tester de manière répétée le temps de réponse des serveurs. Obtenez toutes les URL sur callback de Redis en utilisant smembers . Je mettrais toutes les URL (messages) sur la file d'attente de messages en utilisant rpush .

Réponse Vérification (temps)

  

Cependant, ce qui se passe quand on ne le fait pas   réponses? Qu'advient-il les   après cela?

Je pourrais comprendre pas complètement cette phrase, mais ici il va. Si l'on échoue, il échoue juste. Vous pouvez essayer de vérifier la réponse (temps) à nouveau en 5 secondes ou quelque chose pour voir si elle est en ligne. Un algo précisrithme pour ce qui devrait être mis au point. Ceux après cela ne devrait pas avoir rien à voir avec les URL précédentes, sauf si le sont au même serveur. Aussi quelque chose que vous penser clairement, je suppose que vous ne devriez pas ping toutes les URL au même serveur en même temps, mais leur queue ou quelque chose.

URL Traitement

Dans le processus de travail (pour l'instant qu'un seul serait suffisant) un message fetch (URL) de Redis en utilisant la commande brpop . vérifier le temps de réponse pour l'URL (message) et chercher URL suivante (message) dans la liste. Je serais probablement faire quelques demande simultanée pour accélérer le processus.

Autres conseils

Il n'y a pas de « méthode de base », puisque vous devez gérer un grand nombre de cas d'utilisation:

  • http réoriente,
  • https pages,
  • les délais d'attente de demande,
  • la charge cpu du serveur que vous utilisez pour pinger,
  • le type de rapport dont vous avez besoin (disponibilité? Uptime? Réceptivité? Downtime?)
  • comment les mesures globales de QdS par le temps
  • Durée de vie des données que vous collectez (pinger des dizaines de cibles toutes les cinq minutes produit rapidement un grand nombre de données)
  • en temps réel des alertes
  • etc.

Pingdom et autres ne sont pas des outils « de base », et si vous voulez quelque chose de similaire, vous voudrez peut-être payer pour cela ou se fonder sur une alternative open source existante. Je sais pour sûr parce que je construit une application de surveillance à distance moi-même. Il est appelé Uptime, il est écrit dans Node.js et MongoDB, et il est hébergé sur GitHub (https://github.com/fzaninotto/uptime). Il a fallu plusieurs semaines de travail acharné pour développer, alors croyez-moi. Ce n'est pas une évidence

utiliser des outils de surveillance comme Zabbix, Nagios, bla bla qui peut métriques différents paramètres de vos serveurs en nombre de masse.

si u voudrait mettre en œuvre dans js, u peut faire une demande http intervalle ed temps, puis de déterminer le code d'état de retour http et utiliser XPath ou regex pour valider certains éléments est correct

pour le rubis, un démon et d'utiliser un pool de threads (multithreading idée) et URI ouverte pour afficher le code http et le contenu, utiliser XPath pour vérifier si le contenu est correctement se tenir.

Si vous êtes curieux, j'ai créé une application appelée Pinger qui fait cela. Il est construit sur Ruby on Rails et Resque:

https://github.com/austinthecoder/pinger

Il y a des services gratuits de qualité ce qui nous fournissent un site très stable jusqu'à vérification de l'heure et la notification. Vous pouvez vérifier cette instruction et revue http://fastjoomlahost.com/how-to- moniteur site-up-time

Vous pouvez aussi le faire en utilisant Node.js nœud-ping-moniteur paquet.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top