Monitoring d'une infrastructure informatique Linux sur base d'outils libres( Télécharger le fichier original )par Geoffrey Lemaire Haute Ecole Rennequin Sualem (Belgique) - Bachelier en Informatique et Systèmes (finalité Réseaux et Télécommunications) 2003 |
Chapitre 11Les traps11 Utilisation des traps avec nagios Le protocole SNMP définit aussi un concept de trap. Une fois défini, si un certain évènement se produit, comme par exemple le dépassement d'un seuil, l'agent envoit un paquet UDP (port 162) à un serveur. Ce processus d'alerte est utilisé dans les cas où il est possible de définir simplement un seuil d'alerte. Dans nombres de cas, hélas, un alerte réseau ne devrait être déclenchée qu'en unissant plusieurs événements. 11.1 Configurations Une petite configuration est nécessaire coté serveur et coté client pour que les traps puissent fonctionner. Commençons par le client. 11.1.1 Coté client (l'agent) Tout d'abord, il faut éditer le fichier /etc/snmp/snmpd.conf et ajouter les lignes suivantes à la fin du fichier. Pour nos tests, nous utiliserons la communauté « public ». # Définit la communauté par défaut à utiliser quand des traps seront envoyées. trapcommunity public # Envois des traps de version 1 - HOTE où se trouve le daemon snmptrad [Community [Port]] trapsink 192.1 68.88.129 public 162 # Envois des traps de version 2 trap2sink 192.1 68.88.129 public 162 #Utilisé lors d'envois d'inform ã la place des traps informsink 192.1 68.88.129 public 162 # Envois de traps lors d'authentification ratée authtrapenable 1 # Permet d'envoyer des traps lors du changement d'état (Down/Up) des interfaces réseaux linkUpDownNotifications yes # Envois des traps pour une liste de problèmes généraux defaultMonitors yes 11.1.2 Coté serveur Premièrement, il faut créer (ou éditer) le fichier /etc/snmp/snmptrapd.conf et ajouter les lignes suivantes à la fin du fichier. # On traite de la même façon toutes les interruptions : avec SNMPTT traphandle default /usr/sbin/snmptt # On accepte toutes les interruptions disableAuthorization yes #on ne journalise pas les interruptions reçues (c'est SNMPTT qui s 'en chargera). On aura quand même une trace de snmptrapd dans syslog, grâce à l'option -Lsd du lanceur (voir ci-dessous). donotlogtraps yes Pour la petite histoire, snmptrad passe à SNMPTT les éléments de l'interruption qu'il a reçus via les paramètres de la ligne de commande. Le lanceur du service snmptrapd doit être modifié pour ne pas traduire les OID, mais les laisser sous forme numérique. C'est SNMPTT qui fera la traduction. Il faut modifier /etc/init.d/snmptrapd : OPTIONS="-On -Lsd -p /var/run/snmptrapd.pid" # Il faut rajouter le -On Après modification, il suffit de redémarrer le daemon snmptrapd. 11.2 Nagios doit comprendre, SNMPTT l'aide. SNMPTT (SNMP Trap Translator v1.2beta2) est un handler de trap écrit en Perl pour être utilisé avec le programme snmptrapd de Net-SNMP. Site Web du logiciel : http://www.snmptt.org 11.2.1 Fonctionnement général
Pour cela, il se base sur la MIB de l'aÐÐlication émettrice, que l'on aura bien sûr récuÐérée et transformée au préalable pour en nourrir SNMPTT. 3. SNMPTT envoit enfin l'interruption interprétée à Nagios, via le fichier de commandes externes de celui-ci. Il utilise pour cela la commande Nagios submit_check_result. Dans ma configuration de Nagios, il n'y a qu'un service par hôte qui reçoit les traps SNMP. Cela signifie que si plusieurs traps sont reçus en provenance d'un même hôte, seul le dernier sera affiché. Par contre, chaque trap reçu générera bien une notification. Pour acquitter une interruption dans Nagios, il faut soit forcer un check immédiat du service (qui fera un ping et remettra l'état à OK), soit soumettre manuellement un check passif, avec l'intitulé "Init", ou "RAZ", par exem ple. 11.2.2 Configuration Nous allons faire fonctionner SNMPTT en mode "stand-alone" ; il sera appelé chaque fois que nécessaire par le gestionnaire d'interruptions snmptrapd. L'initialisation est plus longue dans ce cas, mais le paramétrage plus simple. Le fichier de configuration /etc/snmp/snmptt.ini doit contenir : [General] mode = standalone multiple_event = 1 dns_enable = 1 strip_domain = 1 strip_domain_list = <<END mon.domaine END Monitoring d'une infrastructure Linux sur base d'outils
libres net_snmp_perl_best_guess = 0 translate_log_trap_oid = 0 translate_value_oids = 1 translate_enterprise_oid_format = 1 translate_trap_oid_format = 1 translate_varname_oid_format = 1 translate_integers = 1 wildca rd_expansion_separator = " " allow_unsafe_regex = 0 remove_backslash_from_quotes = 0 dynamic_nodes = 0 description_mode = 0 description_clean = 1 [Logging] stdout_enable = 0 log_enable = 1 log_file = /var/log/snmptt.log unknown_trap_log_enable = 1 unknown_trap_log_file = /var/log/snmpttunknown.log statistics_interval = 0 syslog_enable = 1 syslog_facility = local0 syslog_level_debug = <<END END syslog_level_info = <<END END syslog_level_notice = <<END END syslog_level_warning = <<END END syslog_level_err = <<END END syslog_level_crit = <<END END syslog_level_alert = <<END END syslog_level = info syslog_system_enable = 1 syslog_system_facility = local0 syslog_system_level = warning [Exec] exec_enable = 1 pre_exec_enable = 0 unknown_trap_exec = [Debugging] DEBUGGING = 0 DEBUGGING_FILE = DEBUGGING_FILE_HANDLER = [TrapFiles] snmptt_conf_files = <<END /etc/snmp/snmptt.conf END 11.3 A noter : le nom de domaine à supprimer pour ne garder que le nom d'hôte, qui dÐvra êtrÐ adaÐté ã l'ÐnvironnÐmÐnt oz on travaillÐ, et le fait que le module Perl net-snmp est activé. Il permet l'interprétation étendue des OID. 11.4 Compilation des mibs Il faut maintenant récupérer le ou les fichiers MIB des équipements à superviser, pour les convertir au format SNMPTT. Le but est d'extraire ce qui dans le fichier MIB est un commentaire, pour que SNMPTT le mette en correspondance avec l'OID qui sera reçu. snmpttconvertmib --in=<fichier MIB> --out=/etc/snmp/snmptt.conf.<equipement> \ --exec='/usr/local/nagios/libexec/eventhandlers/submit_check_result $r TRAP 1' Dans le cas où on aurait trop de MIB, on peut exécuter le petit script suivant en tenant compte que toutes les mibs se trouvent dans /usr/share/snmp/mibs/ : for i in /usr/share/snmp/mibs/ *.txt > do > /usr/sbin/snmpttconvertmib --in=$i --out=/etc/snmp/snmptt.conf \ --exec='/usr/lib/nagios/plugins/eventhandlers/submit_check_result $r TRAP 1 > done Ce qui va donc permettre de prendre en compte toutes les mibs dans le répertoire précédemment cité et les ajouter dans le fichier snmptt.conf. On aura quelques lignes dans le genre : EVENT coldStart .1.3.6.1.6.3.1.1.5.1 "Status Events" Normal FORMAT A coldStart trap signifies that the SNMP entity, $* EXEC /usr/lib/nagios/plugins/eventhandlers/submit_check_result $r TRAP 1 "A coldStart trap signifies that the SNMP entity, $*" SDESC A coldStart trap signifies that the SNMP entity, supporting a notification originator application, is reinitializing itself and that its configuration may have been altered. Variables: EDESC 11.5 Dans Nagios Le principe est d'utiliser, pour recevoir les interruptions SNMP, des services passifs mais aussi volatiles, car si nous recevons une deuxième interruption pour le même hôte avant que la première ait été remise à OK, nous voulons être notifié à nouveau. Pour cela, il faut (par exemple) définir un service générique pour les traps SNMP, dérivé de mon service générique général : define service{ name snmptrap-service use generic-service register 0 service_description TRAP is_volatile 1 check_command check-host-alive max_check_attempts 1 normal_check_interval 1 retry_check_interval 1 passive_checks_enabled 1 check_period none notification_interval 31536000 contact_groups admins Monitoring d'une infrastructure Linux sur base d'outils libres Et le dériver pour chaque machine supervisée, par exemple : define service{ host _name Ubuntu use snmptrap-service contact_ groups admins } Tout d'abord, il y a la commande check-host-alive (un simple ping) qui permet de remettre à OK l'état du service en forçant un contrôle actif. D'autre part, l'intervalle de notification est artificiellement long : un an ici. Il permet d'éviter de recevoir régulièrement des notifications pour la même interruption (tant que le service n'est pas ramené à l'état OK), laissant penser qu'une nouvelle interruption, identique à la précédente, a été reçue. Le problème est qu'il faut redémarrer Nagios au moins une fois par an. 11.6 Quelques tests Coté client (agent), il suffit de redémarrer simplement le daemon SNMPD pour qu'un évènement se produise dans les logs du serveur (manager) : # tail -f /var/lo g/snmptt.log Tue May 29 14:20:38 2007 .1.3.6.1.4.1.8072.4.0.2 Normal "Status Events" 192.1 68.88.1 28 - An indication that the agent is in the process of being shut down. Tue May 29 14:20:40 2007 .1.3.6.1.6.3.1.1.5.1 Normal "Status Events" 192.1 68.88.128 - A coldStart trap signifies that the SNMP entity, Allons voir sur Nagios : Le trap est répertorié 3 secondes après dans Nagios. Le trap décrit un peu plus haut. |
|