STATUS pour hosts

Avatar de l’utilisateur
Akecc
Messages : 160
Inscription : 19 avril 2016, 16:24
Localisation : Saint-Brieuc

STATUS pour hosts

Message par Akecc » 27 octobre 2016, 17:23

Salut,

J'ai un petit problème avec un programme que j'ai développé (il est sale mais je viens quasiment de le finir).
Je vous explique mon problème:

Je supervise avec EON des clients de l'entreprise ou je suis actuellement en contrat pro.

N'ayant pas accès réseau direct au matériel (souvent téléphonique), et puis par besoin de prise en main sur le réseau du client pour du dépannage informatique, une machine virtuelle est présente chez les clients. Sur cette machine, j'ai développé un service qui va créer et envoyer vers l'adresse publique de mon entreprise des fichiers LOG sur ce qui nous intéresse (Charge CPU, mémoire dispo ...).

Seulement un check_ping sur l'équipement est plutôt inutile dans mon cas :lol:
J'ai développé ce fameux programme qui copie le résultat de "ls -l" de mon dossier contenant tous les fichiers LOG.
Le script récupère l'argument qui sert de recherche (exemple : Check_log SERVEUR-1, je récupère les lignes qui ont SERVEUR-1) puis en fonction de la date de ces fichiers log, si elle est supérieure à 12 minutes je considère que l'équipement est down sinon, si un des fichiers log est récent de moins de 12 minutes l'équipement est up.

Code : Tout sélectionner

#! /bin/sh
#! /bin/sed -f

CHEMIN="/srv/eyesofnetwork/nagios/plugins/LOG"
LOG="$CHEMIN/dates"


#par defaut ETAT 3 = INCONNU
STATE=3

########################################### Aide #########################################

if [[ ($# != 1) ]] ;  then

echo "La syntaxe de la commande est la suivante : 

 - Check_log -H 'Nom equipement'"

exit $STATE

fi

####################################################################################

ls -l $CHEMIN > $CHEMIN/dates

recherche=`cat $LOG | grep $1`

heure_fichier=`cat $LOG | grep $1 | sed 's/ /+/g' |  sed 's/++++/+/g' |
 sed 's/+++/+/g'| sed 's/++/+/g'| cut -d+ -f6,7,8,9 `

fichiers=`cat $LOG | grep $1 | sed 's/ /+/g' |  sed 's/++++/+/g' |
 sed 's/+++/+/g'| sed 's/++/+/g'| cut -d+ -f9 `

nb=1

#fichier=`cat $LOG | grep $1 | sed 's/ /+/g' |  sed 's/++++/+/g' |
# sed 's/+++/+/g'| sed 's/++/+/g'| cut -d+ -f9 | cut -d" " -f1| sed -n $nb"p"` 


#chemin_fichier=$CHEMIN/$fichier
#echo "CHEMIN FICHIER :: $chemin_fichier"

nbligne=`cat $LOG | grep $1 | sed 's/ /+/g' | sed 's/++++/+/g' |
 sed 's/+++/+/g'| sed 's/++/+/g'| cut -d+ -f9 | wc -l`

fichier=`cat $LOG | grep $1 | sed 's/ /+/g' |  sed 's/++++/+/g' |
 sed 's/+++/+/g'| sed 's/++/+/g'| cut -d+ -f9 | cut -d" " -f1| sed -n $nb"p"` 
 ehpad=`cat $LOG | grep $1 | sed 's/ /+/g' |  sed 's/++++/+/g' |
 sed 's/+++/+/g'| sed 's/++/+/g'| cut -d+ -f9 | cut -d" " -f1| sed -n "2p"` 
# echo "FICHIER ::$ehpad
# "
######### Comparaison des dates des fichiers #############

test=0

while ((nb <= nbligne))
do
chemin_fichier=$CHEMIN/$fichier

fichier=`cat $LOG | grep $1 | sed 's/ /+/g' |  sed 's/++++/+/g' |
 sed 's/+++/+/g'| sed 's/++/+/g'| cut -d+ -f9 | cut -d" " -f1| sed -n $nb"p"` 
 #echo "$fichier
 #"
 ######Calcul difference entre date du fichier et date actuelle

date_actuelle=`date +"%s"`
date_fichier=`date -r $chemin_fichier +"%s"`
Diff_seconde=$((date_actuelle-date_fichier))
Diff_affiche=$((Diff_seconde/60))
Diff_heure=$(( Diff_affiche/60))
Diff_jour=$((Diff_heure/24))


#echo "date fichier : $date_fichier"
################################################################
#echo "nb : $nb"
#echo "date actuelle: $date_actuelle"
#echo "date fichier : $date_fichier"
#echo "Diff_affiche : $Diff_affiche"
douze=12
	if (( $Diff_affiche > $douze ))
	then
		#echo $chemin_fichier
		((nb+=1))
		((test+=1))
		#echo $test
		continue
	else 
	STATE=0
		rslt_affiche="Equipement UP, dernier fichier LOG reçu il y a $Diff_affiche minutes, $Diff_heure heures, $Diff_jour jours"
		#echo "Equipement UP,fichier LOG reçu il y a $Diff_affiche minutes, $Diff_heure heures, $Diff_jour jours"
		break
	fi
	
 #((nb+=1))						 
done
	if (( $test == $nbligne))
	then
	STATE=u
		rslt_affiche="Equipement down, aucun fichier LOG reçu dans les 12  dernières minutes"
		#echo "Equipement down,fichier LOG reçu il y a $Diff_affiche minutes, $Diff_heure heures, $Diff_jour jours"
	fi
	
$CHEMIN/check_dummy $STATE "$rslt_affiche"
exit $STATE
Pour renvoyer le status je pensais utiliser le script check_dummy seulement les status des hosts sont UP,DOWN, UNREACHABLE ... Et mon tuteur souhaiterait que l'équipement ne soit pas considéré comme DOWN mais comme UNREACHABLE (cela permet de différencier les équipements avec check passif et les équipements avec check actif).

Existe t il ou est il possible de développer un script équivalent à check_dummy mais qui me sert pour le status des hosts.

(J'espère être assez clair :?: )

Merci d'avance ! :D
"C'est Darwin, tu t'adaptes ou tu dégages" :twisted:

Avatar de l’utilisateur
LaBanane
Messages : 50
Inscription : 28 septembre 2016, 11:45

Re: STATUS pour hosts

Message par LaBanane » 03 novembre 2016, 10:51

Salut Akecc,

Bon j'ai essayé de comprendre ton script même si je suis un peu rouillé en shell, et plusieurs choses m'interpelle.

Le début de ton script ça va:

Code : Tout sélectionner

#! /bin/sh
#! /bin/sed -f

CHEMIN="/srv/eyesofnetwork/nagios/plugins/LOG"
LOG="$CHEMIN/dates"


#par defaut ETAT 3 = INCONNU
STATE=3

########################################### Aide #########################################

if [[ ($# != 1) ]] ;  then

echo "La syntaxe de la commande est la suivante :

 - Check_log -H 'Nom equipement'"

exit $STATE

fi
Tu déclares tes variable, tu check les arguments ..etc..

Ensuite tu listes le contenu de ton chemin "/srv/eyesofnetwork/nagios/plugins/LOG" et tu mets le résultat dans un fichier dates. La je suis OK

Et la je comprends plus .....
Tu exécutes une commande `cat $LOG | grep $1` que tu mets dans une variable recherche que tu n'utilise plus jamais :idea:
Puis c'est la fête au sed :lol: tu stocks des trucs dans des variables que tu ne réutilises plus ex: heure_fichier , fichiers et ehpad

Pour bien comprendre ce que tu fais avec tes sed il nous faudrait au moins une partie de ton fichier dates en exemple. Ça nous serais utiles pour comprendre ce que tu stocks dans tes variables même si tu ne les utilises plus à part nbligne et fichier.

Et donc viennent enfin les comparaisons de tout ton joyeux bordel :D
Au final de ce que je comprends, tu souhaites tester la date de chaque fichiers de ton répertoire LOG qui sont listés dans ton fichier dates.
Pour se faire tu fais un petit while dans le quel tu tests effectivement chaque ligne de ton fichier dates et si la différence entre la date actuel et la date de ton fichier est supérieur à 12 minutes alors tu incrémentes tes variable et tu continues, si c'est inférieur c'est que au moins un fichier a été mis à jours donc tu case ta boucle.

Et pour finir tu compares tes variable test et nbligne, si elle sont égale c'est que tu as passé toutes lignes sans trouver de fichier avec une dates inférieur à 12 minutes. Et tu recommence pour chaque serveur que tu passes en argument.

Pour moi tes lignes 26 à 56 peuvent être remplacé par:

Code : Tout sélectionner

nb=1
nbligne=`cat $LOG | grep $1 | wc -l`
test=0
Le reste tu ne l'utilise pas ...
Envoi un bout de ton fichier dates que je regardes.
"Il vaut mieux un qui sait que cent qui cherchent." -sagesse populaire :D

Avatar de l’utilisateur
Akecc
Messages : 160
Inscription : 19 avril 2016, 16:24
Localisation : Saint-Brieuc

Re: STATUS pour hosts

Message par Akecc » 04 novembre 2016, 09:52

Salut La banane !

Déjà merci de ta réponse, qui m'a fait ma journée
Puis c'est la fête au sed :lol:
! :lol: :lol:

Alors oui, pour les variables il y en a plusieurs que je n'utilise pas mais qui servent à montrer à mes tuteurs la façon dont fonctionne le script !
Je peux par contre effectivement les mettre en commentaire ça sera pas mal.
Au final de ce que je comprends, tu souhaites tester la date de chaque fichiers de ton répertoire LOG qui sont listés dans ton fichier dates.
Pour se faire tu fais un petit while dans le quel tu tests effectivement chaque ligne de ton fichier dates et si la différence entre la date actuel et la date de ton fichier est supérieur à 12 minutes alors tu incrémentes tes variable et tu continues, si c'est inférieur c'est que au moins un fichier a été mis à jours donc tu case ta boucle.

Et pour finir tu compares tes variable test et nbligne, si elle sont égale c'est que tu as passé toutes lignes sans trouver de fichier avec une dates inférieur à 12 minutes. Et tu recommence pour chaque serveur que tu passes en argument.
Alors effectivement je mets dans le fichier dates les dates de tous mes fichiers LOG/. Dans mon script, je recherche les fichiers LOG dont j'ai besoin, si un est "âgé" de moins de 12 minutes c'est que l'équipement est toujours actif sinon je considère qu'il est down.

Mon problème c'est pour le status de l'équipement : je peux les passer en DOWN et UP mais pas l'autre status et je ne sais pas comment faire :?:

Voici un extrait de mon fichier dates :

Code : Tout sélectionner

-rwxr-xr-x 1 nagios eyesofnetwork   171 Nov  4 09:48 Disque_ATLANTIQUE-HABITATIONS_XXXX_C
-rwxr-xr-x 1 nagios eyesofnetwork   172 Nov  4 09:48 Disque_ATLANTIQUE-HABITATIONS_XXXX_E
-rwxr-xr-x 1 nagios eyesofnetwork   171 Nov  4 09:49 Disque_CENTRE-HOSPITALIER-LAMBALLE_XXXX_C
-rw-r--r-- 1 nagios eyesofnetwork   271 Nov  4 09:49 Disque_CHCB-PONTIVY_XXXX
-rwxr-xr-x 1 nagios eyesofnetwork   171 Nov  4 09:47 Disque_CHCB-PONTIVY_XXXX_C
-rwxr-xr-x 1 nagios eyesofnetwork   175 Nov  4 09:48 Disque_CLINIQUE-VAL-JOSSELIN_XXXX_C
-rwxr-xr-x 1 nagios eyesofnetwork   175 Nov  4 09:48 Disque_EHPAD-LA-BRUFFIERE_XXXX_C
-rwxr-xr-x 1 nagios eyesofnetwork   175 Nov  4 09:47 Disque_FOYER-LOGEMENT-LA-COUDRAIE_XXXX_C
-rw-r--r-- 1 nagios eyesofnetwork   172 Nov  4 09:47 Disque_FOYER-LOGEMENT-LA-COUDRAIE_XXXX_C
-rwxr-xr-x 1 nagios eyesofnetwork   172 Nov  4 09:48 Disque_GIBOIRE_XXXX_C
-rwxr-xr-x 1 nagios eyesofnetwork   171 Nov  4 09:50 Disque_GIBOIRE_XXXX_C
-rwxr-xr-x 1 nagios eyesofnetwork   171 Nov  4 09:47 Disque_GIBOIRE_XXXX_C
-rwxr-xr-x 1 nagios eyesofnetwork   173 Nov  4 09:47 Disque_GIBOIRE_XXXX_D
-rwxr-xr-x 1 nagios eyesofnetwork   169 Nov  4 09:47 Disque_GIBOIRE_XXXX_C
-rwxr-xr-x 1 nagios eyesofnetwork   171 Nov  4 09:48 Disque_GIBOIRE_XXXX_E
-rwxr-xr-x 1 nagios eyesofnetwork   171 Nov  4 09:43 Disque_GIBOIRE_X.X.X.X_C
"C'est Darwin, tu t'adaptes ou tu dégages" :twisted:

Avatar de l’utilisateur
LaBanane
Messages : 50
Inscription : 28 septembre 2016, 11:45

Re: STATUS pour hosts

Message par LaBanane » 04 novembre 2016, 13:51

J'ai pas le temps de-suite pour regarder en détails ton fichier dates. Mais pour ce qui est de passer ton host en status unreachable par exemple, j'ai utilisé se système pour les plugins que j'ai développé :

Code : Tout sélectionner

'OK'=>0,'WARNING'=>1,'CRITICAL'=>2,'UNKNOWN'=>3,'DEPENDENT'=>4
Ce qui signifie que quand je sort de mon plugin perl avec un exit 1, cela se traduit sur l'interface de EON par un warning. J'imagine que c'est pareil dans ton cas, en fonction de ton code de sortie EON va l’interpréter. Il faut en tester plusieurs.

Voici à quoi ressemble mon DashBoard, tu peux voir notamment les détails du disk3 qui a un échec de prévu via l'état SMART du disque (le HDD est déjà commandé ^^). Et les iDRAC31R et 66C ne sont pas relié au réseau pour le moment donc statut unknow.
Image
"Il vaut mieux un qui sait que cent qui cherchent." -sagesse populaire :D

Avatar de l’utilisateur
Akecc
Messages : 160
Inscription : 19 avril 2016, 16:24
Localisation : Saint-Brieuc

Re: STATUS pour hosts

Message par Akecc » 04 novembre 2016, 14:45

Alors effectivement moi c'est pareil mais le script est utilisé uniquement pour les services de base. Donc il est bloqué à 4 état, de 0 à 3 qui sont les mêmes que les tiens. Pourrai tu voir ton morceau de code qui permet le niveau de sortie ? :o

Merci de ta réponse !
"C'est Darwin, tu t'adaptes ou tu dégages" :twisted:

Avatar de l’utilisateur
LaBanane
Messages : 50
Inscription : 28 septembre 2016, 11:45

Re: STATUS pour hosts

Message par LaBanane » 04 novembre 2016, 15:07

Mes scripts en perl sont dispo ici: viewtopic.php?f=7&p=11438#p11438

Script: IDRAC_smart-disk-alerte.pl et Script : IDRAC_power-supply-alerte.pl
"Il vaut mieux un qui sait que cent qui cherchent." -sagesse populaire :D

Avatar de l’utilisateur
Akecc
Messages : 160
Inscription : 19 avril 2016, 16:24
Localisation : Saint-Brieuc

Re: STATUS pour hosts

Message par Akecc » 04 novembre 2016, 15:19

Ok merci beaucoup, seulement moi, nagios n'accepte pas l"exit 4".
C'est comme si cet état n'existait pas ... "

Image

Merci beaucoup de ton aide cependant !! (ton post est top 8-) )
"C'est Darwin, tu t'adaptes ou tu dégages" :twisted:

Avatar de l’utilisateur
LaBanane
Messages : 50
Inscription : 28 septembre 2016, 11:45

Re: STATUS pour hosts

Message par LaBanane » 04 novembre 2016, 15:29

Si tu as du courage comme moi jettes un œil au guide lines officiel 8-)

https://nagios-plugins.org/doc/guidelines.html
https://nagios-plugins.org/doc/guidelin ... PLUGOUTPUT

J'ai trouvé pas mal d'info intéressante. Ce qui est compliqué dans ton cas c'est que tu remplaces le check-host-alive, enfin c'est ce que j'ai compris.


EDIT:: http://blog.centreon.com/good-practices ... in-nagios/
"Il vaut mieux un qui sait que cent qui cherchent." -sagesse populaire :D

Avatar de l’utilisateur
Akecc
Messages : 160
Inscription : 19 avril 2016, 16:24
Localisation : Saint-Brieuc

Re: STATUS pour hosts

Message par Akecc » 04 novembre 2016, 15:34

Je pense savoir pourquoi ca fonctionne pas .... Seulement 4 états sur la version de nagios 4.0 et c'est passé à 5 états sur la MAJ avec EON5.0 ?

Ce qui serait top c'est avoir le check_host_alive ... Non crypté, je pourrai récupérer les variables de sortie pour l'état des Hotes. Je pourrai le récupérer sur le site de partage de script nagios mais faudrait que ca soit le même. Je vais vérifier ça ! ;)
"C'est Darwin, tu t'adaptes ou tu dégages" :twisted:

Répondre