La seule différence qu’il y a entre les contrôles actifs et passifs est que dans le premier cas, les contrôles sont réalisés par Nagios alors que dans le deuxième cas, ils sont réalisés par des applications externes. Une fois qu’une application externe a réalisé un contrôle de service, elle soumet le résultat à Nagios via le fichier de commande externe. Puis Nagios se charge de lire tous les résultats et de les replacer. L’agent NSCA permet l’envoi de commandes externes à Nagios.
Aussi bien sur le serveur que sur le client, il faudra installer les packages suivants :
apt-get install libmcrypt4 snmp
Une fois téléchargée, décompressez l’archive récupérée puis lancer la compilation et l’installation.
wget http://freefr.dl.sourceforge.net/sourceforge/nagios/nsca-2.7.2.tar.gz tar zxvf nsca-2.7.2.tar.gz cd nsca-2.7.2 ./configure --prefix=/usr/local/nagios/ --with-trusted-path=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/nagios/bin:/usr/local/nagios/libexec make all
On copiera le binaire et le fichier de configuration qui nous intéresse pour la partie serveur.
cp src/nsca /usr/local/nagios/bin/ cp sample-config/nsca.cfg /usr/local/nagios/etc/
Quelques explications sur le fichier de configuration (nsca.cfg) :
# A METTRE LE MOT DE PASSE QUE VOUS DESIREZ password=xxxxxxxx # LA METHODE DE CRYPTAGE (FAITE VOTRE CHOIX) decryption_method=1
Pour le lancement de nsca, on va opter pour la méthode démon comme (ci-dessous) :
#!/bin/sh # simple debian init script for nsca # by sean finney <seanius@debian.org> DAEMON=/opt/nagios/bin/nsca NAME=nsca DESC="Nagios Service Check Acceptor" CONF=/opt/nagios/etc/nsca.cfg OPTS="--daemon -c $CONF" PIDFILE="/var/run/nsca.pid" ### # obviously if the daemon doesn't exist we should stop now if [ ! -x $DAEMON ]; then exit 0 fi # grab an arbitrary config setting from nsca.cfg get_config(){ grep "^[[:space:]]*$1=" $CONF 2>/dev/null | tail | cut -d= -f2- } # if the pid_file is specified in the configuration file, nsca will # take care of the pid handling for us. if it isn't we should continue # as we have before PIDFILE=`get_config pid_file` # if pidfile isn't set if [ -z "$PIDFILE" ]; then # then this is the default PIDFILE PIDFILE="/var/run/nsca.pid" # run nsca in the foreground, and have s-s-d fork it for us OPTS="-f $OPTS" # and then this is how we call SSD SSD_STARTOPTS="--background --pidfile $PIDFILE --make-pidfile" SSD_STOPOPTS="--pidfile $PIDFILE" else # but if pid_file is set, we don't have to do anything SSD_STARTOPTS="--pidfile $PIDFILE" SSD_STOPOPTS="--pidfile $PIDFILE" fi SSD_START="/sbin/start-stop-daemon -S $SSD_STARTOPTS --exec $DAEMON" SSD_STOP="/sbin/start-stop-daemon -K $SSD_STOPOPTS --exec $DAEMON" die(){ echo $@ exit 1 } case "$1" in start) echo -n "Starting $DESC: " if [ ! -d "/var/run/nagios" ]; then mkdir -p /var/run/nagios || die "ERROR: couldn't create /var/run/nagios" fi $SSD_START -- $OPTS || die "ERROR: could not start $NAME." echo "$NAME." ;; stop) echo -n "Stopping $DESC: " $SSD_STOP -- $OPTS || die "ERROR: could not stop $NAME." rm -f $PIDFILE echo "$NAME." ;; reload|force-reload) echo -n "Reloading $DESC: " $SSD_STOP --signal HUP -- $OPTS || die "ERROR: could not reload $NAME." echo "$NAME." ;; restart) $0 stop $0 start ;; esac
Il sera lancé au démarrage de la machine :
chmod +x /etc/init.d/nsca update-rc.d nsca defaults
Une fois téléchargée, décompressez l’archive récupérée puis lancer la compilation et l’installation.
wget http://freefr.dl.sourceforge.net/sourceforge/nagios/nsca-2.7.2.tar.gz tar zxvf nsca-2.7.2.tar.gz cd nsca-2.7.2 ./configure --prefix=/usr/local/nagios/ --with-trusted-path=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/nagios/bin:/usr/local/nagios/libexec make all
On copiera le binaire et le fichier de configuration qui nous intéresse pour la partie serveur.
cp src/send_nsca /usr/local/nagios/libexec cp sample-config/send_nsca.cfg /usr/local/nagios/etc/
Quelques explications sur le fichier de configuration (send_nsca.cfg) :
# A METTRE LE MOT DE PASSE QUE VOUS DESIREZ password=xxxxxxxx # LA METHODE DE CRYPTAGE (FAITE VOTRE CHOIX) encryption_method=1
Le principe est simple le send_nsca aura pour mission d’envoyer une commande externe au serveur nagios pour lui confirmer dans quel état il se trouve, donc tout vos scripts devront à la fin faire appel au send_nsca.
Comme NRPE, send_nsca est avant tout un moyen de transport pour soumettre les résultats de contrôles locaux au serveur Nagios; send_nsca contactant pour se faire le démon NSCA fonctionnant sur celui-ci. send_nsca possède les mêmes arguments et options ainsi que le même fichier de configuration sur toutes les plates-formes pour lequel il fonctionne.
-H <host_address> L’adresse IP du serveur Nagios à contacter. [-p port] Le port distant à contacter (défaut 5667). [-to to_sec] Le seuil de dépassement de temps de connexion exprimé en secondes. La valeur par défaut est 10. [-d delim] Le séparateur à utiliser pour présenter les données (tabulation par défaut). [-c config_file] Fichier de configuration à utiliser.
Selon que vous retournez au serveur un contrôle d’hôte ou de service, le format des données varie légèrement.
Contrôles de services :
<host_name>[tab]<svc_description>[tab]<return_code>[tab]<plugin_output>[newline]
Contrôles d’hôtes :
<host_name>[tab]<return_code>[tab]<plugin_output>[newline]
Dans les deux cas, il faut présenter le nom de l’hôte ; le code retour et le message à afficher dans la console. Dans le cas du contrôle de service, il faut en plus envoyer la description du service à impacter dans Nagios. Nous allons voir un exemple avec d’un côté l’envoi depuis l’hôte et de l’autre la réception sur le serveur Nagios. Côté client, l’interaction se fait avec n’importe quel programme sachant exécuter un script/programme externe. C’est ce programme qui génère l’appel send_nsca.
sysop@jeos:~$ echo "jeos;;syslog_warning;;0;;OK - Soumission via send_nsca" |/usr/local/nagios/bin/send_nsca -H 192.168.44.100 -c /usr/local/nagios/etc/send_nsca.cfg -d ";;" 1 data packet(s) sent to host successfully.
Dans cet exemple d’appel, nous utilisons un simple echo dont la sortie est passé via un tube à l’entrée de send_nsca. Les données sont présentées avec un double point virgule comme séparateur grâce à l’argument -d et le fichier de configuration est précisé avec l’option -c. send_nsca répond en indiquant que le message a bien été transmis.
C’est NSCA qui reçoit ce message sur le port d’écoute précisé et transforme ce message en commande externe Nagios. Pour que cette commande soit bien prise en compte par Nagios, il faut bien entendu avoir l’hôte et le service précisé présent dans les fichiers de configuration.
define service{ name passif-generic use generic-service service_description syslog_warning host_name jeos active_checks_enabled 0 passive_checks_enabled 1 is_volatile 1 max_check_attempts 1 check_freshness 1 freshness_threshold 120 check_command check_dummy!0!No messages in last 6 hours }
Nous créons un fichier qui définit un service pour jeos appelé syslog_warning. Sa particularité est d’être un service passif grâce aux directives active_check_enabled à 0 et passive_checks_enabled à 1.