Installation de Nagios

Je travaille sous Debian GNU/Linux par habitude. Avec ce système d’exploitation, il est très facile d’installer Nagios : 

sudo apt-get install nagios3

Attention : la configuration pour Nagios ne s’écrit pas de la même façon selon la version majeure considérée. Ici pour la version 3, les fichiers de configuration seront différents de ceux pour Nagios 2, pensez à bien vérifier la version des exemples que vous copiez-collez sur Internet.

Nagios s’administre depuis une interface Web ; pour pouvoir y accéder, le paquet de Nagios installe automatiquement les dépendances permettant à un serveur Web de tourner (Apache 2 par défaut), mais vous pourriez avoir envie de faire autrement. Vérfiiez alors que vous avez bien un serveur web installé pour pouvoir faire tourner Nagios en CGI (python).

Nagios installe par défaut un ensemble de plugins pour les sondes mais pas seulement. Nagios est très modulaire, et permet de faire beaucoup de chose. Si vous avez besoin des plugins supplémentaires, ceux-ci sont dans les paquets nagios-plugins-* .

Par défaut, après l’installation Nagios est accessible à l’URL http://votreserveur/cgi-bin/nagios3/status.cgi. Le login et le mot de passe sont à changer avec la commande suivante htpasswd /etc/nagios3/htpasswd.users leloginsouhaite.

Où est la configuration ?

Le premier réflexe après avoir installé un logiciel, aussi automatisé que soit l’installation, c’est de regarder dans /etc/ si il y a pas un ou plusieurs fichiers de configuration.

Gagné, il y a /etc/nagios3/ et /etc/nagios-plugins/ .

Dans /etc/nagios3/ il y a la configuration générale de nagios : les hosts et les services à surveiller, l’interaction avec les systèmes externes, les personnes à prévenir en cas d’accident, etc.

Dans /etc/nagios-plugins/, il y a la configuration du comportement des plugins. Je m’en sers principalement pour avoir de la documentation sur les plugins disponibles et leurs arguments, mais vous pourriez en avoir besoin pour modifier le comportement d’un plugin, ou créer le vôtre.

C’est quoi ce bordel…

Si vous commencez à plonger dans la configuration de /etc/nagios3, vous allez vite déchanter : il y a des fichiers de configuration aux noms pas très évocateurs, de services par défaut et génériques qui ne veulent rien dire. Par de panique, on va vous aider.

Le point d’entrée de la configuration dans Nagios est le fichier /etc/nagios3/nagios.cfg. Pour des raisons évidentes, la configuration de Nagios n’est pas intégralement présente dans ce fichier. Nagios inclut tous les fichiers qui se trouvent dans le dossier /etc/nagios3/conf.d/ (et récursivement dans les sous-dossiers).

Les hôtes

Les hôtes dans Nagios sont les machines à surveiller. Ce sont des éléments identifiés par leur nom. Il peut y avoir des hotes “virtuels” qui ne correspondent pas à une machine en particulier mais à un ensemble de résultat provenant de sondes que vous pouvez configurer.

La configuration par défaut de Nagios définit un hôte générique. Cet hôte n’est pas affiché dans l’interface car c’est un “template” de configuration. Vous faites “hériter” vos hôtes de ce service générique qui contient tout ce dont la plupart des hôtes ont besoin, et vous y rajoutez votre grain de sel.

La configuration des hôtes dans Nagios se fait dans /etc/nagios3/conf.d/. je vous conseille de créer un dossier /etc/nagios3/conf.d/hosts/ et de créer ensuite un fichier par hôte, par commencer. Une fois que vous serez plus à l’aise avec le concept d’hôte générique, vous pourrez faire vos propres hôtes génériques, et factoriser un peu votre configuration.

Les services

Les services dans Nagios sont les appels aux sondes que vous allez définir. Ces sondes sont déclarées dans les fichiers de configuration de /etc/nagios-plugins/config/ pour pointer vers des exécutables (généralement en Perl ou en Python) présents dans le répertoire /usr/lib/nagios/plugins/, qui vont réaliser effectivement les tests.

Je vous conseille, pour définir vos services, de créer le dossier /etc/nagios3/conf.d/services/ et placer un fichier par service à l’intérieur.

Les sondes des services peuvent prendre des arguments. Le plus courant est de leur donner (implicitement) l’adresse de l’hôte à tester, mais on peut aussi passer explicitement des arguments, comme par exemple le port à tester. (Si jamais vous avez déplacé le port d’écoute de SSH. Comment ça vous l’avez pas fait ?)

Pour ceux qui en ont, les arguments des sondes sont déclarés dans /etc/nagios-plugins/config/.

Les groupes

Voilà le point central de votre configuration : les groupes. Les groupes sont déclarés dans /etc/nagios3/config/groups.cfg.

Un groupe dans Nagios est un moyen d’appliquer un ensemble de services à un hôte “d’un coup”. En gros, vous avez trois moyens d’attacher vos services à vos hôtes :

  • Quand vous déclarez vos hôtes, vous mentionnez explicitement les services qu’il doit posséder.
  • Quand vous déclarez les services, vous mentionnez explicitement les hôtes sur lesquels le service doit s’appliquer
  • Vous déclarez vos “groupes”, qui sont des ensembles de services, prêt à être appliqués à vos hôtes, vous spécifiez à quels groupes le service appartient, et vous spécifiez les hôtes présents dans le groupe.

Dans la suite, nous appliquerons la troisième solution.

Un petit exemple pour commencer

Sans commentaires, voici un petit exemple :

Groupes

/etc/nagios3/groups.cfg :

# A list of your web servers
define hostgroup {
                hostgroup_name  http-servers
                alias           HTTP servers
                members         host1 ; Link host to hostgroup
        }

# A list of your ssh-accessible servers
define hostgroup {
                hostgroup_name  ssh-servers
                alias           SSH servers
                members         host1,host2 ; Link host to hostgroup
        }

Hôtes

/etc/nagios3/conf.d/hosts/host1.cfg :

define host {
        use                     generic-host ; Name of host template to use
        host_name               host1
        alias                   host1
        address                 192.168.1.11 ; Replace with your real host1 address !
        }

/etc/nagios3/conf.d/hosts/host2.cfg :

define host {
        use                     generic-host ; Name of host template to use
        host_name               host2
        alias                   host2
        address                 192.168.1.12 ; Replace with your real host2 address !
        }

Services

/etc/nagios3/conf.d/services/ssh.cfg :

# check that ssh services are running
define service {
        hostgroup_name                  ssh-servers ; Link service to hostgroup
        service_description             SSH
        check_command                   check_ssh_port!22
        use                             generic-service
        notification_interval           0 ; set > 0 if you want to be renotified
}

/etc/nagios3/conf.d/services/http.cfg :

# check that ssh services are running
define service {
        hostgroup_name                  http-servers ; Link service to hostgroup
        service_description             HTTP
        check_command                   check_http
        use                             generic-service
        notification_interval           0 ; set > 0 if you want to be renotified
}

Toutes les sondes que vous voulez !

Dans l’exemple ci-dessus, j’ai utilisé deux sondes génériques : check_ssh_port et check_http. Toutes les sondes disponibles sont déclarées dans /etc/nagios-plugins/conf/, ces sondes se présentent sous la forme de “commandes” que l’on peut utiliser moment de la déclaration des services.

Les sondes déclarées appellent en général les exécutables qui se trouvent dans /usr/lib/nagios/plugins/. Souvent, plusieurs sondes sont déclarées pour un même exécutable, mais avec des paramètres différents (par exemple check_ssh et check_ssh_port qui permet de spécifier le port en argument).

Pour afficher les paramètres déclarés par les sondes, vous pouvez éditer les fichiers de configuration présents dans /etc/nagios-plugins/conf/.

Pour déclarer vos propres sondes à partir des exécutables, vous pouvez afficher les arguments disponible pour les exécutables de /usr/lib/nagios/plugins/ en lançant simplement le fichier exécutable avec le paramètre --help.

Les alertes

Pour l’instant notre Nagios est muet. Il peut alerter sur l’interface web, mais ne vous envoie pas de mails pour se plaindre que l’un des services est tombé.

Les alertes dans Nagios se configurent dans /etc/nagios3/conf.d/contacts.cfg, dans ce fichier sont définis les personnes à contacter en cas de problème, et quels sont les types d’alertes à recevoir par ces personnes.

Vous pouvez prendre exemple sur le contact par défaut pour créer vos propres contacts :

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
        }

N’oubliez pas de rajouter vos nouveaux contact au groupe de contact de Nagios :

define contactgroup {
        contactgroup_name       admins
        alias                   Nagios Administrators
        members                 root
        }

Une configuration plus fine peut être réalisée au niveau des alertes, ou de l’escalade des alertes, suivez ce lien pour en savoir plus : Notifications Escalations.

Pour conclure

En guise de conclusion et pour aller plus loin, je vous conseille de faire comme vous en avez l’habitude sous Debian : lire les documentations qui sont incluses avec le paquet dans /usr/share/docs/nagios*.

Dans le prochain billet de cette série, je détaillerai l’installation et la réalisation d’une configuration simple pour Puppet, qui nous servira pour pouvoir installer facilement Munin sur l’ensemble des machines du parc.

Ah oui, n’oubliez pas de relancer le service nagios3 après avoir changé la configuration pour l’appliquer !

.

.