Monitorización de Bases de Datos con Nagios
En los posts anteriores de la serie hemos visto con cierto detalle el proceso de instalación y configuración de Nagios. Ahora vamos a presentar un caso concreto de monitorización y que tiene cierta complejidad, la monitorización de Bases de Datos.
Muchas de las aplicaciones actuales utilizan una base de datos relacional (RDBMS) como su almacén de datos. Las bases de datos relacionales optimizan las operaciones transaccionales rápidas y permiten crear vistas de datos globales mediante la consulta de datos organizados. Como las aplicaciones dependen de estas bases de datos, su “salud” es crítica. Por lo general, las empresas dedican personal especializado, DBAs, para este trabajo.
Una forma de aliviar las tareas rutinarias y mejorar la resolución de problemas, es llevar el control de la base de datos con una herramienta como Nagios.
El tipo más básico de monitorización de bases de datos se implementa mediante el uso del plugin incluido en Nagios ‘check_tcp’ para verificar si el puerto de red de la base de datos está activo.
La mayoría de las bases de datos abren un puerto TCP en la interfaz de red para proporcionar acceso a las aplicaciones o a consultas manuales. A continuación se muestra una lista de DBs y sus puertos de red predeterminados:
La comprobación de puertos de red tiene defectos. Por ejemplo con Oracle, la de conectividad de la base de datos se proporciona con un proceso independiente (listener).
Cuando la comprobación del puerto de red confirma que el listener está activo, la propia base de datos podría estar caída.
También, comprobando sólo el puerto no hay manera de determinar si una base de datos tiene problemas internos y si un usuario podría trabajar.
El siguiente nivel de monitorización de la base de datos es llevar a cabo un inicio de sesión real. Esto comprueba no sólo si el puerto de red de la base de datos está a la escucha, sino también que la instancia de base de datos particular está en funcionamiento y que el inicio de sesión es posible. Los plugins de nagios, incluidos por defecto, check_oracle y check_mysql (nagios-plugins 1.4.14) pueden hacer tal verificación.
Monitorización de MySQL
Veamos un ejemplo de cómo usar check_mysql:
Para esta monitorización vamos a crear un usuario “nagios” en mysql, con permiso de lectura y que se podrá conectar desde cualquier IP a la base de datos “mysql“:
root@centreon:~# mysql -u root
mysql> GRANT select ON mysql.* TO ‘nagios’@’%’ IDENTIFIED BY ‘nagios’;
mysql> flush privileges;
mysql> quit
Podemos probar el plugin sin haber definido el comando en Nagios (en este caso 192.168.1.200 es la IP del servidor MySQL):
# ./check_mysql -d mysql -H 192.168.1.200 -u nagios -p nagios
Uptime: 4420 Threads: 3 Questions: 181396 Slow queries: 0 Opens: 305 Flush tables: 1 Open tables: 62 Queries per second avg: 41.040
Definimos el comando en el servidor Nagios:
# 'check_mysql'
define command{
command_name check_mysql
command_line $USER1$/check_mysql -H $HOSTADDRESS$ $ARG1$
}
Y definimos el servicio para el host en el que se encuentra la base de datos:
#Servicio para monitorizar la base de datos “mysql"
define service{
use generic-service
host_name mysqlserver
service_description BD_Test
check_command check_mysql!-d mysql -H $HOSTADDRESS$ -u nagios -p nagios
}
Comprobamos la sintaxis con “nagios –v” y reiniciamos el servicio:
Monitorización de MSSQL
Si queremos monitorizar una base de datos SQL Server, tendremos que descargar el plugin adecuado y copiarlo al directorio /usr/local/nagios/libexec:
http://exchange.nagios.org/components/com_mtree/attachment.php?link_id=497&cf_id=24
Damos permiso de ejecución al plugin y lo probamos antes de definir el servicio en Nagios:
# ./check_mssql -H 192.168.10.2 -U sa -P password123
Si todo ha ido bien ya podemos definir el comando:
define command{
command_name check_mssql
command_line $USER1$/check_mssql -H $HOSTADDRESS$ $ARG1$
}
Y el servicio:
#Servicio para monitorizar SQLServer
define service{
use generic-service
host_name mssqlserver
service_description MS SQL Server
check_command check_mssql!-U sa -P password123
}
Monitorización de Oracle
En el conjunto estándar de plugins de Nagios tenemos uno para monitorizar bases de datos Oracle, “check_oracle”, pero sólo sirve para monitorizar bases de datos locales. Para monitorizar una base de datos remota tendríamos que hacer uso de NRPE para ejecutar este plugin en la máquina remota y que nos remitiera la información.
Otra opción es descargar un plugin que nos permita la monitorización de máquinas remotas, como “check_oracle_health”:
# wget http://labs.consol.de/wp-content/uploads/2011/09/check_oracle_health-1.7.3.tar.gz
Una vez descargado descomprimimos e instalamos:
# tar -zxvf check_oracle_health-1.7.3.tar.gz
# cd check_oracle_health-1.7.3
# ./configure
# make
# cp plugins-scripts/check_oracle_health /usr/lib/nagios/libexec/
El plugin nos permite comprobar una multitud de parámetros y cual queremos comprobar se lo indicamos en el parámetro –mode:
http://labs.consol.de/nagios/check_oracle_health/
Definimos el comando:
# Comprobamos el estado del oracle
define command{
command_name check_oracle_instant
command_line $USER1$/check_oracle_health –user $ARG3$ –password $ARG4$ –method sqlplus –connect ‘(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=$HOSTADDRESS$)(PORT=$ARG1$))(CONNECT_DATA=(SID=$ARG2$)))’ –mode tnsping –environment ORACLE_HOME=/programas/instantclient_11_2
}
Y el servicio:
define service{
host_name servidororacle
service_description ORACLE: check_login_health
check_command check_oracle_instant!1521!SID!USERNAME!PASSWORD
max_check_attempts 5
check_interval 5
retry_interval 3
check_period 24×7
notification_interval 30
notification_period 24×7
notification_options w,c,r
contact_groups USER
Con este post damos por finalizada la serie dedicada a Nagios. Espero que haya sido de interés.