Curso Python DGA 2011/sistemas/admin monitor

¿ Qué es Fabric ?

 * Herramienta de línea de comandos y librería para facilitar la administración de sistemas y despliegue de aplicaciones a través de SSH.
 * Los scripts en fabric son python usando el api que provee.
 * Permite ejecutar comandos shell localmente o remotamente, así como subir y bajar ficheros de sistemas remotos.
 * Ejecuta mismas tareas en múltiples hosts definidos.
 * Es capaz de manejar las peticiones de input por parte de los programas ejecutados a través de la shell remota (ej: petición de passwords)

Instalación
Por tanto instalaremos la última release de https://github.com/fabric/fabric/downloads.
 * Usaremos la última release 1.x, a día de hoy 1.2.1
 * Ubuntu 11.04 (natty) trae fabric 0.9.3, aunque la próxima oneiric ya saldrá con una 1.0.

Necesitaremos:
 * tener setuptools instalada
 * python-paramiko - nos sirve el paquete que trae ubuntu

Una vez descargada la release y cumplidas las dependencias: python setup.py install

Herramienta fab y tareas
Fabric trae la herramienta fab, con la que podemos ejecutar funciones (tareas) que escribamos en fabfile.py


 * Se pueden pasar parámetros:


 * Podemos hacer tareas que llamen a tareas, puesto que las tareas son funciones python.

Ejecución de operaciones en remoto

 * Fabric se encarga de gestionar las conexiones con los hosts remotos sobre los que ejecutar comandos.
 * Se hace cache de conexiones, fab las cierra al terminar.
 * Fabric mantiene una cache de passwords, evitando tener que reintroducirlas constantemente.


 * Si ejecutamos esta operación, dado que no hemos definido ningún host, fabric nos pedirá donde queremos ejecutar las operaciones (user@host)


 * Podemos definir los hosts donde ejecutar las operaciones de forma global al script:

Aunque esto asumirá que que el usuario con el que nos autenticamos es el mismo usuario que ejecuta el script.
 * Podemos poner el usuario con el que se ejecutará:


 * Podemos especificar hosts para una tarea en concreto:


 * ... o pasar por línea de comandos los hosts

Roles en Fabric
Se pueden agrupar hosts de forma que se puedan ejecutar tareas para un determinado grupo, usando @roles


 * También se puede ejecutar sobre un rol en concreto desde línea de comandos:

Ejecutando con sudo

 * Fabric también trae soporte para ejecutar comandos en máquinas remotas como "sudo"

Manejando fallos

 * Cuando una tarea falla, fab aborta la ejecución del resto. Esto es muy útil si utilizamos Fabric como herramienta de builds y despliegue de nuestro proyecto.


 * Si ejecutamos la tarea deploy, pero la ejecución de tests falla, no se realizará ni el empaquetado ni el despliegue.
 * En algunos casos nos interesa manejar manualmente el error (usando warn_only=True):

Context Managers
Además del context manager settings, que ya hemos visto antes, Fabric trae algunos muy útiles:


 * cd(path) - Cambia el directorio de trabajo actual

¿Y no es más fácil ejecutar lo siguiente?: No. Fabric no mantiene estado entre conexiones, así que el comando 'ls' se ejecutará sobre el directorio de trabajo por defecto del usuario en el host


 * lcd(path) - Equivalente a cd, pero para local.
 * path(path, behavior='append') - Añade path a la variable de entorno PATH del sistema durante la ejecución de los comandos que encapsule.
 * prefix(command) - Añade command como comando a ejecutar antes de cada comando invocado con run/sudo, añadiéndoselo con &&

¿ 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.

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:

Enviando emails:

Incidentes, varios errores en un determinado tiempo: Monitorizando la salud del sistema: