Domanda

Qual è il modo migliore per eseguire il ping un elenco di 20 siti web ogni 5 minuti (per esempio) al fine di sapere se il sito risponde con HTTP 202 o no?

L'idea facile soluzione è quella di salvare i 20 URL in un database e basta eseguire il database e il ping ciascuno. Tuttavia, ciò che succede quando non si risponde? Che cosa succede a quelli dopo di che?

Inoltre, non v'è migliore, ma la soluzione non-sforzo per questo? Ho paura che la lista può crescere a 20000 siti web e quindi non c'è abbastanza tempo per il ping tutti nei 5 minuti che ho bisogno di essere il ping.

In sostanza, sto descrivendo come Pingdom, UptimeRobot, e il lavoro gli piace.

sto costruendo questo sistema utilizzando node.js e Ruby on Rails. Sto anche propenso a utilizzare MongoDB per salvare la storia di tutti i ping e risultati del monitoraggio.

Suggerimenti?

Grazie un mazzo!

È stato utile?

Soluzione

Github

Mi piace molto node.js e vorrei affrontare questo problema e speriamo presto di condividere un certo codice su GitHub per raggiungere questo obiettivo. Tenete a mente che ho solo una messa a punto di base veryy ora ospitato presso https://github.com/alfredwesterveld/freakinping

Qual è il modo migliore per eseguire il ping un elenco di 20 siti web ogni 5 minuti (per esempio) al fine di sapere se il sito risponde con HTTP 202 o no?

PING (ICMP)

Per prima cosa vorrei sapere se si vuole fare davvero una ping (ICMP) o se si vuole solo sapere se il sito torna con il codice 200 (OK) e misurare il tempo necessario. Credo che dal contesto che non si vuole veramente fare un rumore metallico, ma solo una richiesta HTTP e misurare il tempo. Lo chiedo perché (credo) il ping da node.js / ruby ??/ python non può essere fatto da utente normale perché abbiamo bisogno di prese di prime (utente root) a fare il pinging (ICMP) dal linguaggio di programmazione. Io per esempio trovato questo ping lo script in python (Credo anche che ho visto un semplice rubino da qualche parte lo script anche se non sono davvero un grande programmatore rubino), ma richiede l'accesso di root. Non credo che ci sia ancora nemmeno un modulo da ping là fuori per node.js.

Message Queue

Inoltre, non v'è migliore, ma gioco da ragazzi soluzione per questo? Temo che la lista può crescere fino a 20000 siti web e poi Non c'è abbastanza tempo per il ping loro tutte nei 5 minuti ho bisogno di essere il ping.

In sostanza, sto descrivendo come Pingdom, UptimeRobot, e il lavoro gli piace.

Quello che vi serve per realizzare questo tipo di scala è quello di utilizzare un coda di messaggi, come ad esempio Redis , beanstalkd o gearmand. Alla scala del processo di lavoro uno Pingdom non ha intenzione di tagliarlo, ma nel tuo caso (presumo) un lavoratore farà. Penso che (presumo) Redis sarà la coda dei messaggi più veloce a causa del (node.js) estensione C ma poi di nuovo dovrei punto di riferimento contro beanstalkd, che è un altro coda di messaggi popolare (ma non c'è ancora un estensione C).

Ho paura che la lista può crescere fino a 20000 siti web

Se si arriva a quella scala potrebbe essere necessario disporre di Host più caselle (un sacco di thread di lavoro / processi) per gestire il carico, ma non sono in quel scala ancora e Node.js è veloce folle. Potrebbe anche essere in grado di gestire quel carico anche con una sola scatola, anche se non so per certo (è necessario fare / eseguire alcuni benchmark).

datastore / Redis

Credo che questo potrebbe essere raggiunto abbastanza facilmente a node.js (mi piace molto node.js). Il modo in cui vorrei fare questo è utilizzare Redis come il mio archivio dati perché è veloce INSANE!

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 (con hredis (node.js) libreria C). Vorrei aggiungere gli URL di Redis utilizzando Sadd .

compiti passano ogni 5 minuti

Questo potrebbe essere raggiunto senza malapena qualsiasi sforzo. Vorrei utilizzare il setInterval(callback, delay, [arg], [...]) per testare ripetutamente il tempo di risposta dei server. Ottenere tutti gli URL su callback da Redis utilizzando smembers . Io metterei tutti gli URL (messaggi) sulla coda di messaggi utilizzando rpush .

Controllo di risposta (Time)

Tuttavia, che cosa succede quando uno non lo fa risposte? Che cosa succede a quelli dopo di che?

Non potrebbe comprendere appieno questa frase, ma qui va. Se uno non riesce solo fallisce. Si potrebbe provare a controllare la risposta (tempo) di nuovo in 5 secondi o qualcosa del genere per vedere se è in linea. A algo precisorithm per questo dovrebbe essere messo a punto. Quelli dopo che non dovrebbe avere nulla a che fare con gli URL precedenti a meno che il sono allo stesso server. Anche qualcosa che chiaramente pensa credo perché allora non si dovrebbe eseguire il ping tutti tali URL allo stesso server, allo stesso tempo, ma loro in coda o qualcosa del genere.

Lavorazione URL

Dal processo di lavoro (per ora solo uno sarebbe sufficiente) recuperare un messaggio (URL) da Redis utilizzando brpop comando. controllare il tempo di risposta per l'URL (messaggio) e prendere l'URL successivo (messaggio) dalla lista. Io probabilmente fare un paio di contestuale richiesta per accelerare il processo.

Altri suggerimenti

Non c'è un "modo di base", in quanto è necessario gestire un sacco di casi d'uso:

  • http redirect,
  • https pagine,
  • richiesta timeout,
  • il carico della CPU del server utilizzato per il ping,
  • il tipo di report che vi interessa (disponibilità? Uptime? Risposte? I tempi di inattività?)
  • come misurazioni QoS aggregate per tempo
  • durata di vita dei dati raccolti (pinging decine di obiettivi di ogni cinque minuti in modo rapido produce un sacco di dati)
  • in tempo reale avvisi
  • ecc.

Pingdom e simili non sono strumenti "di base", e se si vuole qualcosa di simile si consiglia di pagare per questo o affidarsi a un'alternativa open-source già esistente. Lo so per certo perché ho costruito un programma di monitoraggio remoto me stesso. Si chiama Uptime, è scritto in Node.js e MongoDB, ed è ospitato su GitHub (https://github.com/fzaninotto/uptime). Ci sono volute diverse settimane di duro lavoro per svilupparlo, quindi credetemi:. NON è un gioco da ragazzi

utilizzare strumenti come zabbix, Nagios, bla bla monitoraggio che può metriche vari parametri dei server in numeri di massa.

se u vorrebbe per la sua attuazione in js, u può fare una richiesta di intervallo di-ed http tempo, quindi per determinare http codice di stato di ritorno, e l'uso XPath o espressioni regolari per convalidare certo elemento è corretto

per Ruby, un processo demone e utilizzare un pool di thread (multithreading idea) e URI aperto per visualizzare il codice HTTP e il contenuto, l'uso XPath per convalidare se il contenuto è un comportamento corretto.

Se siete curiosi, ho creato un app chiamato Pinger che fa questo. E 'costruito su Ruby on Rails e Resque:

https://github.com/austinthecoder/pinger

Ci sono alcuni servizi gratuiti di qualità che ci un sito web molto stabile fino controllo orario e la notifica forniscono. È possibile controllare questo istruzioni e rivedere http://fastjoomlahost.com/how-to- Monitor-sito-up-tempo

Si può anche fare questo in Node.js utilizzando il nodo-ping-Monitor pacchetto.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top