NAGIOS – Supervision des BDD

Supervision des bases de données

1. Contrôle d’un serveur MySQL

MySQL est un système de gestion de bases de données relationnelles (abrégé SGBDR) gratuit, populaire et très utilisé aujourd’hui pour stocker les données des applications web surtout celles qui sont basées sur PHP. Le serveur MySQL est une application qui fonctionne sur le port 3306 par défaut. Nagios propose deux sondes pour contrôler un serveur MySQL. La première qui est nommée check_mysql, permet de contrôler l’état du serveur MySQL lui-même en vérifiant la connectivité à la base de données. La deuxième qui est nommée check_mysql_query, s’intéresse à contrôler le temps d’exécution d’une requête SQL par rapport à un seuil bien défini.

Commençons d’abord par contrôler l’état du serveur MySQL en utilisant le plugin check_mysql. Voici la syntaxe de ce plugin :

check_mysql [-H host] [-d database] [-P port]  
[-u user] [-p password] [-S] [-n] [-l]

Ce plugin accepte les options suivantes :

  • -H, –hostname : cette option spécifie le nom ou l’adresse IP d’hôte.

  • -P, –port : cette option spécifie le numéro de port à utiliser. Par défaut, c’est le port  3306.

  • -d, –database : cette option spécifie le nom de la base de données à contrôler.

  • -u, –username : cette option spécifie le nom d’utilisateur pour se connecter.

  • -p, –password : cette option spécifie le mot de passe de cet utilisateur.

  • -S, –check-slave : cette option permet de vérifier si le serveur esclave fonctionne correctement.

  • -n, –ignore-auth : cette option permet d’ignorer l’échec de l’authentification et vérifier seulement la connectivité mysql.

  • -l, –ssl : cette option permet d’utiliser le cryptage SSL.

Un exemple d’utilisation de ce plugin est le suivant : nous allons essayer à travers l’exemple ci-dessous d’utiliser le plugin check_mysql pour contrôler un serveur MySQL à distance avec un compte utilisateur possèdant uniquement les droits SELECT sur la base de données.

check_mysql -H serveurdb -u nagios -p password -d applicationBD 
 
Uptime: 1316 Threads: 1 Questions: 1257 Slow queries: 0 Opens: 25 Flush 
tables: 1 Open tables: 19 Queries per second avg: 0.955

La commande nous renvoie beaucoup d’informations qui peuvent être utiles pour contrôler ou optimiser les performances du serveur MySQL. Parmi ces informations, nous trouvons le nombre de requêtes lentes « Slow queries » qui ont pris beaucoup de temps pour s’exécuter. Aussi, nous trouvons le paramètre « Queries per second » qui correspond au nombre de requêtes que le serveur base de données accepte de traiter par seconde.

Après le test effectué, nous allons maintenant définir une commande Nagios utilisant le plugin check_mysql.

define command{ 
        command_name     check_mysql 
        command_line     $USER1$/check_mysql -H $HOSTADDRESS$   -u $ARG1$ 
-p $ARG2$ -d $ARG3$ 
        }

Passons maintenant au deuxième plugin check_mysql_query pour améliorer la supervision du serveur MySQL. check_mysql_query permet de contrôler la durée d’exécution d’une requête SQL passée en argument sur la base de données. Ce plugin peut être utilisé de cette façon :

check_mysql_query -q SQL_query [-w <warn>] [-c <crit>] 
                 [-d database] [-H host] [-P port]  
                 [-s socket] [-u user] [-p password]

Voici les options de check_mysql_query :

  • -H, –hostname : cette option spécifie le nom ou l’adresse IP d’hôte.

  • -d, –database : cette option spécifie le nom de la base de données à contrôler.

  • -P, –port : cette option spécifie le numéro de port à utiliser. Par défaut, c’est le port 3306.

  • -q, –query : cette option spécifie la requête SQL à exécuter.

  • -u, –username : cette option spécifie le nom d’utilisateur pour se connecter.

  • -p, –password : cette option spécifie le mot de passe de cet utilisateur.

  • -w, –warning : cette option spécifie l’intervalle d’avertissement sous le format début:fin. Une alerte sera déclenchée si la durée de l’exécution de la requête SQL est en dehors de cette plage.

  • -c, –critical : cette option spécifie l’intervalle critique sous le format: début:fin. Une alerte sera déclenchée si la durée de l’exécution de la requête SQL est en dehors de cette plage.

Nous pouvons désormais définir la commande Nagios résultante check_mysql_query suivante :

define command{ 
   command_name           check_mysql_query 
   command_line           $USER1$/check_mysql_query -H $HOSTADDRESS$ -u  
$ARG1$ -p ARG2$ -d $ARG3$ -q $ARG4$ -w $ARG5$ -c $ARG6$ 
}

2. Contrôle d’un serveur PostgreSQL

PostgreSQL est un autre système de gestion de bases de données relationnelles libres et concurrent à d’autres systèmes comme MySQL. Le serveur PostgreSQL écoute sur le port 5432 par défaut. Nagios propose le plugin check_pgsql pour contrôler le bon fonctionnement d’un serveur PostgreSQL. La syntaxe de ce plugin est assez similaire à la syntaxe du plugin check_mysql :

check_pgsql  [-H <host>] [-P <port>] 
             [-w <warn>] [-c <crit>] 
             [-t <timeout>] [-d <database>] 
             [-l <logname>] [-p <password>]

Les options supportées sont :

  • -H, –hostname : cette option spécifie le nom ou l’adresse IP d’hôte.

  • -d, –database : cette option spécifie le nom de la base de données à contrôler.

  • -P, –port : cette option spécifie le numéro de port à utiliser. Par défaut, c’est le port 5432.

  • -l, –logname : cette option spécifie le nom d’utilisateur pour se connecter.

  • -p, –password : cette option spécifie le mot de passe pour s’authentifier à la connexion.

  • -w, –warning : cette option spécifie l’intervalle d’avertissement en secondes.

  • -c, –critical : cette option spécifie l’intervalle critique en secondes.

  • -t, –timeout : cette option spécifie la période de temps en secondes avant l’expiration de la connexion. Par défaut : 10.

Ce qui suit est un exemple d’utilisation du plugin check_pgsql pour tester la connexion à une base de données PostgreSQL. Il y aura un avertissement si le temps de connexion est de 5 secondes ou plus et une critique s’il est de 10 secondes ou plus :

./check_pgsql --hostname localhost --port 5432 --database testdb -logname admin 
--password admintestDB --warning 5 --critical 10  
 
OK - database testdb (0 sec.)|time=0.000000s;5.000000;10.000000;0.000000

Le résultat retourné prouve qu’au moins une connexion est disponible dans sur le serveur PostgreSQL.

Maintenant que nous avons fait le test avec la ligne de la commande avec check_pgsql, nous allons créer la commande Nagios correspondante :

define command{ 
   command_name       check_pgsql 
   command_line       $USER1$/check_pgsql -H $HOSTADDRESS$ -l $ARG1$ -p 
$ARG2$ -d $ARG3$ -w $ARG4$ -c $ARG5$ 
}

3. Contrôle d’un serveur Oracle

Oracle est un serveur de base de données populaire au niveau des entreprises édité par la société du même nom (Oracle Corporation – http://www.oracle.com), leader mondial de bases de données.

Généralement, ce type de base de données est beaucoup utilisé par les grandes entreprises pour sauvegarder des données critiques. Par conséquent, un échec, ou même un manque d’espace disque, pour une seule base de données pourrait causer d’énormes problèmes pour une entreprise. L’accès à la base des données Oracle se fait à travers un module d’écoute (LISTENER). Le listener Oracle est un service réseau TCP/IP utilisé pour accéder à la base de données. Son port par défaut est 1521.

Nagios propose un plugin nommé check_oracle permettant de vérifier et contrôler les différents aspects de la base de données Oracle comme la connexion, le stockage de tablespace et le taux d’utilisation de la mémoire cache. Ce plugin peut être utilisé de cette façon :

  check_oracle  --tns <Oracle Sid or Hostname/IP address> 
                --db <ORACLE_SID> 
                --login <ORACLE_SID> 
                --connect <ORACLE_SID> 
                --cache <ORACLE_SID> <USER> <PASS> <CRITICAL> <WARNING> 
                --tablespace <ORACLE_SID> <USER> <PASS> <TABLESPACE>  
                <CRITICAL> <WARNING> 
                --oranames <Hostname>

Les options proposées par ce plugin ne sont pas nombreuses, à savoir :

  • –tns : cette option permet de vérifier si une base de données locale ou distante est à l’écoute pour une connexion basée sur la commande tnsping.

  • –db : cette option permet de vérifier l’état de la base de données locale.

  • –oranames : cette option permet de vérifier l’état de la base de données distante.

  • –login : cette option permet de tenter une connexion factice et alerte sinon ORA-01017: invalid nom d’utilisateur / mot de passe.

  • –connect : cette option permet de tenter une connexion et alerte si une erreur est retournée.

  • –cache : cette option permet de vérifier l’utilisation du cache de la base de données.

  • –tablespace : cette option permet de vérifier la base de données locale pour la capacité de tablespace.

Pour que le plugin check_oracle fonctionne correctement, il faut installer un client Oracle sur la machine qui effectuera les contrôles pour la base de données Oracle. Nous allons maintenant définir des exemples de commandes simples pour vérifier la connexion dans la base de données Oracle et le cache de base de données.

define command{ 
   command_name            check_oracle_connexion 
   command_line            $USER1$/check_oracle --login $HOSTADDRESS$ 
}

La deuxième commande nécessite de spécifier un nom de base de données, nom d’utilisateur, mot de passe, et les limites critiques et avertissement. La valeur critique doit être inférieure à la valeur d’avertissement.

define command{ 
    command_name        check_oracle_cache 
    command_line        $USER1$/check_oracle -cache $HOSTADDRESS$ $ARG1$ 
$ARG2$ $ARG3$ $ARG4$ $ARG5$ 
}