string(14) "attribute >>>>" array(0) { }

Monitorización de Bases de Datos con Nagios

string(14) "attribute >>>>" array(5) { ["width"]=> int(400) ["height"]=> int(195) ["file"]=> string(21) "2013/08/Imagen121.png" ["sizes"]=> array(2) { ["thumbnail"]=> array(4) { ["file"]=> string(21) "Imagen121-150x150.png" ["width"]=> int(150) ["height"]=> int(150) ["mime-type"]=> string(9) "image/png" } ["medium"]=> array(4) { ["file"]=> string(21) "Imagen121-300x146.png" ["width"]=> int(300) ["height"]=> int(146) ["mime-type"]=> string(9) "image/png" } } ["image_meta"]=> array(10) { ["aperture"]=> int(0) ["credit"]=> string(0) "" ["camera"]=> string(0) "" ["caption"]=> string(0) "" ["created_timestamp"]=> int(0) ["copyright"]=> string(0) "" ["focal_length"]=> int(0) ["iso"]=> int(0) ["shutter_speed"]=> int(0) ["title"]=> string(0) "" } } array(5) { ["width"]=> int(550) ["height"]=> int(179) ["file"]=> string(21) "2013/08/Imagen131.png" ["sizes"]=> array(2) { ["thumbnail"]=> array(4) { ["file"]=> string(21) "Imagen131-150x150.png" ["width"]=> int(150) ["height"]=> int(150) ["mime-type"]=> string(9) "image/png" } ["medium"]=> array(4) { ["file"]=> string(20) "Imagen131-300x97.png" ["width"]=> int(300) ["height"]=> int(97) ["mime-type"]=> string(9) "image/png" } } ["image_meta"]=> array(10) { ["aperture"]=> int(0) ["credit"]=> string(0) "" ["camera"]=> string(0) "" ["caption"]=> string(0) "" ["created_timestamp"]=> int(0) ["copyright"]=> string(0) "" ["focal_length"]=> int(0) ["iso"]=> int(0) ["shutter_speed"]=> int(0) ["title"]=> string(0) "" } } array(5) { ["width"]=> int(550) ["height"]=> int(31) ["file"]=> string(21) "2013/08/Imagen141.png" ["sizes"]=> array(2) { ["thumbnail"]=> array(4) { ["file"]=> string(20) "Imagen141-150x31.png" ["width"]=> int(150) ["height"]=> int(31) ["mime-type"]=> string(9) "image/png" } ["medium"]=> array(4) { ["file"]=> string(20) "Imagen141-300x16.png" ["width"]=> int(300) ["height"]=> int(16) ["mime-type"]=> string(9) "image/png" } } ["image_meta"]=> array(10) { ["aperture"]=> int(0) ["credit"]=> string(0) "" ["camera"]=> string(0) "" ["caption"]=> string(0) "" ["created_timestamp"]=> int(0) ["copyright"]=> string(0) "" ["focal_length"]=> int(0) ["iso"]=> int(0) ["shutter_speed"]=> int(0) ["title"]=> string(0) "" } } array(0) { }
news and informations automotive,business,crime,health,life,politics,science,technology,travelautomotive,business,crime,health,life,politics,science,technology,travel

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:

Imagen12

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.

Imagen13

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:

Imagen14

 

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.