lunes, 19 de enero de 2009

Ideas de verano: monitoreo de servidores vía mensajería instantánea

Esta idea nació simple: correr comandos de consola en un cliente de mensajería (que se ejecutarían en un servidor remoto), y ver la salida en la ventana del cliente, después hice el brainstorming y salió todo lo que sigue.

 

La imagen

Monitoreo de syslog vía mensajería privada (Jabber): un par de scripts que barren un syslog centralizado (ordenado para poder distinguir sencillamente los logs de un servidor de los de otro) buscando strings y palabras claves y van subiendo esos datos al nombre/nick de un contacto en un servidor Jabber (privado y con comunicación segura).
 
La imagen sería esta: en el servidor donde se implante el monitoreo (con el syslog centralizado), estaría corriendo un cliente jabber (lo más scripting-friendly posible), que serviría de plataforma para los datos a comunicar desde los scripts.

En el lado del cliente, el administrador tendría una cuenta en el servidor jabber (visible o no desde internet, a decisión de cada uno), en la cual cuando se conecta, tiene a la vista en su lista de contactos a los servers que están siendo monitoreados. 

Detalles

La solución se puede montar en cualquier server en realidad, el uso de un syslog central es para simplificar en un solo punto la creación de todas las cuentas - una por servidor a monitorear - claro, a menos que decida resignar el instant-shot de información que brinda un nickname en la lista de contactos (vía mensajes de estado: "online", "offline", "normal", "problemas", "problemas graves", etc.), por tener todos las consultas en una sola cuenta Jabber (igual se podría tener un "status-all" y ver la información que veríamos en nicknames en una lista de contactos.

No sé si notan el potencial ahora, la solución es independiente de la plataforma y permitiría monitorear los servers desde cualquier workstation insegura dentro de la red. Plus Internet; según el nivel de seguridad necesario, recuerden un servicio Jabber "X" no suele estar tan bien depurado como un servicio SSH, aunque siempre podemos interponer una VPN entre el jabber y nuestro cliente y la comunicación quedaría encapsulada doblemente, VPN+SSL (más un par de reglas iptables en el server que permitan el acceso a los puertos de Jabber solo desde las IPs que se puede obtener del link VPN y ya estaríamos agregando una sencilla capa extra de seguridad).

Interactividad

El bonus potencial, la interactividad (era la idea original), una o dos opciones:

  • Que otro script espere el evento de apertura de la comunicación y postee los datos a la ventana de la comunicación (podría ser un solo evento), o
  • En el orden que fueron apareciendo los string/palabras clave); que otro script (mas), escanee cada comunicación abierta del cliente/server (según la facilidad de implementación que prefieran), y responda a palabras clave escritas directamente en la ventana de la comunicación jabber ejecutando comandos en el server.

Con respecto a esto último, lo recomendable sería habilitar no cualquier comando (es tentador correr cualquier comando y mostrar la salida en la ventana de mensajería), sino algunos comandos seleccionados, de monitoreo y relacionados.

Seguridad e interactividad

La interactividad añade una capa extra de desarrollo y consideraciones importantes de seguridad. ¿cómo ejecutamos los comandos en los servidores si solo tenemos acceso a los logs en el syslog centralizado? Hay varias maneras, se podría simplificar así, no se usa el syslog central: se trabaja directamente sobre el server, los scripts trabajan sobre cada server en particular, y el cliente Jabber se ejecuta también en cada server particular.

La seguridad se conserva en parte porque la comunicación va por la red interna y vía SSL, se complica si queremos publicar el server Jabber en Internet porque tenemos que añadir una nueva tupla de reglas a la red (puertos-protocolo-rutas L3- "rutas" L2, etc.), que habilita un punto de comunicación bidireccional entre la DMZ y la red interna (es decir, hacia TODOS los servers que tengan montada la solución para correr comandos "vía" Jabber). Es algo para meditar y yo no recomendaría dar salida a Internet nunca a una solución como esta última, pero sí podría ser muy util en otros casos de uso desde la red interna.

Detalles finales

 Para la implementación puntual no queda mucho más que pensar en un server jabber a implementar, mucho d-bus del lado del cliente jabber que se esté ejecutando en el servidor (casi seguro un cliente gnome o kde d-bus compatibles), ver un poco la metodología puntual para "barrer" el contenido de la ventana del cliente desde fuera de la aplicación (un poco de d-bus, tal vez usando copy+paste y el portapapeles), etc.

2 comentarios:

Matt dijo...

Esta es una buena idea. He considerado el uso de jabber Nagios notificaciones, pero para registro de alertas, es interesante y no requiere una gran infraestructura subyacente

Dado que no hablo español bien, esta fue traducida con Google

lilimpaez dijo...

Definitivamente bueno pero, hay sitios como secayo.com que ya contemplan todo esto, y lo mejor es que es libre, no se paga por el monitoreo, es incluso una comunidad virtual.