check_bdd_request : Plugin Nagios tout terrain pour requêter des bases de données

Bonjour à tous, j'ai eu un besoin particulier concernant le monitoring en place au sein d'Opti-Time. du coup, ni une, ni deux après une brève recherche, je n'ai pas trouvé mon bonheur, alors hier soir , j'ai pris mes 2 mains et hop au boulot ! Ce fût rapide et vous le verrez il n'y a rien d'extraordinaire ! Mais voilà que ça a donnée naissance à un projet de plus : http://www.slobberbone.net/dotclear/index.php?pages/check_bdd_request

Je vous recopie la page ici même pour en faire profiter un maximum ;) !

Présentation

Ce projet est un projet sous licence GPL v2. Cette commande est un plugin pour Nagios 3.x, développé en PERL.

Son objectif est de permettre d’exécuter n'importe quelle requête à un serveur de base de données. Dans un premier temps, cela ne fonctionne qu'avec un serveur MySQL, mais ça ne doit aps être compliqué de faire ce qu'il faut pour PostgreSQL, Oracle, etc ...

Ce plugin permet 2 choses pour le moment :

  • Retourner une information dans Nagios sans qu'elle est un impact en terme d'alerte (check_type=TEXT). Le but est de remonter par exemple la version d'un logiciel stockée en base, ou tout autre indicateur quelconque qu'il soit un chiffre ou du texte.
  • Retourner un compteur de résultat de la requête SQL exécutée (check_type=NUMERIC). D'autres plugin Nagios font déjà ce travail, hors j'ai un premier besoin qui est de pouvoir lever une alerte alors que nous passons les seuils fixés, ou à l'inverse, lorsque la valeur n'atteint pas le seuil voulu. Parcourant le résultat, cette commande pourra très facilement être adaptée pour traiter des résultats plus complexes (prochaines versions).

Pour le reste, je vous laisse parcourir le fichier, tout doit être dedans ;)  et assez explicite ! Sinon, vous savez où me trouver ;)

Installation

Vous l'aurez compris, pour l'utiliser, il suffit d'un serveur Nagios (Installer Nagios sur CentOS sans RPM) sur lequel vous aurez installé les packages suivant :

# yum install perl perl-DBD-MySQL perl-DBI

Une fois fais, il ne vous reste qu'à placer check_bdd_request.pl dans le répertoire libexec de votre arborescence Nagios :

# chmod +x check_bdd_request.pl

Et voilà, le tour est joué !

$ perl check_bdd_request.pl --help

Check_MySQL_request for Nagios, version 1.0
GPL licence, (c)2013 Slobberbone

Site http://www.slobberbone.net

Usage: ./check_bdd_request.pl -H <host> -u <user> -p <password> -d <database> -P <port> -q request -t check_type -o <operator> [-w <warn_level> -c <crit_level> -T <timeout>] -V
-h, --help
print this help message
-H, --hostname=HOST
name or IP address of MySQL server
-u, --user=USER
mysql user to login
-p, --password=PASSWORD
mysql password
-d, --database=DATABASE
mysql database name
-P, --port=PORT
Http port
-q, --request="REQUEST"
Request to execute on the server
-t, --check_type=TYPE
Type of return :
NUMERIC,
TEXT
-o, --operator=OPERATOR
Operator :
EQ for =,
LT for <,
GT for >,
LE for <=,
GE for >=,
DIF for !=
-w, --warn=INTEGER
number that will cause a warning completed by the OPERATOR
-1 for no warning
-c, --critical=INTEGER
number that will cause an error completed by the OPERATOR
-T, --timeout=INTEGER
timeout in seconds (Default: 15)
-V, --version
prints version number
Note :
The script will return
* With warn and critical options:
OK if we are able to connect to the MySQL server and #request count result respect <warn_level>,
WARNING if we are able to connect to the MySQL server and #request count result unrespect <warn_level>,
CRITICAL if we are able to connect to the MySQL server and #request count result unrespect <crit_level>,
UNKNOWN if we aren't able to connect to the MySQL server

Configuration

Pour que ce plugin soit opérationnel avec notre serveur de supervision Nagios (ou Shinken), il faut ajouter dans le fichier commands.cfg :

# 'check_bdd_request_numeric' command definition
define command{
    command_name    check_bdd_request_numeric
    command_line    $USER1$/check_bdd_request.pl -H $HOSTADDRESS$ -u $ARG1$ -p $ARG2$ -d $ARG3$ -P $ARG4$ -q $ARG5$ -t $ARG6$ -o $ARG7$ -w $ARG8$ -c $ARG9$
    }

# 'check_bdd_request_text' command definition
define command{
    command_name    check_bdd_request_text
    command_line    $USER1$/check_bdd_request.pl -H $HOSTADDRESS$ -u $ARG1$ -p $ARG2$ -d $ARG3$ -P $ARG4$ -q $ARG5$ -t $ARG6$
    }

Puis, il ne vous reste plus qu'à l'appeler de la manière suivante :

define service{
    use            generic-service
    host_name        my_bdd_server
    service_description    A text value for display information like a version for example
    check_command        check_bdd_request_text!user!password!database!3307!"Select column_name from my table where row_text='value'"!TEXT
    normal_check_interval    60
}

define service{
    use            generic-service
    host_name        my_bdd_server
    service_description    A numeric value for display information and compare with operator to the Warning or Critical values
    check_command        check_bdd_request_text!user!password!database!3307!"Select column_name from my table where row_text='value'"!NUMERIC!LT!2!5
    normal_check_interval    60
}

Et voilà, il ne reste plus qu'à modifier ce projet pour vos propres besoins ! Pour ça, direction SourceForge.net !
Pour le reste, les commentaires sont ouverts sur la page du projet !
Vus : 2346
Publié par Slobberbone : 81