18.7. Surveiller les performances avec Net-SNMP
Red Hat Enterprise Linux 7 inclut la suite de logiciels Net-SNMP, qui offre un agent flexible et extensible ou simple network management protocol (SNMP). Cet agent et ses utilitaires associés peuvent être utilisés pour fournir des données de performance à partir d'un grand nombre de systèmes sur une variété d'outils qui prennent en charge les interrogations via le protocole
SNMP.
Cette section fournit des informations sur la configuration de l'agent Net-SNMP pour fournir des données de performance sur le réseau de manière sécurisée, sur la récupération de données en utilisant le protocole SNMP, et sur l'extension de l'agent SNMP pour fournir des indicateurs de performance personnalisés.
18.7.1. Installer Net-SNMP Copier lienLien copié sur presse-papiers!
Copier lienLien copié sur presse-papiers!
La suite de logiciels Net-SNMP est disponible en tant qu'ensemble de paquets RPM dans la distribution de logiciels Red Hat Enterprise Linux. Tableau 18.2, « Paquets Net-SNMP disponibles » résume chacun des paquets et son contenu.
| Paquet | Fournit |
|---|---|
| net-snmp | Le démon de l'agent SNMP et la documentation. Ce paquet est requis pour exporter des données de performance. |
| net-snmp-libs | La bibliothèque netsnmp et les management information bases (MIB) groupése. Ce paquet est requis pour exporter des données de performance. |
| net-snmp-utils | Les clients SNMP tels que snmpget et snmpwalk. Ce paquet est requis pour effectuer des requêtes de données de performance d'un système sur SNMP. |
| net-snmp-perl | L'utilitaire mib2c et le module Perl NetSNMP. Remarquez que ce paquet est fournit par le canal optionnel « Optional ». Veuillez consulter la Section 8.5.7, « Ajouter les référentiels « Optional » (Optionnel) et « Supplementary » (Supplémentaire) » pour obtenir davantage d'informations sur les canaux supplémentaires de Red Hat. |
| net-snmp-python | La bibliothèque cliente SNMP de Python. Remarquez que ce paquet est fourni par le canal « Optional ». Veuillez consulter la Section 8.5.7, « Ajouter les référentiels « Optional » (Optionnel) et « Supplementary » (Supplémentaire) » pour obtenir davantage d'informations sur les canaux supplémentaires Red Hat. |
Pour installer ces paquets, utiliser la commande
yum sous la forme suivante :
yum install package…
yum install package…
Par exemple, pour installer le démon de l'agent SNMP et les clients SNMP utilisés dans le reste de cette section, veuillez saisir ce qui suit dans une invite de shell en tant qu'utilisateur
root :
yum install net-snmp net-snmp-libs net-snmp-utils
~]# yum install net-snmp net-snmp-libs net-snmp-utils
Pour obtenir davantage d'informations sur la manière d'installer de nouveaux paquets sur Red Hat Enterprise Linux, veuillez consulter la Section 8.2.4, « Installation de paquets ».
18.7.2. Exécuter le démon Net-SNMP Copier lienLien copié sur presse-papiers!
Copier lienLien copié sur presse-papiers!
Le paquet net-snmp contient
snmpd, le démon de l'agent SNMP. Cette section fournit des informations sur la manière de lancer, arrêter, et redémarrer le service snmpd. Pour obtenir davantage d'informations sur la gestion des services systèmes dans Red Hat Enterprise Linux 7, veuillez consulter le Chapitre 9, Gérer les services avec systemd.
18.7.2.1. Lancer le service Copier lienLien copié sur presse-papiers!
Copier lienLien copié sur presse-papiers!
Pour exécuter le service
snmpd dans la session actuelle, veuillez saisir ce qui suit dans l'invite de shell en tant qu'utilisateur root :
systemctl start snmpd.service
systemctl start snmpd.service
Pour configurer le service afin qu'il soit automatiquement lancé lors du démarrage, veuillez utiliser la commande suivante :
systemctl enable snmpd.service
systemctl enable snmpd.service
18.7.2.2. Arrêter le service Copier lienLien copié sur presse-papiers!
Copier lienLien copié sur presse-papiers!
Pour arrêter le service en cours d'exécution
snmpd, veuillez saisir ce qui suit dans une invite de shell en tant qu'utilisateur root :
systemctl stop snmpd.service
systemctl stop snmpd.service
Pour désactiver le lancement du service lors du démarrage, veuillez utiliser la commande suivante :
systemctl disable snmpd.service
systemctl disable snmpd.service
18.7.2.3. Redémarrer le service Copier lienLien copié sur presse-papiers!
Copier lienLien copié sur presse-papiers!
Pour redémarrer le service
snmpd, saisissez ce qui suit dans l'invite du shell :
systemctl restart snmpd.service
systemctl restart snmpd.service
Cette commande arrête le service et le lance à nouveau en une succession rapide. Pour uniquement recharger la configuration sans arrêter le service, veuillez exécuter la commande suivante à la place :
systemctl reload snmpd.service
systemctl reload snmpd.service
Cela amène le service en cours d'exécution
snmpd à recharger sa configuration.
18.7.3. Configurer Net-SNMP Copier lienLien copié sur presse-papiers!
Copier lienLien copié sur presse-papiers!
Pour changer la configuration du démon de l'agent Net-SNMP, veuillez modifier le fichier de configuration
/etc/snmp/snmpd.conf. Le fichier par défaut snmpd.conf inclus avec Red Hat Enterprise Linux 7 contient beaucoup de commentaires et peut servir de bon point de départ pour la configuration de l'agent.
Cette section traite de deux tâches courantes : la définition des informations système et la configuration de l'authentification. Pour obtenir davantage d'informations sur les directives de configuration disponibles, veuillez consulter la page man de
snmpd.conf(5). En outre, il existe un utilitaire dans le paquet net-snmp nommé snmpconf, qui peut être utilisé de manière interactive pour générer une configuration d'agent valide.
Remarquez que le paquet net-snmp-utils doit être installé pour pouvoir utiliser l'utilitaire
snmpwalk décrit dans cette section.
Note
Pour que tout changement apporté au fichier de configuration puisse entrer en vigueur, veuillez forcer le service
snmpd à relire la configuration en exécutant la commande suivante en tant qu'utilisateur root :
systemctl reload snmpd.service
systemctl reload snmpd.service
18.7.3.1. Définir les informations système Copier lienLien copié sur presse-papiers!
Copier lienLien copié sur presse-papiers!
Net-SNMP fournit certaines informations système rudimentaires via l'arborescence
system. Par exemple, la commande snmpwalk suivante montre l'arborescence system avec une configuration d'agent par défaut.
snmpwalk -v2c -c public localhost system
~]# snmpwalk -v2c -c public localhost system
SNMPv2-MIB::sysDescr.0 = STRING: Linux localhost.localdomain 3.10.0-123.el7.x86_64 #1 SMP Mon May 5 11:16:57 EDT 2014 x86_64
SNMPv2-MIB::sysObjectID.0 = OID: NET-SNMP-MIB::netSnmpAgentOIDs.10
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (464) 0:00:04.64
SNMPv2-MIB::sysContact.0 = STRING: Root <root@localhost> (configure /etc/snmp/snmp.local.conf)[sortie tronquée]
Par défaut, l'objet
sysName est défini sur le nom d'hôte. Les objets sysLocation et sysContact peuvent être configurés dans le fichier /etc/snmp/snmpd.conf en modifiant la valeur des directives syslocation et syscontact. Exemple :
syslocation Datacenter, Row 4, Rack 3 syscontact UNIX Admin <admin@example.com>
syslocation Datacenter, Row 4, Rack 3
syscontact UNIX Admin <admin@example.com>
Après avoir apporté des changements au fichier de configuration, rechargez la configuration et testez-la en exécutant la commande
snmpwalk à nouveau :
18.7.3.2. Configurer l'authentification Copier lienLien copié sur presse-papiers!
Copier lienLien copié sur presse-papiers!
Le démon de l'agent Net-SNMP prend en charge les trois versions du protocole SNMP. Les deux première versions (1 et 2c) fournissent une simple authentification en utilisant une chaîne de communauté. Cette chaîne est un secret partagé entre l'agent et tout utilitaire client. Cependant, la chaîne est transmise en texte clair sur le réseau, et n'est donc pas considérée comme sécurisée. La version 3 du protocole SNMP prend en charge l'authentification d'utilisateur et le chiffrement de messages en utilisant tout un ensemble de protocoles. L'agent Net-SNMP prend également en charge la mise sous tunnel avec SSH, l'authentification TLS avec certificats X.509, et l'authentification Kerberos.
Configurer une communauté SNMP Version 2c
Pour configurer une communauté SNMP version 2c, veuillez utiliser la directive
rocommunity ou rwcommunity dans le fichier de configuration /etc/snmp/snmpd.conf. Le format des directives est comme suit :
directive community [source [OID]]
directive community [source [OID]]
… avec community correspondant à la chaîne de communauté à utiliser, source est une adresse IP ou un sous-réseau, et OID est l'arborescence SNMP à laquelle l'accès doit être fourni. Ainsi, la directive suivante fournit un accès en lecture seule à l'arborescence
system à un client utilisant la chaîne de communité « redhat » sur la machine locale :
rocommunity redhat 127.0.0.1 .1.3.6.1.2.1.1
rocommunity redhat 127.0.0.1 .1.3.6.1.2.1.1
Pour tester la configuration, veuillez utiliser la commande
snmpwalk avec les options -v et -c.
Configurer un utilisateur SNMP Version 3
Pour configurer un utilisateur SNMP version 3, veuillez utiliser la commande
net-snmp-create-v3-user. Cette command ajoute des entrées aux fichiers /var/lib/net-snmp/snmpd.conf et /etc/snmp/snmpd.conf qui créent l'utilisateur et offrent accès à l'utilisateur. Remarque que la commande net-snmp-create-v3-user peut uniquement être exécutée lorsque l'agent n'est pas en cours d'exécution. L'exemple suivant crée l'utilisateur « admin » avec le mot de passe « redhatsnmp » :
La directive
rwuser (ou rouser lorsque l'option de ligne de commande -ro est fournie) ajoutée par net-snmp-create-v3-user à /etc/snmp/snmpd.conf possède un format similaire aux directives rwcommunity et rocommunity :
directive user [noauth|auth|priv] [OID]
directive user [noauth|auth|priv] [OID]
… quand user est un nom d'utilisateur et OID est l'arborescence SNMP à laquelle l'accès doit être fournit . Par défaut, le démon de l'agent Net-SNMP autorise uniquement les requêtes authentifiées (l'option
auth). L'option noauth vous permet d'autoriser des requêtes non authentifiées, et l'option priv applique l'utilisation du chiffrement. L'option authpriv spécifie que les requêtes doivent être authentifiées et que les réponses doivent être chiffrées.
Ainsi, la ligne suivante offre à l'utilisateur « admin » un accès en lecture et écriture à la totalité de l'arborescence :
rwuser admin authpriv .1
rwuser admin authpriv .1
Pour tester la configuration, veuillez créer un répertoire
.snmp/ dans le répertoire personnel de l'utilisateur, ainsi qu'un fichier de configuration nommé snmp.conf dans ce répertoire (~/.snmp/snmp.conf) avec les lignes suivantes :
defVersion 3 defSecurityLevel authPriv defSecurityName admin defPassphrase redhatsnmp
defVersion 3
defSecurityLevel authPriv
defSecurityName admin
defPassphrase redhatsnmp
La commande
snmpwalk utilisera ces paramètres d'authentification lorsque des requêtes sont effectuées sur l'agent :
snmpwalk -v3 localhost system
~]$ snmpwalk -v3 localhost system
SNMPv2-MIB::sysDescr.0 = STRING: Linux localhost.localdomain 3.10.0-123.el7.x86_64 #1 SMP Mon May 5 11:16:57 EDT 2014 x86_64[sortie tronquée]
18.7.4. Récupérer des données de performance sur SNMP Copier lienLien copié sur presse-papiers!
Copier lienLien copié sur presse-papiers!
L'agent Net-SNMP sur Red Hat Enterprise Linux fournit un large éventail d'informations sur les performances via le protocole SNMP. De plus, des requêtes peuvent être effectués sur l'agent pour obtenir une liste des paquets RPM installés sur le système, une liste des processus actuellement en cours d'exécution sur le système, ou la configuration réseau du système.
Cette section fournit un aperçu des OID liés aux réglages des performances disponibles sur SNMP. Elle suppose que le paquet net-snmp-utils soit installé et que l'utilisateur ait accès à l'arborescence SNMP comme décrit dans la Section 18.7.3.2, « Configurer l'authentification ».
18.7.4.1. Configuration du matériel Copier lienLien copié sur presse-papiers!
Copier lienLien copié sur presse-papiers!
Le MIB des ressources d'hôte, «
Host Resources MIB », inclus avec Net-SNMP présente des informations sur la configuration du matériel et des logiciels d'un hôte à un utilitaire client. Tableau 18.3, « OID disponibles » résume les différents OID disponibles sous ce MIB.
| OID | Description |
|---|---|
HOST-RESOURCES-MIB::hrSystem | Contient des informations système générales telles que le temps d'activité, le nombre d'utilisateurs, et le nombre de processus en cours d'utilisation. |
HOST-RESOURCES-MIB::hrStorage | Contient des données sur l'utilisation de la mémoire et des systèmes de fichiers. |
HOST-RESOURCES-MIB::hrDevices | Contient une liste des processeurs, périphériques réseau, et systèmes de fichiers. |
HOST-RESOURCES-MIB::hrSWRun | Contient une liste de tous les processus en cours d'utilisation. |
HOST-RESOURCES-MIB::hrSWRunPerf | Contient des statistiques sur la mémoire et le CPU sur la table de processus de HOST-RESOURCES-MIB::hrSWRun. |
HOST-RESOURCES-MIB::hrSWInstalled | Contient une liste de la base de données RPM. |
Un certain nombre de tables SNMP sont également disponibles dans le MIB des ressources de l'hôte, pouvant être utilisées pour récupérer un résumé des informations disponibles. L'exemple suivant afficher
HOST-RESOURCES-MIB::hrFSTable :
Pour obtenir davantage d'informations sur
HOST-RESOURCES-MIB, veuillez consulter le fichier /usr/share/snmp/mibs/HOST-RESOURCES-MIB.txt.
18.7.4.2. Informations mémoire et CPU Copier lienLien copié sur presse-papiers!
Copier lienLien copié sur presse-papiers!
La plupart des données de performances sont disponibles sur le MIB SNMP UCS «
UCD SNMP MIB ». L'OID systemStats fournit un certain nombre de compteurs autour de l'utilisation du processeur :
En particulier, les OID
ssCpuRawUser, ssCpuRawSystem, ssCpuRawWait, et ssCpuRawIdle fournissent des compteurs qui sont utiles pour déterminer si un système passe la plupart de son temps de traitement dans l'espace du noyau, l'espace utilisateur, ou les E/S. ssRawSwapIn et ssRawSwapOut peuvent être utiles pour déterminer si un système souffre d'épuisement de mémoire.
Davantage d'informations mémoire sont disponibles sous l'OID
UCD-SNMP-MIB::memory, qui fournit des données similaires à la commande free :
Les moyennes des charges sont également disponibles dans le MIB SNMP UCD «
UCD SNMP MIB ». La table SNMP UCD-SNMP-MIB::laTable possède une liste des moyennes de charges de 1, 5, et 15 minutes :
18.7.4.3. Informations sur les systèmes de fichiers et les disques Copier lienLien copié sur presse-papiers!
Copier lienLien copié sur presse-papiers!
Le MIB des ressources hôte «
Host Resources MIB » fournit des informations sur la taille et l'utilisation du système de fichiers. Chaque système de fichiers (ainsi que chaque pool de mémoire) possède une entrée dans la table HOST-RESOURCES-MIB::hrStorageTable :
Les OID sous
HOST-RESOURCES-MIB::hrStorageSize et HOST-RESOURCES-MIB::hrStorageUsed peuvent être utilisés pour calculer la capacité restante de chaque système de fichiers monté.
Des données d'E/S sont disponibles sur
UCD-SNMP-MIB::systemStats (ssIORawSent.0 et ssIORawRecieved.0) et sur UCD-DISKIO-MIB::diskIOTable. Ce dernier fournit des données plus granulaires. Sous cette table, se trouvent des OID pour diskIONReadX et diskIONWrittenX, qui fournissent des compteurs pour le nombre d'octets lus et écrits sur le périphérique bloc en question depuis le démarrage système :
18.7.4.4. Informations réseau Copier lienLien copié sur presse-papiers!
Copier lienLien copié sur presse-papiers!
Le MIB des interfaces, «
Interfaces MIB », fournit des informations sur les périphériques réseau. IF-MIB::ifTable fournit une table SNMP avec une entrée pour chaque interface sur le système, la configuration de l'interface, et divers compteurs de paquets pour l'interface. L'exemple suivant affiche les premières colonnes d'ifTable sur un système avec deux interfaces réseau physiques :
Le trafic réseau est disponibles sous les OID
IF-MIB::ifOutOctets et IF-MIB::ifInOctets. Les requêtes SNMP suivantes récupéreront le trafic réseau pour chacune des interfaces sur ce système :
18.7.5. Étendre Net-SNMP Copier lienLien copié sur presse-papiers!
Copier lienLien copié sur presse-papiers!
L'agent Net-SNMP peut être étendu pour fournir des indicateurs d'applications en plus des indicateurs de systèmes bruts. Cela permet la planification des capacités, ainsi que la résolution des problèmes de performance. Ainsi, il peut être utile de savoir qu'un système de courrier électronique possède une charge moyenne de 5 minutes de 15 lorsque testé, mais il est encore plus utile de savoir que le système de courrier électronique possède une charge moyenne de 15 lors du traitement de 80 000 messages par seconde. Lorsque les indicateurs d'applications sont disponibles via la même interface que les indicateurs du système, cela permet également la visualisation de l'impact des différent scénarios de charge sur les performances système (par exemple, la charge moyenne augmentera de manière linéaire, chaque fois qu'il y a 10 000 messages supplémentaires, jusqu'à ce que l'on atteigne 100,000).
Un certain nombre d'applications incluses dans Red Hat Enterprise Linux étendent l'agent Net-SNMP pour fournir des indicateurs d'applications sur SNMP. Il existe également plusieurs manières d'étendre l'agent pour des applications personnalisées. Cette section décrit l'extension de l'agent avec des scripts shell et des greffons Perl à partir du canal « Optional ». Elle suppose que les paquets net-snmp-utils et net-snmp-perl soient installés et que l'utilisateur ait accès à l'arborescence SNMP, comme décrit dans la Section 18.7.3.2, « Configurer l'authentification ».
18.7.5.1. Étendre Net-SNMP avec des scripts Shell Copier lienLien copié sur presse-papiers!
Copier lienLien copié sur presse-papiers!
L'agent Net-SNMP fournit une extension MIB (
NET-SNMP-EXTEND-MIB) qui peut être utilisée pour effectuer des requêtes de scripts shell arbitraires. Pour indiquer quel script shell exécuter, veuillez utiliser la directive extend dans le fichier /etc/snmp/snmpd.conf. Une fois défini, l'agent fournira le code de sortie et toute sortie de la commande sur SNMP. L'exemple ci-dessous fait une démonstration de ce mécanisme avec un script qui détermine le nombre de processus httpd dans la table des processus.
Note
L'agent Net-SNMP fournit également un mécasnisme intégré de vérification de la table des processus via la directive
proc. Veuillez consulter la page man de snmpd.conf(5) pour obtenir davantage d'informations.
Le code de sortie du script shell suivant est le nombre de processus
httpd exécutés sur le système à un moment donné :
#!/bin/sh NUMPIDS=`pgrep httpd | wc -l` exit $NUMPIDS
#!/bin/sh
NUMPIDS=`pgrep httpd | wc -l`
exit $NUMPIDS
Pour que ce script soit disponible sur SNMP, copiez le script sur un emplacement sur le chemin système, définissez le bit exécutable, et ajoutez une directive
extend au fichier /etc/snmp/snmpd.conf. Le format de la directive extend est comme suit :
extend name prog args
extend name prog args
… où name est une chaîne d'identification pour l'extension, prog est le programme à exécuter, et args sont les arguments à donner au programme. Par exemple, si le script shell ci-dessus est copié sur
/usr/local/bin/check_apache.sh, la directive suivante ajoutera le script à l'arborescence SNMP :
extend httpd_pids /bin/sh /usr/local/bin/check_apache.sh
extend httpd_pids /bin/sh /usr/local/bin/check_apache.sh
Des requêtes peuvent ensuite être effectuées sur le script sur
NET-SNMP-EXTEND-MIB::nsExtendObjects :
Remarquez que le code de sortie (« 8 » dans cet exemple) fourni est de type INTEGER (entier) et toute sortie fournie es de type STRING (chaîne). Pour exposer de multiples indicateurs en tant qu'entiers, veuillez fournir différents arguments au script en utilisant la directive
extend. Par exemple, le script shell suivant peut être utilisé pour déterminer le nombre de processus correspondants à une chaîne arbitraire, et fera également sortir une chaîne de texte donnant le nombre de processus :
Les directives suivantes
/etc/snmp/snmpd.conf donneront le nombre de PID httpd ainsi que le nombre de PID snmpd lorsque le script ci-dessus est copié sur /usr/local/bin/check_proc.sh :
extend httpd_pids /bin/sh /usr/local/bin/check_proc.sh httpd extend snmpd_pids /bin/sh /usr/local/bin/check_proc.sh snmpd
extend httpd_pids /bin/sh /usr/local/bin/check_proc.sh httpd
extend snmpd_pids /bin/sh /usr/local/bin/check_proc.sh snmpd
L'exemple suivant affiche la sortie
snmpwalk de l'OID nsExtendObjects :
Avertissement
L'éventail des codes de sortie qui sont des entiers va de 0 à 255. Pour les valeurs qui dépasseront probablement 256, veuillez utiliser la sortie standard du script (qui sera saisie en tant que chaîne) ou une méthode différente d'étendre l'agent.
Ce dernier exemple montre une requête de mémoire libre du système et le nombre de processus
httpd. Cette requête pourrait être utilisée pendant un test de performance pour déterminer l'impact du nombre de processus sur la pression mémoire :
snmpget localhost \
'NET-SNMP-EXTEND-MIB::nsExtendResult."httpd_pids"' \
UCD-SNMP-MIB::memAvailReal.0
~]$ snmpget localhost \
'NET-SNMP-EXTEND-MIB::nsExtendResult."httpd_pids"' \
UCD-SNMP-MIB::memAvailReal.0
NET-SNMP-EXTEND-MIB::nsExtendResult."httpd_pids" = INTEGER: 8
UCD-SNMP-MIB::memAvailReal.0 = INTEGER: 799664 kB
18.7.5.2. Extension de Net-SNMP avec Perl Copier lienLien copié sur presse-papiers!
Copier lienLien copié sur presse-papiers!
L'exécution de scripts shell en utilisant la directive
extend est une méthode assez limitée pour exposer des indicateurs d'application personnalisée sur SNMP. L'agent Net-SNMP fournit également une interface Perl intégrée pour exposer des objets personnalisés. Le paquet net-snmp-perl dans le canal « Optional » fournit le module Perl NetSNMP::agent, qui est utilisé pour écrire des greffons Perl intégrés dans Red Hat Enterprise Linux.
Note
Avant de vous abonner aux canaux « Optional » et « Supplementary », veuillez consulter les Détails de l'étendue de la couverture. Si vous décidez d'installer des paquets à partir de ces canaux, veuillez suivre les étapes documentées dans l'article nommé Comment accéder aux canaux « Optional » et « Supplementary » et aux paquets -devel en utilisant Red Hat Subscription Manager (RHSM) ? sur le Portail Client Red Hat.
Le module Perl
NetSNMP::agent fournit un objet agent utilisé pour gérer les requêtes d'une partie de l'arborescence OID de l'agent. Le constructeur de l'objet agent offre des options pour exécuter l'agent en tant que sous-agent de snmpd ou en tant qu'agent autonome. Aucun argument n'est nécessaire pour créer un agent intégré :
use NetSNMP::agent (':all');
my $agent = new NetSNMP::agent();
use NetSNMP::agent (':all');
my $agent = new NetSNMP::agent();
L'objet
agent offre une méthode register utilisée pour enregistrer une fonction de rappel avec un OID particulier. La fonction register prend un nom, un OID, et un pointeur sur la fonction de rappel. L'exemple suivant enregistrera une fonction de rappel nommée hello_handler avec l'agent SNM, qui gérera les requêtes sous l'OID .1.3.6.1.4.1.8072.9999.9999 :
$agent->register("hello_world", ".1.3.6.1.4.1.8072.9999.9999",
\&hello_handler);
$agent->register("hello_world", ".1.3.6.1.4.1.8072.9999.9999",
\&hello_handler);
Note
En général, l'OID
.1.3.6.1.4.1.8072.9999.9999 (NET-SNMP-MIB::netSnmpPlaypen) est utilisé pour effectuer des démonstrations uniquement. Si votre organisation ne possède pas déjà un OID root, vous pouvez en obtenir un en contactant une autorité d'enregistrement de nom ISO (appelé ANSI aux États-Unis).
La fonction de gestionnaire sera appelée avec quatre paramètres,
HANDLER, REGISTRATION_INFO, REQUEST_INFO, et REQUESTS. Le paramètre REQUESTS contient une liste de requêtes dans l'appel actuel et devrait être itéré et rempli avec des données. Les objets request dans la liste possèdent des méthodes get et set qui permettent de manipuler l' OID et la valeur value de la requête. Par exemple, l'appel suivant définira la valeur d'un objet de requête sur la chaîne « hello world » :
$request->setValue(ASN_OCTET_STR, "hello world");
$request->setValue(ASN_OCTET_STR, "hello world");
La fonction de gestionnaire devrait répondre à deux types de requêtes SNMP : la requête GET et la requête GETNEXT. Le type de requête est déterminé en appelant la méthode
getMode sur l'objet request_info passé en tant que troisième paramètre à la fonction de gestionnaire. Si la requête est une requête GET, l'appelant s'attendra à ce que le gestionnaire définisse la valeur value de l'objet request, selon l'OID de la requête. Si la requête est une requête GETNEXT request, l'appelant devra également s'attendre à ce que le gestionnaire définisse l'OID de la requête sur le prochain OID disponible dans l'arborescence. Ceci est illustré dans l'exemple de code suivant :
Lorsque
getMode retourne MODE_GET, le gestionnaire analyse la valeur de l'appel getOID sur l'objet request. La valeur value de request est définie sur string_value si l'OID se termine par « .1.0 », ou sur integer_value si l'OID se termine par « .1.1 ». Si getMode retourne MODE_GETNEXT, le gestionnaire détermine si l'OID de la requête est « .1.0 », puis définit l'OID et la valeur pour « .1.1 ». Si la requête est plus élevée que « .1.0 » sur l'arborescence, l'OID et la valeur de « .1.0 » est définie. Ceci retourne la valeur « next » dans l'arborescence afin qu'un programme comme snmpwalk puisse traverser l'arborescence sans connaître la structure au préalable.
Le type de variable est défini en utilisant des constantes de
NetSNMP::ASN. Veuillez consulter le perldoc de NetSNMP::ASN pour une liste complète des constantes disponibles.
La liste du code entier de cet exemple de greffon Perl est comme suit :
Pour tester le greffon, copiez le programme ci-dessus sur
/usr/share/snmp/hello_world.pl et ajoutez la ligne suivante au fichier de configuration /etc/snmp/snmpd.conf :
perl do "/usr/share/snmp/hello_world.pl"
perl do "/usr/share/snmp/hello_world.pl"
Le démon de l'agent SNMP devra être redémarré pour charger le nouveau greffon Perl. Une fois redémarré,
snmpwalk devrait retourner les nouvelles données :
snmpwalk localhost NET-SNMP-MIB::netSnmpPlaypen
~]$ snmpwalk localhost NET-SNMP-MIB::netSnmpPlaypen
NET-SNMP-MIB::netSnmpPlaypen.1.0 = STRING: "hello world"
NET-SNMP-MIB::netSnmpPlaypen.1.1 = INTEGER: 8675309
snmpget doit également être utilisé pour exercer l'autre mode du gestionnaire :
snmpget localhost \
NET-SNMP-MIB::netSnmpPlaypen.1.0 \
NET-SNMP-MIB::netSnmpPlaypen.1.1
~]$ snmpget localhost \
NET-SNMP-MIB::netSnmpPlaypen.1.0 \
NET-SNMP-MIB::netSnmpPlaypen.1.1
NET-SNMP-MIB::netSnmpPlaypen.1.0 = STRING: "hello world"
NET-SNMP-MIB::netSnmpPlaypen.1.1 = INTEGER: 8675309