linux_nagios

Ceci est une ancienne révision du document !


~~CLOSETOC~~

Nagios - Installation d'un outil de supervision

La tâche principale d'un administrateur étant le MCO (Maintient en Condition Opérationnelle), la supervision des systèmes est incontournable. Nagios offre cette possibilité.

<note important>Nagios existe en deux versions :

  • Nagios Core : la gratuite.
  • Nagios XI : la payante.

Ici, on utilisera Nagios Core.</note>

<note>Cette procédure a été testée sur une Debian 9.</note> <note warning>Cette procédure nécessite des droits d'administrateur (root). Attention donc à ce que vous faîtes.</note>

Comme souvent sur Linux, il nous faut d'abord mettre à jour notre machine :

apt-get update
apt-get upgrade

Une fois le système à jour, on commence par installer les prérequis :

apt-get install build-essential make apache2 apache2-utils php php-gd perl libgd2-xpm-dev libapache2-mod-php libperl-dev libssl-dev daemon wget unzip openssl

On crée un utilisateur nagios et un groupe nagcmd auquel on ajoutera l'utilisateur nagios et www-data :

useradd nagios
groupadd nagcmd
usermod -a -G nagcmd nagios
usermod -a -G nagcmd www-data

Il nous faut maintenant récupérer les sources de Nagios Core sur le site de Nagios. A l'heure où j'écris ces lignes, la version la plus récentes est la 4.4.4 :

cd /tmp/
wget https://assets.nagios.com/downloads/nagioscore/releases/nagios-4.4.4.tar.gz
tar -zxvf nagios-4.4.4.tar.gz 
cd nagios-4.4.4/

On configure les sources en vue de l'installation :

./configure --with-nagios-group=nagios --with-command-group=nagcmd --with-httpd_conf=/etc/apache2/sites-enabled/

Il nous reste plus qu'à compiler et installer Nagios :

make all
make install
make install-init
make install-config
make install-commandmode
make install-webconf

A ce stade Nagios est installé. Cependant il n'est pas encore utilisable. Il faut d'abord configurer certains points.

Pour monitorer les services de bases d'un système, Nagios à besoin de différents plugins. On peut obtenir ces plugins sur nagios-plugin.org. Actuellement, la dernière version est la 2.2.1 :

cd /tmp/
wget https://nagios-plugins.org/download/nagios-plugins-2.2.1.tar.gz
tar -zxvf /tmp/nagios-plugins-2.2.1.tar.gz
cd nagios-plugins-2.2.1/

Une fois de plus, on configure les sources :

./configure --with-nagios-user=nagios --with-nagios-group=nagios

Ensuite, on compile et installe :

make
make install

Les données de la supervision étant sensible, il nous faut en contrôler l'accès. Généralement, cela est fait par une demande d'authentification sur l'interface Web. On va donc créer un utilisateur à cet effet :

htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin

Nagios utilisant le module CGI, il nous faut l'activer au niveau d'apache :

a2enmod cgi

Ensuite, il faut redémarrer apache pour prendre en compte les modifications :

systemctl restart apache2

Pour permettre l'accès à Nagios depuis d'autres machines, il faut penser à paramétrer vos pare-feux. A titre d'exemple, en local avec iptables, il faudra rajouter la règle suivante :

iptables -I INPUT -p tcp --destination-port 80 -j ACCEPT

<note tip>Cette règle est basique et donnée à titre d'exemple. Je vous recommande de vous reporter aux manuels d'utilisation de vos solutions de sécurité avant de limiter l'accès à l'interface web aux seuls utilisateurs et adresses IP autorisés.</note>

A ce stade, Nagios doit pouvoir être accessible à l'adresse http://adresse_ip_de_votre_serveur/nagios. Pour cela, il faut d'abord le démarrer :

systemctl start nagios

Pour l'arrêter :

systemctl stop nagios

Pour connaître son état :

systemctl status nagios

Pour activer son démarrage automatique lors du démarrage du système :

systemctl enable nagios

Avoir un outil de supervision, c'est bien, qu'il sache ce qu'il doit monitorer, c'est mieux. Pour cela, Nagios récupère le contenu des fichiers .cfg situés dan /usr/local/nagios/etc/objects/ (chemin par défaut) et y recherche les définitions des hôtes, services, contacts… Par défaut, le dossier contient déjà des définitions regroupées par type :

[11:06:39] nekan@srv-nagios-1:/usr/local/nagios/etc/objects# ls -l
total 52
-rw-rw-r-- 1 nagios nagios  6755 août   2 10:12 commands.cfg
-rw-rw-r-- 1 nagios nagios  1797 août   2 10:12 contacts.cfg
-rw-rw-r-- 1 nagios nagios  4777 août   2 10:12 localhost.cfg
-rw-rw-r-- 1 nagios nagios  3001 août   2 10:12 printer.cfg
-rw-rw-r-- 1 nagios nagios  3484 août   2 10:12 switch.cfg
-rw-rw-r-- 1 nagios nagios 12533 août   2 10:12 templates.cfg
-rw-rw-r-- 1 nagios nagios  3512 août   2 10:12 timeperiods.cfg
-rw-rw-r-- 1 nagios nagios  4074 août   2 10:12 windows.cfg

Chaque fichier contient les définitions de base que l'on peut prendre pour exemple afin de déclarer les différents définitions dont on aura besoins (nos machines, nos services…).

Concernant l'organisation, il n'y a pas d'obligations. On peut tout déclarer dans un seul fichier, les séparer dans un fichier par type, regrouper les informations d'une machine dans un seul fichier ou encore un gros mix de tout ça.

Le plus important dans tout ça, c'est de bien vérifier les définitions que nous avons déclarées avant de relancer le service Nagios et ce, afin d'éviter les plantages. Pour cela, Nagios est livré avec une routine de vérification :

/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg

Ce qui nous renvoie quelque chose de ce style :

Nagios Core 4.4.4
Copyright (c) 2009-present Nagios Core Development Team and Community Contributors
Copyright (c) 1999-2009 Ethan Galstad
Last Modified: 2019-07-29
License: GPL
 
Website: https://www.nagios.org
Reading configuration data...
   Read main config file okay...
   Read object config files okay...
 
Running pre-flight check on configuration data...
 
Checking objects...
        Checked 8 services.
        Checked 1 hosts.
        Checked 1 host groups.
        Checked 0 service groups.
        Checked 1 contacts.
        Checked 1 contact groups.
        Checked 24 commands.
        Checked 5 time periods.
        Checked 0 host escalations.
        Checked 0 service escalations.
Checking for circular paths...
        Checked 1 hosts
        Checked 0 service dependencies
        Checked 0 host dependencies
        Checked 5 timeperiods
Checking global event handlers...
Checking obsessive compulsive processor commands...
Checking misc settings...
 
Total Warnings: 0
Total Errors:   0
 
Things look okay - No serious problems were detected during the pre-flight check

On notera sur le retour de la console le nombre total d'avertissement et d'erreur. Si les avertissements ne sont pas bloquant, les erreurs entraîneront l'impossibilité de démarrer le service.

Pour connaître toutes les options possibles pour les définitions d'objets : Nagios

A ce stade, Nagios peut se monitorer. Mais le but de la manœuvre est plus souvent de monitorer un ensemble de machines. Pour cela, Nagios communiquera avec des agents pour récupérer les informations en provenance des autres hôtes :

  • NRPE pour les hôtes Linux.
  • NSClient pour les hôtes Windows.

On commence d'abord par mettre à jour la machine :

apt-get update
apt-get upgrade

On peut maintenant installer les paquets nécessaires :

apt-get install nagios-nrpe-server nagios-plugins

Une fois les paquets installés, il faut autoriser NRPE à dialoguer avec le serveur Nagios. On commence par éditer le fichier /etc/nagios/nrpe.cfg, dans lequel on modifiera la ligne allowed_hosts=127.0.0.1 en y ajoutant l'adresse du ou des serveurs Nagios. Par exemple allowed_hosts=127.0.0.1,192.168.1.200,10.10.10.250.

On oublie pas bien sûr de redémarrer le service pour prendre en compte les modifications

systemctl restart nagios-nrpe-server.service

Il faut aussi penser à autoriser les flux à travers le pare-feu. Nagios et NRPE communique sur le port 5666, il faut donc ouvrir ce port sur votre solution de sécurité. Par exemple, pour iptables, on utilisera la règle suivante :

iptables -A INPUT -p tcp -s adresse_ip_du_serveur_nagios --dport 5666 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

On peut personnaliser les vérifications que pourra exécuter NRPE en ajoutant une commande dans /etc/nagios/nrpe.cfg dans dans un fichier .cfg situé dans le dossier /etc/nagios/nrpe.d/. Cette commande devra avoir pour syntaxe :

command[nom]=chemin argument

  • nom : le nom de la commande telle qu'elle sera appelée par le serveur Nagios.
  • chemin : le chemin absolu de la commande qui sera exécuté localement par NRPE.
  • argument : les arguments pour la commande locale.

Ce qui nous donnera par exemple :

command[check_users]=/usr/lib/nagios/plugins/check_users -w 5 -c 10

  • Nagios va appeler la commande check_users.
  • NRPE va exécuter localement la commande /usr/lib/nagios/plugins/check_users avec les arguments -w 5 et -c 10.
  • A la fin de l'exécution de cette commande, NRPE renverra à Nagios le résultat, soit dans notre cas, un OK si il y a moins de 5 utilisateurs connectés, un avertissement de 5 à 9 utilisateurs et un critique au delà.

Une fois les commandes ajoutées, modifiées et/ou supprimées, il faut bien penser à relancer le service NRPE pour prendre en compte la nouvelle configuration.

De retour sur le serveur Nagios, il faut d'abord installer le plugin :

apt install nagios-nrpe-plugin

Puis, ajouter la commande générale dans votre fichier de définitions des commandes (/usr/local/nagios/etc/objects/commands.cfg par défaut) :

nano /usr/local/nagios/etc/objects/commands.cfg

Code à rajouter :

# Définition pour l'utilisation des commandes NRPE
define command {
     command_name     check_nrpe
     command_line     /usr/lib/nagios/plugins/check_nrpe -H $HOSTADDRESS$ -t 30 -c $ARG1$
}

Ainsi pour que Nagios appelle la commande check_users vu précédemment, il faudra définir un service pour un l'hôte en question du style :

define service {
     use                     service-local
     host_name               client.shyrka.sys
     service_description     Current Users
     check_command           check_nrpe!check_users
}

underconstruction-copy-300x150.jpg

Entrer votre commentaire. La syntaxe wiki est autorisée:
 
  • linux_nagios.1564742195.txt.gz
  • Dernière modification : 2019/08/02 10:36
  • (modification externe)