Blog

Configuration de nsca-ng sur debian

Écrit le 16 11 2016 par Kévin MET _

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.

♥ Partage sur tes réseaux sociaux ♥
Kévin MET
Kévin MET

Auteur de ce blog et gérant de la société MNT-TECH, je publie sur ce blog lorsque le temps me le permet et lorsqu'un sujet qui me parait intéressant n'a pas encore été abordé en français. Toutes les informations techniques présentes sur cette page peuvent être réutilisées moyennant le fait de citer la source.