May 26, 2009

Monitorización de servicios con mon (II)

En el artículo anterior del Sistema de Alta Disponibilidad y Balanceo de Carga que venimos desarrollando, se expusieron las características principales del demonio mon.

En este segundo artículo vamos a presentar los ficheros de configuración de mon para los cuatro nodos del cluster. Lo primero que vamos a hacer es instalar los paquetes mon (versión 0.99.2) y sendmail (versión 8.14.3) en las cuatro máquinas:

~# aptitude install mon sendmail

A continuación vamos a editar los ficheros de configuración de mon (/etc/mon/mon.cf) en los dos nodos frontales, HA1 y HA2. Para estos dos nodos, mon únicamente comprobará el estado del servicio ndb_mgmd.

root@ha1:~# cat /etc/mon/mon.cf
# Directorio donde residen los ficheros de mon

cfbasedir = /etc/mon

# Directorio donde residen los scripts de alerta
alertdir = /usr/lib/mon/alert.d

# Directorio donde residen los scripts de monitorización
mondir = /usr/lib/mon/mon.d

# Número máximo de procesos que tendrá el monitor
maxprocs = 20

# Número de eventos que serán guardados en el fichero de históricos
histlength = 100

# Tiempo aleatorio (de 0 a 60sg) transcurrido el cual, se arrancará el monitor
randstart = 60s

# Grupo de máquinas a monitorizar
hostgroup ha1 192.168.1.10

# Grupo a monitorizar
watch ha1

# Servicio a monitorizar
service ndb_mgmd

# Intervalo de monitorización
interval 30s

# Script empleado para monitorizar
monitor tcp.monitor -p 1186

# Periodo de monitorización
period wd {Mon-Sun}

# Enviar un correo electrónico en caso de caída del servicio
alert mail.alert -S "[ha1] ndb_mgmd off"
my_mail@gmail.com

# Reiniciar servicio/reiniciar máquina/apagar máquina
alert service_down.alert "/etc/init.d/mysql-ndb-mgm restart" /var/log/mon/mysql-ndb-mgm_status

# Reiniciar el estado del servicio (pasar a "on")
upalert service_up.alert /var/log/mon/mysql-ndb-mgm_status

# Enviar un correo electrónico en caso de recuperación del servicio
upalert mail.alert -S "[ha1] ndb_mgmd on" my_mail@gmail.com

Y para el nodo HA2:

root@ha2:~# cat /etc/mon/mon.cf
# Directorio donde residen los ficheros de mon

cfbasedir = /etc/mon

# Directorio donde residen los scripts de alerta
alertdir = /usr/lib/mon/alert.d

# Directorio donde residen los scripts de monitorización
mondir = /usr/lib/mon/mon.d

# Número máximo de procesos que tendrá el monitor
maxprocs = 20

# Número de eventos que serán guardados en el fichero de históricos
histlength = 100

# Tiempo aleatorio (de 0 a 60sg) transcurrido el cual, se arrancará el monitor
randstart = 60s

# Grupo de máquinas a monitorizar
hostgroup ha2 192.168.1.11

# Grupo a monitorizar
watch ha2

# Servicio a monitorizar
service ndb_mgmd

# Intervalo de monitorización
interval 30s

# Script empleado para monitorizar
monitor tcp.monitor -p 1186

# Periodo de monitorización
period wd {Mon-Sun}

# Enviar un correo electrónico en caso de caída del servicio
alert mail.alert -S "[ha2] ndb_mgmd off"
my_mail@gmail.com

# Reiniciar servicio/reiniciar máquina/apagar máquina
alert service_down.alert "/etc/init.d/mysql-ndb-mgm restart" /var/log/mon/mysql-ndb-mgm_status

# Reiniciar el estado del servicio (pasar a "on")
upalert service_up.alert /var/log/mon/mysql-ndb-mgm_status

# Enviar un correo electrónico en caso de recuperación del servicio
upalert mail.alert -S "[ha2] ndb_mgmd on" my_mail@gmail.com

La opción randstart se utiliza para aleatorizar el lanzamiento del primer test durante el arranque de la máquina (el test comenzará inicialmente, transcurrido un tiempo entre cero y el valor de randstart).

Como puede observarse, se han declarado grupos de monitorización (ha1 y ha2) sobre los cuales se comprobarán una serie de servicios (ndb_mgmd). Cada uno de los vigilantes serán definidos mediante el parámetro watch. Dentro de cada vigilante se establecerán los servicios a controlar (service). El periodo de muestreo se configurará mediante los parámetros interval (30 sg) y period (toda la semana). En caso de caída de un servicio, lanzaremos sendas alertas (alert), y cuando éste se recupere, se ejecutarán dos scripts (upalert).

Los scripts de parada (service_down.alert) y arranque (service_up.alert) los programaremos a través de comandos del bash y serán comunes para todos los nodos del cluster (estos ficheros serán analizados en el siguiente artículo).

A continuación vamos a ver los ficheros de configuración de mon para los dos nodos traseros (LB1 y LB2). En estas dos máquinas, mon comprobará el estado de los servicios http, ftp, glusterfs, mysql y ndbd.

root@lb1:~# cat /etc/mon/mon.cf
# Directorio donde residen los ficheros de mon

cfbasedir = /etc/mon

# Directorio donde residen los scripts de alerta
alertdir = /usr/lib/mon/alert.d

# Directorio donde residen los scripts de monitorización
mondir = /usr/lib/mon/mon.d

# Número máximo de procesos que tendrá el monitor
maxprocs = 20

# Número de eventos que serán guardados en el fichero de históricos
histlength = 100

# Tiempo aleatorio (de 0 a 60sg) transcurrido el cual, se arrancará el monitor
randstart = 60s

# Grupo de máquinas a monitorizar
hostgroup lb1 127.0.0.1

# Grupo a monitorizar
watch lb1

# Servicio a monitorizar
service http
interval 30s
monitor http.monitor -u /index.html
period wd {Mon-Sun}
alert mail.alert -S "[lb1] Apache off" my_mail@gmail.com
alert service_down.alert "/etc/init.d/apache2 restart" /var/log/mon/apache2_status
upalert service_up.alert /var/log/mon/apache2_status
upalert mail.alert -S "[lb1] Apache on" my_mail@gmail.com

# Servicio a monitorizar
service ftp
interval 30s
monitor ftp.monitor
period wd {Mon-Sat}
alert mail.alert -S "[lb1] vsftpd off" my_mail@gmail.com
alert service_down.alert "/etc/init.d/vsftpd restart" /var/log/mon/vsftpd_status
upalert service_up.alert /var/log/mon/vsftpd_status
upalert mail.alert -S "[lb1] vsftpd on" my_mail@gmail.com

# Servicio a monitorizar
service glusterfs
interval 30s
monitor tcp.monitor -p 6996
period wd {Mon-Sat}
alert mail.alert -S "[lb1] glusterfs off" my_mail@gmail.com
alert service_down.alert "/etc/init.d/glusterfs-server restart" /var/log/mon/glusterfs_status
upalert service_up.alert /var/log/mon/glusterfs_status
upalert mail.alert -S "[lb1] glusterfs on" my_mail@gmail.com

# Servicio a monitorizar
service mysql
interval 30s
monitor msql-mysql.monitor --mode mysql --username=root --password=javier1 --database=clustertest
period wd {Mon-Sat}
alert mail.alert -S "[lb1] mysql off" my_mail@gmail.com
alert service_down.alert "/etc/init.d/mysql restart" /var/log/mon/mysql_status
upalert service_up.alert /var/log/mon/mysql_status
upalert mail.alert -S "[lb1] mysql on" my_mail@gmail.com

# Servicio a monitorizar
service ndbd
interval 30s
monitor proc.monitor ndbd
period wd {Mon-Sat}
alert mail.alert -S "[lb1] ndbd off" my_mail@gmail.com
alert service_down.alert "/etc/init.d/mysql-ndb restart" /var/log/mon/ndbd_status
upalert service_up.alert /var/log/mon/ndbd_status
upalert mail.alert -S "[lb1] ndbd on" my_mail@gmail.com

Y para el nodo LB2:

root@lb2:~# cat /etc/mon/mon.cf
# Directorio donde residen los ficheros de mon
cfbasedir = /etc/mon

# Directorio donde residen los scripts de alerta
alertdir = /usr/lib/mon/alert.d

# Directorio donde residen los scripts de monitorización
mondir = /usr/lib/mon/mon.d

# Número máximo de procesos que tendrá el monitor
maxprocs = 20

# Número de eventos que serán guardados en el fichero de históricos
histlength = 100

# Tiempo aleatorio (de 0 a 60sg) transcurrido el cual, se arrancará el monitor
randstart = 60s

# Grupo de máquinas a monitorizar
hostgroup lb2 127.0.0.1

# Grupo a monitorizar
watch lb2

# Servicio a monitorizar
service http
interval 30s
monitor http.monitor -u /index.html
period wd {Mon-Sun}
alert mail.alert -S "[lb2] Apache off" my_mail@gmail.com
alert service_down.alert "/etc/init.d/apache2 restart" /var/log/mon/apache2_status
upalert service_up.alert /var/log/mon/apache2_status
upalert mail.alert -S "[lb2] Apache on" my_mail@gmail.com

# Servicio a monitorizar
service ftp
interval 30s
monitor ftp.monitor
period wd {Mon-Sat}
alert mail.alert -S "[lb2] vsftpd off" my_mail@gmail.com
alert service_down.alert "/etc/init.d/vsftpd restart" /var/log/mon/vsftpd_status
upalert service_up.alert /var/log/mon/vsftpd_status
upalert mail.alert -S "[lb2] vsftpd on" my_mail@gmail.com

# Servicio a monitorizar
service glusterfs
interval 30s
monitor tcp.monitor -p 6996
period wd {Mon-Sat}
alert mail.alert -S "[lb2] glusterfs off" my_mail@gmail.com
alert service_down.alert "/etc/init.d/glusterfs-server restart" /var/log/mon/glusterfs_status
upalert service_up.alert /var/log/mon/glusterfs_status
upalert mail.alert -S "[lb2] glusterfs on" my_mail@gmail.com

# Servicio a monitorizar
service mysql
interval 30s
monitor msql-mysql.monitor --mode mysql --username=root --password=javier1 --database=clustertest
period wd {Mon-Sat}
alert mail.alert -S "[lb2] mysql off" my_mail@gmail.com
alert service_down.alert "/etc/init.d/mysql restart" /var/log/mon/mysql_status
upalert service_up.alert /var/log/mon/mysql_status
upalert mail.alert -S "[lb2] mysql on" my_mail@gmail.com

# Servicio a monitorizar
service ndbd
interval 30s
monitor proc.monitor ndbd
period wd {Mon-Sat}
alert mail.alert -S "[lb2] ndbd off" my_mail@gmail.com
alert service_down.alert "/etc/init.d/mysql-ndb restart" /var/log/mon/ndbd_status
upalert service_up.alert /var/log/mon/ndbd_status
upalert mail.alert -S "[lb2] ndbd on" my_mail@gmail.com

No comments:

Post a Comment