viernes, 5 de junio de 2015

Monitorea tus servers chateando con ellos

Que tal gente como están??!!!!


Como sabrán en estos tiempos un Sysadmin o administrador de sistemas tiene que tener todos sus servers bien vigilados y en correcto funcionamiento, así mismo tener diferentes medios para poder acceder a ellos desde cualquier lugar, hora y modo, por lo cual en una conferencia en días pasados vi que ciertas empresas ya ofrecen un modo peculiar de administración y monitorizacion el cual es usando un vil y vulgar chat (ok ok ok, ni tan vil, ni tan vulgar pero es lo mas usado), y aun que suene raro no es nada nuevo solo que poco conocido, así que por eso les traigo el siguiente manual para que lo prueben y por lo cual pongamos manos a la obra 

Primero los requerimientos:

Un servidor propio tipo Jabber configurado y/o una cuenta de gmail, esto para enviar los mensajes o usar su chat (ya se que esta de mas decirlo, pero nunca esta de mas)

Crear un usuario dentro del servidor , por ejemplo llamado monitor o pueden usar root, pero ya saben las reglas, Yo en este caso use root pero fue en una maquina virtual, ok pero como dicen manos a la consola :p

Instalamos primero, los siguientes paquetes:

apt-get install monit sendxmpp centerim

Ahora explicaremos el por que el cada uno de los paquetes

Monit: es un sistema de monitoreo y el cual no ayudara a levantar el servicio cuando este se detenga u otras acciones, 

sendxmpp: este nos permite mandar mensajes utilazando el protocolo de comunicacion jabber, este protocolo lo podemos en contrar en chat muy conocidos como son google hangout o facebook por poner un ejemplo, 

Centerim: este es un cliente de mesajeria (chat) pero en consola , aun que no lo crean en linux aparte de administrar servidores por este medio, tambien se puede navegar por internet, leer correo y chatear en consola  

para cualquier cosa visiten la pagina de cada proyecto 



Ok después de instalar lo anterior siguiente viene la configuración de cada uno de los productos asi que a darle:

el primero en configurar sera el de centerim y hay 2 modos uno es ejecutar el comando centerim  por primera vez y seguir los pasos para configurarlo o la otra es que dentro del home del usuario en el directorio .centerim/ (si con todo y punto) y ahi crear el fichero config con la siguiente info :


cd /home/usuario/.centerim/ 
vim config  
Y ya dentro del archivo se insertara la siguiente informacion
mailcheck
screensocketpath        /var/run/screen
chatmode icq yahoo msn aim irc jab gg
convert icq yahoo msn aim irc jab rss lj gg infocard
fromcharset     cp1251
tocharset       koi8-r
nobidi
smtp    localhost:25
browser mozilla
ptp     0-0
protocolormode
sort_by_status_and_activity
left_panel_width        53
log_panel_height        8
chat_panel_height       8
defaultauthmessage      Please accept my authorization to add you to my contact list.

jab_nick        usuariodegmail@gmail.com #usuario del servidor jabber o gmail
jab_pass        password_del_usuario #password del usuario 
jab_server      talk.google.com:5223  #servidor del chat o gmail 
jab_osinfo      1
jab_prio        4
jab_ssl 1

una vez configurado lo ejecutamos  si con lo anterior no funciona usemos la configuración manual y una vez que arranque emprenderemos el primer chat con la cuenta con la cual interactuaremos para el monitoreo y asi creara los ficheros correspondientes y necesarios


Luego configuramos el sendxmmp de la siguiente manera estando en el home del usuario

echo "usuario@gmail.com;talk.google.com gmailpassword gmail.com" >> ~/.seddxmpprc
 chmod 700 ~/.sendxmpprc
Y lo probamos de la siguiente manera:

echo 'Hello World!!' | sendxmpp -t -u usuariodegmail usuariodestino@gmail.com
Con esto se enviara un mensaje por chat a la cuenta de destino , sito sale vien lo veremos en la ventana de chat


CONFIGURACION DE MONIT

La configuracion de monit se encuentra en el fichero /etc/monit/monitrc, el cual vamos a editar y usuaremos la siguiente configuaracion

vim /etc/monit/monitrc 

 set daemon 120            # check services at 2-minute intervals  set logfile /var/log/monit.log  set idfile /var/lib/monit/id  #set statefile /var/lib/monit/state  set eventqueue      basedir /var/lib/monit/events # set the base directory where events will be stored      slots 100                     # optionally limit the queue size   include /etc/monit/conf.d/*

set mail-format {    subject: monit alert --  $EVENT $SERVICE    message: $EVENT Service $SERVICE    Received:                 Date:        $DATE                 Action:      $ACTION                 Host:        $HOST                 Description: $DESCRIPTION}
#set httpd port 8181 and # Port used for the WEB access, listen on LOCALHOST#    use address localhost#    allow admin:monit # Username/password
 set httpd port 2812 and     #use address localhost # only accept connection from localhost     allow localhost     allow 192.168.100.7     allow admin:monit      # require user 'admin' with password 'monit'     allow @monit           # allow users of group 'monit' to connect (rw)     allow @users readonly  # allow users of group 'users' to connect readonly

################################################################################# Services###############################################################################

 #checamos el estado de nuestro server 
check system localhost    if loadavg (1min) > 4 then alert    if loadavg (5min) > 2 then alert    if memory usage > 75% then alert    if swap usage > 25% then alert    if cpu usage (user) > 70% then alert    if cpu usage (system) > 30% then alert    if cpu usage (wait) > 20% then alert

#manera de llamar los comandos y  verificar si esta corriendo el proceso 

check process QVD_HKD  with pidfile /var/run/qvd/qvd-hkd.pidstart program = "/usr/lib/qvd/bin/qvd-hkd start" with timeout 60 secondsstop program  = "/usr/lib/qvd/bin/qvd-hkd stop"

check process QVD_L7R  with pidfile /var/run/qvd/qvd-l7r.pid        start program = "/usr/lib/qvd/bin/qvd-l7r start" with timeout 60 seconds        stop program  = "/usr/lib/qvd/bin/qvd-l7r stop"

check process POSTGRESSQL with pidfile /var/run/postgresql/9.1-main.pid        start program = "/etc/init.d/postgresql start"        stop  program = "/etc/init.d/postgresql stop"


check process APACHE with pidfile /var/run/apache2.pid        start program = "/etc/init.d/apache2 start"        stop program = "/etc/init.d/apache2 stop"
esto son ejemplo, pero si se dan cuenta puse unos que hace referencia a los servicios de QVD es un sistema de VDI opensource el cual pueden checarlo en el link, 
Los demas es para ver el estado de postgres apache etc, y aparte como parar o reiniciar el proceso 

para mas info checar la wiki de monit 

CONFIGURACIÓN FICHEROS 

Primero crearemos los archivos que ocuparemos, asi que para esto no iremos al directorio /usr/local/bin

cd /usr/local/bin/
ya ahi con nuestro editor favorito crearemos el primer fichero llamado gtalkdaemon.sh, este fichero contendrá un script el cual  mantendra activo nuestro servicios y contiene lo siguiente


 vim /usr/local/bin/gtalkdaemon.sh
Y dentro del fichero pondremos lo siguientes
#!/bin/bash
# GTalk Daemon
rm -f /root/.centerim/jusuariodestino\@gmail.com/history
touch /root/.centerim/jusuariodestino\@gmail.com/history
tail -f /root/.centerim/jusuariodestino\@gmail.com/history | perl -ne 'system("/usr/local/bin/gtalkfilter.sh $_")'

después crearemos el fichero gtalkfilter.sh este nos ayudara a que con un pin o codigo de 4 digitos sepa diferenciar entre una platica y la ejecucion de un comando lo cual veremos mas adelante, pero por ejemplo yo escogi aqui 1111

vim /usr/local/bin/gtalkfilter.sh
#!/bin/bash
if [ $(echo $@ | grep 1111| wc -l) = 1 ];
then
 /usr/local/bin/gtalkexecuter.sh $(echo $@ | cut -f2 -d\:);
 > /root/.centerim/tucuenta@gmail.com/history ;
fi

Y por ultimo crearemos el script gtalkexecuter.sh el que se encargara de ejecutar los comandos de monit y algunos otros para que nos los muestre en el chat, pondre algunos como ejemplo pero en la pagina de monit y en las referencias que pondre mas abajo encontraran mas que les podran ayudar 

vim /usr/local/bin/gtalkexecuter.sh
#!/bin/bash
log=/var/log/gtalkexecuter.log
case $1 in
  uptime)
   echo "Server status.." | sendxmpp -t -u a usuariodegmail usuariodestino@gmail.com ;
   /usr/bin/uptime |  sendxmpp -t -u  usuariodegmail usuariodestino@gmail.com ;
  ;;
  status)
        sudo /usr/bin/monit status | sendxmpp -t -u  usuariodegmail usuariodestino@gmail.com ;
 ;;
  summary)
        sudo /usr/bin/monit summary | sendxmpp -t -u  usuariodegmail usuariodestino@gmail.com ;
 ;;
  start_l7r)
        sudo /usr/bin/monit start QVD_L7R; sleep 5; sudo /usr/bin/monit summary | sendxmpp -t -u  usuariodegmail usuariodestino@gmail.com ;
 ;;
  stop_l7r)
        sudo /usr/bin/monit stop QVD_L7R; sleep 5; sudo /usr/bin/monit summary | sendxmpp -t -u  usuariodegmail usuariodestino@gmail.com ;
 ;;
  start_hkd)
        sudo /usr/bin/monit start QVD_HKD; sleep 5; sudo /usr/bin/monit summary | sendxmpp -t -u  usuariodegmail usuariodestino@gmail.com ;
 ;;
  stop_hkd)
        sudo /usr/bin/monit stop QVD_HKD; sleep 5; sudo /usr/bin/monit summary | sendxmpp -t -u  usuariodegmail usuariodestino@gmail.com ;
 ;;
  start_postgres)
        sudo /usr/bin/monit start POSTGRESSQL; sleep 5; sudo /usr/bin/monit summary | sendxmpp -t -u  usuariodegmail usuariodestino@gmail.com ;
 ;;
  stop_postgres)
        sudo /usr/bin/monit stop POSTGRESSQL; sleep 5; sudo /usr/bin/monit summary | sendxmpp -t -u  usuariodegmail usuariodestino@gmail.com ;
 ;;
 start_apache)
        sudo /usr/bin/monit start APACHE; sleep 5; sudo /usr/bin/monit summary | sendxmpp -t -u allandragon14 kurama10@linux-mx.org ;
 ;;
  stop_apache)
        sudo /usr/bin/monit stop APACHE; sleep 5; sudo /usr/bin/monit summary | sendxmpp -t -u a usuariodegmail usuariodestino@gmail.com ;
 ;;
  start_monit)
        sudo /etc/init.d/monit start | sendxmpp -t -u  usuariodegmail usuariodestino@gmail.com ;
 ;;
  stop_monit)
        sudo /etc/init.d/monit stop | sendxmpp -t -u  usuariodegmail usuariodestino@gmail.com ;
 ;;
  list_vm_qvd)
        sudo /usr/bin/qa vm list |  sendxmpp -t -u  usuariodegmail usuariodestino@gmail.com ;
 ;;
  list_user_qvd)
        sudo /usr/bin/qa user list |  sendxmpp -t -u  usuariodegmail usuariodestino@gmail.com ;
 ;;
  list_host_qvd)
        sudo /usr/bin/qa host list |  sendxmpp -t -u a usuariodegmail usuariodestino@gmail.com ;
;;

  help)
        echo "uptime|status|start_apache|stop_apache|start_mysql|stop_mysql|mysql_slave|start_mariadb|stop_mariadb|start_mongodb|stop_mongodb|start_monit|stop_monit" | sendxmpp -t -u  usuariodegmail usuariodestino@gmail.com ;
 ;;

 * )
 echo Unrecognied option $1 >> $log
 ;;
esac

Una vez creado los ficheros le cambiaremos los permisos para que puedan ejecutarse

 chmod 755 /usr/local/bin/gtalkexecuter.sh /usr/local/bin/gtalkfilter.sh /usr/local/bin/gtalkdaemon.sh

Luego creamos el fichero del log

touch /var/log/gtalkexecuter.log
chown monitor:monitor /var/log/gtalkexecuter.log

 Como se muestra en archivo gtalkexecuter.sh se usa sudo para ejecutar los comandos por lo cual hay que darle los permisos necesarios para el usuario pueda ejecutarlos sin necesidad de password por lo cual lo editamos con visudo y agregamos lo siguiente

monitor ALL=NOPASSWD: /usr/bin/monit, /etc/init.d/monit

una ves terminado esto crearemos un script en init.d para poder inciar el demonio que creamos para lo cual haremos lo siguiente 

vim /etc/init.d/gtalk

 #!/bin/bash
case "$1" in
'start') #Start gtalk monitoring system su - monitor -c 'screen -d -m -S centerim centerim' su - monitor -c 'sleep 5 && /bin/bash /usr/local/bin/gtalkdaemon.sh 2> /dev/null &' ;; 'stop') #Stop gtalk monitoring system killall -9 centerim killall -9 tail PROCS=`ps aux | grep gtalk | grep -v grep | awk '{print$2}'` for i in $PROCS; do kill -9 $i done ;; 'restart') stop start ;; '*') echo "start|stop|restart" ;;esac
y luego creamos una link simbolico para que inicie al arrancar el sistema


 cd /etc/rc2.d ln -s ../init.d/gtalk S23gtalk
 Con esto podemos ya empezar las pruebas,

el modo de uso es el siguiente:

en la ventana del chat del usuario que escogimos como destino haremos lo siguiente



Cualquier cosa me pueden dejar su comentario y si encuentran algun error favor de comentarmelo,

Les recuerdo que no soy muy bueno con la redaccion pero espero que les sirva

saludos y gracias

No hay comentarios: