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
Hola…. me da este error
MSSQL support is not installed on this server.
Hola Saúl,
check_mssql es un pluging basado en php que accede a MSSQL. Hay que instalar un driver que se llama freeTDS.
Después hay que compilar PHP con –with-mssql=/path/to/freetds. Follow us!
http://ivan.rico.org.mx/?p=885