navigation
Home
admin
|
Snmp
October 18th, 2016
|
| Sommaire |  |
C'est quoi une MIB ?
Création d'une MIB de test
C'est quoi un OID ?
supervision avec SNMP
Versions de SNMP
Utilisation d'extend
Interrogation avec snmpwalk
Interrogation avec snmpget
Emission de traps SNMP
| C'est quoi une MIB ? |  |
The MIB are files describing the objects used by the SNMP protocol. The MIB term stands for Management Information Base because the structure of it is quite similar to a database description. This is a text file following the ASN1 standard.
Source : http://www.luteus.biz/Download/LoriotPro_Doc/V4/LoriotProV4Doc/C3-Introduction_to_Network_Supervision/C3-E5_MIB.htm
L'outil tkmib est très pratique pour parcourir une MIB !
| Création d'une MIB de test |  |
root@m2:/usr/share/snmp/mibs# more MY-MIB.my
MY-MIB DEFINITIONS ::= BEGIN
IMPORTS
OBJECT-TYPE, Integer32, NOTIFICATION-TYPE, enterprises
FROM SNMPv2-SMI
;
monentreprise OBJECT IDENTIFIER ::= {enterprises 42}
testNotification NOTIFICATION-TYPE
OBJECTS { evenementTestChaine }
STATUS current
DESCRIPTION
"Notification d un evenement test"
::= { monentreprise 1 }
evenementTestChaine OBJECT-TYPE
SYNTAX OCTET STRING
MAX-ACCESS read-only
STATUS current
DESCRIPTION "A description of something"
::= {monentreprise 2}
testTrap NOTIFICATION-TYPE
STATUS current
DESCRIPTION "Test notification"
::= {monentreprise 3}
testCount OBJECT-TYPE
SYNTAX Integer32
MAX-ACCESS read-only
STATUS current
DESCRIPTION "A sample count of something."
::= {monentreprise 4}
END
root@m2:/usr/share/snmp/mibs# |
| C'est quoi un OID ? |  |
Un OID (identifiant d'objets, Object Identifiers, ou OID) est une paire clé-valeur unique.
Les OID peuvent très vite être longs et c'est compliqué pour un humain de se rappeler la signification de cet ensemble de nombres. C'est pour cela qu'une méthode a été mise au point pour traduire un OID numérique dans une forme lisible pour un humain. Cette carte de traduction est stockée dans un fichier texte appelé Management Information Base ou MIB.
Vous n'avez pas besoin d'un MIB pour utiliser SNMP ou effectuer des requêtes sur des périphériques SNMP mais sans la MIB, vous n'allez pas savoir facilement ce que signifient les données retournées par le périphérique. Dans certains cas, c'est facile comme le nom de l'hôte, l'usage des disques ou les informations d'état des ports. Dans d'autres cas, cela peut être plus difficile et une MIB peut être d'une grande aide. Notez qu'il est assez inhabituel pour la plupart des applications d'écrire des requêtes uniquement numériques ; la plupart des applications permettent l'installation de MIB complémentaires. Cette installation consiste en fait à placer les MIB à un endroit où l'application cliente SNMP peut les trouver pour effectuer la traduction.
Source : http://doc.ubuntu-fr.org/snmp
| supervision avec SNMP |  |
Polling : le client va interroger régulièrement le device SNMP
Trap : le devic SNMP envoie une alerte
| Versions de SNMP |  |
Il existe 3 versions différentes du protocole SNMP :
SNMP v1 (RFC 1155, 1157 et 1212).
SNMP v2c (RFC 1901 à 1908).
SNMP v3 (RFC 3411 à 3418).
A noter :
La version 2c du protocole ajoute quelques modifications par rapport à la version 1. Cette version a été conçue pour ajouter plus facilement de nombreux paramètres aux interruptions. Elle permet également la possibilité de valider la réception de l'interruption via un système dacquittement (ACK), on parle alors de trap SNMPv2 INFORM.
Les champs utilisés sont les suivants :
- SNMP-VERSION : version SNMP, par défaut '2c'.
- SNMP-COMMUNITY : communauté SNMP. Permet d'autoriser/filtrer la réception des interruptions sur le collecteur.
- IP-DESTINATION : adresse IP ou nom DNS du collecteur d'interruptions.
- OID-TRAP : OID complet de linterruption.
- UPTIME : temps d'activité en secondes depuis le démarrage de l'équipement.
Dans le cas d'ajout de paramètre, 3 variables sont à ajouter pour chaque paramètre :
- OID-PARAMETRE : OID complet du paramètre.
- TYPE-PARAMETRE : type de la valeur du paramètre : i pour integer, s pour string, ...
- VALEUR-PARAMETRE : valeur du paramètre.
| Utilisation d'extend |  |
root@netmasterdeb-04:/home/bruno# tail /etc/snmp/snmpd.conf
extend compteur_index /opt/scripts/print_compteur_index
extend compteur /opt/scripts/print_compteur
root@netmasterdeb-04:/home/bruno# |
| Interrogation avec snmpwalk |  |
Lorsqu'on décide de superviser un périphérique, il est important de connaître ce qui est disponible.
root@monitor1:/# snmpwalk -v 2c -c 'mycoro' 10.165.100.112 |
root@monitor1:/# snmpwalk -v 2c -c 'mycoro' 10.165.100.112 NET-SNMP-EXTEND-MIB::nsExtendOutputFull
NET-SNMP-EXTEND-MIB::nsExtendOutputFull."test1" = STRING: Hello, world!
NET-SNMP-EXTEND-MIB::nsExtendOutputFull."test2" = STRING: Hello, world!
Hi there
NET-SNMP-EXTEND-MIB::nsExtendOutputFull."compteur" = STRING: 4
root@monitor1:/# |
root@monitor1:/# snmpwalk -v 2c -c 'mycoro' 10.165.100.112 NET-SNMP-EXTEND-MIB::nsExtendObjects
NET-SNMP-EXTEND-MIB::nsExtendNumEntries.0 = INTEGER: 3
NET-SNMP-EXTEND-MIB::nsExtendCommand."test1" = STRING: /bin/echo
[...] |
root@monitor1:/# snmpwalk -On -v 2c -c 'mycoro' 10.165.100.112 NET-SNMP-EXTEND-MIB::nsExtendObjects
.1.3.6.1.4.1.8072.1.3.2.1.0 = INTEGER: 3
.1.3.6.1.4.1.8072.1.3.2.2.1.2.5.116.101.115.116.49 = STRING: /bin/echo
.1.3.6.1.4.1.8072.1.3.2.2.1.2.5.116.101.115.116.50 = STRING: echo
.1.3.6.1.4.1.8072.1.3.2.2.1.2.8.99.111.109.112.116.101.117.114 = STRING: /opt/scripts/print_compteur
.1.3.6.1.4.1.8072.1.3.2.2.1.3.5.116.101.115.116.49 = STRING: Hello, world!
.1.3.6.1.4.1.8072.1.3.2.2.1.3.5.116.101.115.116.50 = STRING: Hello, world! ; echo Hi there ; exit 35
[...] |
root@monitor1:/# snmpwalk -On -v 2c -c 'mycoro' 10.165.100.112 'NET-SNMP-EXTEND-MIB::nsExtendOutLine."compteur"'
.1.3.6.1.4.1.8072.1.3.2.4.1.2.8.99.111.109.112.116.101.117.114.1 = STRING: 5217
root@monitor1:/# snmpwalk -On -v 2c -c 'mycoro' 10.165.100.112 'NET-SNMP-EXTEND-MIB::nsExtendOutLine."compteur_index"'
.1.3.6.1.4.1.8072.1.3.2.4.1.2.14.99.111.109.112.116.101.117.114.95.105.110.100.101.120.1 = STRING: 1
root@monitor1:/# |
| Interrogation avec snmpget |  |
L'application snmpget permet d'obtenir l'information concernant un OID précis.
root@monitor1:/# snmpget -v 2c -c 'mycoro' 10.165.100.112 'NET-SNMP-EXTEND-MIB::nsExtendOutLine."compteur".1'
NET-SNMP-EXTEND-MIB::nsExtendOutLine."compteur".1 = STRING: 4
root@monitor1:/# |
| Emission de traps SNMP |  |
Avec Linux ou Windows snmptrap (http://www.net-snmp.org/) fonctionne très bien :
Windows :
C:\scripts\NET-SNMP\bin\snmptrap.exe -v2c -c "mycoro" 10.16.20.208 0 .1.3.6.1.4.1.42.1 .1.3.6.1.4.1.42.2 s "ici un message"
|
Ainsi, sous Windows, il est possible de créer des scripts qui vont scruter l'observateur d'évènements et si un certain message d'erreur est détecté, envoyer un TRAP SNMP.
Exemple de script powershell :
# Le script s'exécute tooutes les 5 mn
# => on ne regarde que les 5 dernières minutes de l'observateur d'évènements
#
$lastmn = (get-date) - (New-TimeSpan -Minutes 5)
# Pour debug
#Get-WinEvent -FilterHashTable @{providername = "VMware View";StartTime=$last30;level=2} | format-List -Property TimeCreated,MachineName,Message
# Vérification de l'execution du script
get-date |Out-File -append C:scriptsget-ErrorEvents.log
# On récupère les évènements venant de vmware et de niveau 2
Get-WinEvent -FilterHashTable @{providername = "VMware View";StartTime=$lastmn;level=2} | foreach {
$myxmldata = [xml]$_.ToXml()
$Message = $myxmldata.Event.EventData.Data.Substring(0,50)
write "Message : $Message " |Out-File -append C:scriptsget-ErrorEvents.log
& C:scriptsNET-SNMPbinsnmptrap.exe -v2c -c "mycomm" 10.155.100.204 0 .1.3.6.1.4.1.42.1 .1.3.6.1.4.1.42.2 s "$Message"
}
|
Ce script va analyser l'observateur d'évènement. Lorsque l'émetteur est "VMware View" et qu'il s'agit d'une alerte (level=2) un TRAP SNMP est envoyé.
La récupération des TRAP SNMP avec Nagios est traitée ici : http://perso.univ-lemans.fr/~brichard/surveillance/?doc=Nagios#trap_snmp
|
|
Contact
|
|---|
Pour m'envoyer un mail, Pour me laisser un commentaire :richard.brunooo chez gmail.com |  |
|
|