script pour les OID via une MiB Datacore

Problèmes rencontrés lors de l'utilisation d'EyesOfNetwork
Avatar de l’utilisateur
Hujino
Messages : 36
Inscription : 18 janvier 2017, 14:50
Localisation : Valence

script pour les OID via une MiB Datacore

Message par Hujino » 14 février 2017, 15:25

Bonjour à toutes et à tous,

Après avoir lu et compris ce tutoriel : viewtopic.php?f=7&p=11438#p11438

Je souhaite faire de même mais pour :
Healthy
I/O latency
On-line
Busy count
Connected
Up to date
Present
Allocated space
Rights
Link error
J'ai essayé de m'adapter selon l'exemple du tutoriel, mais je suis incapable de coder je n'y arrive pas pourtant j'arrive à lire et à comprendre du code...

String d'une OID (exemple)
snmpwalk -v 2c -c community x 1.3.6.1.4.1.7652.1.1.1.6.32.50.50.66.69.67.57.70.49.56.52.57.49.56.69.48.67.57.67.54.57.69.56.48.52.51.70.48.52.48.48.68.70
SNMPv2-SMI::enterprises.7652.1.1.1.6.32.50.50.66.69.67.57.70.49.56.52.57.49.56.69.48.67.57.67.54.57.69.56.48.52.51.70.48.52.48.48.68.70 = STRING: "Read/Write"

Avatar de l’utilisateur
Seb
Messages : 3530
Inscription : 11 février 2009, 17:35
Localisation : Limoges
Contact :

Re: script pour les OID via une MiB Datacore

Message par Seb » 14 février 2017, 16:31

Pourtant a partir du moment ou tu as l'oid et avec cet exemple.... et je suis loin d'être un spécialiste mais c'est bien expliqué!
"Mieux vaut cent chevaux sous une selle que d'un âne assis dessus"
Joe dans son bar servant un de ses clients...JBT

Avatar de l’utilisateur
Hujino
Messages : 36
Inscription : 18 janvier 2017, 14:50
Localisation : Valence

Re: script pour les OID via une MiB Datacore

Message par Hujino » 14 février 2017, 16:36

Justement j'ai testé avant de poster, je suis vraiment une merde en codage xD

Le mieux aurait été que @LaBanane nous répondent :v

Edit : Seb je poste mon "français code" ici pour voir si ce que je souhaite est possible ou non ?

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

Re: script pour les OID via une MiB Datacore

Message par Akecc » 16 février 2017, 09:36

Code : Tout sélectionner

 $DiskSmart = 'snmpwalk -v 2c -c '.$COM.' '.$IP.' 1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.31.'.$NumDISK.' | grep "INTEGER: 0"';
        system "$DiskSmart";
        # print "resultat: $?";
        # Renvoi 256 ?
        if($? != 0) {
                print "Critical: Les attribus SMART annonce une défaillance imminente";
                exit 1;
        } else {
                $DiskStatus = 'snmpwalk -v 2c -c '.$COM.' '.$IP.' 1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.4.'.$NumDISK.' | grep "INTEGER: 3"';
                system "$DiskStatus";
                if($? != 0) {
						system 'snmpwalk -v 2c -c '.$COM.' '.$IP.' 1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.4.'.$NumDISK.' | cut -d" " -f4';
                        print " <<< Critical: Le status du disque n'est pas normale. Status(1 Unknow; 2 Ok but no RAID; 3 OK; 4 Foreign config; 5 Not available for RAID ; 6 Blocked by controller ; 7 Not opperationnal) \n";
                        exit 2;
                } else {
                        print "  :: Disk OK";
                }
        }

Honnêtement si tu n'ai pas à l'aide avec le codage je te conseille d'utiliser un autre language que le perl. Même si il reste très simple, un code en bash sera plus évident pour toi. Il y a forcément des choses qui te brûleront les cheveux mais n'hésite pas à poser tes problèmes sur des forums, aller sur des sites #OpenClassRoom ou il y a des cours sur la programmation.

Code : Tout sélectionner

#! /bin/sh

STATE=3
PLUGIN_PATH='/srv/eyesofnetwork/nagios/plugins'
COMMAND_PATH='/bin'

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

if [[ $# -lt 6 ]] ;  then

echo " La syntaxe de la commande est la suivante : 

 - Check_Fortinet -H '@IP du Firewall' -c 'element a tester' -w 'seuil d'alerte' -c 'seuil critique'
 
Pour ipsec, la syntaxe est la suivante :

- Check_Fortinet -H '@IP du Firewall' -c 'ipsec' -i 'index'

Pour BP, la syntaxe est la suivante :

- Check_Fortinet -H '@IP du Firewall' -c 'BP' -i 'nom de l'interface' -M 'BP Max en Mo' -w 'seuil d'alerte' -c 'seuil critique'

+ elements possibles : cpu (%) , mem (%) , disk (%) , sessions (nombre) , ssl (nombre) , ipsec (Etat), BP (Mo)"

exit $STATE

fi


####################################### Resultats #########################################

#### valeur pour mem ####

if [[ ($4 == mem) ]] ; then

valeur=`$PLUGIN_PATH/check_snmp -H $2 -C public -o 1.3.6.1.4.1.12356.101.4.1.4.0 | $COMMAND_PATH/cut -d "-" -f2 | $COMMAND_PATH/cut -d "|" -f1`
valeur=`$COMMAND_PATH/echo $valeur | sed 's/ //g'`

rslt_affiche="La memoire est utilisee a $valeur %"

if [[ ($valeur -lt $6) ]] ; then
STATE=0
fi

if [[ ($valeur -ge $6) ]] ; then
	STATE=1
	if [[ ($valeur -ge $8) ]] ; then
		STATE=2
	fi
fi

fi

if [[ ($4 == mem) ]] ; then
$PLUGIN_PATH/check_dummy $STATE "$rslt_affiche | MEM=$valeur;$6;$8"
fi
exit $STATE
Ca c'est un code en bash que j'ai développé.
=> $4 c'est la quatrième valeur après ta commande :
./check_test -H X.X.X.X -c mem (içi, mem est la quatrième valeur. $4 = mem).
Si tu connais les oid ceci est excellent pour toi, remplace la variable mem par "healthy" par exemple. Tu as juste à remplacer l'oid, remplacer le texte de rslt_affiche (c'est ce qui sera affiche par nagios).

Code : Tout sélectionner

| $COMMAND_PATH/cut -d "-" -f2 | $COMMAND_PATH/cut -d "|" -f1`
=> Ca c'est pour récupérer la valeur exacte de ce dont j'avais besoin. Tu en aura surement l'utilité avec les commandes cut / sed.

Code : Tout sélectionner

$PLUGIN_PATH/check_dummy $STATE "$rslt_affiche | MEM=$valeur;$6;$8"
Check_dummy c'est un script que tu peux récupérer sur nagios exchange c'est ce script qui affiche ce que tu veux dans nagios. Il renvoie "rslt_affiche".

Si tu as des questions, n'hésite pas à m'en poser, même en MP si tu veux ;)
"C'est Darwin, tu t'adaptes ou tu dégages" :twisted:

Avatar de l’utilisateur
Hujino
Messages : 36
Inscription : 18 janvier 2017, 14:50
Localisation : Valence

Re: script pour les OID via une MiB Datacore

Message par Hujino » 16 février 2017, 11:14

un exemple de ce que je souhaite faire :

RisingThresholdPerfMonitor (Allocated space)
$com = X #COMMUNITY
$IP= $HOSTADDRESS$ #@IP DATACORE

my %ERRORS=('Ok'<=70,'Warning'=>80,'Critical'=>90);

# On teste si la commande fonctionne et que l'hote repond
$datacore = 'snmpwalf -v 2c -c '.$com.' '.$IP$.' 2>&1 | grep "Timeout"';
system "$datacore";
if($? == 0) {
print "Timeout:: host unreachable ?";
exit 0;
}
# Recuperation du string
$developpement_01 = 'snmpwalf -v 2c -c '.$com.' '.$IP$.' .32.51.65.53.68.70.70.69.54.66.57.51.57.49.52.52.57.53.48.52.66.56.48.54.50.66.48.69.49.51.49.70.66';
system "$developpement_01";
if($? !=> 80) {
print "Warning";
exit;
}
if($? !=> 90) {
print "Critical";
exit;
}
else {
print "Ok";
}


# sur le nagios, je cherche aussi à print toutes les ressources que j'interroge et les mettre sur le dashboard
__END__
Si tu as le dummy en .pl je suis preneur ^^

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

Re: script pour les OID via une MiB Datacore

Message par Akecc » 16 février 2017, 12:08

https://exchange.nagios.org/directory/P ... my/details

Mais je ne suis pas sûr que ca soit le fichier que j'ai utilisé ! Sinon si tu as une adresse mail je peux t'envoyer celui que j'ai en ma possession !
(celui que j'ai est chiffré, je ne peux pas te le copier coller)

Fais attention :

Code : Tout sélectionner

$developpement_01 = 'snmpwalf -v 2c -c '.$com.' '.$IP$.' 
c'est snmpwalk la commande.
Mais pour récupérer la valeur tu utilisera plutot "snmpget". Snmpwalk te permet de lister tous les oid disponibles d'une branche snmp.

Pour ton code fais les choses étape par étape. Par exemple quand tu veux tester ta valeur, lance le script avec dedans juste ta façon de récupérer ta valeur puis un "echo $maVariable" pour vérifier que tu récupère bien ce que tu souhaite.

Bon courage :D
"C'est Darwin, tu t'adaptes ou tu dégages" :twisted:

Avatar de l’utilisateur
Hujino
Messages : 36
Inscription : 18 janvier 2017, 14:50
Localisation : Valence

Re: script pour les OID via une MiB Datacore

Message par Hujino » 16 février 2017, 13:55

Akecc a écrit :
16 février 2017, 12:08
https://exchange.nagios.org/directory/P ... my/details

Mais je ne suis pas sûr que ca soit le fichier que j'ai utilisé ! Sinon si tu as une adresse mail je peux t'envoyer celui que j'ai en ma possession !
(celui que j'ai est chiffré, je ne peux pas te le copier coller)
J'aimerai plutôt perl ou en bash pour faciliter les choses ^^
Akecc a écrit :
16 février 2017, 12:08
Fais attention :

Code : Tout sélectionner

$developpement_01 = 'snmpwalf -v 2c -c '.$com.' '.$IP$.' 
c'est snmpwalk la commande.
Mais pour récupérer la valeur tu utilisera plutot "snmpget". Snmpwalk te permet de lister tous les oid disponibles d'une branche snmp.
Corrigé :p My bad
Akecc a écrit :
16 février 2017, 12:08
Pour ton code fais les choses étape par étape. Par exemple quand tu veux tester ta valeur, lance le script avec dedans juste ta façon de récupérer ta valeur puis un "echo $maVariable" pour vérifier que tu récupère bien ce que tu souhaite.
Je testerai après :D
Akecc a écrit :
16 février 2017, 12:08
Bon courage :D
Merci :D

Avatar de l’utilisateur
Hujino
Messages : 36
Inscription : 18 janvier 2017, 14:50
Localisation : Valence

Re: script pour les OID via une MiB Datacore

Message par Hujino » 23 février 2017, 10:26

Hello !

Depuis hier, je bloque un peu sur les boucles en shell, j'ai testé plusieurs fois certaines choses :/

Voici mon nouveau code :
#! /bin/sh

STATE=2
PLUGIN_PATH='/srv/eyesofnetwork/nagios/plugins'
COMMAND_PATH='/bin'

####################################### Resultats #########################################

#### valeur pour up to date du vDISK PRODUCTION ####

tab=(
'.32.69.52.50.50.56.68.51.66.51.69.69.54.56.68.65.65.69.69.55.57.50.68.52.55.53.55.68.52.53.57.69.70'
'.32.56.67.65.55.51.51.67.54.67.54.55.55.54.52.65.52.56.55.52.67.50.52.56.50.56.54.53.52.69.54.55.70'
'.32.68.66.69.56.65.53.54.70.66.49.70.54.57.69.52.65.68.50.69.52.67.53.52.68.67.51.51.48.70.49.57.48'
'.32.54.55.66.67.52.51.53.67.69.57.50.55.57.57.57.67.55.56.66.48.54.65.57.67.51.65.66.57.54.70.69.54'
'.32.51.56.56.66.67.68.68.51.53.69.65.57.54.50.69.53.55.69.48.65.52.69.53.68.57.54.50.53.56.48.55.49'
'.32.54.52.67.56.67.65.55.57.70.53.69.49.70.68.53.51.67.50.50.53.70.48.65.49.68.50.70.65.70.52.49.65'
'.32.52.65.70.69.68.53.53.68.48.50.53.55.49.55.54.68.57.49.49.53.70.57.51.65.51.57.69.69.65.52.57.55'
'.32.51.56.54.57.53.67.50.52.70.51.56.55.50.65.66.54.52.70.54.50.65.65.56.55.51.65.51.67.49.70.49.53'
'.32.66.53.69.52.65.57.49.70.69.54.53.51.69.51.66.65.65.66.70.48.57.70.51.53.51.65.67.51.50.57.56.69'
'.32.52.67.53.52.69.50.68.65.68.69.66.56.66.67.48.49.56.54.50.55.67.56.56.69.51.67.69.51.49.68.70.56'
)

if [[ $4 = status && $6 -eq 1 || $6 -eq 2 ]]
then
for ((n=0; n < 11; n++))
do
ar+=( "$($PLUGIN_PATH/check_snmp -H $2 -C X -o 1.3.6.1.4.1.7652.1.1.1.6"${tab[n]}" | grep to | cut -d '-' -f 2 | cut -d '"' -f 2 | cut -c -2)" )
if [[ ("${ar[n]}" == "Up") ]] ; then
STATE=0
else
STATE=2
fi
done

rslt_affiche="PRODUCTION_01 est $ar & PRODUCTION_02 est ${ar[1]} & PRODUCTION_03 est ${ar[2]} & PRODUCTION_04 est ${ar[3]} & PRODUCTION_05 est ${ar[4]} & PRODUCTION_06 est ${ar[5]} & PRODUCTION_07 est ${ar[6]} & PRODUCTION_08 est ${ar[7]} & PRODUCTION_09 est ${ar[8]} & PRODUCTION_10 est ${ar[9]}"
fi

if [[ ($4 == status) ]] ; then #affichage sur le nagios
$PLUGIN_PATH/check_dummy $STATE "$rslt_affiche"
fi
exit $STATE
Problème :
CRITIQUE: PRODUCTION_01 est Up PRODUCTION_02 est Up PRODUCTION_03 est Up
Il me dit l'état "critique" alors que mes liens sont op :/

Problème de :
for ((n=0; n < 11; n++))
do
ar+=( "$($PLUGIN_PATH/check_snmp -H $2 -C X -o 1.3.6.1.4.1.7652.1.1.1.6"${tab[n]}" | grep to | cut -d '-' -f 2 | cut -d '"' -f 2 | cut -c -2)" )
if [[ ("${ar[n]}" = "Up") ]] ; then
STATE=0
else
STATE=2
fi
done
Pouvez-vous m'aider ?

Merci,

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

Re: script pour les OID via une MiB Datacore

Message par LaBanane » 10 novembre 2017, 10:19

Hello :D

Bon premièrement je te conseil de prendre comme exemple le plugin qui monitore les Alimentations, il est plus simple car ne vérifié qu'une seul chose !

Voici le résultat d'un snmpwalk:

Code : Tout sélectionner

[root@localhost tmp]# snmpwalk -v 2c -c X 192.168.X.X 1.3.6.1.4.1.674.10892.5.4.600.12.1.5.1.1
SNMPv2-SMI::enterprises.674.10892.5.4.600.12.1.5.1.1 = INTEGER: 3
Je sais que la valeur "INTEGER: 3" représente l'état de mon alimentation. 3 OK, 5 KO

Donc quand si je rajoute | grep "INTEGER: 3" je test si mon alim est OK

Voila la démarche complète:

Code : Tout sélectionner

[root@localhost tmp]# snmpwalk -v 2c -c X 192.168.X.X 1.3.6.1.4.1.674.10892.5.4.600.12.1.5.1.1 | grep "INTEGER: 3"
SNMPv2-SMI::enterprises.674.10892.5.4.600.12.1.5.1.1 = INTEGER: 3
Je test avec ma commande snmpwalk si mon alim est ok

Code : Tout sélectionner

[root@localhost tmp]# echo $?
0
$? me signale que ma dernière commande c'est passé sans erreur code retour 0

Si mon alim était KO voici ce qui se passerai

Code : Tout sélectionner

[root@localhost tmp]# snmpwalk -v 2c -c X 192.168.X.X 1.3.6.1.4.1.674.10892.5.4.600.12.1.5.1.1 | grep "INTEGER: 3"
Je test avec ma commande snmpwalk si mon alim est ok

Code : Tout sélectionner

[root@localhost tmp]# echo $?
1
Mon alim est KO la commande ne se termine donc pas correctement code retour 1
Voila ce que je test dans mon script, si ma commande snmpwalk couplé au grep se termine sans erreur ou pas.

Ensuite j'ai regardé ton script:

Attention ici ! $HOSTADDRESS$ est une variable nagios, le script ne la connais pas ! C'est pourquoi j'ai fonctionné avec des arguments !

Code : Tout sélectionner

$com = X #COMMUNITY
$IP= $HOSTADDRESS$ #@IP DATACORE
Je ne comprends pas ce que tu essai de faire ici

Code : Tout sélectionner

my %ERRORS=('Ok'<=70,'Warning'=>80,'Critical'=>90);
Attention ici tu lance un snmpwalk complet ! ça peut mettre facile 1 minutes pleines à tout check, test un point en particulier pour ne pas ralentir ton script

Code : Tout sélectionner

# On teste si la commande fonctionne et que l'hote repond
$datacore = 'snmpwalf -v 2c -c '.$com.' '.$IP$.' 2>&1 | grep "Timeout"';
system "$datacore";
if($? == 0) {
print "Timeout:: host unreachable ?";
exit 0;
Erreur !!!!!! Nagios interprète ton code de sotie de script ! 0 = OK , si tu veux que nagios affiche un host unreachable le code sorti doit être 3 !

Code : Tout sélectionner

}
# Recuperation du string
$developpement_01 = 'snmpwalf -v 2c -c '.$com.' '.$IP$.' .32.51.65.53.68.70.70.69.54.66.57.51.57.49.52.52.57.53.48.52.66.56.48.54.50.66.48.69.49.51.49.70.66';
Erreur encore ici ! ton OID n'est pas complet ! un OID ne peut commencer par un . il y a donc un problème !

Code : Tout sélectionner

system "$developpement_01";
if($? !=> 80) {
Comme expliqué plus haut le $? renvoi le code de sortie de la commande précédente, mauvaise utilisation du $?

Code : Tout sélectionner

print "Warning";
exit;
pas de code de sortie ? Nagios ne va rien comprendre

Code : Tout sélectionner

}
if($? !=> 90) {
print "Critical";
exit;
}
else {
print "Ok";
}


# sur le nagios, je cherche aussi à print toutes les ressources que j'interroge et les mettre sur le dashboard
__END__
Attention a $? c'est un petit coquin ! il change après chaque commande ! Exemple...
Je lance la commande suivante en admettent que mon alim est HS:

Code : Tout sélectionner

[root@localhost tmp]# snmpwalk -v 2c -c X 192.168.X.X 1.3.6.1.4.1.674.10892.5.4.600.12.1.5.1.1 | grep "INTEGER: 3"
Si je lance la commande :

Code : Tout sélectionner

[root@localhost tmp]# echo $?
1
Mon résultat est 1 car mon alim est HS et la commande snmpwalk/grep s'est terminé avec le code retour 1
Si je refait

Code : Tout sélectionner

[root@localhost tmp]# echo $?
0
Mon résultat est 0 car ma commande echo qui est la dernière commande exécuté s'est terminé sans aucun problème, code retour 0.

Quand un plugin nagios se stop avec un exit, en fonction du numéro (exemple exit 1) Nagios va l'interpréter ! Voici la liste que des codes retour du plugin que nagios attends:
OK=>0,WARNING=>1,CRITICAL=>2,UNKNOWN=>3,DEPENDENT=>4
"Il vaut mieux un qui sait que cent qui cherchent." -sagesse populaire :D

Répondre