Comment utiliser la suite d’outils Net-SNMP pour gérer et surveiller des serveurs

introduction

En tant qu’administrateur système, vous collectez en grande partie des informations précises sur vos serveurs et votre infrastructure. Il existe un certain nombre d’outils et d’options pour collecter et traiter ce type d’informations. Bon nombre d’entre eux reposent sur une technologie appelée * SNMP *.

SNMP est synonyme de protocole de gestion de réseau simple. C’est un moyen pour les serveurs de partager des informations sur leur état actuel, ainsi qu’un canal par lequel un administrateur peut modifier des valeurs prédéfinies. Bien que le protocole lui-même soit très simple, la structure des programmes qui implémentent SNMP peut être très complexe.

Dans les guides précédents, nous avons discuté de les principes de base du protocole SNMP et de https: // www. digitalocean.com/community/tutorials/how-to-install-and-configure-an-snmp-daemon-and-client-on-ubuntu-14-04[how pour installer et configurer des composants SNMP sur des serveurs Ubuntu 14.04]. Dans ce guide, nous allons passer en revue l’utilisation de base de la plupart des outils fournis avec la suite + net-snmp + avec laquelle nous travaillons.

Nous verrons comment exploiter la configuration que nous avons configurée dans le dernier guide afin de collecter réellement des informations et de manipuler des hôtes distants. Ce tutoriel suppose que vous avez configuré deux hôtes tels qu’ils se trouvaient à la fin du https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-an-snmp-daemon-and- client-on-ubuntu-14-04 [guide d’installation et de configuration].

Utilisation des commandes du client SNMP

La suite d’outils + net-snmp + que nous avons utilisée contient plusieurs utilitaires qui sont utiles pour interroger ou définir les valeurs d’OID sur des hôtes distants. Heureusement, la plupart des outils utilisent un ensemble de syntaxes partagées et ont des modèles d’utilisation similaires. Nous allons passer en revue l’utilisation de base de certains des plus populaires ci-dessous.

Pour les besoins de ce guide, nous supposons que vous connaissez la partie authentification dont vous avez besoin pour fournir les commandes + net-snmp +. Nous allons faire référence à toutes les informations d’authentification en tant que «++» dans les sections ci-dessous.

Si vous avez https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-an-snmp-daemon-and-client-on-ubuntu-14-04#CreatingaClientConfigurationFile[set up a up Comme indiqué ici, vous pouvez supprimer cette section de la commande, car les détails de l’authentification seront lus à partir de votre fichier de configuration.

Si vous n’avez pas de fichier + snmp.conf, vous devrez remplacer les« informations d’authentification »dans chaque commande par les informations nécessaires pour vous connecter à votre démon distant. Pour le compte + demo + que nous avons créé dans cette série, les valeurs suivantes peuvent être utilisées:

-u demo -l authPriv -a MD5 -x DES -A my_new_password -X my_new_password

Remplacez vos propres valeurs lors de l’exécution de ces commandes si vous vous trouvez dans un environnement différent.

Maintenant que vous connaissez les détails d’authentification dont vous aurez besoin, familiarisez-vous avec certaines des commandes disponibles.

Récupération de valeurs d’OID uniques avec SnmpGet

C’est probablement la commande la plus élémentaire pour interroger des informations à l’aide de SNMP. À l’aide des indicateurs d’authentification de base évoqués précédemment, vous pouvez utiliser la commande + snmpget + pour lire la valeur de n’importe quel OID auquel l’utilisateur a accès.

L’utilisation de base est de spécifier un OID numérique connu. Par exemple, nous pouvons récupérer la description du système en tapant:

snmpget   1.3.6.1.2.1.1.1.0

Comme nous avons installé le package + snmp-mibs-downloader + sur notre ordinateur responsable dans le dernier guide, nous pouvons également référencer les OID courants par leur nom. Par exemple, nous pourrions obtenir les mêmes informations en tapant:

snmpget   sysDescr.0

Récupération de la prochaine valeur d’OID disponible avec SnmpGetNext

Cette commande est utilisée pour obtenir la valeur de l’OID après celle donnée. La base de données MIB étant une hiérarchie accessible à pied, ses valeurs peuvent être extraites de manière séquentielle. En exploitant cette propriété, nous pouvons trouver la valeur (et l’étiquette OID) du prochain objet parmi tous les objets de l’arbre.

Par exemple, nous avons vu ci-dessus comment obtenir la description du système. Pour connaître le prochain OID et sa valeur, nous pouvons appeler la même commande, mais cette fois avec la commande + snmpgetnext +:

snmpgetnext   sysDescr.0
SNMPv2-MIB::sysObjectID.0 = OID: NET-SNMP-MIB::netSnmpAgentOIDs.10

Cela renvoie l’objet ObjectID du système, qui est le prochain objet séquentiel de l’arborescence. Nous pouvons répéter cette opération encore et encore en utilisant l’OID renvoyé pour obtenir chaque objet séquentiel:

snmpgetnext   sysObjectID.0
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (114216) 0:19:02.16

Ceux-ci peuvent utiliser les OID de chaîne ou les OID numériques, comme avant.

Utilisation de SnmpWalk pour récupérer une section de la hiérarchie MIB

Pour obtenir tous les OID sous un OID spécifié, vous pouvez utiliser la commande + snmpwalk +. Cela retournera tout l’arbre qui existe sous le point spécifié.

Par exemple, nous pouvons obtenir toutes les valeurs de la partie + system + de l’arbre en tapant:

snmpwalk   system
SNMPv2-MIB::sysDescr.0 = STRING: Linux target 3.13.0-24-generic #46-Ubuntu SMP Thu Apr 10 19:11:08 UTC 2014 x86_64
SNMPv2-MIB::sysObjectID.0 = OID: NET-SNMP-MIB::netSnmpAgentOIDs.10
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (126926) 0:21:09.26
SNMPv2-MIB::sysContact.0 = STRING: [email protected]
SNMPv2-MIB::sysName.0 = STRING: target
SNMPv2-MIB::sysLocation.0 = STRING: Sitting on the Dock of the Bay
SNMPv2-MIB::sysServices.0 = INTEGER: 72
. . .

Cette commande fonctionne en envoyant automatiquement des requêtes SNMP getNext à l’hôte jusqu’à ce qu’il puisse construire l’arborescence complète sous la valeur demandée.

Si vous souhaitez récupérer l’ensemble de l’arborescence MIB, vous pouvez exécuter la commande à la racine:

snmpwalk   .

Cela renverra l’arborescence entière accessible à l’utilisateur fourni.

Ceci peut être utilisé avec + grep + pour rechercher des noms d’OID spécifiques. Par exemple, vous savez peut-être que l’OID + sysUpTime.0 + renvoie la durée de fonctionnement du démon SNMP sur les hôtes distants, mais vous pouvez être curieux de savoir depuis combien de temps le serveur est en ligne.

Nous pouvons utiliser la commande + snmpwalk + pour obtenir la totalité de la hiérarchie des OID, puis la filtrer avec grep pour rechercher tout ce qui a un «temps de disponibilité» dans le nom. Nous allons utiliser le drapeau + -i + pour désactiver la sensibilité à la casse dans notre recherche:

snmpwalk   . | grep -i uptime

Vous recevrez une réponse qui ressemble à ceci:

DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (113856) 0:18:58.56
SNMPv2-MIB::sysORUpTime.1 = Timeticks: (0) 0:00:00.00
SNMPv2-MIB::sysORUpTime.2 = Timeticks: (0) 0:00:00.00
SNMPv2-MIB::sysORUpTime.3 = Timeticks: (0) 0:00:00.00
SNMPv2-MIB::sysORUpTime.4 = Timeticks: (0) 0:00:00.00
SNMPv2-MIB::sysORUpTime.5 = Timeticks: (0) 0:00:00.00
SNMPv2-MIB::sysORUpTime.6 = Timeticks: (0) 0:00:00.00
SNMPv2-MIB::sysORUpTime.7 = Timeticks: (0) 0:00:00.00
SNMPv2-MIB::sysORUpTime.8 = Timeticks: (0) 0:00:00.00
SNMPv2-MIB::sysORUpTime.9 = Timeticks: (0) 0:00:00.00
SNMPv2-MIB::sysORUpTime.10 = Timeticks: (0) 0:00:00.00

NOTIFICATION-LOG-MIB::nlmLogVariableID."default".1.1 = OID: DISMAN-EVENT-MIB::sysUpTimeInstance
NET-SNMP-AGENT-MIB::nsModuleName."".8.1.3.6.1.2.1.1.3.127 = STRING: mibII/sysUpTime

Après avoir essayé quelques-unes de ces valeurs, nous pouvons découvrir que + hrSystemUptime.0 + OID contient la valeur de disponibilité adéquate. Maintenant, chaque fois que nous voulons combien de temps cela fait depuis le démarrage de cette machine, nous pouvons utiliser cet OID:

snmpget   hrSystemUptime.0
HOST-RESOURCES-MIB::hrSystemUptime.0 = Timeticks: (9795352) 1 day, 3:12:33.52

Comme vous pouvez le constater, + snmpwalk + peut être très utile pour découvrir les OID corrects pour les valeurs.

Traduire entre les OID numériques et les identificateurs de chaîne avec SnmpTranslate

L’une des commandes les plus utiles de la suite ne communique pas avec l’hôte distant. Au lieu de cela, cela nous aide simplement à découvrir des informations sur la hiérarchie MIB.

En utilisant l’utilitaire + snmptranslate +, nous pouvons facilement convertir les résultats numériques en leur représentation textuelle:

snmptranslate 1.3.6.1.2.1.1.1.0
SNMPv2-MIB::sysDescr.0

Cela donne le module MIB qui définit le nom textuel et le nom de l’OID lui-même.

Nous pouvons également utiliser l’outil pour traduire dans l’autre sens. Lorsque nous avons découvert la MIB textuelle pour le temps de disponibilité du système (+ hrSystemUptime.0 +), nous aurions peut-être été curieux de savoir où se trouvait l’arborescence définie. Nous pourrions passer le drapeau + -On + pour obtenir l’adresse numérique.

N’oubliez pas d’inclure le module MIB indiqué chaque fois que vous recevez des informations sur un OID:

snmptranslate -On HOST-RESOURCES-MIB::hrSystemUptime.0
.1.3.6.1.2.1.25.1.1.0

Vous pouvez également utiliser cet outil pour obtenir de nombreuses autres informations détaillées sur n’importe quel point. Par exemple, avec l’indicateur + -Td +, vous pouvez obtenir une description complète, avec le chemin en bas:

snmptranslate -Tp 1.3.6.1.2.1.1.1.0
SNMPv2-MIB::sysDescr.0
sysDescr OBJECT-TYPE
 -- FROM   SNMPv2-MIB
 -- TEXTUAL CONVENTION DisplayString
 SYNTAX    OCTET STRING (0..255)
 DISPLAY-HINT  "255a"
 MAX-ACCESS    read-only
 STATUS    current
 DESCRIPTION   "A textual description of the entity.  This value should
           include the full name and version identification of
           the system's hardware type, software operating-system,
           and networking software."
::= { iso(1) org(3) dod(6) internet(1) mgmt(2) mib-2(1) system(1) sysDescr(1) 0 }

Vous pouvez modifier l’affichage de la sortie en passant un paramètre + -O_ +, où «_» est remplacé par un format de sortie. Vous pouvez voir la liste complète dans la section «OPTIONS DE SORTIE» de la page de manuel + snmpcmd +, mais voici certains des choix les plus courants:

Output Flag Description Example

-Oa

Display in ASCII strings

SNMPv2-MIB::sysDescr.0

-Of

Display full textual path to OID

.iso.org.dod.internet.mgmt.mib-2.system.sysDescr.0

-On

Display full numerical path to OID

.1.3.6.1.2.1.1.1.0

-Os

Display only the end textual OID representation

sysDescr.0

Notez que les options de formatage ci-dessus peuvent également être appliquées à la plupart des autres outils de cette suite pour formater la sortie comme vous le souhaitez.

Récupérer des données tabulaires avec une sortie formatée avec SnmpTable

Certaines informations stockées dans SNMP sont en réalité tabulaires. Bien que + snmpwalk + puisse afficher toutes les données pertinentes, le formatage n’est pas idéal pour certaines utilisations.

Par exemple, si nous utilisons + snmpwalk + sur l’OID + udpTable +:

snmpwalk   udpTable

Nous aurions ceci:

UDP-MIB::udpLocalAddress.0.0.0.0.161 = IpAddress: 0.0.0.0
UDP-MIB::udpLocalAddress.0.0.0.0.35679 = IpAddress: 0.0.0.0
UDP-MIB::udpLocalPort.0.0.0.0.161 = INTEGER: 161
UDP-MIB::udpLocalPort.0.0.0.0.35679 = INTEGER: 35679

Cependant, si nous faisons la même demande avec + snmptable +:

snmptable   udpTable

Nous obtiendrions un tableau bien formaté, comme ceci:

udpLocalAddress udpLocalPort
        0.0.0.0          161
        0.0.0.0        35679

C’est un format beaucoup plus agréable et plus facile à utiliser pour un lecteur humain.

Modification des valeurs avec SnmpSet

Cette commande est utilisée pour écrire la valeur dans un OID. Jusqu’à présent, les autres commandes étaient utilisées pour obtenir des informations, mais cette commande permet de modifier des données sur l’hôte.

Bien que la commande + snmpset + hérite de la plupart de sa syntaxe des autres commandes, des informations supplémentaires sont nécessaires pour définir les valeurs. La syntaxe de base ressemble à ceci:

snmpset

La plupart des champs ci-dessus sont assez explicites. Cependant, les types de données exigent un peu plus d’explications. Chaque type est représenté par un seul caractère. La liste des types possibles est ci-dessous:

  • * i *: entier

  • * u *: entier non signé

  • * s *: String

  • * x *: chaîne hexadécimale

  • * d *: chaîne décimale

  • * n *: objet nul

  • * o *: ID d’objet

  • * t *: ticks de temps

  • * a *: adresse IP

  • * b *: bits

Depuis que nous avons téléchargé le paquetage + snmp-mibs-downloader +, vous pouvez vous échapper la plupart du temps en tapant + = + à la place de l’un des identificateurs de type.

Pour illustrer cette commande, nous pouvons commenter l’une des valeurs définies dans notre fichier + snmpd.conf + sur l’ordinateur de l’agent. Spécifier des valeurs dans le fichier de configuration consiste essentiellement à le coder en dur, ce qui vous empêche de modifier la valeur à l’aide de méthodes SNMP normales.

Sur l’ordinateur de l’agent, ouvrez le fichier + / etc / snmp / snmpd.conf +:

sudo nano /etc/snmp/snmpd.conf

Mettez en commentaire la directive + sysLocation +:

sysLocation  Sitting on the Dock of the Bay

Enregistrez et fermez le fichier. Maintenant redémarrez le service:

sudo service snmpd restart

Maintenant, depuis notre machine de gestion, nous pouvons définir l’OID + sysLocation + sur «Terre» en tapant ceci. Notez le «s» qui spécifie que le type de données est une chaîne:

snmpset   sysLocation.0 s "Earth"
SNMPv2-MIB::sysLocation.0 = STRING: Earth

Nous pouvons tester si le spécificateur de type + = + définira correctement le type de valeur en affinant notre emplacement:

snmpset   sysLocation.0 = "New York City"
SNMPv2-MIB::sysLocation.0 = STRING: New York City

Il a correctement interprété notre valeur comme une chaîne régulière.

Exécution efficace des demandes avec SnmpBulkGet et SnmpBulkWalk

L’émission répétée de requêtes + snmpget + et + + snmpwalk + peut créer beaucoup de trafic réseau si elle est utilisée à plusieurs reprises.

Pour réduire ce problème, deux commandes compagnons appelées + snmpbulkget + et + + snmpbulkwalk + ont été créées. Ceux-ci regrouperont toutes les valeurs de retour dans une transaction unique plutôt que dans une transaction pour chaque valeur OID renvoyée. Vous pouvez également transmettre plusieurs OID à la fois.

Pour utiliser + snmpbulkget, vous transmettez un ou plusieurs KID ou branches et vous obtiendrez autant de valeurs pour des OID supplémentaires que le nombre le permet:

snmpbulkget   system
SNMPv2-MIB::sysDescr.0 = STRING: Linux target 3.13.0-24-generic #46-Ubuntu SMP Thu Apr 10 19:11:08 UTC 2014 x86_64
SNMPv2-MIB::sysObjectID.0 = OID: NET-SNMP-MIB::netSnmpAgentOIDs.10
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (429891) 1:11:38.91
SNMPv2-MIB::sysContact.0 = STRING: call now
SNMPv2-MIB::sysName.0 = STRING: target
SNMPv2-MIB::sysLocation.0 = STRING: New York City
SNMPv2-MIB::sysServices.0 = INTEGER: 72
SNMPv2-MIB::sysORLastChange.0 = Timeticks: (0) 0:00:00.00
SNMPv2-MIB::sysORID.1 = OID: SNMP-MPD-MIB::snmpMPDCompliance
SNMPv2-MIB::sysORID.2 = OID: SNMP-USER-BASED-SM-MIB::usmMIBCompliance

Une chose à noter est que + snmpbulkget + fonctionne comme une commande + snmpgetnext +, ce qui signifie qu’il laisse de côté l’objet donné en tant qu’argument. Dans l’exemple ci-dessus, au lieu de fournir un objet spécifique, nous avons fourni une branche. Vous pouvez penser que + snmpbulkget + est un appel + snmpwalk +, mais les résultats seront dans un paquet.

La commande + snmpbulkwalk + fonctionne de la même manière, mais continuera à exécuter les commandes + BulkGet + jusqu’à ce que le sous-arbre entier soit récupéré.

Conclusion

Comme vous pouvez le constater, la suite + net-snmp + vous permet de récupérer et de manipuler des données de différentes façons. En scriptant ces actions ou en exploitant ces utilitaires dans des applications, vous pouvez créer des environnements de surveillance et de gestion complexes.

Related