Pregunta

¿Cuál es la mejor manera de hacer ping a una lista de 20 sitios web de cada 5 minutos (por ejemplo) con el fin de saber si el sitio responde con HTTP 202 o no?

La idea es pan comido para salvar los 20 URL en una base de datos y basta con ejecutar la base de datos y hacer ping a cada uno. Sin embargo, ¿qué sucede cuando uno no responde? ¿Qué ocurre con los después de eso?

Además, no es mejor, pero la solución no-obvio para esto? Me temo que la lista puede crecer hasta 20000 sitios web y luego no hay tiempo suficiente para hacer ping a todos en los 5 minutos que necesito para ser un ping.

Básicamente, estoy describiendo como Pingdom, UptimeRobot, y el trabajo que le gusta.

Estoy construyendo este sistema usando Node.js y Ruby on Rails. También estoy inclinado a usar MongoDB para guardar el historial de todos los pings y los resultados del monitoreo.

Sugerencias?

Gracias un montón!

¿Fue útil?

Solución

Github

A mi me gusta Node.js y me gustaría hacer frente a este problema y espero que pronto compartir algo de código en GitHub para lograrlo. Tenga en cuenta que sólo tengo una configuración básica veryy ahora alojada en https://github.com/alfredwesterveld/freakinping

¿Cuál es la mejor manera de hacer ping a una lista de 20 sitios web cada 5 minutos (por ejemplo) con el fin de saber si el sitio responde con HTTP 202 o no?

PING (ICMP)

En primer lugar me gustaría saber si usted quiere hacer realidad un ping (ICMP) o si lo que desea es saber si el sitio vuelve con código 200 (OK) y medir el tiempo que tarda. Creo que por el contexto que usted realmente no quiere hacer un ping, pero sólo una petición HTTP y medir el tiempo. Lo pregunto porque (creo) ping desde Node.js / Ruby / Python no se puede hacer desde un usuario normal porque necesitamos los conectores directos (usuario root) para hacer el ping (ICMP) de Lenguaje de Programación. Yo, por ejemplo, encontré este script de ping en Python (también creo que vi un sencillo rubí script de algún lugar aunque no soy realmente un gran programador rubí), sino que requiere acceso de root. No creo que incluso hay todavía un módulo de ping hacia fuera allí para Node.js.

Message Queue

Además, no es mejor, pero obviedad solución para esto? Me temo que la lista puede crecer hasta 20000 sitios web y luego no hay tiempo suficiente para hacer ping a ellas todo en los 5 minutos que necesito estar ping.

Básicamente, estoy describiendo como Pingdom, UptimeRobot y el gusto del trabajo.

Lo que hay que lograr este tipo de escala es usar un cola de mensajes como por ejemplo Redis , beanstalkd o gearmand. En la escala del proceso de trabajo de una Pingdom no se va a cortar, pero en su caso (supongo) un trabajador va a hacer. Creo que (se supone) Redis será la cola de mensajes más rápido debido a la extensión C (Node.js) pero entonces, yo debería comparar contra beanstalkd, que es otra cola de mensajes populares (pero todavía no tiene una extensión C).

Me temo que la lista puede crecer hasta 20.000 sitios web

Si usted consigue a esa escala puede que tenga que tener anfitrionas múltiples cajas (una gran cantidad de subprocesos de trabajo / procesos) para manejar la carga pero no está todavía a esa escala y Node.js es rápido loco. Incluso podría ser capaz de manejar esa carga, incluso con una sola caja, aunque no sé a ciencia cierta (que tiene que hacer / ejecutar algunos puntos de referencia).

almacén de datos / Redis

creo que esto podría lograrse con bastante facilidad en Node.js (me gusta mucho Node.js). La forma en que lo haría esto es Redis uso como mi almacén de datos porque es rápido locura!

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

usando node_redis (con hredis (node.js) biblioteca c). Yo añadiría a las direcciones URL Redis usando sadd .

Ejecutar tareas cada 5 minutos

Esto podría lograrse sin apenas esfuerzo. Me gustaría utilizar el setInterval(callback, delay, [arg], [...]) para poner a prueba en repetidas ocasiones el tiempo de respuesta de los servidores. Obtener todas las direcciones URL en callback de Redis utilizando smembers . Me volvería a poner todas las URLs (mensajes) en la cola de mensajes usando rpush .

Comprobación de respuesta (Time)

Sin embargo, ¿qué sucede cuando uno no lo hace respuestas? ¿Qué ocurre con las después de eso?

No podría entender completamente esta frase pero aquí va. Si uno no sólo falla. Se podría tratar de comprobar la respuesta (tiempo) de nuevo en 5 segundos o algo para ver si está en línea. A algo precisarithm para este debe ser concebido. Los después de que no debería tener nada que ver con las URL anteriores a menos que el son al mismo servidor. También es algo que pensar con claridad acerca supongo que porque entonces no debe hacer ping a todas las direcciones URL al mismo servidor al mismo tiempo, pero ponerlos en cola o algo así.

Producción de URL

A partir del proceso de trabajo (por ahora sólo uno sería suficiente) obtener el mensaje (URL) de Redis utilizando brpop comando . comprobar el tiempo de respuesta para la dirección URL (mensaje) a buscar el próximo URL (mensaje) de la lista. Yo probablemente hacer un par de solicitud simultánea a acelerar el proceso.

Otros consejos

No hay una "forma básica", ya que debe manejar una gran cantidad de casos de uso:

  • redirecciones HTTP,
  • https páginas,
  • Solicitud de tiempos de espera,
  • la carga de la CPU del servidor que utiliza para hacer ping,
  • el tipo de informe que necesita (disponibilidad? Tiempo de actividad? La capacidad de respuesta? El tiempo de inactividad?)
  • cómo las mediciones de calidad de servicio agregados por el tiempo
  • tiempo de vida de los datos que recopila (ping docenas de objetivos cada cinco minutos produce rápidamente una gran cantidad de datos)
  • en tiempo real alertas
  • etc.

Pingdom y similares no son herramientas "básicas", y si quieres algo similar es posible que desee pagar por ello o se basan en una alternativa de código abierto existentes. Sé que con seguridad porque he construido una aplicación de monitoreo remoto a mí mismo. Se llama tiempo de actividad, está escrito en Node.js y MongoDB, y está alojado en GitHub (https://github.com/fzaninotto/uptime). Tomó varias semanas de trabajo duro para desarrollarlo, así que créanme:. No es una obviedad

El uso de herramientas como Zabbix, Nagios, bla, bla monitoreo que puede métricas diferentes parámetros de los servidores en números de masa.

si u quisiera ponerlo en práctica en js, u puede hacer una solicitud de intervalo de opinión http tiempo, entonces para determinar http código de estado devuelto, y el uso de XPath o expresiones regulares para validar cierto elemento es correcta

rubí, un proceso de demonio y el uso de un grupo de subprocesos (multithreading idea) y el URI abierta para ver el código HTTP y el contenido, el uso de XPath para validar si el contenido es comportan correctamente.

Si tienes curiosidad, he creado una aplicación llamada del emisor de ultrasonidos que hace esto. Está construida sobre Ruby on Rails y Resque:

https://github.com/austinthecoder/pinger

Hay algunos servicios gratuitos de calidad lo que nos una página web muy estable hasta control horario y notificación proporcionan. Esto se puede comprobar la instrucción y revisar http://fastjoomlahost.com/how-to- monitor de sitio web en marcha en tiempo

También puede hacer esto en Node.js utilizando el nodo-ping-Monitor paquete.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top