Nagios - Downtime - Arrêt planifié et notific

Fermé
Zeddo Messages postés 75 Date d'inscription mercredi 27 janvier 2010 Statut Membre Dernière intervention 5 mars 2015 - 23 mars 2012 à 11:20
Zeddo Messages postés 75 Date d'inscription mercredi 27 janvier 2010 Statut Membre Dernière intervention 5 mars 2015 - 2 avril 2012 à 10:52
Bonjour,

Je tente de mettre en place dans ma société un serveur Nagios, depuis une distri FAN.
Pas trop de soucis dans l'ensemble.

Toutes les nuits, on stoppe des VM le temps de les cloner, puis on les rallume.
Nagios fait bien son boulot ^^ Il voit la VM éteinte, du coup il me spamme d'alertes.

Normalement, on peut configurer un schedule downtime, un arrêt planifié. Comme ça, nagios ne tient pas compte de l'arrêt qui aura été au préalable planifié.

Via l'interface Web de Nagios, on peut planifier un arrêt, mais je n'aime pas trop cette méthode. En plus (j'ai pas trop fouillé), on doit inscrire chaque occurence de reboot, ya pas l'air d'y avoir de planification.
Comme j'aime me compliquer la tâche, j'ai créé un fichier de config (merci google surtout ! ) : downtimeschedhst.cfg qui contient ceci :

# Please follow the Following format
# Sun:Mon:Tue:Wed:Thu:Fri:Sat having a 1 in the field corresponding to the day indicates that the script should run
#
# Daysfield,Hostname,StartTime(HH:MM:ss),duration(se conds),fixed/dynamic,Dyn duration,Name(user posting downtime),Comments
1:1:1:1:1:1:1,nvkaspersky,00:15:00,1200,1,7200,Nagios,Scheduled Daily Downtime (Backups)

(fichier déclaré dans Nagios.cfg aussi)
Et ça marche plutôt bien !
Si ce fichier n'est pas actif, je reçois 1 mail comme quoi la VM est down (et pas d'autre mail pour les services par exemple), si le fichier est actif, pas de mail.

Mon problème est le suivant :

Je ne reçoit pas de mail comme quoi la machine est down (ce qui est très bien), mais je reçoit des mails pour TOUS les services de la machine !

Le but du jeu, c'est d'avoir 0 mail pendant l'arrêt planifié.. quelqu'un a une idée ?

Cdt,

Zedd


8 réponses

Ah tu espérais que ton fichier de config soit lu tel quel par Nagios ?
Non ce n'est pas comme ça que ça marche :)

Il faut envoyer une external command dans le commandfile de Nagios.

Un exemple ici : http://old.nagios.org/developerinfo/externalcommands/commandinfo.php?command_id=118

Pour le faire sur un hostgroup : http://old.nagios.org/developerinfo/externalcommands/commandinfo.php?command_id=123
1
Bonjour,

Théoriquement, ça ne doit pas arriver :
http://nagios.manubulon.com/traduction/wiki_preview/notifications.html

Le premier filtre des notifications d'hôte et de service consiste à vérifier que l'hôte ou le service n'est pas dans une période d'arrêt planifié. Si c'est le cas, personne n'est notifié. S'il n'est pas dans une période d'arrêt planifié, la notification est passée au filtre suivant. Notez également que les notifications de services sont supprimées si l'hôte auquel est associé le service est dans une période d'arrêt planifié. 


Tu es sûr de ton coup ? Ton Nagios est-il récent ?
0
Zeddo Messages postés 75 Date d'inscription mercredi 27 janvier 2010 Statut Membre Dernière intervention 5 mars 2015 15
23 mars 2012 à 14:09
Non, je ne suis pas vraiment sûr de mon coup^^
J'ai refait une paire de tests et il s'avère que mon fichier downtimeschedhst.cfg n'est pas pris en compte.
Problème entier, je repart de 0, comment mettre en place un arrêt planifier !

Pour ce qui est de la version de Nagios, j'ai pris la dernière FAN disponible en téléchargement, avec un yum update juste derrière. Je suppose donc que c'est la plus récente.. (suis un peu noob en matière de Linux :p)
0
Zeddo Messages postés 75 Date d'inscription mercredi 27 janvier 2010 Statut Membre Dernière intervention 5 mars 2015 15
26 mars 2012 à 09:25
Salut,

merci pour les liens.
Encore une question du noob que je suis...:p

Le Time_t format... Comment tu calcules ça ?
On dirait un chiffre unique. Sachant que j'ai un reboot de mes machines chaque nuit, ce chiffre changerait systématiquement ? Je fais peut être la mauvaise approche dans ma méthode ?
0
C'est une date au format EPOCH ( = secondes écoulées depuis le 01/01/1970)
Dans l'exemple que je t'ai donné en lien, c'est la commande date +%s qui te le donne. Avec l'option -d de date, tu peux lui demander de te convertir une autre date au choix.
Dans la plupart des langages de programmation, c'est le résultat de la commande time() (ou assimilée).
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Zeddo Messages postés 75 Date d'inscription mercredi 27 janvier 2010 Statut Membre Dernière intervention 5 mars 2015 15
26 mars 2012 à 10:13
Ok, je comprend un peu mieux..
Voici ce que j'ai fait :

Dans Nagios.cfg, j'ai modifié ceci :

check_external_commands=1
J'ai ensuite commenté la ligne suivante pour rajouter celle en dessous :
#command_file=/var/log/nagios/rw/nagios.cmd
command_file=/usr/local/nagios/var/rw/nagios.cmd

(le fichier dans /var se supprime tt seul lorsqu'on arrête le service Nagios, et se recré au démarrage du service. Il pese 0 octet)

Le fichier nagios CMD ressemble à ca :

#!/bin/sh
# This is a sample shell script showing how you can submit the SCHEDULE_HOST_DOWNTIME command
# to Nagios. Adjust variables to fit your environment as necessary.

now='date +%T'
commandfile='/usr/local/nagios/var/rw/nagios.cmd'

/bin/printf "[%lu] SCHEDULE_HOST_DOWNTIME;nvkaspersky;10:09:00;10:20:00;1;0;7200;nagios;test de reboot sans notifications\n" $now > $commandfile




l'option date +%T me donne l'heure au format qui me semble le bon, par exemple dix heures neufs minutes est retranscrit comme ca : 10:09:00

Et la, rien ne va plus^^ Quand je restart le service, j'ai ceci :
Stopping nagios: /etc/init.d/nagios: line 72: kill: (13695) - Aucun processus de ce type
Et Nagios ne marche plus :/
0
Il ne faut pas que tu édites manuellement le fichier nagios.cmd. C'est un fichier de commande : c'est là que tu écris les ordres que tu envoies à Nagios. Nagios le lit régulièrement pour y prendre ses ordres, et il y attend un format particulier (le fameux SCHEDULE_HOST_DOWNTIME;nvkaspersky;...)
Donc ton script doit se situer ailleurs (à peu près n'importe où) et y écrire quand tu veux envoyer un ordre à Nagios.

Le format de date retourné par le %T n'est pas bon du tout, Nagios s'attend à un format de type EPOCH, c'est-à-dire ce que retourne la commande date +%s. C'est le nombre de secondes depuis le 01/01/1970.
0
Zeddo Messages postés 75 Date d'inscription mercredi 27 janvier 2010 Statut Membre Dernière intervention 5 mars 2015 15
26 mars 2012 à 11:19
J'avais trouvé entre nos 2 mails le fait de ne pas toucher au nagios.cmd, et de créer un script à part.

Par contre il y a un truc que je ne comprend toujours pas..
Si le %T n'est pas bon, et qu'il faut un %s pour le format de date, comment j'indique mon heure de début et l'heure de fin de l'indisponibilité de la machine ?

Les 2 heures que j'ai mis en gras ci-dessous, comment je précise que mon serveur redémarre chaque nuit à 00h15 et est stoppé jusqu'à 00h30? (le 10h09 et 10h20, c'était juste pour l'heure de mes tests)

SCHEDULE_HOST_DOWNTIME;nvkaspersky;10:09:00;10:20:00;1;0;7200;nagios;test de reboot sans notifications\n" $now > $commandfile
0
Exemple pour la nuit passée :

date -d '2012-03-27 00:15' +%s
1332800100
date -d '2012-03-27 00:30' +%s
1332801000


Tu dois le faire pour chaque jour, via un cron comme tu l'envisageais. Par contre tu peux le faire à l'avance, ça ne pose pas de soucis tant que Nagios ne redémarre pas entretemps.
0
Zeddo Messages postés 75 Date d'inscription mercredi 27 janvier 2010 Statut Membre Dernière intervention 5 mars 2015 15
27 mars 2012 à 11:46
Merci pour la réponse, ça m'a donné une idée :)
Par contre, vu que les redémarrages ont lieu tous les jours, toute l'année... ça va pas le faire^^

Je ne vois que 2 options :
-jouer avec le timeperiod -> pas super mais ça peut le faire, un peu bricole pour les services communs à toutes les machines (le reboot n'en concerne que certaines)

- passer les dates en variables pour avoir un fichier dynamique.
Du genre :
date2='date +%Y-%m-%d %T'
date3=date -d $date2 +%s
date4=$date3+20
CHEDULE_HOST_DOWNTIME;nvkaspersky;$date3;$date4;1;0;7200;nagios;test de reboot sans notifications\n" $now > $commandfile

Bon, la syntaxe est relativement fausse, mais tu vois l'idée^^
0
Sinon si tu le fais en cron daily, tu peux faire ça :

date -d 'tomorrow 00:15' +%s


Ca marche aussi :)
0
Zeddo Messages postés 75 Date d'inscription mercredi 27 janvier 2010 Statut Membre Dernière intervention 5 mars 2015 15
2 avril 2012 à 10:52
Bonjour tout le monde,

J'ai rebossé un peu sur le sujet, et j'ai abouti à un script qui donne ceci :

#!/bin/sh

now='date -d 'today 10:40' +%s'
now2='date -d 'today 11:40' +%s'

commandfile='/var/log/nagios/rw/nagios.cmd'
echo "['date +%s'] SCHEDULE_HOST_DOWNTIME;nvkaspersky;$now;$now2;1; 0;2700;Nagios;Commentaire" >> $commandfile

Le but du jeu, c'était de faire un test sur un serveur de 10h40 à 11h40.
Facile sans couper le serveur, il suffit de stopper le service NSCLIENT++.

Par contre... ça marche pas :) j'ai toujours ma flopée de mail
On peut pas mettre une variable ($now) dans cette commande ??
0