Usuario:Luis.perez/sistemaspyaytozgz/watchdog
De WikiEducator
Saltar a: navegación, buscar
Contenido
Monitorización de servidores y recolección de datos con Watchdog
¿ Qué es Watchdog ?
- Librería para facilitar la monitorización de servicios y notificar o realizar acciones en respuesta a incidentes.
- DSL propio para definir servicios y acciones
- Api simple y pequeña
Instalación
Por ahora no está disponible por defecto en distribuciones. Basta con descargar:
https://raw.github.com/sebastien/watchdog/master/Sources/watchdog.py
e incluirlo en el pythonpath.
O bien clonar o descargar el repo https://github.com/sebastien/watchdog.git
e instalarlo mediante
$ python setup.py install
Estructura del DSL
- Los servicios se registran en el monitor
- Un servicio puede tener varias reglas, que se comprueban con una frecuencia de tiempo configurable
- Se pueden definir acciones cuando las reglas terminan con éxito o fracaso.
Reglas y acciones
- Reglas: HTTP (prueba un servicio http), SystemHealth(comprueba que los niveles de cpu, disco, y memoria están por debajo de los niveles que establecemos), ProcessInfo, SystemInfo, Bandwith, Mem, Delta.
- Acciones: Log, Print, Restart (para reiniciar procesos), Email, XMPP, Incident (para ejectutar otras acciones en base a multiples fallos seguidos), ZMQPublish (para publicar mensajes en colas ZeroMQ).
- Podemos crear acciones y reglas personalizadas, extendiendo de Action y Rule.
Ejemplos
Ejemplo básico:
from watchdog import * Monitor( Service( name="apache-ensure-up", monitor=( HTTP( GET="http://localhost:80/", freq=Time.ms(500), fail=[ Print("Apache is down!!") ] ) ) ) ).run()
Enviando emails:
HTTP( GET="http://myservice.com/, freq=Time.ms(500), fail=[ Email( "admin@company.com", "[Watchdog] Service unreachable", "Latency over 500ms", "smtp.company.com", "username", "password" ] )
Incidentes, varios errores en un determinado tiempo:
HTTP( GET="http://myservice.com/, freq=Time.ms(500), fail=[ Incident( errors = 5, during = Time.s(10) actions = [ ... ] ] )
Monitorizando la salud del sistema:
SystemInfo( freq=Time.s(1), success = ( LogResult("myserver.system.mem=", extract=lambda r,_:r["memoryUsage"]), LogResult("myserver.system.disk=", extract=lambda r,_:reduce(max,r["diskUsage"].values())), LogResult("myserver.system.cpu=", extract=lambda r,_:r["cpuUsage"]), ) ), Delta( Bandwidth("eth0", freq=Time.s(1)), extract = lambda v:v["total"]["bytes"]/1000.0/1000.0, success = [LogResult("myserver.system.eth0.sent=")] ), SystemHealth( cpu=0.90, disk=0.90, mem=0.90, freq=Time.s(60), fail=[Print("Health compromised!!")] )