OVH Cloud OVH Cloud

snmpget et perl ... ou comment traiter une valeur de retour !!!

14 réponses
Avatar
toon
Bonjour.

Je pense que mon soucis a deja ete partage par bon nombre d'administrateurs
desireux de superviser leur reseau informatique via SNMP, et des script
ecrit en perl.
Je desire recuperer le resultat d'un snmpget (par exemple le traffic reseau
d'un port de switch) pour le traiter et l'injecter par exemple dans une base
rrdtool.
J'ai deja trouve plein de chose sur le net (rrdtool et freebsd), mais rien
de bien precis.

Par exemple :
#!/usr/bin/perl
$target = "./snmpget -c public -Oqv 192.168.155.10
.1.3.1.2.1.2.2.1.5.10101";
$result = system($target);
#$result = $result + 1;
print "$result\n";

Le resultat du snmpget est 10000000, par contre le resultat de $result est
0, et si j'enleve l'avant derniere ligne, $result devient 1.

0 c'est quoi, le code de sortie de la commande ???

Aider moi SVP !!!

4 réponses

1 2
Avatar
Patrick Mevzek

En fait, j'ai choisi la facilite en redirigeant la sortie du snmpget
dans le fichier que je vais lire ensuite via perl.


En règle générale, mauvaise idée.


Oui, mais je n'y arrive pas autrement. Si vous avez une piste meilleur a
me proposer, je suis tout ouiiiii !!!


Le code présent dans mon post précédent ne suffit pas ?
Si quelque chose n'est pas clair, demandez, c'est du Perl :-)

En effet, j'ai l'impression que les data obtenues (traffic reseau
entrant et sortant sur un switch cisco) via snmpget sont divise par
10.


Vous êtes sûrs que vous mélangez pas octets (bytes) et bits ? Ca ferait
un rapport 8.


La valeur renvoye par un snmpget sur le port d'un switch cisco me
renvoit une valeur en octets (bytes) non ?!?


Je ne sais pas ce que fait Cisco, et de toute façon la confusion n'est
peut-être pas à cet endroit là ?!

--
Patrick Mevzek . . . . . . Dot and Co (Paris, France)
<http://www.dotandco.net/> <http://www.dotandco.com/>
Dépêches sur le nommage <news://news.dotandco.net/dotandco.info.news>



Avatar
toon
En fait, j'ai choisi la facilite en redirigeant la sortie du snmpget
dans le fichier que je vais lire ensuite via perl.


En règle générale, mauvaise idée.


Oui, mais je n'y arrive pas autrement. Si vous avez une piste meilleur a
me proposer, je suis tout ouiiiii !!!


Le code présent dans mon post précédent ne suffit pas ?
Si quelque chose n'est pas clair, demandez, c'est du Perl :-)


Et bien justement, non, je ne saisie pas tout le code.
Je ne vois aucune requete snmpget.
Beaucoup de declaration de variables ... bref c'est un peu flou ... excusez
moi !!!

En effet, j'ai l'impression que les data obtenues (traffic reseau
entrant et sortant sur un switch cisco) via snmpget sont divise par
10.


Vous êtes sûrs que vous mélangez pas octets (bytes) et bits ? Ca ferait
un rapport 8.


La valeur renvoye par un snmpget sur le port d'un switch cisco me
renvoit une valeur en octets (bytes) non ?!?


Je ne sais pas ce que fait Cisco, et de toute façon la confusion n'est
peut-être pas à cet endroit là ?!


Je vais continuer mes investigation dans le domaine d'RRDTOOL et de sa
configuration.

--
Patrick Mevzek . . . . . . Dot and Co (Paris, France)
<http://www.dotandco.net/> <http://www.dotandco.com/>
Dépêches sur le nommage <news://news.dotandco.net/dotandco.info.news>





Avatar
Patrick Mevzek
Le code présent dans mon post précédent ne suffit pas ? Si quelque
chose n'est pas clair, demandez, c'est du Perl :-)


Et bien justement, non, je ne saisie pas tout le code. Je ne vois aucune
requete snmpget.


Le code utilise directement la bibliothèque parle qui fait du SNMP, soit
Net::SNMP.
On instancie d'abord une variable de cette classe, et après on fait une
requête (->get_request()), et on explore la réponse.

Regardez la doc de Net::SNMP aussi il devrait y avoir des exemples.

Beaucoup de declaration de variables ... bref c'est un peu flou ...
excusez moi !!!


En résumé:
Net::Session->session() pour se ``connecter'' en SNMP
puis
get_request() pour envoyer un ou plusieurs OIDs dont on veut récupérer
les valeurs, qu'on obtient dans une référence de tableau associatif
renvoyée par get_request().

Après on en fait ce qu'on veut, par exemple mise dans un RRD avec
RRDs::update (tirée de la bibliothèque Perl RRDs qui s'occupe de la
lecture/écriture au format RRD).

--
Patrick Mevzek . . . . . . Dot and Co (Paris, France)
<http://www.dotandco.net/> <http://www.dotandco.com/>
Dépêches sur le nommage <news://news.dotandco.net/dotandco.info.news>


Avatar
toon
OK ... ca calme !!!
Merci pour l'info ... je vais explorer le module perl de NET:SNMP alors.
Mais c'est vrai que c'est pas evident, car les exemples ne sont pas ecrit de
maniere tres lisible et comprehensible par un bleu en perl comme moi !!!

Dans tous les cas, merci pour vos reponses et pour leurs rapidite ;- >

"Patrick Mevzek" a écrit dans le message de
news:
Le code présent dans mon post précédent ne suffit pas ? Si quelque
chose n'est pas clair, demandez, c'est du Perl :-)


Et bien justement, non, je ne saisie pas tout le code. Je ne vois aucune
requete snmpget.


Le code utilise directement la bibliothèque parle qui fait du SNMP, soit
Net::SNMP.
On instancie d'abord une variable de cette classe, et après on fait une
requête (->get_request()), et on explore la réponse.

Regardez la doc de Net::SNMP aussi il devrait y avoir des exemples.

Beaucoup de declaration de variables ... bref c'est un peu flou ...
excusez moi !!!


En résumé:
Net::Session->session() pour se ``connecter'' en SNMP
puis
get_request() pour envoyer un ou plusieurs OIDs dont on veut récupérer
les valeurs, qu'on obtient dans une référence de tableau associatif
renvoyée par get_request().

Après on en fait ce qu'on veut, par exemple mise dans un RRD avec
RRDs::update (tirée de la bibliothèque Perl RRDs qui s'occupe de la
lecture/écriture au format RRD).

--
Patrick Mevzek . . . . . . Dot and Co (Paris, France)
<http://www.dotandco.net/> <http://www.dotandco.com/>
Dépêches sur le nommage <news://news.dotandco.net/dotandco.info.news>




1 2