Monitorización del sistema con Monit
Monitorizar tu servidor linux es una de las tareas mas importantes, interesante y apasionantes que puedes hacer. Una vez consigurado tu sistema, ¿quién te dice que los servicios que has instalado estan funcionando en todo momento?. ¿Cómo puedes saber si un servicio está sobrecargando la memoria o la CPU?
Pues bien, existen programas muy buenos para esto, CACTI, Nagios y Monit, entre otros. He probado Nagios y Monit y me quedo con este ultimo por su sencillez aunque Nagios es extremadamente potente y por tanto tendrá mas posibilidades: seguro.
Mi filosofía hasta ahora ha sido la de cubrir la necesidad con un software sencillo y cuando dicha necesidad ya está cubierta se puede profundizar en un programa más potente.
La configuración de Monit es sencilla y su instalación más sencilla todavia. Para instalarlo en nuestro sistema Ubuntu:
# apt-get install monit
Por defecto, monit no se ejecuta al inicio como medida de seguridad y viene con sus opción comentadas de tal forma que hasta que no lo configuremos nada funcionará.
Para que arranque en el inicio debemos cambiar la propiedad startup=0 a startup=1 que se encuentra en el fichero /etc/default/monit.
Una vez hecho esto pasamos a la configuración del fichero /etc/monit/monitrc.
Para poder explicar cómodamente las principales opción del fichero voy a mostrar aquí mi configuración para que pueda servir de ejemplo y agregaré comentarios:
############################################################################### ## Monit control file set daemon 120 set logfile syslog facility log_daemon set eventqueue basedir /var/monit # set the base directory where events will be stored slots 100 # optionaly limit the queue size
set mail-format { from: [email protected] } set alert [email protected] # receive all alerts set alert [email protected] only on { timeout } # receive just service- set httpd port 2812 ##Activo el acceso desde la web allow localhost # allow localhost to connect to the server and allow monit:clave # require user 'admin' with password 'monit' allow 11.11.111.112 ##Si vas a acceder desde otra ip pública allow 192.168.0.0/255.255.255.0 ##Permito el acceso desde mi red local ############################################################################### ## Services ############################################################################### ##Cheque del sistema en el que está instalado monit check system obelix.digital21.info if loadavg (1min) > 4 then alert if loadavg (5min) > 2 then alert if memory usage > 75% then alert if cpu usage (user) > 70% then alert if cpu usage (system) > 30% then alert if cpu usage (wait) > 20% then alert
##Chequeo de sistemas remotos (otros equipos) ##asterix es el alias que le damos a asterix.homelinux.net que puede ser también ##una ip pública check host asterix with address asterix.homelinux.net if failed icmp type echo count 3 with timeout 3 seconds then alert if failed port 22 protocol ssh with timeout 15 seconds then alert if failed port 80 with timeout 15 seconds then alert
##Chequeo del mysql instalado en mi servidor
check process mysql with pidfile /var/run/mysqld/mysqld.pid group database start program = "/etc/init.d/mysql start" stop program = "/etc/init.d/mysql stop" if failed host localhost port 3306 protocol mysql then restart if 5 restarts within 5 cycles then timeout
##Chequeo de mi Webmin
check process webmin with pidfile /var/webmin/miniserv.pid
group webmin
start program = "/etc/init.d/webmin start"
stop program = "/etc/init.d/webmin stop"
if failed host localhost port 10000 then restart
if 5 restarts within 5 cycles then timeout
##Chequeo de mi servidor ftp check process vsftpd with pidfile /var/run/vsftpd/vsftpd.pid start program = "/etc/init.d/vsftpd start" stop program = "/etc/init.d/vsftpd stop" if failed port 21 protocol ftp then restart if 5 restarts within 5 cycles then timeout
##Chequeo de mi servidor ssh check process sshd with pidfile /var/run/sshd.pid start program "/etc/init.d/ssh start" stop program "/etc/init.d/ssh stop" if failed port 22 protocol ssh then restart if 5 restarts within 5 cycles then timeout
##Chequeo de mi servidor samba check process smbd with pidfile /var/run/samba/smbd.pid group samba start program = "/etc/init.d/samba start" stop program = "/etc/init.d/samba stop" if failed host localhost port 139 type TCP then restart if 5 restarts within 5 cycles then timeout depends on smbd_bin
check file smbd_bin with path /usr/sbin/smbd group samba if failed checksum then unmonitor if failed permission 755 then unmonitor if failed uid root then unmonitor if failed gid root then unmonitor
check process nmbd with pidfile /var/run/samba/nmbd.pid group samba start program = "/etc/init.d/samba start" stop program = "/etc/init.d/samba stop" if failed host localhost port 138 type UDP then restart if failed host localhost port 137 type UDP then restart if 5 restarts within 5 cycles then timeout depends on nmbd_bin
check file nmbd_bin with path /usr/sbin/nmbd group samba if failed checksum then unmonitor if failed permission 755 then unmonitor if failed uid root then unmonitor if failed gid root then unmonitor
Esta configuración no tiene por qué ser perfecta, pero es la que yo uso en el momento de escribir esto. Monit da mas posibilidades. Te sugiero que las busques en su documentación de esta página web.
Por último, una vez configurado nuestro fichero monitrc, podemos comprobar su sintaxis con:
/etc/monit/#: /etc/init.d/monit syntax
y para ponerlo en marcha:
# /etc/init.d/monit start
Espero que te sirva.