Introduction
Cela fait un bon moment que j'avais envie de superviser mes scripts de backup via un check passif sur nagios et faute de temps, j'avais repousser cela à plus tard... Jusqu'à hier ou j'ai enfin pris le temps de lire la doc et de mettre en place ce type de check dans nagios via nsca-ng. Pour commencer, un check passif, contrairement à un check actif qu'on rencontre habituellement sur nagios est tout simplement un check qui est envoyé depuis le serveur supervisé vers le serveur de supervision.
Dans ce tutoriel, je vais utiliser nsca-ng, il s'agit de la nouvelle version de nsca qui commençait un peu à dater. Il existe également le plugin nrdp qui lui aussi commence à bien dater. Dans ce tutoriel, je vais utiliser Debian jessie en tant que serveur et client. J'utilise nagios et nsca-ng en version packagée. De ce fait, les chemins des fichiers seront très probablement différents si vous avez installé nagios depuis les sources.
Configuration du serveur
Pour commencer, on installe le paquet nsca-ng-server :
root@sup1:~# apt-get install nsca-ng-server
Il faut ensuite configurer le démon qui sera lancé sur le serveur via le fichier /etc/nsca-ng/nsca-ng.local.cfg.
Le principe de fonctionnement de nsca-ng est assez basique. On autorise un utilisateur à communiquer avec le démon et on accorde plus ou moins de droits à cet utilisateur. Dans mon exemple, je crée un utilisateur mysql_backup avec le mot de passe infogerance-linux (oui je place des mots clés de cette façon pour mon ami google 😆) qui a le droit de modifier le service MYSQL_BACKUP sur tous les hosts. Pour avoir une liste des droits et la façon de les configurer, la meilleure source de documentation reste le man nsca-ng.cfg.
root@sup1:~# cat /etc/nsca-ng/nsca-ng.local.cfg
# please put your local modifications in this file
authorize "mysql_backup" {
password = "infogerance-linux"
hosts = ".*"
services = "MYSQL_BACKUP"
}
Il ne reste plus qu'à relancer le démon et la configuration serveur est terminée !
root@sup1:~# systemctl restart nsca-ng-server.service
Configuration du client
Pour commencer, on installe le paquet nsca-ng-client
root@web0:~# apt-get install nsca-ng-client
Pour communiquer avec le démon sur le serveur on va passer via le binaire send_nsca qui est fourni dans le paquet. On peut utiliser ce binaire directement sans passer par un fichier de configuration, en ajoutant toutes les options nécessaires mais pour simplifier on va tout mettre dans un fichier de configuration et lui passer ce fichier en argument. Par défaut, le fichier est /etc/send_nsca.cfg.
root@web0:~# cat /etc/send_nsca.cfg
identity = "mysql_backup"
password = "infogerance-linux"
server = "sup1.mnt-tech.fr"
delay = 0
timeout = 30
port = 5668
Je ne pense pas avoir besoin de commenter le contenu de ce fichier. Une fois de plus j'ai trouvé les informations les plus pertinentes via man send_nsca.cfg.
Et voilà, votre binaire send_nsca peut communiquer le statut de votre sonde à votre serveur nagios.
Mais avec ces seules informations vous ne risquez pas d'aller bien loin, j'ajoute donc un dernier chapitre concernant la mise en place d'un cas concret.
Supervision d'un script de backup MySQL
Dans cette exemple, vous l'aurez compris on va superviser un script de backup mysql. J'ai besoin de savoir si un problème survient lors de l'exécution de ce script et j'ai également besoin de savoir si ce script a bien tourné dans les dernières 24 heures. Pour cela, on va commencer par ajouter un type de service passif dans le serveur nagios
Chez moi les services sont définis dans le fichier /etc/nagios3/conf.d/generic-service_nagios2.cfg, cela correspond à une installation typique de nagios via les paquets debian. Voici ce nouveau service qui utilise generic-service comme template.
define service {
name mysql-backup-service
use generic-service
check_period HNO
active_checks_enabled 0
passive_checks_enabled 1
is_volatile 1
max_check_attempts 1
check_freshness 1
freshness_threshold 93600
notifications_enabled 0
}
Explication :
- name : le nom du service à utiliser dans le fichier de conf de votre host à superviser
- use : il utilise le template generic-sevice
- check_period : j'ai défini cette timeperiod dans ma conf nagios (heures non ouvrées)
- active_checks_enabled : on désactive les checks actifs
- passive_checks_enabled : on active les checks passifs
- is_volatile : le service devient volative (plus d'info ici : Nagios volatile services
- max_check_attempts : je passe à 1 car sur mon template generic-service il est à 30
- check_freshness : on active l'option qui va permettre de savoir si le dernier check à bien eu lieu
- freshness_threshold : 93600 = 26H, ça laisse donc 2 heures au script de backup pour s'exécuter car il se lance en cron une fois par jour
- notifications_enabled : j'ai désactivé les notifications sur ce service car ce type de problème peut attendre le lendemain avant d'être gérer. A adpater à votre situation
Il va falloir définir une nouvelle commande dans nagios qui sera lancé si le service dépasse les 26 heures sans avoir été rafraîchi. Dans mon cas, je l'ai ajouté dans la commandes relatives à MySQL donc dans le fichier /etc/nagios-plugins/config/mysql.cfg. Encore une fois, à adapter à votre situation.
define command {
command_name mysql_backup
command_line /usr/lib/nagios/plugins/check_mysql_backup.sh $ARG1$ $ARG2$
}
Il faut ensuite ajouter le script que l'on vient de définir dans la commande mysql_backup et qui va tout simplement renvoyer du CRITICAL dans nagios à chaque fois qu'il est lancé. Dans mon cas, il est localisé là avec ces droits :
root@sup1:~# ls -l /usr/lib/nagios/plugins/check_mysql_backup.sh
-rwxr-xr-x 1 root root 57 Nov 15 15:03 /usr/lib/nagios/plugins/check_mysql_backup.sh
Et il contient :
#!/bin/sh
/bin/echo $2
exit $1
En voyant ce qu'on ajoute dans le fichier de config de la machine à superviser vous allez comprendre le fonctionnement du script :
define service {
use mysql-backup-service
host_name web0.mad-rabbit.com
service_description MYSQL_BACKUP
check_command mysql_backup!2!"CRITICAL: no passive check received in the last 24 hours"
}
Et voilà, il ne reste plus qu'à vérifier la config de nagios avant de le relancer :
root@sup1:~# /usr/sbin/nagios3 -v /etc/nagios3/nagios.cfg
root@sup1:~# systemctl restart nagios3.service
Maintenant, on va voir comment envoyer du vert ou du rouge à nagios depuis notre script bash de backup mysql. Pour envoyer du CRITICAL :
echo "web0.mad-rabbit.com;MYSQL_BACKUP;2;CRITICAL: Erreur bla bla bla" | /usr/sbin/send_nsca -c /etc/send_nsca.cfg -d ";"
- web0.mad-rabbit.com : le hostname définit dans nagios
- MYSQL_BACKUP : le nom du service
- 2 : le code retour (0:OK, 1:WARNING, 2:CRITICAL, 3:UNKNOWN)
- CRITICAL: Erreur bla bla bla : le message d'erreur qui accompagne votre CRITICAL
Vous l'aurez donc compris, pour renvoyer du vert dans nagios, il suffit de faire un :
echo "web0.mad-rabbit.com;MYSQL_BACKUP;0;OK - Backup done" | /usr/sbin/send_nsca -c /etc/send_nsca.cfg -d ";"
Pour info, voici mon script de backup : backup.sh qui utilise un fichier .my.cnf pour se connecter sans password et ce fichier de config : backup.conf pour les paramètres.