2012-05-18 11 views
5

¿Cómo debería script el supervisor de daemontools?¿Cómo se supervisa un servidor web con daemontools?

Empecé a usar las herramientas demoníacas de D. J. Bernstein para mantener algunos procesos en ejecución y funciona bien. Pero ahora necesito monitorear un par de condiciones adicionales en esos procesos y no he podido encontrar buena información sobre cómo hacerlo.

Mi caso es que tengo algunos procesos ejecutándose para una aplicación web (máquinas virtuales pharo smalltalk) y responden http, cada uno en su puerto (esto es para el balanceo de carga). Me gustaría de alguna manera hacerles ping para verificar que no solo se estén ejecutando, sino que respondan a las solicitudes http. Si no responden de cierta forma a una solicitud de más de 30 años, deberían tratarse como bloqueados y simplemente reiniciarse.

¿Esto es posible con daemontools? si es así, ¿cómo debería escribir este script y dónde debería ubicarlo? o ¿dónde está la documentación sobre esto?

Respuesta

6

La solución más simple es crear otra tarea de daemontool con un script que duerme durante 30 segundos y luego prueba la presencia del servicio (usando wget o curl por ejemplo). Si el servicio no responde oportunamente, puede reiniciar el servicio (svc -t yourapp) y/o enviar una notificación. El script correr del nuevo servicio podría parecer tan simple como esto:

#!/bin/sh 
sleep 30 
if ! wget --quiet --timeout=5 --delete-after "http://yourapp.com/" ; then 
    svc -t /etc/service/yourapp 
fi 

También he hecho una buena experiencia con herramientas como Munin. De nuevo, debe proporcionar una secuencia de comandos que proporcione información sobre el estado de su imagen. Si configura sus imágenes con un servicio REST, puede incluso proporcionar métricas realmente interesantes, como sesiones activas, sesión inactiva, parámetros de gc, consumo de memoria, estadísticas de bases de datos, ... La herramienta dibuja gráficos agradables a lo largo del tiempo y le permite especificar límites a ser notificado cuando las cosas se comportan mal.

+0

Gracias. pero, ¿no hay forma de hacer esto en el supervisor mismo? – pauel

+0

Sí, ver el primer párrafo de mi respuesta. –

+0

Sí, lo tengo. es solo que pensé que el supervisor que ejecuta al daemon podría hacer eso de cualquier manera. De todos modos su solución me ayuda mucho. Muchas gracias – pauel

3

para detectar si el servicio es sensible, puede utilizar rizo (un ajuste perfecto para HTTP y de línea de comandos/shell scripts)

curl --connect-timeout 10 http://8.8.8.8 
curl: (28) connect() timed out! 

y se puede escribir cosas más sofisticadas, como la comprobación de que la respuesta es 200 (OK) etc.

Cuestiones relacionadas