Programme Opérations de registre Installation et configuration de Nagios Remarques : ----------- * Les commandes précédées de "$" doivent être exécutées en tant qu'utilisateur général et non en tant qu'utilisateur root. * Les commandes précédées de "#" exigent que vous travailliez en tant qu'utilisateur root. * Les commandes incluant des lignes de commande plus spécifiques (telles que "RTR-GW>" ou "mysql>") doivent être exécutées sur un équipement distant ou au sein d'un autre programme. Exercices --------- PARTIE I -------- 1. Installez Nagios version 3. Vous pouvez faire ceci en tant qu'utilisateur root ou tldadmin et utiliser la commande "sudo" : # apt-get install nagios3 La question vous sera posée de quel mot de passe choisir pour l'utilisateur "nagiosadmin". Utiliser "nagiosadmin" (facile de se rappeler). 2. Vous disposez normalement déjà d'une application Nagios opérationnelle ! - ouvrez un navigateur et rendez-vous à la page de votre machine http://10.10.10.X/nagios3/ (X = votre IP) - ouvrez une session en tant que : user: nagiosadmin pass: ... 3. Observons ensemble l'interface... # cd /etc/nagios3/ # ls -l -rw-r--r-- 1 root root 1882 2008-12-18 13:42 apache2.conf -rw-r--r-- 1 root root 10524 2008-12-18 13:44 cgi.cfg -rw-r--r-- 1 root root 2429 2008-12-18 13:44 commands.cfg drwxr-xr-x 2 root root 4096 2009-02-14 12:33 conf.d -rw-r--r-- 1 root root 26 2009-02-14 12:36 htpasswd.users -rw-r--r-- 1 root root 42539 2008-12-18 13:44 nagios.cfg -rw-r----- 1 root nagios 1293 2008-12-18 13:42 resource.cfg drwxr-xr-x 2 root root 4096 2009-02-14 12:32 stylesheets # ls -l conf.d/ -rw-r--r-- 1 root root 1695 2008-12-18 13:42 contacts_nagios2.cfg -rw-r--r-- 1 root root 418 2008-12-18 13:42 extinfo_nagios2.cfg -rw-r--r-- 1 root root 1152 2008-12-18 13:42 generic-host_nagios2.cfg -rw-r--r-- 1 root root 1803 2008-12-18 13:42 generic-service_nagios2.cfg -rw-r--r-- 1 root root 210 2009-02-14 12:33 host-gateway_nagios3.cfg -rw-r--r-- 1 root root 976 2008-12-18 13:42 hostgroups_nagios2.cfg -rw-r--r-- 1 root root 2167 2008-12-18 13:42 localhost_nagios2.cfg -rw-r--r-- 1 root root 1005 2008-12-18 13:42 services_nagios2.cfg -rw-r--r-- 1 root root 1609 2008-12-18 13:42 timeperiods_nagios2.cfg Vous noterez que le progiciel n'a pas de fichiers renommés pour le répertoire conf.d. Il s'agit des mêmes fichiers que ceux utilisés pour le progiciel Nagios version 2 sous Ubuntu. Ils ont été renommés ici à cause d'une mise à jour effectuée de la configuration hôte-passerelle. PARTIE II Configuration des équipements ----------------------------------------------------------------------------- 1. Configurons Nagios afin de commencer à superviser un autre ordinateur de l'atelier : - prenez n'importe quel PC de la salle. # cd /etc/nagios3/conf.d/ # vi pcX.cfg (où X est un nombre 1-16) define host { use generic-host host_name pcX alias PC X AROC Workshop address _______________ [adresse IP du pcX] .41 -> .56 } ... enregistrez et quittez 2. Créons à cette occasion un nouveau groupe d'hôtes dans lequel nous allons inclure notre hôte : - ouvrez le fichier hostgroups_nagios2.cfg et ajoutez un nouveau groupe : # vi hostgroups_nagios2.cfg define hostgroup { hostgroup_name servers alias AROC Workshop PCs members pcX } 3. Associations maintenant des services à cet hôte : # vi services_nagios2.cfg - repérez la partie "check that ssh services are running", et modifiez la ligne hostgroup_name ssh-servers en hostgroup_name ssh-servers, servers 4. Vérifiez que votre fichier de configuration convient : # nagios3 -v /etc/nagios3/nagios.cfg ... vous devriez obtenir ce qui suit : Total Warnings: 0 Total Errors: 0 Tout a l'air bien, aucun problème sérieux n'a été détecté pendant cette vérification. 5. Rechargez/relancez Nagios # /etc/init.d/nagios3 restart 6. Ouvrez l'interface web (http://10.10.10.X/nagios3) afin de vérifier l'hôte que vous venez d'ajouter 7. Ajoutez TOUS les PC de la salle : - Pensez à vérifier le fichier de configuration! - Nous suggérons de créer un fichier de configuration unique que vous appellerez pcs.cfg. - répéter les étapes 1, 2 et 3 ci-dessus ; pour mettre à jour le fichier hostgroups_nagios2.cfg avec les membres du groupe de serveurs, le format de l'instruction members est le suivant : members pcX,pcY,pcZ,... - Si vous ne connaissez pas le nom l'adresse IP de tous les PC de la salle, reportez-vous au schéma de réseau disponible dans la salle ou sur le site web de l'atelier : http://noc.aroc/trac/wiki/NetDiagram Si cette URL ne fonctionne pas, demandez à votre formateur où vous procurer le schéma du réseau de l'atelier. Vous en aurez besoin pour les autres exercices. 8. Ajoutez les routeurs et les commutateurs de la classe : - Créez les fichiers "routers.cfg" et "switches.cfg" dans /etc/nagios3/conf.d. - Vous devez ajouter dans le fichier routers.cfg une entrée pour chaque routeur. Voici un premier exemple d'entrée pour le routeur de passerelle de la classe. Trouvez le nom d'hôte et l'adresse IP dans le schéma de réseau de l'atelier et remplacez le "xxxx" ci-dessous par les informations appropriées : define host { use generic-host host_name xxxxxxxx alias gw router address xxx.xxx.xxx.xxx } puis ajoutez des entrées pour les autres routeurs - Il y a un commutateur - faites-en autant dans le fichier switches.cfg. - N'oubliez pas de vous reporter au schéma du réseau si vous n'en connaissez pas le nom ou l'adresse IP. - Vérifiez votre configuration avant de poursuivre : # nagios3 -v /etc/nagios3/nagios.cfg - Il peut y avoir des erreurs puisqu'aucun service n'est défini pour ces nouvelles entrées. Cela ne pose pas problème et nous nous en préoccuperons ultérieurement. 9. Rechargez/relancez Nagios # /etc/init.d/nagios3 restart - Vérifiez vos modifications à l'adresse http://10.10.10.X/nagios3. - Cliquez sur le lien "Status Map" pour voir comment les choses se présentent. PARTIE III Définition des parents ----------------------------------------------------------------------------- 1. Définissez des parents pour vos périphériques matériels : - N'oubliez pas que Nagios sait baser ses vérifications sur l'état du réseau ; cette capacité de "discernement" repose grandement sur la notion de relations de parenté. Chaque installation du réseau (à l'exception du routeur de passerelle de la classe) possède un périphérique parent ; à vous de le définir pour chaque PC, routeur et commutateur dans les fichiers pcs.cfg, switches.cfg et routers.cfg. - Ceci est extrêmement simple. Voici pour commencer une entrée mise à jour pour le pcX associé au parent "switch" dans le fichier pcs.cfg : define host { use generic-host host_name pcX alias PC X AROC Workshop address _______________ [pcX's IP address here] parents switch } - Remarque : utilisez le nom d'hôte et non l'adresse IP du parent. - Répétez cette opération pour toutes les installations définies. Si vous ignorez le nom d'un périphérique parent ou avez des doutes quant à la disposition du réseau de la classe, pensez à vous reporter au schéma du réseau. - Une fois terminé, n'oubliez de vérifier dans # nagios3 -v /etc/nagios3/nagios.cfg l'état de votre travail. 2. Relancez Nagios et vérifiez l'écran Status Map : # /etc/init.d/nagios3 restart - Cliquez de nouveau sur le lien Status Map. L'aspect devrait être maintenant très différent ! PARTIE IV Définition de services ----------------------------------------------------------------------------- 1. Déterminez les services à définir pour les différentes installations : - Ceci est fondamental pour l'utilisation de Nagios et plus généralement les outils de supervision de réseau. Pour l'instant nous utilisons simplement Ping pour vérifier que les hôtes physiques du réseau sont en service. L'étape suivante consistera à décider des services à superviser pour chaque hôte. - Le réseau de cette classe se compose de: routeurs : utilisant ssh et éventuellement Telnet commutateurs : utilisant ssh et éventuellement Telnet PC : tous les PC utilisent ssh et http et les PC de tous les étudiants fonctionnent avec un démon snmp. Nous allons donc configurer Nagios de manière à vérifier tous les services pour ces périphériques. 2. Vérifiez que telnet fonctionne sur les commutateurs de l'atelier. - Vous devez éditer le fichier /etc/nagios3/conf.d/services_nagios2.cfg afin de définir préalablement la commande "check_telnet" ainsi que le groupe d'hôtes auquel cette commande s'applique. - Editez le fichier services_nagios2.cfg : # vi /etc/nagios3/conf.d/services_nagios2.cfg Ajoutez en bas du fichier la nouvelle définition de service. Elle se présente sous la forme suivante : # check that telnet is running define service { hostgroup_name telnet-servers service_description Telnet check_command check_telnet use generic-service notification_interval 0 ; > 0 pour plusieurs notifications } - Nagios (sous Ubuntu) est préconfiguré par défaut avec une définition de service web, ssh et ping. Une fois complètement terminé, vous pourrez ne plus avoir besoin de la définition de service ping – mais ne la supprimez pas encore. ! - Remarquez le paramètre indiquant: hostgroup_name telnet-servers Nous devons le créer avant d'essayer de relancer Nagios. Editez le fichier /etc/nagios3/conf.d/hostgroups_nagios2.cfg en ajoutant à la fin l'entrée suivante : # A list of your telnet-accessible devices (older switches) define hostgroup { hostgroup_name telnet-servers alias serveurs Telnet members xxxx,xxxx,xxxx,xxxx } Notez la section "members". C'est en principe ce que vous avez utilisé comme directive host_name pour les commutateurs lors de la définition de vos commutateurs dans le fichier switches.cfg. - Enregistrez vos changements et vérifiez votre configuration : # nagios3 -v /etc/nagios3/nagios.cfg - Relancez Nagios et vérifiez que vous voyez vos modifications. Le contrôle proprement dit du service telnet sera probablement à l'état "pending" (attente) pour commencer. 3.) Vérifiez que SSH fonctionne sur les routeurs et PC de l'atelier. - Il existe déjà dans le fichier services_nagios2.cfg une entrée pour la vérification de service SSH, aussi n'avez-vous pas besoin d'effectuer cette création. Vous devez simplement redéfinir l'entrée "ssh-servers" du fichier /etc/nagios3/conf/hostgroups_nagios2.cfg. L'entrée initiale dans le fichier revêt cet aspect : # A list of your ssh-accessible servers define hostgroup { hostgroup_name ssh-servers alias SSH servers members localhost } Voyez-vous ce qu'il faudrait changer ? En effet, il faut modifier la ligne "members" en supprimant "localhost" et en ajoutant des entrées pour l'ensemble de nos PC, routeurs et commutateurs utilisant ssh. Cette information et le schéma du réseau devraient vous permettre de procéder à cette entrée. - Une fois terminé, exécutez une vérification avant de poursuivre : # nagios3 -v /etc/nagios3/nagios.cfg Si tout vous semble correct, relancez Nagios et vérifiez vos modifications dans l'interface web de Nagios. 4.) Vérifiez que http est accessible sur tous les PC de la classe. - A l'instar de ssh, un service check_http est déjà défini et s'applique automatiquement à l'ensemble du groupe http-servers (remarque : vous pouvez si vous le souhaitez inclure des groupes d'hôtes supplémentaires pour n'importe quelle vérification de service). Vous devez pour cela inclure dans l'entrée "http-servers" du fichier /etc/nagios3/conf.d/hostgroups_nagios2.cfg l'ensemble des PC de la classe utilisant http (c'est-à-dire le serveur web Apache). - Reprenez l'exercice précédent en l'adaptant comme il convient. Demandez de l'aide à votre formateur en cas de besoin. 5.) Vérifiez que SNMP fonctionne sur les PC de la classe. - Vous devez tout d'abord inclure la vérification de service appropriée pour SNMP dans le fichier /etc/nagios3/conf.d/services_nagios2.cfg. C'est dans ce type d'occasion que Nagios apporte la preuve de toute sa puissance. Il existe des centaines, si ce n'est des milliers de contrôles de service pour les différents Nagios proposés sur le web. Pour savoir quels plugins sont installés par Ubuntu dans le progiciel Nagios3 que nous avons installé, consultez le répertoire suivant : # ls /usr/lib/nagios/plugins Comme vous pouvez le constater, nous avons déjà un plugin check_snmp. Si vous êtes intéressé par les options que prend le plugin, vous pouvez l'exécuter depuis la ligne de commande en tapant : # /usr/lib/nagios/plugins/check_snmp afin de connaître, entre autres, les options disponibles. Le plugin check_snmp et Nagios permettent de créer des contrôles système très complexes ou spécifiques. - Pour voir maintenant les différents contrôles de services/d'hôtes qui ont été créés avec le plugin check_snmp, consultez le fichier /etc/nagios-plugins/config/snmp.cfg. Vous verrez qu'il existe un grand nombre de contrôles préconfigurés utilisant snmp, dont : snmp_load snmp_cpustats snmp_procname snmp_disk snmp_mem snmp_swap snmp_procs snmp_users snmp_mem2 snmp_swap2 snmp_mem3 snmp_swap3 snmp_disk2 snmp_tcpopen snmp_tcpstats snmp_bgpstate check_netapp_uptime check_netapp_cupuload check_netapp_numdisks check_compaq_thermalCondition Mieux encore, vous pouvez créer d'autres contrôles de services très facilement. Afin de vérifier que snmpd (le SNMP est sous Linux) fonctionne, nous devons poser à SNMP une question. En l'absence de réponse, Nagios considèrera que le service SNMP ne fonctionne pas sur cet hôte. Lorsque vous recourez à des contrôles de service tels que check_http, check_ssh et check_telnet, c'est ce qu'ils font également. - Dans le cas présent, créons un nouveau contrôle de service que nous appellerons "check_system". Ce contrôle de service se connectera sur l'hôte spécifié, utilisera la chaîne de communauté privée que nous avons définie en classe et posera une question snmp – dans le cas présent, nous demanderons la description du système, ou l'OID "sysDescr.0". - Modifiez pour cela le fichier /etc/nagios-plugins/config/snmp.cfg : # vi /etc/nagios-plugins/config/snmp.cfg en incluant en haut (ou au choix en bas) du fichier l'entrée suivante : # «check_system_ command definition define command{ command_name check_system command_line /usr/lib/nagios/plugins/check_snmp -H '$HOSTADDRESS$' -C '$ARG1$' -o sysDescr.0 } Vous noterez que "command_line" est une ligne unique. - Vous devez maintenant modifier /etc/nagios3/conf.d/services_nagios2.cfg en ajoutant ce contrôle de service. Nous exécuterons de nouveau ce contrôle sur l'ensemble des serveurs de la classe ou le groupe d'hôtes "debian-servers". - Editez le fichier /etc/nagios3/conf.d/services_nagios2.cfg : # vi /etc/nagios3/conf.d/services_nagios2.cfg en ajoutant en fin de fichier la définition suivante : # vérifier que snmp est sur tous les serveurs define service { hostgroup_name ubuntu-servers service_description SNMP check_command check_system!xxxxxx use generic-service notification_interval 0 ; > 0 pour des notifications répétées } "xxxxxx" est la chaîne de communauté privée précédemment définie pour la classe. Vous noterez que nous avons inclus ici notre chaîne de communauté privée au lieu de celle préalablement enregistrée dans le fichier snmp.cfg. - Vérifiez maintenant vos modifications et relancez Nagios. - Si vous cliquez sur l'option Service Detail de l'interface web, vous verrez s'afficher le contrôle SNMP. PARTIE V Créer d'autres groupes hôtes ----------------------------------------------------------------------------- 1. Mettez à jour /etc/nagios3/conf.d/hostgroups_nagios2.cfg : - Pour les exercices suivants, il sera très utile d'avoir créé ou mis à jour les groupes hôtes suivants : debian-servers routers switches Si vous ouvrez le fichier /etc/nagios3/conf.d/hostgroups_nagios2.cfg vous verrez une entrée pour debian-servers une entrée contenant simplement localhost. Mettez cette entrée à jour en incluant tous les PC de la classe, dont le NOC (nous partons ici du principe que vous avez créé une entrée "noc" dans votre fichier pcs.cfg). # vi /etc/nagios3/conf.d/hostgroups_nagios2.cfg Modifiez l'entrée suivante : # A list of your Debian GNU/Linux servers define hostgroup { hostgroup_name debian-servers alias Debian GNU/Linux Servers members localhost } de manière à ce que le paramètre "members" se présente comme ci-dessous. Consultez le schéma de réseau de la classe afin de vérifier nombre exact de machines de la classe ainsi que leur nom. members noc,pc1,pc2,pc3,pc4,pc5,pc6,pc7,pc8,pc9,pc10, pc11,pc12,pc13,pc14,pc15 - Ceci étant fait, ajoutez deux entrées supplémentaires, l'une pour les routeurs et l'autre pour les commutateurs, que vous intitulerez "routers" et "switches". - Une fois terminé, vérifiez votre travail avant de relancer Nagios. PARTIE V Informations étendues sur les hôtes ("pour de beaux graphismes") ----------------------------------------------------------------------------- 1. Mettez extinfo_nagios2.cfg à jour : - C'est là que vous pouvez utiliser des icônes pour les hôtes définis dans Nagios. Nous avons là les trois types de périphériques : des routeurs Cisco des commutateurs (HP ou Cisco) des serveurs Ubuntu Vous trouverez à l'adresse suivante un référentiel d'icônes relativement fourni : /usr/share/nagios/htdocs/images/logos/ Ces fichiers d'icône ont été installés par défaut comme progiciels dépendants du progiciel nagios3 sous Ubuntu. Vous trouverez dans certains cas des icônes propres à certains modèles de matériel, mais nous allons nous simplifier la tâche en utilisant les icônes suivantes pour notre matériel : /usr/share/nagios/htodcs/images/logos/base/debian.* /usr/share/nagios/htdocs/images/logos/cook/router.* /usr/share/nagios/htdocs/images/logos/cook/switch.* - L'étape suivante consiste à éditer le fichier /etc/nagios3/conf.d/extinfo_nagios2.cfg en indiquant à Nagios les images que vous souhaitez utiliser pour représenter vos machines. # vi /etc/nagios3/conf.d/extinfo_nagios2.cfg Voici un exemple d'entrée de routeur (nous avons déjà pour les serveurs debian une entrée qui convient en l'état). Vous noterez que le modèle du routeur (2811) n'est pas si important. L'image choisie représente un routeur en général. define hostextinfo { hostgroup_name routers icon_image cook/router.png icon_image_alt Cisco Routers (7200) vrml_image router.png statusmap_image cook/router.gd2 } Ajoutez maintenant une entrée pour vos commutateurs. Une fois terminé, vérifiez votre travail et relancez Nagios. Découvrez ensuite la carte d'état (Status Map) dans l'interface web. Elle devrait être maintenant beaucoup plus attrayante. PARTIE VI Création de groupes de services ----------------------------------------------------------------------------- 1. Créez des groupes de services ssh et http pour chaque ensemble de PC : - Il s'agit ici de créer trois groupes de services correspondant aux groupes de PC connectés respectivement aux routeurs xxxxxxx, yyyyyy, zzzzzz. Nous voulons voir ces PC groupés et inclure l'état de leurs services ssh et http. Editez et créez pour cela le fichier : # vi /etc/nagios3/conf.d/servicegroups.cfg Voici un exemple de groupe de services pour le premier routeur, xxxxxx : define servicegroup{ servicegroup_name group 1 services alias pcs 1-5 members pc1,SSH,pc1,HTTP,pc2,SSH,pc2,HTTP,pc3,SSH, pc3,HTTP,pc4,SSH,pc4,HTTP,pc5,SSH,pc5,HTTP } - Nous partions du principe, dans l'exemple ci-dessus, que les PC 1-5 sont connectés à un seul et même routeur. Vérifiez sur votre schéma de réseau comment est configurée la classe. - Enregistrez vos modifications, vérifiez votre travail et relancez Nagios. Si vous cliquez maintenant sur les options du menu Servicegroup dans l'interface web Nagios, vous devriez voir ces informations groupées. PARTIE VII Configuration d'un accès "invité" à l'interface web de Nagios ----------------------------------------------------------------------------- 1. Editez le fichier /etc/nagios3/cgi.cfg afin de ne donner qu'un accès "invité" à l'interface web de Nagios : - Nagios prévoit par défaut un accès en lecture/écriture complet par son interface web pour l'utilisateur nagiosadmin ; vous pouvez modifier le nom de cet utilisateur, ajouter d'autres utilisateurs, modifier les critères d'authentification des utilisateurs, les ressources auxquelles ont accès les différents utilisateurs, et bien d'autres paramètres encore dans le fichier cgi.cfg. - Créons tout d'abord un utilisateur "invité" et un mot de passe dans le fichier htpasswd.users. # htpasswd /etc/nagios3/htpasswd.users guest Vous pouvez utiliser n'importe quel mot de passe (voire aucun). Le mot de passe "invité" peut très bien convenir. - Editez ensuite le fichier /etc/nagios3/cgi.cfg en vérifiant le type d'accès qui a été donné à l'utilisateur nagiosadmin. Vous verrez par défaut les directives suivantes (notez la présence de commentaires entre chaque directive) : 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 Demandons maintenant à Nagios de laisser à l'utilisateur "invité" un certain accès aux informations via l'interface web. Vous pouvez choisir ce qui vous convient, mais les paramètres suivants sont relativement classiques : authorized_for_system_information=nagiosadmin,guest authorized_for_configuration_information=nagiosadmin,guest 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 - Une fois les modifications terminées, enregistrez le fichier cgi.cfg, vérifiez votre travail et relancez Nagios. - Pour voir si vous pouvez ouvrir une session en tant qu'utilisateur "invité" il peut être nécessaire de supprimer les cookies dans votre navigateur web. Vous ne remarquerez aucune différence dans l'interface web. La seule différence est qu'un certain nombre d'éléments disponibles par l'interface web (contrôle de forçage de services/d'hôte, planification de contrôles, commentaires, etc.) ne seront pas disponibles pour l'utilisateur invité.