UFR sciences et techniques 2, rue de la Houssinière BP 92208 44322 Nantes Cedex 3 Stage du mois de juin 2005 Promotion : 2004-2005 Filière : Master 1 informatique Tuteur : Attiobgé Christian Mise en œuvre de Nagios, solution de supervision ADJIDO Idjiwa CEntre de Recherche Méthodologique d Architecture (CERMA) UMR CNRS 1563 EAN - Rue Massenet BP 81931 44319 Nantes cedex 3, France Tuteur entreprise : Thomas LEDUC
Nagios, mise en œuvre 1. Pré-requis 3 2. Précautions 3 3. L installation de Nagios 4 4. Les fichiers de configurations 5 4.1. Définition des commandes 5 4.2. Définition des contacts 5 4.3. Définition des stations 5 4.4. Définition des services 6 4.5. Définition des plages de fonctionnement pour les différents services 6 5. Afin de se rassurer 6 6. Obtenir quelque chose de fonctionnel de l installation par défaut 7 6.1. Edition du fichier nagios.cfg 7 6.2. Edition du fichier cgi.cfg 8 6.3. Création du fichier.htaccess 8 6.4. Création du fichier htpasswd.users 9 6.5. Edition du fichier nagios.conf 9 7. Configuration minimale 10 7.1. Définition des contacts 10 7.2. Définitions des stations supervisées 11 7.3. Définition des services supervisés 12 8. Configuration avancée 15 8.1. Icônes spécifiques 15 8.2. Etat des ports 16 9. Déploiement automatique d une installation fonctionnelle 18 9.1. Les apports à l installation par défaut 18 9.2. Le Makefile de déploiement 19 10. La cartographie obtenue 20 11. Quelques questions? 20 Nagios, mise en œuvre. Idjiwa ADJIDO. 2
1. Pré-requis Avant de suivre le didacticiel, il est recommandé de lire le rapport qui va avec et d'avoir parcouru la documentation officielle 1. Dans le cas où vous tentez une installation à la main (compilation des sources, gestion manuelle des dépendances... n'oubliez pas le café), nous ne paraphrasons pas dans ce document l'aide disponible dans sa version originale, ou via une traduction française. Nous partons donc d'une installation minimale par paquetage (rpm ou équivalent) ou via des outils tels que apt-get, yum ou synaptic. Ce didacticiel est issu de l'expérience de trois installations à l'aide de paquetages.rpm sous fedora core 2 (version 2.0b3 de nagios, en développement), puis avec synaptic sous ubuntu hoary, une distribution basée sur debian (version 1.3 de nagios, stable) et enfin à l aide de yum sous fedora core 2 (version 1.3 de Nagios). Bien sûr, si les paquetages ne sont pas fournis pour votre distribution, vous n'avez pas d'autre choix que de compiler les sources pour votre plateforme. La distribution sur laquelle devait être mise en œuvre la solution Nagios est une fedora core 2, nous prendrons donc comme référence la dernière installation effectuée, avec yum. 2. Précautions Avant tout, vérifier que apache (httpd) est installé. Nous nous en servons pour l'interface web. Il vous faut l'installer si ce n'est pas fait : cocher serveur web au niveau de l'ajout/suppressions des applications suffit en général. Il faut ensuite vérifier que le Proxy http est renseigné au niveau du Shell pour l installation des paquetages avec yum. Une commande comme «echo $http_proxy» devrait vous permettre de le vérifier. Si la variable ne contient rien, il vous faudra alors taper la ligne suivante : export http_proxy='http://adresse_du_proxy:port' Attention : pour que cette configuration reste active à chaque ouverture de Shell, la commande doit être insérée dans votre fichier.bashrc par exemple. Ensuite vérifier que le fichier yum.conf possède bien le dépôt suivant pour pouvoir installer automatiquement Nagios et toutes ses dépendances : [dag] name=dag baseurl=http://apt.sw.be/fedora/$releasever/en/$basearch/dag/ enabled=1 gpgcheck=0 Avant d'installer Nagios, vérifier enfin que le groupe "apache" existe et qu'un utilisateur "apache" lui est associé (configuration par défaut d'apache), l'ajouter sinon. L'installeur choisira «root» sinon. La commande «/usr/sbin/groupadd apache» vous sera sans doute utile pour ce qui est d'ajouter le groupe sur la FC2 (la commande peut être «addgroup» si vous êtes sur une autre distribution). Pour ajouter l'utilisateur "apache" dans le groupe "apache", vous pouvez utiliser la commande «adduser» ou éditer le fichier /etc/group et rajouter à la main "apache" de cette façon : «apache:x:501:apache». 1 http://www.nagios.org/docs/ Nagios, mise en œuvre. Idjiwa ADJIDO. 3
3. L installation de Nagios Cela peut paraître surprenant et choquera sans doute les gourous du configure, make, make install... La solution que nous vous proposons tiens juste en : Yum install nagios nagios-plugins Insérez l option y (yum y install nagios nagios-plugins) pour répondre «oui» à toutes les questions si vous souhaitez aller faire un tour pendant l installation. Une fois l'installation fraîchement effectuée, la commande «whereis nagios» permet de vérifier que l'installation a des chances de s'être effectuée correctement. Cette installation doit avoir laissé des traces dans les répertoires : /usr/sbin/nagios (qui contient l'executable) /etc/nagios (qui contient principalement les fichiers de configuration) /usr/lib/nagios (qui contient principalement les plugins) /usr/share/nagios (qui contient principalement la documentation et les fichiers nécessaire la l'interface web) Oui, Nagios est installé, mais pas configuré! Les fichiers de configurations fournis par défaut ne sont pas cohérents. C'est-à-dire que nous ne pouvons rien lancer sans rien modifier pour obtenir quelque chose. Les rubriques suivantes font un rappel de ce que sont les différents fichiers de configurations et à quoi ils servent brièvement, ceci pour vous permettre de mieux comprendre le processus général et de moins faire du step by step. Si vous savez déjà de quoi nous parlons, vous pouvez sauter la partie suivante ; nous vous recommandons cependant vivement de jeter un œil à la documentation en ligne 2 afin d avoir beaucoup plus de détails croustillants sur ce que contiennent ces fichiers de configurations et le rôle des différents paramètres qui y figurent. 2 Une documentation officielle française est disponible sur http://www.nagios.org/docs/ Nagios, mise en œuvre. Idjiwa ADJIDO. 4
4. Les fichiers de configurations Configurer Nagios sans utiliser d outils 3 particulier revient à éditer des fichiers textes. Nous présentons ici les principaux fichiers qui constituent la configuration de notre solution de supervision. Bien que certains outils nous permettent d ignorer la présence de ces fichiers, il est bon de savoir qui ils sont et ce qu ils contiennent ou encore comment ils sont reliés entre eux. Les noms des fichiers indiqués sont ceux par défaut, ils pourraient très bien être nommés autrement, le tout étant de savoir ce que l on met et dans quel fichier. 4.1. Définition des commandes C est ici que l on se sert des plugins. Afin d en simplifier l utilisation, nous créons une sorte d alias : une commande composée d un nom qui identifie la ligne de commande à laquelle elle correspond. Ces commandes sont placées dans un fichier commands.cfg et seront appelés dans les autres fichiers de configurations pour pouvoir tester stations et services selon la commande et le plugin utilisé. 4.2. Définition des contacts Lorsque des notifications sont faites par Nagios, elles peuvent être transmises à un contact par mail, par sms, etc. C est dans un fichier contacts.cfg que l on définit le contact. Un contact doit alors avoir un nom, éventuellement un alias, les plages de fonctionnement auquel il peut être notifié et la manière qu il aura de l être. C est à ce niveau que le mail doit être renseigné si nécessaire. Le contact peut alors appartenir à un groupe particulier au même titre que d autres contacts. Ces groupes de contacts sont définis dans un fichier nommé contactgroup.cfg qui contient le nom du groupe et les membres qui y appartiennent. 4.3. Définition des stations Le fichier hosts.cfg comporte la déclaration de toutes les stations. Nous y retrouvons les noms, les alias, les adresses des machines et également divers paramètres tels que les intervalles de tests, le nombre de tentatives, etc. Il y a bien sur possibilité de faire une déclaration générique. Ainsi, nous pouvons définir un host générique comportant une certaine configuration des paramètres. Toutes les stations déclarées utilisant le paramètre use «le nom de la station générique» hériterons alors de ses propriétés, cela permet d alléger le fichier et une configuration plus claire. De la même façon que la définition des contacts plusieurs stations peuvent faire partie d un même groupe. Par exemple, le CERMA possède quatre commutateurs qui sont déclarés individuellement mais qui font partie d un même groupe commutateurs. C est le fichier hostgroup.cfg qui comporte ces déclarations. 3 Certains outils comme Nagat, Nagios-admin (pour ne citer qu eux!) sont disponibles sur http://www.nagiosexchange.org/configuration.40.0.html et permettent une configuration plus aisée de ces fichiers textes. Nagios, mise en œuvre. Idjiwa ADJIDO. 5
4.4. Définition des services Le fichier services.cfg comporte la déclaration des services à superviser. De la même façon que précédemment une déclaration générique d un service particulier peut être faite. Le paramètre use permet ensuite d affecter à un autre service les caractéristiques de ce service générique. A chaque service peut être affecté une ou plusieurs stations. 4.5. Définition des plages de fonctionnement pour les différents services Il est possible de définir des types d intervalles de temps permettant de gérer le temps de fonctionnement de services, les périodes de présence ou d absence des administrateurs, etc. C est le fichier timeperiods.cfg qui héberge ces définitions. Chaque plage de fonctionnement est nommée pour être ainsi appelé lors des déclarations d intervalles par exemple indiqués dans les fichiers de configuration présentés plus haut. Deux autres fichiers de configurations sont importants, le fichier nagios.cfg qui indique justement les fichiers de configurations à prendre en compte et le fichier cgi.cfg qui joue un rôle décrit plus loin dans la mise en place de l interface web. Mais revenons à notre configuration. 5. Afin de se rassurer La première étape va être d'afficher quelque chose, histoire de nous rassurer, de se dire que quelque chose marche :) Nous allons donc mettre en route l'interface web et reviendrons configurer plus finement ce pourquoi nagios va nous être utile. Pour cela, il faut commencer par lancer apache de façon classique : /etc/init.d/httpd start Vous pouvez alors ouvrir un navigateur et entrer «http://localhost/nagios/» ; n oubliez pas le dernier "/". Vous devez alors être devant l'interface web de l'application, bienvenue dans le monde de Nagios!Cependant, vous ne pouvez rien en faire encore ; d'ailleurs en cliquant un peu partout vous tomberez sûrement sur un message d'erreur du style : Error: Could not read host and service status information! Nous allons donc commencer la configuration, en douceur. Nagios, mise en œuvre. Idjiwa ADJIDO. 6
6. Obtenir quelque chose de fonctionnel de l installation par défaut 6.1. Edition du fichier nagios.cfg Editez le fichier /etc/nagios/nagios.cfg et commentez les lignes de la manière suivante : cfg_file=/etc/nagios/contactgroups.cfg cfg_file=/etc/nagios/contacts.cfg #cfg_file=/etc/nagios/dependencies.cfg #cfg_file=/etc/nagios/escalations.cfg cfg_file=/etc/nagios/hostgroups.cfg cfg_file=/etc/nagios/hosts.cfg cfg_file=/etc/nagios/services.cfg cfg_file=/etc/nagios/timeperiods.cfg Nous indiquons ainsi à Nagios qu'il ne doit pas se servir de ces deux fichiers de configurations qui pour l'instant donnent lieu à des problèmes de cohérences. L option -v de Nagios permet justement de vérifier les relations entre objets des différents fichiers : >nagios -v /etc/nagios/nagios.cfg [...] Total Warnings: 0 Total Errors: 0 Things look okay - No serious problems were detected during the pre-flight check Tout parait correct, nous lançons alors le processus Nagios : >/etc/init.d/nagios start Starting network monitor: nagios NAGIOS ok - status written 1 seconds ago Retournez vers l'interface web voir ce que la nouvelle configuration donne ; les messages d'erreurs ne sont plus les mêmes et toutes les rubriques ne présentent plus d'erreur. Nous pouvons cependant lire en cliquant sur la rubrique services: It appears as though you do not have permission to view information for any of the services you requested... Nagios impose en effet une authentification pour avoir accès aux différents cgi dont son interface web se sert. Nous devons donc mettre en place cette authentification. Il s'agit dans un premier temps d'éditer le fichier /etc/nagios/cgi.cfg puis de créer un fichier.htaccess autorisant un utilisateur. Nagios, mise en œuvre. Idjiwa ADJIDO. 7
6.2. Edition du fichier cgi.cfg Pour l'édition du fichier cgi.cfg, il faut paramétrer les lignes suivantes : #authorized_for_system_information=nagiosadmin,theboss,jdoe #authorized_for_configuration_information=nagiosadmin,jdoe #authorized_for_system_commands=nagiosadmin #authorized_for_all_services=nagiosadmin,guest #authorized_for_all_hosts=nagiosadmin,guest #authorized_for_all_service_commands=nagiosadmin #authorized_for_all_host_commands=nagiosadmin Nous obtenons après modifications : authorized_for_system_information=nagiosadmin authorized_for_configuration_information=nagiosadmin authorized_for_system_commands=nagiosadmin authorized_for_all_services=nagiosadmin authorized_for_all_hosts=nagiosadmin authorized_for_all_service_commands=nagiosadmin authorized_for_all_host_commands=nagiosadmin «nagiosadmin» étant ici la seule personne autorisée. Ces autorisations peuvent être bien entendu plus fines comme le sous-entend la configuration initiale ; par exemple un utilisateur pourrait très bien n être autorisé qu a consulter les services et les hosts. 6.3. Création du fichier.htaccess Classiquement le fichier.htaccess 4 indique le fichier à consulter contenant les couples utilisateurs mot de passe. Le fichier en question que nous appellerons traditionnellement htpasswd.users parce qu'il est généré avec l'utilitaire htpasswd d'apache. Le contenu du fichier.htaccess peut être : AuthName "Nagios Access" AuthType Basic AuthUserFile /etc/nagios/htpasswd.users require valid-user 4 C est le nom du fichier par défaut indiqué dans le fichier httpd.conf, fichier de configuration d apache. Nagios, mise en œuvre. Idjiwa ADJIDO. 8
Il réfère donc bien à un fichier spécifique comme indiqué plus haut. Mais il pourrait tout aussi bien référer à une authentification couplée à un annuaire LDAP par exemple. Le fichier pourrait alors avoir comme contenu : AuthName "Nagios Access" AuthType Basic LDAP_Server ADRESSE_DU_SERVEUR_LDAP UID_Attr UID_FILTRE_PAR_LDAP Base_DN "ou=2kusers,dc=unv,dc=wlv,dc=ac,dc=uk" require valid-user Où «Base_DN» est la succession des points de recherche à suivre dans l'ordre. Dans les deux cas, le fichier.htaccess est à mettre dans le répertoire nécessitant une authentification ; dans notre cas (fichier htpasswd.users) le fichier sera donc placé dans /usr/lib/nagios/cgi/ pour l'authentification cgi et /usr/share/nagios/ pour l'authentification web sur les pages web. 6.4. Création du fichier htpasswd.users Il faut enfin créer un utilisateur autorisé, que ce soit via LDAP ou la solution que nous présentons. L'utilisateur (le login) doit bien sur être le même que celui indiqué dans le fichier cgi.cfg (nagiosadmin dans notre cas) : >htpasswd -c htpasswd.users nagiosadmin New password: ************* Re-type new password: ************* Adding password for user nagiosadmin L option c n est à mettre que pour la création du fichier, si vous créez d autres utilisateurs vous ne devez pas l utiliser. Une édition du fichier permet de vérifier que l'utilisateur est bien enregistré : >cat htpasswd.users nagiosadmin:hshi.cp8txh0y 6.5. Edition du fichier nagios.conf Dans le fichier nagios.conf que vous trouverez dans /etc/httpd/conf.d/ il faut remplacer les lignes «Options None» par «AllowOverride AuthConfig» pour que le fichier.htaccess soit interprété. N oubliez pas de placer le fichier htpasswd.users dans le répertoire /etc/nagios/ puis relancer les services apache et Nagios 5. Vous pouvez relancer l interface web, il ne devrait plus y avoir d erreur dans les rubriques services, hosts, status map, etc. Pour pouvoir visionner la carte 3D, il faut que votre machine possède un lecteur vrml. 5 /etc/init.d/httpd reload et /etc/init.d/httpd reload Nagios, mise en œuvre. Idjiwa ADJIDO. 9
7. Configuration minimale Avant de vous lancer dans la configuration spécifique à votre parc, vous devez définir ce que vous souhaiter superviser. Quelles machines? Quels services sur quelles machines? Pour commencer, vous devez déterminer quelles sont les machines correctement connectées au réseau, tester la cartographie devient vite une priorité. La documentation officielle se charge de bien expliquer les fonctions et possibilités des différents fichiers de configuration. Un fichier de configuration principal nagios.cfg se charge (entre autres) de faire appel aux divers autres fichiers de configuration de façon modulaire. Ainsi, nous pouvons très bien mettre l'ensemble de la configuration dans nagios.cfg ou alors toute la configuration dans un autre fichier inclu dans nagios.cfg ou encore de façon plus propre, mettre un fichier de configuration par thème. C'est ce que nous faisons et ce qui est fortement suggéré. Nous signalons cependant que nous avions pour une implémentation rapide fait pour test un fichier minimal.cfg (fourni en exemple en général) qui rassemblait une configuration minimale. La configuration de nagios en ce moment là pouvait donc se résumer à deux fichiers. Mais revenons à la solution "propre". 7.1. Définition des contacts Nous devons décider qui nous souhaitons alerter lorsqu'un problème survient. Dans le fichier contact.cfg nous pouvons donc y inscrire les quelques lignes qui suivent : # 'nagios' contact definition define contact{ contact_name alias service_notification_period host_notification_period service_notification_options host_notification_options service_notification_commands host_notification_commands email } nagios Nagios Admin 24x7 24x7 w,u,c,r d,u,r notify-by-email host-notify-by-email nagios-admin@email.fr Les périodes indiquées sont définies dans le fichier timeperiods.cfg fournie par défaut, que vous pouvez modifier si elles ne vous conviennent pas. Le mail est celui vers qui seront affectées les différentes notifications. Plusieurs contacts peuvent être crée et ces contacts peuvent être classés en groupe de contacts. Nous pouvons pour l'exemple définir le groupe «all-administrateurs» dans le fichier contactgroups.cfg : # 'all-administrateurs' contact group definition define contactgroup{ contactgroup_name all-administrateurs alias administrateurs members nagios } Nous notons que plusieurs contact peuvent appartenir à un même groupe ; la clause member devient alors une ligne qui ressemble à members nagios, thomas, christian si «thomas» et «christian» sont définis en tant que contacts dans le fichier contacts.cfg! Nagios, mise en œuvre. Idjiwa ADJIDO. 10
7.2. Définitions des stations supervisées Il s'agit ensuite d'indiquer à nagios quelles machines nous souhaitons superviser. Ces machines vont pouvoir être placés en groupe de machines (commutateurs, imprimantes, etc.) dans le fichier hostgroups.cfg. La syntaxe de ce fichier est la suivante : # 'commutateurs' host group definition define hostgroup{ hostgroup_name commutateurs alias commutateurs contact_groups all-administrateurs members hp1,hp2,hp5 } Nous voyons ici que se groupe comporte hp1, hp2, hp5... ce sont des machines à déclarer dans le fichier hosts.cfg, ci dessous la déclaration de hp4 (il faut faire de même pour toutes les machines supervisées). # 'commutateur hp1' host definition define host{ use generic-host ; Name of host template to use host_name commutateur hp4 alias commutateur hp4 procurve 2626 address check_command 192.168.10.13 check-host-alive max_check_attempts 10 notification_interval notification_period 60 24x7 notification_options d,u,r } La clause use generic-host, comme son nom l'indique fait référence à une déclaration d'une station générique définissant des paramètres tels que notifications_enabled, event_handler_enabled, etc. Référer vous au fichier même et à la documentation pour plus d'informations, vous pouvez laisser les paramètres par défaut (sans forcément les comprendre dans un premier temps). La commande check-host-alive est utilisée uniquement si un service ne répond pas pour tester si la machine est encore sur le réseau. Ce qui permet de ne recevoir qu'un mail pour dire que la machine est hors service et non une dizaine de mails parce que tous les services sont arrêtés! Nagios, mise en œuvre. Idjiwa ADJIDO. 11
7.3. Définition des services supervisés Dernière étape pour obtenir un premier résultat, les services. Nous rappelons rapidement qu'ils utilisent les plugins mis à disposition dans le répertoire /usr/lib/nagios/plugins pour une installation par défaut. Si vous vous êtes lancé dans une méthode manuelle, c'est que vous savez ou vous les avez compilés :) Pour être sûr de ce dont nous parlons, ci dessous la liste des plugins officiels (de base) fournies avec la version 1.3 stable de nagios : check_breeze check_http check_mysql check_radius check_udp check_by_ssh check_dig check_ifoperstatus check_nagios check_real check_ifstatus check_nntp check_ups check_rpc check_users check_disk check_imap check_disk_smb check-imap check_nt check_ntp check_sensors check_vsz check_simap check_wave check_dns check_ircd check_nwstat check_smtp eventhandlers check_dummy check_ldap check_oracle check_snmp negate check_flexlm check_load check_overcr check_spop urlize check_fping check_ftp check_log check_mailq check_pgsql check_ping check_ssh check_swap utils.pm utils.sh check_game check_mrtg check_pop check_tcp check_hpjd check_mrtgtraf check_procs check_time Nous entendons par plugin un programme exécutable ou un script (shell, perl, etc.) qui peut être lancé en ligne de commande pour tester une station ou un service. C est le résultat de l exécution du plugin qui est interprété par Nagios pour déterminer l état du service ou de la station testée. Chacun peut donc définir son propre plugin et le rajouter aux plugins disponibles par défaut 6 ce qui permet un grand nombre de tests possibles. Il faut cependant respecter certaines conventions de code et de retour de fonction lors de l écriture d un plugin afin de coller aux plugins existants et d être le mieux possible intégré à Nagios. Ainsi, le plugin devra être exécutable avec les droits de l utilisateur Nagios, il devra afficher un message de préférence sur une seule ligne décrivant la situation du service (par exemple : «Temps de réponse OK : 0.586 secondes») et posséder un code de retour 7 qui indique le statut du service : - 0 : OK, le service fonctionne correctement ; - 1 : Warning, le service est dégradé ; - 2 : Critical, le service ne fonctionne plus ; - 3 : Unknown, impossible de déterminer l état du service. Un nombre conséquent de plugins est fourni dans l installation par défaut ; ainsi derrière le plugin check_ping se cache la commande /bin/ping ou encore derrière le plugin check_dns se cache un simple ping sur... google.com! 6 La communauté Nagios offre aujourd hui des bibliothèques de plugins assez complètes disponibles sur les sites http://www.nagiosexchange.org, http://www.nagios.org/download, http://sourceforge.net/projects/nagiosplug/ 7 Ce que fait parfaitement la fonction exit. Nagios, mise en œuvre. Idjiwa ADJIDO. 12
Comme vous pouvez le constater, nous pouvons déjà tester et superviser un bon nombre d'éléments sans avoir à réécrire un plugin particulier. Retournons à la configuration du service. Pour continuer à faire simple, nous définissons pour chaque machine que nous avons créée dans le fichier hosts.cfg un service qui se contentera de tester le ping sur la machine en question. # Service definition define service{ use generic-service ; Name of service template to use host_name service_description hp1,hp2,hp5 PING is_volatile 0 check_period max_check_attempts 24x7 3 normal_check_interval 5 retry_check_interval contact_groups 1 all-administrateurs notification_interval 120 notification_period notification_options 24x7 c,r check_command check_ping!100.0,20%!500.0,60% } Le service associée aux machines hp1, hp2 et hp5 sur l'exemple se sert du plugin check_ping. Nous pouvons voir que le plugin semble nécessiter plusieurs paramètres. Quelque soit le plugin, vous pouvez le tester en ligne de commande afin de vérifier qu'il fonctionne correctement ou pour mieux comprendre comment il marche. Le commutateur -h vous permet (norme des plugins nagios) d'obtenir l'aide sur chaque plugin. Pour exemple : #./check_ping -h [...] Use ping to check connection statistics for a remote host. Usage: check_ping -H <host_address> -w <wrta>,<wpl>%% -c <crta>,<cpl>%% [-p packets] [-t timeout] [-L] check_ping (-h --help) for detailed help check_ping (-V --version) for version information Options: -H, --hostname=host host to ping -w, --warning=threshold warning threshold pair -c, --critical=threshold critical threshold pair -p, --packets=integer number of ICMP ECHO packets to send (Default: 5) -t, --timeout=integer optional specified timeout in second (Default: 10) [...] Une configuration minimale est faite. Comment savoir si tout est configuré correctement? Nous rappelons que la commande suivante vous permet de vous assurer d'une cohérence des déclarations faites dans vos divers fichiers de configurations : Nagios, mise en œuvre. Idjiwa ADJIDO. 13
nagios -v /etc/nagios/nagios.cfg Le chemin du fichier nagios.cfg peut changer selon votre installation. Cette cohérence est de toute façon vérifiée lorsque vous lancez le service avec la commande /etc/init.d/nagios start. Si tout est correct le test vous renvoie : Total Warnings: 0 Total Errors: 0 Things look okay - No serious problems were detected during the pre-flight check Dans le cas contraire, ne vous jetez pas par la fenêtre, c'est souvent une erreur de frappe ou un oubli de déclaration. Vous avez par exemple avoir défini un dans un groupe un membre que vous pensiez avoir déclaré mais que vous n'avez pas déclaré... Le résultat du test proposé cidessus est alors assez explicite. Pour exemple, après suppression de l'hôte hp5 dans le fichier hosts.cfg : Reading configuration data... Error: Could not find host 'hp5' Error: Could not expand hostgroups and/or hosts specified in service (config file '/etc/nagios/services.cfg', line 118) Il suffit de le rajouter (dé-commenter les lignes :) pour que tout soit à nouveau correct. Nous avons utilisé gedit et une coloration syntaxique perl pour y voir "plus clair" dans l'édition des fichiers. Assurez vous de relancer apache et nagios et retourner au navigateur voir ce que donne le résultat. Vous devriez avoir toutes les machines (cliquez sur hosts details) et tous les services (cliquez sur services details). Un oeil sur la status map (la cartographie obtenue pour le CERMA est présentée à la fin du document) devrait vous montrer un aperçu de ce que sera votre belle cartographie lorsqu elle sera plus complète ; ne paniquez pas devant les points d interrogation, ce ne sont que des icônes. Vous savez maintenant comment mettre en place une solution minimale. Il reste à éditer les fichiers et taper vos services et stations :) Si, comme nous, vous êtes un peu fainéant, que vous vous dites "Mais... Je dois rentrer tout le réseau!?", alors vous vous poserez sûrement la question de savoir comment faire pour ce que ce soit moins manuel... Vous tomberez sans doute assez vite sur les interfaces comme Nagat qui permet d'éditer graphiquement via un ensemble de case à cocher et à décocher. Mais sans doute également finirez vous par trouver une solution comme nmap2nagios 8. A l'aide de nmap, vous scanner le réseau (il faut donc que les machines soient allumées et connectées). Une sortie est faite dans un fichier.xml récupéré par un script perl afin de générer un fichier de configuration comportant stations et services de bases associés. Il ne reste plus qu'a éditer et conserver les morceaux que l'on veut! Le script est modifiable si vous voulez lui faire plus ou moins. 8 http://sourceforge.net/projects/nmap2nagios/ ; attention certaines dépendances sont à respecter (xml, perl). Nagios, mise en œuvre. Idjiwa ADJIDO. 14
8. Configuration avancée La configuration décrite ci-avant permet juste le minimum. Aucune remontée d information outre l existence de la machine sur le réseau n est effectuée et il serait bien que le statut des ports soit affiché sur la cartographie. Cartographie qui serait plus présentable si nous pouvions associer des icônes spécifiques aux machines afin de mieux les identifier. 8.1. Icônes spécifiques De base, toutes les stations de la cartographie ont pour symbole un point d'interrogation. Nagios permet d'afficher une icône différente pour chaque station. Les images et icônes proposées par défaut se trouve dans /usr/share/nagios/images/logos/base pour ce qui est de l'installation automatique de la version 1.3 (sur fedora core 2). Vous pouvez bien entendu rajouter autant de logos que vous voulez ; Certains sites devraient vous permettre de trouver votre bonheur 9. Une fois que nous savons ça, il ne reste plus qu à renseigner le fichier hostextinfo.cfg (le créer s'il n'existe pas dans /etc/nagios) comme dans l'exemple ci dessous : define hostextinfo{ host_name hp1 icon_image base/ng-switch40.png statusmap_image base/ng-switch40.gd2 vrml_image base/ng-switch40.gd2 } Note : ne pas oublier de rajouter dans le fichier cgi.cfg une ligne qui indique où sont ces précieuses informations : xedtemplate_config_file=/etc/nagios/hostextinfo.cfg Après s être occupé de ce détail ergonomique nous nous penchons sur la remontée de diverses informations. Le protocole utilisé est SNMP. L'objectif du document n'est pas de détailler le protocole. Nous pouvons juste rappeler qu'il faut un agent SNMP (activé) sur la machine à superviser via le protocole. Pour plus d'information se référer au rapport aux quelques lignes présentant SNMP ou à google :) Penser à installer le package net-snmp 10 sur la machine de supervision. Les informations que nous souhaitons superviser principalement sont celles fournies par les commutateurs et certains serveurs. 9 Dont http://www.nagiosexchange.org (rubriques "logos and images"; "images pack"), une référence. 10 http://net-snmp.sourceforge.net/ Nagios, mise en œuvre. Idjiwa ADJIDO. 15
8.2. Etat des ports Nous voulons obtenir l'état de chaque port de chaque commutateur. L'OID à récupérer est celui qui désigne l'objet ifoperstatus. Par exemple, si nous testons le port 3 du commutateur hp5, il nous faut à l'aide de snmpget entrer la commande suivante : snmpget -c public -v1 hp5.1.3.6.1.2.1.2.2.1.8.3 Nous obtenons alors le résultat suivant : IF-MIB::ifOperStatus.3 = INTEGER: down(2) C'est également ce que permet de faire un des plugins intitulé...check_ifoperstatus. Pour savoir ce dont le plugin est capable, nous entrons la commande./check_ifoperstatus -h et nous pouvons lire : check_ifoperstatus plugin for Nagios monitors operational status of a particular network interface on the target host Usage: -H (--hostname) Hostname to query - (required) -C (--community) SNMP read community (defaults to public, used with SNMP v1 and v2c -v (--snmp_version) 1 for SNMP v1 (default) 2 for SNMP v2c SNMP v2c will use get_bulk for less overhead if monitoring with -d -k (--key) SNMP IfIndex value -d (--descr) SNMP ifdescr value -p (--port) SNMP port (default 161) -I (--ifmib) Agent supports IFMIB ifxtable. Do not use if you don't know what this is. -n (--name) the value should match the returned ifname (Implies the use of -I) -w (--warn =i w c) ignore warn crit if the interface is dormant (default critical) -V (--version) Plugin version -h (--help) usage help -k or -d must be specified Note: either -k or -d must be specified and -d is much more network intensive. Use it sparingly or not at all. -n is used to match against a much more descriptive ifname value in the IfXTable to verify that the snmpkey has not changed to some other network interface after a reboot. En ligne de commande, en utilisant le plugin pour faire la même chose, nous obtenons :./check_ifoperstatus -H hp5 -C public -v2 -k 3 CRITICAL: Interface 3 (index 3) is down. Nagios, mise en œuvre. Idjiwa ADJIDO. 16
Il s'agit de le mettre en place via nagios en décrivant un service appelant le plugin. Pour l'exemple, nous créons un host port1 : define host{ use generic-host ; Name of host template to use host_name hp1port1 alias port 1 - hp1 parents hp1 max_check_attempts 10 notification_interval 60 notification_period 24x7 notification_options d,u,r } Puis un service associé : # Service definition define service{ use generic-service ; Name of service template to use host_name hp1port1 service_description Check port status is_volatile check_period 0 24x7 max_check_attempts 3 normal_check_interval retry_check_interval 5 1 contact_groups all-administrateurs notification_interval notification_period 240 24x7 notification_options c,r check_command check_port_status!hp1!public!3 } Enfin la commande check_port_status est définie dans le ficher check_command.cfg comme suit : # 'check_port_status' command definition define command{ command_name check_port_status command_line /usr/lib/nagios/plugins/check_ifoperstatus -H $ARG1$ -c $ARG2$ -v2 -k $ARG3$ } Un regard sur le service associé au port nous permet de savoir si il est «down» ou «up» selon que le service soit en état critique ou non. Nagios, mise en œuvre. Idjiwa ADJIDO. 17
9. Déploiement automatique d une installation fonctionnelle Comme vous l aurez constaté la configuration des fichiers textes est fastidieuse. Des interfaces web existent (Nagat, Nagiosadmin, etc.) pour simplifier et rendre plus «ergonomique» cette configuration. Il vous a été également présenté l utilitaire nmap2nagios. Dans le cadre de la mise en œuvre du CERMA une solution spécifique à été implémentée : les fichiers de configurations sont générés de façon automatique également à partir d un fichier xml. Ce fichier xml est généré via un script perl que l administrateur du réseau à écrit. Le script se sert des bases de données existantes regroupant diverses informations sur les machines du parc et de requêtes snmp. 9.1. Les apports à l installation par défaut Les fichiers modifiés pour obtenir une interface fonctionnelle ont été archivés. Ainsi, après une installation par défaut, il suffit d extraire le contenu de l archive pour retourner dans l état fonctionnel que nous avions. Les fichiers modifiés constituant l archive sont : /etc/nagios/nagios.cfg /etc/nagios/cgi.cfg /usr/lib/nagios/cgi/.htaccess /usr/share/nagios/.htaccess /etc/nagios/htpasswd.users /etc/httpd/conf.d/nagios.conf /etc/nagios/checkcommands.cfg (du à la création du nouvelle commande check_port_status) /usr/share/nagios/images/logos/base/port.png (un nouveau logo à été créé pour afficher un port) /etc/init.d/nagios (dans lequel nous rajoutons la ligne «export LC_NUMERIC=POSIX» pour permettre au plugin check_ping de fonctionner correctement) Nagios, mise en œuvre. Idjiwa ADJIDO. 18
9.2. Le Makefile de déploiement Ci-dessous la Makefile ayant servi au déploiement de la solution : RepDst AdrMsg = /tmp = "adresse@mail.fr" # @ de l unique contact nagios défini all: @echo " " @echo " Pre-requis :" @echo " yum install nagios nagios-plugins" @echo " " @echo " Usage : " @echo " " @echo " make clean : ne garder que les fichiers initiaux" @echo " make install : mettre en place la configuration du cerma" @echo " make maj : mise a jour des fichiers de configuration concernant le parc" @echo " " @echo " " clean: rm *.cfg install: cd / && tar pzxvf configcerma.tar.gz $(MAKE) maj maj: perl./cerma2xml.pl java -jar fr.archi.cerma.nagios.cermaxml2nagios.jar - $(AdrMsg) /etc/nagios @echo " Lancer successivement :" @echo " /etc/init.d/httpd restart" @echo " /etc/init.d/nagios restart" Où : - configcerma.tar.gz est l archive exposé dans la rubrique ci-dessus ; - cerma2xml est le script perl écrit par l administrateur réseau générant un fichier xml comportant des informations sur les machines (nom, groupe, adresse ip, etc.) ; - fr.archi.cerma.nagios.cermaxml2nagios.jar est le paquetage que nous avons écrit pour générer les fichiers de configurations à partir du fichier xml. Nagios, mise en œuvre. Idjiwa ADJIDO. 19
10. La cartographie obtenue 11. Quelques questions? Cartographie obtenue à partir du fichier xml. La communauté Nagios est grande. Vous trouverez sûrement la réponse à vos questions en relisant la documentation dans un premier temps, en consultant la faq 11 dans un deuxième temps, en effectuant une recherche sur les forums Nagios dans un troisième temps ou enfin en postant sur un forum votre question dans un dernier et ultime temps. Cette aide peut se trouver à l adresse suivante : http://www.nagios.org/support/ Bon courage. 11 Questions fréquemment posées Nagios, mise en œuvre. Idjiwa ADJIDO. 20