Documentation technique Nagios
Table des matières Presentation :... 3 Installation Nagios :... 3 Installation du service SNMP :... 3 Modification fichier de configuration :... 5 Définir un Host :... 5 Définir un service :... 5 Définir des HOSTGROUP :... 7 Modification Extended Host and Service Information :... 8 Notification par mail des alertes Nagios :... 9 Installation de nouveau plugin :... 11 Problèmes rencontré :... 12
Presentation : Nagios est une application permettant la surveillance système et réseau. Elle surveille les hôtes et services spécifiés, alertant lorsque les systèmes ont des dysfonctionnements et quand ils repassent en fonctionnement normal. C'est un logiciel libre sous licence GPL. C'est un programme modulaire qui se décompose en trois parties : - Le moteur de l'application qui vient ordonnancer les tâches de supervision. - L'interface web, qui permet d'avoir une vue d'ensemble du système d'information et des possibles anomalies. - Les sondes (appelées greffons ou plugins), une centaine de mini programmes que l'on peut compléter en fonction des besoins de chacun pour superviser chaque service ou ressource disponible sur l'ensemble des ordinateurs ou éléments réseaux du SI. Installation Nagios : Modifier le fichier /etc/apt/sourcelist et rajouter non-free à la fin de chaque ligne Faire un apt-get update Ensuite: apt-get install nagios3 nagios-plugins mibs snmp-nagios-plugins Installation du service SNMP : Pour installer le service SNMP, il suffit de faire cette commande : apt-get install snmpd Par la suite il faut configurer le fichier snmpd.conf placer dans /etc/snmp/. Dans ce fichier nous allons changer deux lignes, la première se trouve dans la partie # ACCESS CONTROL : rocommunity public default -V systemonly Qui deviendra : rocommunity anendra default -V systemonly
Cela permet à la communauté anendra de voir les informations système basique de la machine. Et la deuxième ligne se trouve dans la partie # ACTIVE MONITORING : # send SNMPv1 traps trapsink localhost public # send SNMPv2c traps #trap2sink localhost public Que l on modifiera comme cela : # send SNMPv1 traps # trapsink localhost public # send SNMPv2c traps trap2sink localhost anendra Modifier cette ligne permet d envoyer des paquets SNMP en version 2. Le choix de la version 2 est un compromis entre sécurité et facilité de configuration. Si on voulait plus de sécurité on aurait choisi la version 3 qui demande un login et un mot de passe crypter. La version 2 possède un minimum de sécurité car la, seul la communauté configurer dans le fichier pourra lire les paquets SNMP. La configuration vu ci-dessus fonctionne très bien avec un machine physique ou sur un serveur de virtualisation dans le quelle on peut créer des machines virtuelle bien dissocier du serveur, c est-àdire qu on leur attribue des ressources et elle les utilise et rien de plus. Avec un serveur Proxmox ont peu créé des machines linux sous forme de CT (conteneur). Cela permet de faire des machines à la fois isolées mais aussi très proche du serveur de virtualisation. Par exemple la machine linux utilisera le même kernel que le serveur de virtualisation, on va aussi pouvoir modifier la machine en direct alors qu avec une VM on devra forcement redémarrer. A cause de cela lorsque la machine linux est créée sous forme de conteneur il installe 3 interfaces réseau La lo loopback, une interface venet 0, et une interface virtuel venet0 :0. Par défaut le service snmpd prendra l interface venet0, il faudra donc lui spécifier l adresse IP par laquelle il doit envoyer les paquets SNMP.
Pour cela il faut modifier le fichier snmpd qui se trouve dans /etc/default/ et changer la ligne suivante : SNMPDOPTS='-Lsd -Lf /dev/null -u snmp -g snmp -I -smux -p /var/run/snmpd.pid' Et rajouter l adresse IP de sortie : SNMPDOPTS='-Lsd -Lf /dev/null -u snmp -g snmp -I -smux -p /var/run/snmpd.pid 192.168.0.100' Modification fichier de configuration : Définir un Host : Nagios prendra en compte tous les fichiers en.cfg qui seront dans /etc/nagios3/conf.d/. Nous prendrons l habitude de ranger les fichiers de configuration de manière lisible (exemple les machine linux dans un dossier linux, les machines Windows dans un dossier Windows) Pour chaque host il faut le déclarer comme suit : definehost{ hostname Exemple alias exemple address 192.168.0.20 parent hostname Déclarer un host permettra à Nagios de faire un Ping et de dire si la machine supervisée est allumée ou non. Définir un service : Pour les machines linux il est assez simple de superviser des machines linux car beaucoup de script sont déjà par défaut sur nagios. Un exemple de services par défaut que l on peut superviser : define service{ use host_name service_description generic-service Samba Disk Space
check_command Check_all_disks!20%!10% Avec cette commande on demande à Nagios de superviser l espace disque de toutes les partitions que possède la machine Samba, en émettant un warning quand l espace arrive à 20%, et une alerte critique quand l espace arrive à 10%. check_uptime : Nagios possède de nombreuses commandes de base. Nous voulions avoir le temps de service de la machine et cette commande n est pas de base dans Nagios. Pour trouver cette commande il faut faire plusieurs manipulation, tout d abord un snmpwalk sur une machine avec cette commande: snmpwalk -c anendra -v2c @IP -m ALL Cette commande va faire une liste de tous les paquets snmp de la machine distante en traduisant les MIB afin d avoir des informations plus parlante. Nous remarquons une ligne avec notre uptime : HOST-RESOURCES-MIB::hrSystemUptime.0 = Timeticks: (138915909) 16 days, 1:52:39.09 Ensuite nous faisons la même commande sans les traductions : snmpwalk -c anendra -v2c @IP La ligne apparait maintenant sous cette forme : iso.3.6.1.2.1.25.1.1.0 = Timeticks: (138941312) 16 days, 1:53:53.12 Cette ligne va nous permettre d écrire notre commande pour Nagios. Dans le fichier snmp.cfg se trouvant dans /etc/nagios-plugins/config/ define command{ command_name check_uptime command_line /usr/lib/nagios/plugins/check_snmp -H '$HOSTADDRESS$' -C '$ARG1$' o.1.3.6.1.2.1.25.1.1.0 Dans le snmp.cfg, on définit une commande, on lui donne un nom «check_uptime» et on donne le chemin du script qu il va exécuter plus les options associer. Le «-H» est un argument pour définir
l adresse de l hôte sur lequel on veut récupérer l information, «$HOSTADDRESS$» est une variable ce qui nous permet de ne pas tout le temps écrire l adresse IP dans le fichier d hôte après avoir définie le service. Ensuite nous pouvons mettre d autre argument, le «-C» est une option pour définir la communauté snmp pour avoir l information «$ARG1$» va nous permettre dans le fichier de configuration d écrire l option sans avoir à écrire tout la ligne de «command_line». Cette commande définie, sur un host nous allons écrire ceci : define service{ use host_name service_description check_command generic-service Samba Uptime check_uptime!anendra! Dans la partie check_command on retrouve bien la commande check_uptime et ensuite pour la communauté on la défini entre deux points d exclamation ce qui permettra de faire le lien avec le $ARG1$ défini dans le fichier snmp.cfg Définir des HOSTGROUP : Les hostgroups sont assez pratique, ils permettent de former des groupes d hôte afin d avoir une vue plus claire de ce que l on possède, par exemple on pourra mettre toutes les machines Windows ensemble, tous les linux ensemble ou tous les routeurs ensemble, mais également toutes les machines ayant un service web ou encore le service ssh actif. La création d hostgroup permettra aussi d attribuer la supervision d un service à tous les hôtes du groupe sans avoir à rajouter ce service dans chaque hôte. Pour créer un nouveau hostgroup il faut changer le fichier hostgroups_nagios2.cfg qui se trouve dans /etc/nagios3/conf.d/ de la manière suivante : define hostgroup { hostgroup_name debian-servers alias Debian GNU/Linux Servers members
Le hostgroup_name représentera le nom du groupe, ou pourras le mettre directement dans le fichier de configuration d un hôte si on le souhaite. L alias représente plus un ajout d information que l on verra sur l interface web et qui nous permettra de ne pas chercher longtemps ce que l on souhaite. Et dans members il faut mettre le host_name de chaque hôte qui fera partie du groupe séparé pas des virgules sans espaces. Modification Extended Host and Service Information : La modification de ce fichier n est pas vraiment important mais cela permet de rendre la vue map un peu plus jolie. Pour cela il suffit d avoir des icônes d une taille de 40 x 40 et tout cela en 8 bits à différent format (png, jpg, gif, gd2) C est icone sont à placer dans : /usr/share/nagios/htdocs/images/logos/base/ /usr/share/nagios/htdocs/images/logos/logos/ /usr/share/nagios3/htdocs/images/logos/ Ces icones vont servir à placer des icônes dans la vue «Map» de nagios afin de repérer rapidement les diffèrent élément. Par défaut un icone est déjà intégrer celui de Debian. La meilleure façon d ajouter les icones est de le faire par rapport au hostgroup. Pour cela il faut modifier le fichier extinfo_nagios2.cfg se trouvant dans /etc/nagios3/conf.d/. Dans ce fichier nous trouvant notre configuration par défaut pour Debian : define hostextinfo{ hostgroup_name debian-servers notes Debian GNU/Linux servers icon_image base/debian.png icon_image_alt Debian GNU/Linux vrml_image debian.png statusmap_image base/debian.gd2 Pour l adapter il suffit de modifier quelques lignes : define hostextinfo{
hostgroup_name debian-servers notes Debian GNU/Linux servers icon_image base/debian.png icon_image_alt Debian GNU/Linux vrml_image debian.png statusmap_image base/debian.gd2 Pour le hostgroup_name mettre le nom du groupe d hôtes auquel l icône sera attribué. Pour la partie icone_image et statusmap_image mettre le nom du fichier png qui représenteras votre groupe et pour icon_image_alt c est une information en plus lorsque l on passera la souris sur l icône. Notification par mail des alertes Nagios : Pour recevoir les notifications par mail pour les alertes Nagios il faut installer un serveur de mail Postfix qui se servira ensuite de notre serveur de mail principal comme relais smtp. Pour cela faire apt-get install postfix. Dans le fichier main.cf qui se trouve dans /etc/postfix/ il faut retrouver ces éléments : myorigin = /etc/mailname smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU) biff = no append_dot_mydomain = no myhostname = nagios.anendra.com alias_maps = hash:/etc/aliases alias_database = hash:/etc/aliases mydestination = $myhostname, localhost.$mydomain, localhost relayhost = 192.168.0.105:587 mynetworks = 192.168.0.0/24 inet_interfaces = all recipient_delimiter = + smtp_sasl_auth_enable = yes smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd smtp_sasl_security_options = noanonymous smtp_use_tls = yes Les parties en rouge sont celle à adapter selon l infrastructure. Créer le fichier sasl_passwd placer dans /etc/postfix nous allons mettre les informations suivante : Serveur_mail :port adresse_email_a_utiliser :mot_de_passe_du_compte Ca donnerait dans notre cas : 192.168.0.105 :587 nagios@anendra.com:mot_de_passe
Il faut ensuite générer la base de données d authentification : postmap /etc/postfix/sasl_passwd Relancer postfix et pour vérifier qu il n y a aucune erreur regardes les logs : /var/log/mail.err pour les erreurs serveur /var/log/mail.log pour les envoie de mail A la suite de cela ou doit modifier le fichier contacts_nagios2.cfg situer dans /etc/nagios3/conf.d/ define contact{ contact_name root alias Root service_notification_period 24x7 host_notification_period 24x7 service_notification_options w,u,c,r host_notification_options d,r service_notification_commands notify-service-by-email host_notification_commands notify-host-by-email email root@localhost Ceci est le fichier par défaut que nous allons modifier : define contact{ contact_name anendra alias Anendra service_notification_period 24x7 host_notification_period 24x7 service_notification_options w,u,c,r host_notification_options d,r service_notification_commands notify-service-by-email host_notification_commands notify-host-by-email email supervision_anendra@anendra.com Nous avons créé notre propre contact, toutes les alertes arriveront dans la liste de diffusion de supervision_anendra@anendra.com.
Dans la partie contact group nous allons donc rajouter anendra comme faisant partie des administrateurs il recevra donc tous les mails d alertes : define contactgroup{ contactgroup_name admins alias Nagios Administrators members root,anendra Installation de nouveau plugin : Nagios est un outil de supervision qui avec les bases permet de superviser beaucoup de chose. Mais quelque fois nous avons des besoins spécifiques et la communauté est là pour arranger ça. http://exchange.nagios.org/ Nagios exchange est le site regroupant tous les plugins pour nagios, on peut y trouver vraiment beaucoup de plugins divers et varier pour à peu près tous nos besoins. Lorsque l on souhaite installer un nouveau plugin il suffit de le télécharger et de le placer dans /usr/lib/nagios/plugins par la suite il faudra faire un fichier de configuration dans /etc/nagiosplugins/config/ pour définir la commande qui va permettre d exécuter le plugin. Exemple avec le plugin pve-monitor.pl dont nous nous servons le script se trouve dans /usr/lib/nagios/plugins, le fichier qui définit les commandes associer à ce script se trouve dans /etc/nagios-plugins/config/pve-monitor.cfg : define command{ command_name check_pve_cluster_nodes command_line /usr/bin/perl /usr/lib/nagios/plugins/pve-monitor.pl --conf /etc/nagios3/pve-monitor.conf --nodes # 'check_pve_cluster_openvz command definition define command{ command_name check_pve_cluster_openvz command_line /usr/bin/perl /usr/lib/nagios/plugins/pve-monitor.pl --conf /etc/nagios3/pve-monitor.conf --openvz # 'check_pve_cluster_qemu command definition define command{ command_name check_pve_cluster_qemu command_line /usr/bin/perl /usr/lib/nagios/plugins/pve-monitor.pl --conf /etc/nagios3/pve-monitor.conf --qemu # 'check_pve_cluster_storage command definition
define command{ command_name check_pve_cluster_storage command_line /usr/bin/perl /usr/lib/nagios/plugins/pve-monitor.pl --conf /etc/nagios3/pve-monitor.conf --storages define command{ command_name check_pve_cluster_pools command_line /usr/bin/perl /usr/lib/nagios/plugins/pve-monitor.pl --conf /etc/nagios3/pve-monitor.conf --pools Comme on peut le voir notre plugins a besoin en plus d un fichier de configuration le pvemonitor.conf mais c est une particularité de ce plugin. Problèmes rencontré : Il se trouve que lorsque nous avons ajouté des hôtes et que nous voulions lancer des check manuel via l interface web la page nous renvoyais cette erreur : Sorry, but Nagios is currently not checking for external commands, so your command will not be committed! Read the documentation for information on how to enable external commands... Après avoir fait quelques recherches sur internet il se trouve que la configuration par défaut de nagios ne permet pas de faire des checks depuis l interface web. Pour résoudre ce problème il faut changer le fichier de configuration nagios.cfg se trouvant dans /etc/nagios3/, trouver la ligne «check_external_command=» et mettre la valeur à 1. Redémarrer Nagios. Pour certain cette solution seul suffit, mais nous avons eu un autre message : Error: Could not stat() command file /var/lib/nagios3/rw/nagios.cmd! The external command file may be missing, Nagios may not be running, and/or Nagios may not be checking external commands. An error occurred while attempting to commit your command for processing. Return from whence you came
La solution à appliquer est celle-ci : root@nagios:~# ls -l /var/lib/nagios3/rw/nagios.cmd prw-rw---- 1 nagios nagios 0 Aug 11 22:27 /var/lib/nagios3/rw/nagios.cmd root@nagios:~# chmod -R g+x /var/lib/nagios3/rw root@nagios:~# -l /var/lib/nagios3/rw/nagios.cmd prw-rwx--- 1 nagios nagios 0 Aug 11 22:27 /var/lib/nagios3/rw/nagios.cmd root@nagios:~# service nagios3 restart root@nagios:~# ls -l /var/lib/nagios3/rw/nagios.cmd prw-rw---- 1 nagios nagios 0 Aug 11 22:27 /var/lib/nagios3/rw/nagios.cmd root@nagios:~# chown nagios:www-data /var/lib/nagios3/rw/nagios.cmd root@nagios:~# usermod -G nagios www-data root@nagios:~# service apache2 restart