Gracias a GOD que puedo MONIT orear con Ruby
Publicado por Aníbal Rojas 6 Enero 2008 en General, Ruby. english • españolDesde hace algún tiempo monitoreo algunos servidores donde se ejecutan las aplicaciones que hemos desarrollado con Ruby On Rails usando Monit.
Con Monit monitoreo consumo de recursos, carga sobre el servidor, conectividad y estado de archivos en filesystem. La herramienta es bien útil y fácil de configurar.
¿Qué no me gusta de Monit? Que en el caso de monitorear por ejemplo un clúster de Mongrels, hay repetir toda la configuración para cada instancia y hay cosas que es difícil (sino imposible) expresar mediante los archivos de configuración de Monit.
Intentando instalar Monit en Debian Etch en un VPS me topé con el error:
-
Monit has not changed
-
Floating point exception
El bug debería estar resuelto en la versión 4.8.1 sin embargo no le encontré la vuelta, y es que tampoco se la busqué mucho porque estaba loco por probar God: like monit, only awesome, así que decidí probarlo.
Lo primero que hay que decir es que aún le falta, lo que es lógico siendo una versión 0.6, sin embargo funciona perfectamente.
Una de las primeras cosas que extrañé fue que no tuviera soporte para una condición (Condition) que me permitiera monitorear si el código de una respuesta HTTP sobre un URL determinado era diferente de un 200 OK. Sin embargo, lo que si provee en esta versión es la habilidad de expresar una condición a través de una función anónima (lambda).
De esta forma ni siquiera tenemos que extender los Conditions que provee Godpara agregar uno que acepte un URL y un código de respuesta HTTP esperado, sino que sencillamente podemos pasar el bloque de código que será evaluado para determinar si el proceso monitoreado debe ser reiniciado o no.
En mi caso además quería asegurar que la respuesta se diera en menos de un segundo, y al final quedó algo como esto:
-
uri = URI.parse('http://localhost/static/response200')
-
restart.condition(:lambda) do |c|
-
c.lambda = lambda do
-
begin
-
Timeout::timeout(1) do
-
Net::HTTP.get_response(uri).response.code.to_i != 200
-
end
-
rescue Exception
-
true
-
end
-
end
-
c.notify = 'anibal'
-
end
La gran ventaja que tiene God, sobre Monit es que se le saca el jugo a Ruby para poder expresar que es lo que vamos a monitorear, qué acciones vamos a tomar y bajo que condiciones.
Como les comenté sólo es una versión 0.6, y aún hay mucho por hacer, pero es Ruby así que siempre lo pueden extender fácilmente para conseguir lo que ustedes quieran.
0 Respuestas a “Gracias a GOD que puedo MONIT orear con Ruby”
Por favor Espera
Añade un Comentario