Supervision des serveurs de la plateforme : Différence entre versions

De Wiki d'activités IMA
(Semaine 6)
(Fichiers rendus)
 
(32 révisions intermédiaires par le même utilisateur non affichées)
Ligne 1 : Ligne 1 :
 
== <span style="color:#D94600">Présentation générale du projet 1</span> ==
 
== <span style="color:#D94600">Présentation générale du projet 1</span> ==
  
==== <span style="color:#6FB7B7">Objectif du stage</span> ====
+
=== <span style="color:#6FB7B7">Objectif du stage</span> ===
  
L'objectif de ce stage est que trouver une application Web standard sous Linux permettant à un administrateur d'obtenir un tableau de bord de machines virtuelles désiminées sur plusieurs machines physiques. Configurer cette application pour obtenir les informations suivantes :
+
L'objectif de ce stage est de trouver une application Web standard sous Linux permettant à un administrateur d'obtenir un tableau de bord de machines virtuelles disséminées sur plusieurs machines physiques. L'application doit être configurée pour obtenir les informations suivantes :
  
 
* état de santé des machines physiques : température, état des disques, ...
 
* état de santé des machines physiques : température, état des disques, ...
Ligne 14 : Ligne 14 :
 
** dates des dernières sauvegardes des machines virtuelles
 
** dates des dernières sauvegardes des machines virtuelles
  
Voici le schéma du réseau de la plateforme maths/info
+
Voici le schéma de l'architecture réseau et système de la plateforme maths/info
  
 
[[Fichier:Plateforme_Drawing.png|thumb|400px|center]]
 
[[Fichier:Plateforme_Drawing.png|thumb|400px|center]]
  
==== <span style="color:#6FB7B7">Recherche sur des applications de surveillance système et réseau</span> ====
+
=== <span style="color:#6FB7B7">Recherche sur des applications de surveillance système et réseau</span> ===
 +
 
 
==== <span style="color:#6A6AFF">Nagios</span> ====
 
==== <span style="color:#6A6AFF">Nagios</span> ====
 
Possibilités:
 
Possibilités:
Ligne 26 : Ligne 27 :
 
#Interface avec le protocole SNMP.
 
#Interface avec le protocole SNMP.
 
#La supervision à distance peut utiliser SSH ou un tunnel SSL (notamment via un agent NRPE).
 
#La supervision à distance peut utiliser SSH ou un tunnel SSL (notamment via un agent NRPE).
#Les plugins sont écrits dans les langages de programmation les plus adaptés à leur tâche : scripts shell (Bash, ksh, etc.), C++, Perl, Python, Ruby, PHP, C#, etc.
+
#Les plugins sont écrits dans les langages de programmation les plus adaptés à leur tâche : scripts shell (bash, ksh, etc.), C++, Perl, Python, Ruby, PHP, C#, etc.
 
#La vérification des services se fait en parallèle.
 
#La vérification des services se fait en parallèle.
 
#Possibilité de définir une hiérarchie dans le réseau pour pouvoir faire la différence entre un serveur en panne et un serveur injoignable.
 
#Possibilité de définir une hiérarchie dans le réseau pour pouvoir faire la différence entre un serveur en panne et un serveur injoignable.
Ligne 34 : Ligne 35 :
 
#Limitation de la visibilité, les utilisateurs peuvent avoir un accès limité à quelques éléments.
 
#Limitation de la visibilité, les utilisateurs peuvent avoir un accès limité à quelques éléments.
 
#Capacité de gestion des oscillations (nombreux passages d'un état normal à un état d'erreur dans un temps court).
 
#Capacité de gestion des oscillations (nombreux passages d'un état normal à un état d'erreur dans un temps court).
#Créer ses propres plugins, dans le langage désiré. Il suffit de respecter la norme Nagios des Codes retour
+
#Créer ses propres plugins, dans le langage désiré. Il suffit de respecter la norme Nagios des codes retour
 
## Code 0 : OK (tout va bien)
 
## Code 0 : OK (tout va bien)
 
## Code 1 : WARNING (le seuil d'alerte est dépassé)
 
## Code 1 : WARNING (le seuil d'alerte est dépassé)
Ligne 43 : Ligne 44 :
 
Le « serveur ZABBIX » peut être décomposé en trois parties séparées : Le serveur de données, l'interface de gestion et le serveur de traitement. Chacune d'elles peut être disposée sur une machine différente pour répartir la charge et optimiser les performances.
 
Le « serveur ZABBIX » peut être décomposé en trois parties séparées : Le serveur de données, l'interface de gestion et le serveur de traitement. Chacune d'elles peut être disposée sur une machine différente pour répartir la charge et optimiser les performances.
  
Le système dont l'utilisation des ressources doit être analysée comporte un agent fonctionnant sous forme de daemon appelé zabbix-agentd et écoutant par défaut sur le port TCP 10050. Celui-ci est chargé d’exécuter sur le système différents scripts permettant d'échantillonner l'état des ressources des différents composants du système (Mémoire, CPU, débit réseau, entrées-sorties, nombre de connexion à une application, etc.). Le serveur Zabbix appelle donc régulièrement cet agent et lui demande les informations concernant telle ou telle ressource.
+
Le système dont l'utilisation des ressources doit être analysée comporte un agent fonctionnant sous forme de démon système appelé <code>zabbix-agentd</code> et écoutant par défaut sur le port TCP 10050. Celui-ci est chargé d’exécuter sur le système différents scripts permettant d'échantillonner l'état des ressources des différents composants du système (Mémoire, CPU, débit réseau, entrées-sorties, nombre de connexion à une application, etc.). Le serveur Zabbix appelle donc régulièrement cet agent et lui demande les informations concernant telle ou telle ressource.
  
 
Son interface web est écrite en PHP. Elle agit directement sur les informations stockées dans la base de données. Chaque information nécessaire au serveur de traitement étant réactualisée automatiquement, il n'y a pas d'action à effectuer sur le binaire pour lui indiquer qu'il y a eu une mise à jour.
 
Son interface web est écrite en PHP. Elle agit directement sur les informations stockées dans la base de données. Chaque information nécessaire au serveur de traitement étant réactualisée automatiquement, il n'y a pas d'action à effectuer sur le binaire pour lui indiquer qu'il y a eu une mise à jour.
Ligne 68 : Ligne 69 :
 
Xymon offre une interface graphique de supervision dans un navigateur web, énumérant les états de différents services sur chaque machine. Il permet de paramétrer des envois de courriels après un certain temps de dégradation, par exemple après 30 minutes d'espace disque utilisé à plus de 90 %. On peut ensuite afficher les statistiques de tous ces services sous forme de graphique.
 
Xymon offre une interface graphique de supervision dans un navigateur web, énumérant les états de différents services sur chaque machine. Il permet de paramétrer des envois de courriels après un certain temps de dégradation, par exemple après 30 minutes d'espace disque utilisé à plus de 90 %. On peut ensuite afficher les statistiques de tous ces services sous forme de graphique.
  
==== <span style="color:#6FB7B7">Notices d'installation</span> ====
+
=== <span style="color:#6FB7B7">Notices d'installation</span> ===
 +
 
 +
==== Installation de Nagios sur zabeth17 ====
 +
Nagios 4.3.2 est la dernière version au moment de l'écriture de ce Wiki. Avant de compiler Nagios à partir de la source il faut installer des paquets utilisés par l'outil de surveillance Nagios.
 +
 
 +
Avant de commencer, il passer administrateur.
 +
<font style="color: purple;">su </font>
 +
 
  
===== Installation de Nagios sur zabeth17 =====
+
Et puis, il faut s'assurer que le système répond à toutes les exigences logicielles pour la compilation et l'installation de Nagios. Il est recommandé de mettre la base des paquetages à jour.
Nagios 4.3.2 est la dernière version au moment de l'écriture, avant de compiler Nagios à partir de la source; installez des paquets dépendants pour l'outil de surveillance Nagios.
 
Avant de commencer, il faut Passer à l'utilisateur root.
 
<font style="color: purple;">apt update</font>
 
Et puis, il faut assurer que le système répond à toutes les exigences logicielles pour la compilation et l'installation de Nagios. Dans la première étape,on a met à jour référentiels système et progiciels en émettant la commande ci-dessous.
 
<font style="color: purple;">su </font>
 
  
À l'étape suivante,on a lancé une nouvelle commande afin d'installer les utilitaires nécessaires pour gérer le système à partir de la ligne de commande.
+
<font style="color: purple;">apt update</font>
<font style="color: purple;"> apt-get -y install build-essential apache2 php openssl perl make php-gd libgd2-xpm-dev libapache2-mod-php libperl-dev libssl-dev daemon wget apache2-utils unzip</font>
 
Créez un utilisateur pour autoriser l'exécution des commandes externes via l'interface Web.
 
  
utilisateur: nagios
+
À l'étape suivante, on a lance une nouvelle commande afin d'installer les utilitaires nécessaires pour gérer le système à partir de la ligne de commande.
  
groupe: nagcmd
+
<font style="color: purple;"> apt-get -y install build-essential apache2 php openssl perl make php-gd libgd2-xpm-dev libapache2-mod-php libperl-dev libssl-dev daemon wget apache2-utils unzip</font>
 +
 
 +
Il faut créer un utilisateur pour autoriser l'exécution des commandes externes via l'interface Web :
  
Ajoutez également "nagios" et l'utilisateur apache (www-data) à la partie du groupe "nagcmd".
 
 
  <font style="color: purple;">useradd nagios</font>
 
  <font style="color: purple;">useradd nagios</font>
 
  <font style="color: purple;">groupadd nagcmd</font>
 
  <font style="color: purple;">groupadd nagcmd</font>
 
  <font style="color: purple;">usermod -a -G nagcmd nagios</font>  
 
  <font style="color: purple;">usermod -a -G nagcmd nagios</font>  
 
  <font style="color: purple;">usermod -a -G nagcmd www-data</font>
 
  <font style="color: purple;">usermod -a -G nagcmd www-data</font>
 +
 +
L'archive peut se récupérer comme suit :
 +
 
  <font style="color: purple;">cd /tmp</font>
 
  <font style="color: purple;">cd /tmp</font>
 
  <font style="color: purple;">wget https://assets.nagios.com/downloads/nagioscore/releases/nagios-4.3.2.tar.gz</font>
 
  <font style="color: purple;">wget https://assets.nagios.com/downloads/nagioscore/releases/nagios-4.3.2.tar.gz</font>
Ligne 95 : Ligne 100 :
 
  <font style="color: purple;">cd /tmp/nagios-4.3.2/ </font>  
 
  <font style="color: purple;">cd /tmp/nagios-4.3.2/ </font>  
 
   
 
   
On a utilisé les étapes ci-dessous pour compiler Nagios à partir du code source.
+
Les étapes ci-dessous permettent de compiler Nagios à partir du code source.
 +
 
 
  <font style="color: purple;">./configure --with-nagios-group=nagios --with-command-group=nagcmd --with-httpd_conf=/etc/apache2/sites-enabled/ </font>  
 
  <font style="color: purple;">./configure --with-nagios-group=nagios --with-command-group=nagcmd --with-httpd_conf=/etc/apache2/sites-enabled/ </font>  
 
  <font style="color: purple;">make all</font>  
 
  <font style="color: purple;">make all</font>  
Ligne 104 : Ligne 110 :
 
  <font style="color: purple;">make install-webconf</font>  
 
  <font style="color: purple;">make install-webconf</font>  
  
Tout ce dont on a besoin est de mettre à jour l'adresse e-mail dans le fichier "/usr/local/nagios/etc/objects/contacts.cfg" pour "nagiosadmin" avant de démarrer Nagios ...
+
Il suffit ensuite de mettre à jour l'adresse e-mail de notification dans le fichier <code>/usr/local/nagios/etc/objects/contacts.cfg</code> pour <code>nagiosadmin</code> avant de démarrer Nagios ...
  <font style="color: purple;"> vi /usr/local/nagios/etc/objects/contacts.cfg</font>
 
  
 +
Un compte utilisateur "nagiosadmin" est créé pour se connecter à l'interface Web de Nagios. Un mot de passe lui est afffecté.
  
Et puis on a changé l'adresse e-mail dans ce fichier pour recevoir la notification.
+
<font style="color: purple;">htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin</font>
  
on a créer un compte utilisateur "nagiosadmin" pour connecter à l'interface Web de Nagios. Ensuite, on a défini un mot de passe  à l'utilisateur "nagiosadmin".
+
Le module <code>CGI</code> d'<code>apache2</code> est activé :
<font style="color: purple;">htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin</font>  
 
  
Pour activer CGI
 
 
  <font style="color: purple;">a2enmod cgi</font>
 
  <font style="color: purple;">a2enmod cgi</font>
 
   
 
   
Et puis redémarrer le service Web Apache pour que les nouveaux paramètres prennent effet.
+
Puis le service Web Apache est relmancé pour que les nouveaux paramètres prennent effet.
 +
 
 
  <font style="color: purple;">service apache2 restart</font>
 
  <font style="color: purple;">service apache2 restart</font>
 
   
 
   
On a téléchargé et installé les plugins Nagios pour surveiller les services.
+
Des plugins Nagios ont été ajouté à Nagios pour surveiller des points particuliers.
 +
 
 
  <font style="color: purple;">cd /tmp</font>
 
  <font style="color: purple;">cd /tmp</font>
 
  <font style="color: purple;">wget https://nagios-plugins.org/download/nagios-plugins-2.2.1.tar.gz</font>
 
  <font style="color: purple;">wget https://nagios-plugins.org/download/nagios-plugins-2.2.1.tar.gz</font>
 
  <font style="color: purple;">tar -zxvf /tmp/nagios-plugins-2.2.1.tar.gz</font>
 
  <font style="color: purple;">tar -zxvf /tmp/nagios-plugins-2.2.1.tar.gz</font>
 
  <font style="color: purple;">cd /tmp/nagios-plugins-2.2.1/</font>
 
  <font style="color: purple;">cd /tmp/nagios-plugins-2.2.1/</font>
 
Compiler et installer les plugins.
 
 
  <font style="color: purple;">./configure --with-nagios-user=nagios --with-nagios-group=nagios</font>
 
  <font style="color: purple;">./configure --with-nagios-user=nagios --with-nagios-group=nagios</font>
 
  <font style="color: purple;">make</font>
 
  <font style="color: purple;">make</font>
  <font style="color: purple;"> make install</font>
+
  <font style="color: purple;">make install</font>
 
   
 
   
Pour Vérifier les exemples de fichiers de configuration Nagios.
+
La commande suivant permet de vérifier les fichiers de configuration Nagios.
 
  <font style="color: purple;">/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg</font>
 
  <font style="color: purple;">/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg</font>
 
   
 
   
Ensuite, démarrer l'outil de surveillance Nagios en utilisant la commande suivante.
+
Ensuite, il faut démarrer l'outil de surveillance Nagios en utilisant la commande suivante :
 
  <font style="color: purple;"> /etc/init.d/nagios start</font>
 
  <font style="color: purple;"> /etc/init.d/nagios start</font>
  
en fin , on a réussi à installer Nagios 4.3.2 sur Debian 9 .
+
Après toutes ces étapes Nagios 4.3.2 est installé sur Debian 9 .
  
===== Ajoute l'hôte linux à la surveillance de nagios en utilisant le plugin NRPE =====
+
==== Surveillance de machines en utilisant le plugin NRPE ====
==== <span style="color:#6A6AFF">NRPE Plugin:</span> ====
 
  
Le plugin Nagios Remote Plugin Executor (en abrégé NRPE) nous permet de surveiller les applications et services s'exécutant sur des hôtes Linux / Windows distants. Ce module NRPE permet à Nagios de surveiller les ressources locales comme le processeur, la mémoire, le disque, l'échange, etc. de l'hôte distant.
+
===== <span style="color:#6A6AFF">NRPE Plugin</span> =====
  
Et il faut que nôtre système distant doit avoir ce plugin NRPE installé.
+
Le plugin Nagios Remote Plugin Executor (en abrégé NRPE) nous permet de surveiller les applications et services s'exécutant sur des hôtes Linux / Windows distants. Ce module NRPE permet à Nagios de surveiller les ressources comme le processeur, la mémoire, le disque, l'échange, etc. de l'hôte distant.
  
==== <span style="color:#6A6AFF">Nagios Remote Host:</span> ====
+
Et il faut que notre système distant fasse tourner un agent NRPE.
  
Installez le plug-in NRPE et les plugins Nagios:
+
===== <span style="color:#6A6AFF">Configuration sur la machine à surveiller</span> =====
  
Les plugins NRPE et Nagios ne sont pas disponibles dans le référentiel de base. Donc, pour CentOS 7 / RHEL 7, nous devons configurer le référentiel EPEL sur nôtre machine.
+
Les plugins NRPE et Nagios ne sont pas disponibles dans les dépôt Debian classiques. Il faut ajouter le dépôt EPEL.
 
  <font style="color: purple;">rpm -ivh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm</font>
 
  <font style="color: purple;">rpm -ivh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm</font>
 
   
 
   
Ensuite, on a installeé le module complémentaire NRPE et les plugins Nagios.
+
Ensuite, il est possible d'installer le module complémentaire NRPE et les plugins Nagios.
 
  <font style="color: purple;">apt-get install -y nagios-nrpe-server nagios-plugins</font>
 
  <font style="color: purple;">apt-get install -y nagios-nrpe-server nagios-plugins</font>
  
Après, on a Modifié le fichier de configuration NRPE pour accepter la connexion du serveur Nagios
+
Après, le fichier de configuration NRPE doit être modifié pour accepter la connexion du serveur Nagios.
 +
 
 
  <font style="color: purple;">vi /etc/nagios/nrpe.cfg</font>
 
  <font style="color: purple;">vi /etc/nagios/nrpe.cfg</font>
 
   
 
   
On a ajouteé l'adresse IP des serveurs Nagios, séparés par une virgule comme ci-dessous.
+
Est insérée l'adresse IP du serveur Nagios, comme ci-dessous.
<font style="color: purple;"> allowed_hosts=127.0.0.1,172.26.145.112</font>
 
  
 +
<font style="color: purple;"> allowed_hosts=172.26.145.112</font>
  
Configurer les vérifications Nagios:
+
Le fichier <code>/etc/nagios/nrpe.cfg</code> contient les commandes de base pour vérifier les attributs (CPU, mémoire, disque, etc.architecture) et les services (HTTP, FTP, etc.) sur les hôtes distants. Les lignes de commandes ci-dessous permettent de surveiller des grandeurs à l'aide des plugins Nagios.
 
 
Le fichier /etc/nagios/nrpe.cfg contient les commandes de base pour vérifier les attributs (CPU, mémoire, disque, etc.architecure) et les services (HTTP, FTP, etc.) sur les hôtes distants. On a fait les lignes de commande ci-dessous pour surveiller les attributs à l'aide des plugins Nagios.
 
 
  <font style="color: purple;">command[check_users]=/usr/lib/nagios/plugins/check_users -w 5 -c 10</font>
 
  <font style="color: purple;">command[check_users]=/usr/lib/nagios/plugins/check_users -w 5 -c 10</font>
 
  <font style="color: purple;">command[check_load]=/usr/lib/nagios/plugins/check_load -w 15,10,5 -c 30,25,20</font>
 
  <font style="color: purple;">command[check_load]=/usr/lib/nagios/plugins/check_load -w 15,10,5 -c 30,25,20</font>
Ligne 171 : Ligne 173 :
 
  <font style="color: purple;">command[check_total_procs]=/usr/lib/nagios/plugins/check_procs -w 150 -c 200</font>
 
  <font style="color: purple;">command[check_total_procs]=/usr/lib/nagios/plugins/check_procs -w 150 -c 200</font>
  
Dans la définition de commande ci-dessus -w signifie avertissement et -c signifie critique.
+
Dans la définition de commande ci-dessus <code>-w</code> signifie avertissement et <code>-c</code> signifie critique.
  
Ensuite, on a exécuté la commande ci-dessous dans un autre terminal.
+
Pour tester les commandes de surveillance, il est possible de les exécuter dans un autre terminal :
 
  <font style="color: purple;">/usr/lib/nagios/plugins/check_procs -w 150 -c 200</font>
 
  <font style="color: purple;">/usr/lib/nagios/plugins/check_procs -w 150 -c 200</font>
 
   
 
   
Sortie:
+
L'affiche suivant est obtenu :
 
  <font style="color: purple;">PROCS CRITICAL: 235 processes | procs=235;150;200;0;</font>
 
  <font style="color: purple;">PROCS CRITICAL: 235 processes | procs=235;150;200;0;</font>
 
   
 
   
Nagios plugin comptera les processus en cours et on avertiras lorsque le nombre de processus est supérieur à 150, ou il nous indiquera critique lorsque le nombre de processus est supérieur à 200, et en même temps, la sortie affichera OK si le nombre est inférieur à 150
+
Le plugin compte les processus en cours et on averti lorsque le nombre de processus est supérieur à 150, ou il nous préviendra d'un événement critique lorsque le nombre de processus est supérieur à 200. Le plugin affichera OK si le nombre de processus est inférieur à 150.
  
On peux ajuster le niveau d'alerte selon nos besoins. On a chnagé l'avertissement à 200 et critiquez à 250 pour l'essai.
+
Il est possible d'ajuster le niveau d'alerte selon nos besoins. On a changé le niveau d'avertissement à 200 et d'alerte critique à 250 pour l'essai.
 
  <font style="color: purple;">/usr/lib/nagios/plugins/check_procs -w 200 -c 250</font>  
 
  <font style="color: purple;">/usr/lib/nagios/plugins/check_procs -w 200 -c 250</font>  
  
Sortie:
+
Pour activer le plugin il faut redémarrer le service NRPE.
<font style="color: purple;"> PROCS WARNING: 235 processes | procs=235;200;250;0;</font>
 
 
 
Ces définitions de commande doivent être entrées dans le fichier modèle sur l'hôte du serveur Nagios pour activer la surveillance.
 
 
 
Redémarrez le service NRPE.
 
 
  <font style="color: purple;">/etc/init.d/nagios-nrpe-server restart</font>
 
  <font style="color: purple;">/etc/init.d/nagios-nrpe-server restart</font>
  
==== <span style="color:#6A6AFF">Nagios Server Host:</span> ====
+
===== <span style="color:#6A6AFF">Configuration sur le serveur de surveillance</span> =====
  
 
+
Le même dépot de paquetage que pour les clients NRPE est à configurer.
Les plugins NRPE et Nagios ne sont pas disponibles dans le référentiel de base. Donc, pour CentOS 7 / RHEL 7, nous devons configurer le référentiel EPEL sur nôtre machine.
 
<font style="color: purple;">rpm -ivh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm</font>
 
 
   
 
   
Pour installer check_nrpe plugin:
+
Pour installer le plugin <code>check_nrpe</code> :
 
  <font style="color: purple;">apt-get -y install nagios-nrpe-plugin</font>
 
  <font style="color: purple;">apt-get -y install nagios-nrpe-plugin</font>
  
Et puis, on a édité le fichier de configuration de Nagios pour inclure tous les fichiers "* .cfg" dans le répertoire "/ usr / local / nagios / etc /  
+
Et puis, on a édité le fichier de configuration de Nagios pour inclure tous les fichiers "*.cfg" du répertoire <code>/usr/local/nagios/etc/servers</code>.
servers".
 
 
  <font style="color: purple;">vi /usr/local/nagios/etc/nagios.cfg</font>
 
  <font style="color: purple;">vi /usr/local/nagios/etc/nagios.cfg</font>
 
   
 
   
Ligne 211 : Ligne 205 :
 
  <font style="color: purple;">mkdir /usr/local/nagios/etc/servers</font>
 
  <font style="color: purple;">mkdir /usr/local/nagios/etc/servers</font>
 
   
 
   
Pour configurer le serveur Nagios pour qu'il surveille l'ordinateur client distant, nous devons créer une définition de commande dans le fichier de configuration d'objet Nagios pour utiliser le plugin "check_nrpe". Pour ouvrir le fichier "commands.cfg" ....
+
Pour configurer le serveur Nagios pour qu'il surveille un client NRPE distant, nous devons créer une définition de commande dans le fichier de configuration Nagios pour utiliser le plugin "check_nrpe".
 
  <font style="color: purple;">vi /usr/local/nagios/etc/objects/commands.cfg</font>
 
  <font style="color: purple;">vi /usr/local/nagios/etc/objects/commands.cfg</font>
 
   
 
   
Ensuite, ajouter la définition de commande Nagios suivante au fichier.
+
Ensuite, ajouter la définition de commande Nagios suivante au fichier :
 
  <font style="color: purple;"># .check_nrpe. command definition</font>
 
  <font style="color: purple;"># .check_nrpe. command definition</font>
 
  <font style="color: purple;">define command{</font>
 
  <font style="color: purple;">define command{</font>
Ligne 221 : Ligne 215 :
 
  <font style="color: purple;">}</font>
 
  <font style="color: purple;">}</font>
  
==== <span style="color:#6A6AFF">Ajouter un hôte Linux au serveur Nagios:</span> ====
+
==== <span style="color:#6A6AFF">Ajouter un client NRPE Linux à surveiller</span> ====
Il faut créer un fichier de configuration client (/usr/local/nagios/etc/servers/client.itzgeek.local.cfg) pour définir les définitions d'hôte et de service de l'hôte Linux distant. Nous pouvons également utiliser le modèle suivant et le modifier en fonction de vos besoins. Le modèle suivant permet de surveiller les utilisateurs connectés, le chargement du système, l'utilisation du disque (/ - partitions), le swap et le processus total.
+
Il faut créer un fichier de configuration client <code>/usr/local/nagios/etc/servers/client.zabeth6.local.cfg</code> pour définir l'hôte Linux distant. Nous pouvons également utiliser le modèle suivant et le modifier en fonction de nos besoins. Le modèle suivant permet de surveiller les utilisateurs connectés, le chargement du système, l'utilisation du disque, le swap et le nombre de processus total.
  <font style="color: purple;">vi /usr/local/nagios/etc/servers/client.zabeth16.local.cfg</font>
+
 
 +
  <font style="color: purple;">cat /usr/local/nagios/etc/servers/client.zabeth16.local.cfg</font>
 
   
 
   
Ensuite, on a copié le contenu ci-dessous dans le fichier /usr/local/nagios/etc/servers/client.zabeth16.local.cfg.
 
 
  <font style="color: purple;">define host</font>
 
  <font style="color: purple;">define host</font>
 
  <font style="color: purple;">use linux-server</font>
 
  <font style="color: purple;">use linux-server</font>
Ligne 274 : Ligne 268 :
 
  <font style="color: purple;">}</font>
 
  <font style="color: purple;">}</font>
  
Pour vérifier Nagios pour toute erreur.
+
Pour vérifier si la configuration Nagios est correcte :
 
  <font style="color: purple;">/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg</font>
 
  <font style="color: purple;">/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg</font>
  
Pour arrêter le serveur Nagios
+
Pour arrêter le serveur Nagios :
 
  <font style="color: purple;">service nagios stop</font>
 
  <font style="color: purple;">service nagios stop</font>
 
   
 
   
Pour redémarrer le serveur Nagios
+
Pour redémarrer le serveur Nagios :
 
  <font style="color: purple;">service nagios restart</font>
 
  <font style="color: purple;">service nagios restart</font>
  
En fin,On a réussi à ajouter deux l'hôte Linux distant: zabeth15 et zabeth16. En plus, on a ajouté un fonction super check smart.On peux trouver tous les fonctions dans le fichier en utillisant le commande ci-dessous.
+
Nous avons réussi à ajouter deux hôtes Linux distants : <code>zabeth15</code> et <code>zabeth16</code>. En plus, on a ajouté un plugin pour vérifier l'état des disques dotés de la technologie de prévision de pannes "smart". Pour cela il faut éditer le fichier <code>/etc/nagios/nrpe.cfg</code> pour ajouter la fonction check_smart :
<font style="color: purple;">dpkg -L monitoring-plugins-basic</font>
 
  
Pour changer le root à nagios
+
  <font style="color: purple;">commande[check_smart]= super check_smart</font>
<font style="color: purple;">su -s /bin/bash nagios</font>
 
  
 +
Cette fonction devant s'exécuter en mode administration nous passons par l'utilitaire <code>super</code>. Nous avons ajouté une ligne dans le fichier <code>/etc/super.tab</code> :
 +
  <font style="color: purple;"> check_smart    "/usr/lib/nagios/plugins/check_ide_smart -d /dev/sda"  nagios</font>
  
Et puis, on a ajouté une ligne dans le fichier /etc/nagios/nrpe.cfg pour le fonction check_smart.
+
Il faut aussi ajouter l'appel à cette commande de surveillance dans les fichiers de définition des client NRPE sur le serveur Nagios. Par exemple les lignes suivantes ont été ajoutées dans le fichier <code>/usr/local/nagios/etc/servers/client.zabeth16.local.cfg</code> (sur <code>zabeth17</code>) :
  <font style="color: purple;">commade[check_smart]= super check_smart</font>
 
  
On a ajouté une ligne dans le fichier /etc/super.tab
 
  <font style="color: purple;"> check_smart    "/usr/lib/nagios/plugins/check_ide_smart -d /dev/sda"  nagios</font>
 
 
Et ajouté un fonction dans le fichier /usr/local/nagios/etc/servers/client.zabeth16.local.cfg qui se trouve à zabeth17
 
 
  <font style="color: purple;">define service{</font>
 
  <font style="color: purple;">define service{</font>
 
  <font style="color: purple;">use local-service</font>
 
  <font style="color: purple;">use local-service</font>
Ligne 304 : Ligne 293 :
 
  <font style="color: purple;">}</font>
 
  <font style="color: purple;">}</font>
  
Enfin, lancé <font style="color: purple;">super check_smart</font>
+
==== Installation de Zabbix sur zabeth17 ====
 
===== Installation de Zabbix sur zabeth17 =====
 
  
 
* Récupération du paquetage Zabbix pour Debian
 
* Récupération du paquetage Zabbix pour Debian
Ligne 343 : Ligne 330 :
 
===== Installation de XYmon sur zabeth17 =====
 
===== Installation de XYmon sur zabeth17 =====
  
===== Installation des smart disks tools sur zabeth17 =====
+
==== Travail restant à effectuer ====
 
 
==== Travail à effectuer ====
 
  
 
* Essai d'installation de Nagios, Zabbix et Xymon sur zabeth17 avec remontée d'informations de zabeth15 et de zabeth16 (charge cpu, température, état des systèmes de fichiers et des disques). Décrire pas à pas dans le Wiki les opérations à faire pour les installations.
 
* Essai d'installation de Nagios, Zabbix et Xymon sur zabeth17 avec remontée d'informations de zabeth15 et de zabeth16 (charge cpu, température, état des systèmes de fichiers et des disques). Décrire pas à pas dans le Wiki les opérations à faire pour les installations.
Ligne 356 : Ligne 341 :
 
== <span style="color:#D94600">Présentation générale du projet 2</span> ==
 
== <span style="color:#D94600">Présentation générale du projet 2</span> ==
  
==== <span style="color:#6A6AFF">Objectif du stage</span> ====
+
=== <span style="color:#6A6AFF">Changement de projet</span> ===
 +
 
 +
Pendant le stage, j'ai eu l'opportunité de changer de sujet et de reprendre un sujet de projet IMA4 n'ayant pas abouti. J'ai ainsi pu approfondir d'autres aspects de ma formation. Autant le premier sujet était orienté administration système et réseau, autant le second sujet est dans le domaine de la robotique et de l'électronique.
 +
 
 +
L'objet de ce second sujet est de concevoir et de fabriquer des robots mobiles relativement petits, simples et peu coûteux. Les robots devront pouvoir communiquer entre eux par infrarouge. La simplicité et le bas côut de fabrication des robots doit permettre d'en fabriquer en nombre suffisant pour simuler des comportements d'essaim d'insectes.
  
L'objet de ce projet est de concevoir et fabriquer des robots mobiles relativement petits, simples et peu coûteux. Les robots devront pouvoir communiquer entre eux par infrarouge. La simplicité et le bas côut de fabrication des robots doit permettre d'en fabriquer en nombre suffisant pour simuler des comportements d'essaim d'insectes.
+
=== <span style="color:#6A6AFF">Description de la seconde partie du stage</span> ===
  
==== <span style="color:#6A6AFF">Description du stage</span> ====
+
L'objectif est de réaliser une petite carte de contrôle de robot mobile. Les robots pourront avoir trois types de motorisations : vibreurs, servo-moteurs continus et micro-moteurs.
  
L'objectif de mon stage est de réaliser une petite carte de contrôle de robot mobile. Les robots pourront avoir trois types de motorisations : vibreurs, servo-moteurs continus et micro-moteurs.
+
Je suis partie d'une carte déjà conçue à l'école pour les bureau d'étude PeiP. Cette carte contient un micro-contrôleur ATMega328p, un FTDI (conversion USB série), un contrôleur de moteurs TB6612, des détecteurs infrarouges (3 TSOP IR), une LED infrarouge et des lignes pour des servo-moteurs.
  
J'ai pris une carte qui est déjà conçues à l'école. Il y a  un contrôleur de moteur (TB6612), des détecteurs infrarouges (3 TSOP IR) , une LED infrarouge et des lignes pour les servo-moteurs dans cette carte.  
+
Pour la communication nous utiliserons le protocole infra-rouge RC5 qui permet une certaine immunité à la lumière ambiante.
  
Par la suite, il faudra écrire le code ATMega328p pour générer les PWM nécessaires aux servo-moteurs ou au contrôleur de moteurs. Pour la communication nous utiliserons le protocole RC5 qui permet une certaine immunité à la lumière ambiante.
+
=== <span style="color:#D94600">Avancement du stage "micro-robots"</span> ===
  
Enfin, nous allons tester les trois motorisations: vibreurs, servo-moteurs continus et micro-moteurs pour vérifier le bon fonctionnement de la carte. Si plusieurs robots fonctionnent certains seront programmés pour repérer les autres et les poursuivre.
+
==== <span style="color:#6FB7B7">Semaine 3</span> ====
  
== <span style="color:#D94600">Avancement du stage</span> ==
+
Durant la troisième semaine, j'ai utilisé le logiciel <code>inkscape</code> pour construire le chassis du robot. Ensuite, comparé à ce que mes camarades faisaient auparavant, j'ai apporté quelques améliorations. J'ai utilisé le logiciel <code>freecad</code> pour vérifier si la taille des pièces était correcte en assemblant ces pièces. La version de <code>freecad</code> que j'utilisais n'avait pas la fonctionnalité assemblage. Donc j'ai du trouver un paquet d'installation sur Internet pour l'ajouter le module assemblage à <code>freecad</code>. Ensuite, j'ai importé l'image de la structure des pièces realisé par <code>inkscape</code> dans le logiciel <code>freecad</code>.
=== <span style="color:#6FB7B7">Semaine 3</span> ===
 
  
Durant la troisième semaine, j'ai utilisé le logiciel inkscape pour construire le chassis du robot. Ensuite, comparé à ce que mes camarades faisaient auparavant, j'ai apporté quelques améliorations. J'ai utilisé le logiciel freecad pour vérifier si la taille des pièces était correcte en assemblant ces pièces. La version de freecad que j'utilisais n'avait pas la fonctionnalité assemblage. Donc j'ai du trouver un paquet d'installation sur Internet pour l'ajouter le module assemblage à freecad. Ensuite, j'ai importé l'image de la structure des pièces realisé par inkscape dans le logiciel freecad.
 
 
J'ai modifié l'image vectorielle plusieurs fois pour que les pièces puissent être assemblées avec succès.
 
J'ai modifié l'image vectorielle plusieurs fois pour que les pièces puissent être assemblées avec succès.
  
Ligne 384 : Ligne 371 :
 
[[Fichier:new_robot_plain.png|thumb|400px|center]]
 
[[Fichier:new_robot_plain.png|thumb|400px|center]]
  
=== <span style="color:#6FB7B7">Semaine 4</span> ===
+
==== <span style="color:#6FB7B7">Semaine 4</span> ====
 
J'ai pris un circuit déjà disponible mais je l'ai soudé :
 
J'ai pris un circuit déjà disponible mais je l'ai soudé :
 
[[Fichier:Robot_PCB.png|thumb|300px|left]]
 
[[Fichier:Robot_PCB.png|thumb|300px|left]]
Ligne 391 : Ligne 378 :
 
<br style="clear: both;" />
 
<br style="clear: both;" />
  
Grâce à l'utilisation de freecad pour simuler l'assemblage, j'ai pu découper du plexiglas pour fabriquer mon chassis. Le chassis a été réalisé avec une découpeuse laser sur du plexiglas.
+
Grâce à l'utilisation de <code>freecad</code> pour simuler l'assemblage, j'ai pu découper du plexiglas pour fabriquer un chassis directement fonctionnel.
  
 
Après avoir récupéré mes pièces, j'ai assemblé le chariot.
 
Après avoir récupéré mes pièces, j'ai assemblé le chariot.
 
[[Fichier:Chariotrobot.jpg|thumb|200px|center]]
 
[[Fichier:Chariotrobot.jpg|thumb|200px|center]]
  
=== <span style="color:#6FB7B7">Semaine 5</span> ===
+
==== <span style="color:#6FB7B7">Semaine 5</span> ====
  
 
J'ai appris à utiliser d'une bibliothèque infrarouge sur Arduino par ce site: https://learn.adafruit.com/using-an-infrared-library/controlling-neopixels-with-ir-1
 
J'ai appris à utiliser d'une bibliothèque infrarouge sur Arduino par ce site: https://learn.adafruit.com/using-an-infrared-library/controlling-neopixels-with-ir-1
  
Tout d'abord, j'ai installé la bibliothèque IRLib en suivant les étapes sur ce site.Après l'installation, je peux trouver des codes dans l'exemple de Arduino IDE.J'ai trouvé un code pour recevoir un signal IR, le décoder et l'imprimer informations à ce sujet sur le moniteur série. Voici un extrait du code:
+
Tout d'abord, j'ai installé la bibliothèque IRLib en suivant les étapes décrite sur ce site. Après l'installation, j'ai pu tester les récepteurs UR du robot avec un exemple de code. Ce code permet de recevoir un signal IR, de le décoder et d'imprimer des informations à son sujet sur le moniteur série. Voici un extrait du code:
 
  void setup() {
 
  void setup() {
 
   Serial.begin(9600);
 
   Serial.begin(9600);
Ligne 419 : Ligne 406 :
 
Le code est disponible :[[Media:sketch_jun15a.zip]]
 
Le code est disponible :[[Media:sketch_jun15a.zip]]
  
Et puis, j'ai vérifié que la connexion du récepteur IR. La broche gauche est connecté à n'importe quelle broche d'entrée numérique sur le Arduino. Dans mon cas, j'ai utilisé la broche 2. Puis j'ai confirmé que les autres broches sont correctement connectées: la broche centrale à la masse et la broche droite à + 5v.
+
Pour faire marcher le code, il fallait trouver sur quelle entrée étaient connectés les récepteurs TSOP IR. Dans mon cas, c'était l'entrée numéro 2. Puis j'ai vérifié que les autres broches étaient correctement connectées : la broche centrale à la masse et la broche droite au +5v.
  
 
[[Fichier:light_TSOP38238.png|thumb|200px|center]]
 
[[Fichier:light_TSOP38238.png|thumb|200px|center]]
  
Enfin, j'ai utilisé d'une télécommande IR que on utilisons pour contrôler nos téléviseur, le récepteur IR peut bien accepter l'information et ca marche bien.
+
Enfin, j'ai utilisé une télécommande IR de téléviseur, le récepteur IR capte l'information et le programme l'affiche.
  
J'ai trouvé un code pour piloter les moteurs dans le logiciel, Puis j'ai modifié la connexion de broche dans le code, et Les moteurs peuvent fonctionner normalement.Voici un extrait du code:
+
Pendant ces test d'infra-rouge, il m'a été demandé de tester aussi le contrôleur de moteur. J'ai fait un test en adaptant un programme qui utilisait le même contrôleur de moteur que celui soudé sur la carte. J'ai adapté le programme pour utiliser les connexions de la carte vers le contrôleur :
  
 
  int STBY = 9; //standby
 
  int STBY = 9; //standby
Ligne 452 : Ligne 439 :
 
Le code est disponible :[[Media:Moteurtest.zip]]
 
Le code est disponible :[[Media:Moteurtest.zip]]
  
=== <span style="color:#6FB7B7">Semaine 6</span> ===
+
Le test des moteurs, ni celui des servo-moteurs, n'étant concluant. Il m'a été demandé de changer la pile de 9v par un porte-piles de 6 piles de 1,5v pour avoir une plus grande puissance.
J'ai combiné et modifié les deux ensembles de code ci-dessus pour implémenter les fonctions suivantes: Lorsque j'appuie sur 2 avec la télécommande, la voiture avance; Lorsque j'appuie sur 8 avec la télécommande, la voiture recule; Lorsque j'appuie sur 4 avec la télécommande, la voiture tourne à gauche; Lorsque j'appuie sur 6 avec la télécommande, la voiture tourne à droite. Voici un extrait du code:
+
 
 +
Il a fallu refaire un chassis pour supporter le porte-piles :
 +
[[Fichier:4chassis.png|thumb|500px|center]]
 +
 
 +
Et puis,j'ai assemblé le chariot.
 +
[[Fichier:chariotnew1.jpg|thumb|200px|center]]
 +
 
 +
==== <span style="color:#6FB7B7">Semaine 6</span> ====
 +
 
 +
J'ai combiné et modifié les deux ensembles de code ci-dessus pour implémenter les fonctions suivantes :
 +
* lorsque j'appuie sur la touche 2 de la télécommande, la voiture avance ;
 +
* lorsque j'appuie sur la touche 8 de la télécommande, la voiture recule ;
 +
* lorsque j'appuie sur la touche 4 de la télécommande, la voiture tourne à gauche ;
 +
* lorsque j'appuie sur la touche 6 de la télécommande, la voiture tourne à droite.
 +
 
 +
Voici un extrait du code:
  
 
  if (myReceiver.getResults()) {
 
  if (myReceiver.getResults()) {
 
     myDecoder.decode();          //Decode it
 
     myDecoder.decode();          //Decode it
//    myDecoder.dumpResults(false);  //Now print results. Use false for less detail
 
 
     int value=myDecoder.value&0xff;
 
     int value=myDecoder.value&0xff;
 
     switch(value){
 
     switch(value){
Ligne 475 : Ligne 476 :
 
         move(1, speed, 1);
 
         move(1, speed, 1);
 
         move(2, speed, 0);
 
         move(2, speed, 0);
         break;  
+
         break;     
      
 
 
     }
 
     }
  
 
Le code est disponible :[[Media:RobotIR.zip]]
 
Le code est disponible :[[Media:RobotIR.zip]]
  
Le même code pour le robotIRServo:
+
Le même code mais en utilisant des servo-moteurs et non plus des moteurs simples :
 
 
 
  if (myReceiver.getResults()) {
 
  if (myReceiver.getResults()) {
 
     myDecoder.decode();          //Decode it
 
     myDecoder.decode();          //Decode it
//    myDecoder.dumpResults(false);  //Now print results. Use false for less detail
 
 
     int value=myDecoder.value&0xff;
 
     int value=myDecoder.value&0xff;
 
     switch(value){
 
     switch(value){
 
       case 2 :
 
       case 2 :
 
         motor1.write(0);
 
         motor1.write(0);
        delay(50);
 
 
         motor2.write(180);
 
         motor2.write(180);
 
         break;
 
         break;
 
       case 4 :
 
       case 4 :
 
         motor1.write(100+speed);
 
         motor1.write(100+speed);
        delay(50);
 
 
         motor2.write(100+speed);
 
         motor2.write(100+speed);
 
         break;   
 
         break;   
Ligne 508 : Ligne 504 :
 
       case 8 :
 
       case 8 :
 
         motor1.write(180);
 
         motor1.write(180);
        delay(50);
 
 
         motor2.write(0);
 
         motor2.write(0);
 
         break;  
 
         break;  
Ligne 514 : Ligne 509 :
  
 
Le code est disponible :[[Media:RobotIRServo.zip]]
 
Le code est disponible :[[Media:RobotIRServo.zip]]
 +
 +
J'ai assemblé un autre chariot avec un capteur de distance.
 +
[[Fichier:chariotnew2.jpg|thumb|200px|center]]
 +
 +
== Fichiers rendus ==
 +
 +
=== Rapport ===
 +
 +
Le rapport est disponible ici : [[Media:Rapport-stage-zhang_lihe.odt]]
 +
 +
=== Les fichier ===
 +
 +
Le code est disponible ici : [[Media: RobotServosIRSonar.zip]]
 +
 +
Le soutenance est disponible ici : [[Media: stage_lihe.odp]]

Version actuelle datée du 28 juin 2018 à 17:42

Présentation générale du projet 1

Objectif du stage

L'objectif de ce stage est de trouver une application Web standard sous Linux permettant à un administrateur d'obtenir un tableau de bord de machines virtuelles disséminées sur plusieurs machines physiques. L'application doit être configurée pour obtenir les informations suivantes :

  • état de santé des machines physiques : température, état des disques, ...
  • occupation des machines physiques : utilisation CPU, utilisation espace disque, utilisation mémoire
  • état de santé des connexions réseau : réseau Renater, réseau ADSL, réseau SDSL
  • état de santé des machines virtuelles : temps d'exécution de chaque machine virtuelle
  • occupation des machines virtuelles : utilisation disque et mémoire
  • état de certaines applications critiques :
    • date de validité des clefs DNSSEC
    • dates des dernières sauvegardes des machines virtuelles

Voici le schéma de l'architecture réseau et système de la plateforme maths/info

Plateforme Drawing.png

Recherche sur des applications de surveillance système et réseau

Nagios

Possibilités:

  1. Superviser des services réseaux : (SMTP, POP3, HTTP, NNTP, ICMP, SNMP, LDAP, etc.)
  2. Superviser les ressources des serveurs (charge du processeur, occupation des disques durs, utilisation de la mémoire paginée) et ceci sur les systèmes d'exploitation les plus répandus.
  3. Interface avec le protocole SNMP.
  4. La supervision à distance peut utiliser SSH ou un tunnel SSL (notamment via un agent NRPE).
  5. Les plugins sont écrits dans les langages de programmation les plus adaptés à leur tâche : scripts shell (bash, ksh, etc.), C++, Perl, Python, Ruby, PHP, C#, etc.
  6. La vérification des services se fait en parallèle.
  7. Possibilité de définir une hiérarchie dans le réseau pour pouvoir faire la différence entre un serveur en panne et un serveur injoignable.
  8. La remontée des alertes est entièrement paramétrable grâce à l'utilisation de plugins (alerte par courrier électronique, SMS, etc.).
  9. Acquittement des alertes par les administrateurs.
  10. Gestion des escalades pour les alertes (une alerte non acquittée est envoyée à un groupe différent).
  11. Limitation de la visibilité, les utilisateurs peuvent avoir un accès limité à quelques éléments.
  12. Capacité de gestion des oscillations (nombreux passages d'un état normal à un état d'erreur dans un temps court).
  13. Créer ses propres plugins, dans le langage désiré. Il suffit de respecter la norme Nagios des codes retour
    1. Code 0 : OK (tout va bien)
    2. Code 1 : WARNING (le seuil d'alerte est dépassé)
    3. Code 2 : CRITICAL (le service a un problème)
    4. Code 3 : UNKNOWN (impossible de connaître l'état du service)

Zabbix

Le « serveur ZABBIX » peut être décomposé en trois parties séparées : Le serveur de données, l'interface de gestion et le serveur de traitement. Chacune d'elles peut être disposée sur une machine différente pour répartir la charge et optimiser les performances.

Le système dont l'utilisation des ressources doit être analysée comporte un agent fonctionnant sous forme de démon système appelé zabbix-agentd et écoutant par défaut sur le port TCP 10050. Celui-ci est chargé d’exécuter sur le système différents scripts permettant d'échantillonner l'état des ressources des différents composants du système (Mémoire, CPU, débit réseau, entrées-sorties, nombre de connexion à une application, etc.). Le serveur Zabbix appelle donc régulièrement cet agent et lui demande les informations concernant telle ou telle ressource.

Son interface web est écrite en PHP. Elle agit directement sur les informations stockées dans la base de données. Chaque information nécessaire au serveur de traitement étant réactualisée automatiquement, il n'y a pas d'action à effectuer sur le binaire pour lui indiquer qu'il y a eu une mise à jour.

Cette interface dispose des fonctionnalités principales suivantes:

  1. Affichage des données et état des machines
  2. Génération de graphiques (évolution des données et état des machines/liens)
  3. Classement et groupement des machines surveillées
  4. Auto découverte de machines et ajout automatique
  5. Gestion fine des droits d'accès pour les utilisateurs de l'interface

MRTG

Multi Router Traffic Grapher (MRTG) est un logiciel développé sous licence GNU/GPL à l'initiative de Tobi Oetiker. Ce logiciel permet de surveiller et mesurer le trafic réseau. Il utilise le protocole SNMP pour interroger des équipements réseaux tels que des routeurs, commutateurs, ou bien encore serveurs, disposant d'une MIB.

MRTG a été développé en Perl , et peut être lancé sous Windows, Linux, MacOS et NetWare.

PRTG

PRTG (Paessler Router Traffic Grapher) est un logiciel qui permet grâce à l'analyse de trames SNMP de créer des graphiques sur le trafic réseau. PRTG est aussi capable de faire du sniffing.

Xymon

Xymon s'inspire du logiciel Big Brother System and Network Monitor de Quest Software. De 2002 et 2004, une version open source s'est appelée bbgen toolkit, puis entre 2005 et 2008 Hobbit, mais étant déjà une marque déposée, l'outil a finalement été baptisé Xymon depuis.

Xymon offre une interface graphique de supervision dans un navigateur web, énumérant les états de différents services sur chaque machine. Il permet de paramétrer des envois de courriels après un certain temps de dégradation, par exemple après 30 minutes d'espace disque utilisé à plus de 90 %. On peut ensuite afficher les statistiques de tous ces services sous forme de graphique.

Notices d'installation

Installation de Nagios sur zabeth17

Nagios 4.3.2 est la dernière version au moment de l'écriture de ce Wiki. Avant de compiler Nagios à partir de la source il faut installer des paquets utilisés par l'outil de surveillance Nagios.

Avant de commencer, il passer administrateur. su


Et puis, il faut s'assurer que le système répond à toutes les exigences logicielles pour la compilation et l'installation de Nagios. Il est recommandé de mettre la base des paquetages à jour.

apt update

À l'étape suivante, on a lance une nouvelle commande afin d'installer les utilitaires nécessaires pour gérer le système à partir de la ligne de commande.

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

Il faut créer un utilisateur pour autoriser l'exécution des commandes externes via l'interface Web :

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

L'archive peut se récupérer comme suit :

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

Les étapes ci-dessous permettent de compiler Nagios à partir du code source.

./configure --with-nagios-group=nagios --with-command-group=nagcmd --with-httpd_conf=/etc/apache2/sites-enabled/  
make all 
make install 
make install-init 
make install-config 
make install-commandmode 
make install-webconf 

Il suffit ensuite de mettre à jour l'adresse e-mail de notification dans le fichier /usr/local/nagios/etc/objects/contacts.cfg pour nagiosadmin avant de démarrer Nagios ...

Un compte utilisateur "nagiosadmin" est créé pour se connecter à l'interface Web de Nagios. Un mot de passe lui est afffecté.

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

Le module CGI d'apache2 est activé :

a2enmod cgi

Puis le service Web Apache est relmancé pour que les nouveaux paramètres prennent effet.

service apache2 restart

Des plugins Nagios ont été ajouté à Nagios pour surveiller des points particuliers.

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 /tmp/nagios-plugins-2.2.1/
./configure --with-nagios-user=nagios --with-nagios-group=nagios
make
make install

La commande suivant permet de vérifier les fichiers de configuration Nagios.

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

Ensuite, il faut démarrer l'outil de surveillance Nagios en utilisant la commande suivante :

 /etc/init.d/nagios start

Après toutes ces étapes Nagios 4.3.2 est installé sur Debian 9 .

Surveillance de machines en utilisant le plugin NRPE

NRPE Plugin

Le plugin Nagios Remote Plugin Executor (en abrégé NRPE) nous permet de surveiller les applications et services s'exécutant sur des hôtes Linux / Windows distants. Ce module NRPE permet à Nagios de surveiller les ressources comme le processeur, la mémoire, le disque, l'échange, etc. de l'hôte distant.

Et il faut que notre système distant fasse tourner un agent NRPE.

Configuration sur la machine à surveiller

Les plugins NRPE et Nagios ne sont pas disponibles dans les dépôt Debian classiques. Il faut ajouter le dépôt EPEL.

rpm -ivh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

Ensuite, il est possible d'installer le module complémentaire NRPE et les plugins Nagios.

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

Après, le fichier de configuration NRPE doit être modifié pour accepter la connexion du serveur Nagios.

vi /etc/nagios/nrpe.cfg

Est insérée l'adresse IP du serveur Nagios, comme ci-dessous.

 allowed_hosts=172.26.145.112

Le fichier /etc/nagios/nrpe.cfg contient les commandes de base pour vérifier les attributs (CPU, mémoire, disque, etc.architecture) et les services (HTTP, FTP, etc.) sur les hôtes distants. Les lignes de commandes ci-dessous permettent de surveiller des grandeurs à l'aide des plugins Nagios.

command[check_users]=/usr/lib/nagios/plugins/check_users -w 5 -c 10
command[check_load]=/usr/lib/nagios/plugins/check_load -w 15,10,5 -c 30,25,20
command[check_root]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /dev/mapper/server--vg-root
command[check_swap]=/usr/lib/nagios/plugins/check_swap -w 20% -c 10%
command[check_total_procs]=/usr/lib/nagios/plugins/check_procs -w 150 -c 200

Dans la définition de commande ci-dessus -w signifie avertissement et -c signifie critique.

Pour tester les commandes de surveillance, il est possible de les exécuter dans un autre terminal :

/usr/lib/nagios/plugins/check_procs -w 150 -c 200

L'affiche suivant est obtenu :

PROCS CRITICAL: 235 processes | procs=235;150;200;0;

Le plugin compte les processus en cours et on averti lorsque le nombre de processus est supérieur à 150, ou il nous préviendra d'un événement critique lorsque le nombre de processus est supérieur à 200. Le plugin affichera OK si le nombre de processus est inférieur à 150.

Il est possible d'ajuster le niveau d'alerte selon nos besoins. On a changé le niveau d'avertissement à 200 et d'alerte critique à 250 pour l'essai.

/usr/lib/nagios/plugins/check_procs -w 200 -c 250 

Pour activer le plugin il faut redémarrer le service NRPE.

/etc/init.d/nagios-nrpe-server restart
Configuration sur le serveur de surveillance

Le même dépot de paquetage que pour les clients NRPE est à configurer.

Pour installer le plugin check_nrpe :

apt-get -y install nagios-nrpe-plugin

Et puis, on a édité le fichier de configuration de Nagios pour inclure tous les fichiers "*.cfg" du répertoire /usr/local/nagios/etc/servers.

vi /usr/local/nagios/etc/nagios.cfg

Ajouter ou décommenter la ligne suivante.

cfg_dir=/usr/local/nagios/etc/servers

Ensuite, créer un répertoire de configuration.

mkdir /usr/local/nagios/etc/servers

Pour configurer le serveur Nagios pour qu'il surveille un client NRPE distant, nous devons créer une définition de commande dans le fichier de configuration Nagios pour utiliser le plugin "check_nrpe".

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

Ensuite, ajouter la définition de commande Nagios suivante au fichier :

# .check_nrpe. command definition
define command{
command_name check_nrpe
command_line /usr/lib/nagios/plugins/check_nrpe -H $HOSTADDRESS$ -t 30 -c $ARG1$
}

Ajouter un client NRPE Linux à surveiller

Il faut créer un fichier de configuration client /usr/local/nagios/etc/servers/client.zabeth6.local.cfg pour définir l'hôte Linux distant. Nous pouvons également utiliser le modèle suivant et le modifier en fonction de nos besoins. Le modèle suivant permet de surveiller les utilisateurs connectés, le chargement du système, l'utilisation du disque, le swap et le nombre de processus total.

cat /usr/local/nagios/etc/servers/client.zabeth16.local.cfg

define host
use linux-server
host_name client.zabeth16.local{
alias client.zabeth16.local
address 172.26.145.107
}
define hostgroup{
hostgroup_name linux-server
alias Linux Servers
members client.zabeth16.local
 }
define service{
use local-service
host_name client.zabeth16.local
service_description SWAP Uasge
check_command check_nrpe!check_swap
}
define service{
use local-service
host_name client.zabeth16.local
service_description Root / Partition
check_command check_nrpe!check_root
}
define service{
use local-service
host_name client.zabeth16.local
service_description Current Users
check_command check_nrpe!check_users
}
define service{
use local-service
host_name client.zabeth16.local
service_description Total Processes
check_command check_nrpe!check_total_procs
}
define service{
use local-service
host_name client.zabeth16.local
service_description Current Load
check_command check_nrpe!check_load
}

Pour vérifier si la configuration Nagios est correcte :

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

Pour arrêter le serveur Nagios :

service nagios stop

Pour redémarrer le serveur Nagios :

service nagios restart

Nous avons réussi à ajouter deux hôtes Linux distants : zabeth15 et zabeth16. En plus, on a ajouté un plugin pour vérifier l'état des disques dotés de la technologie de prévision de pannes "smart". Pour cela il faut éditer le fichier /etc/nagios/nrpe.cfg pour ajouter la fonction check_smart :

 commande[check_smart]= super check_smart

Cette fonction devant s'exécuter en mode administration nous passons par l'utilitaire super. Nous avons ajouté une ligne dans le fichier /etc/super.tab :

  check_smart    "/usr/lib/nagios/plugins/check_ide_smart -d /dev/sda"   nagios

Il faut aussi ajouter l'appel à cette commande de surveillance dans les fichiers de définition des client NRPE sur le serveur Nagios. Par exemple les lignes suivantes ont été ajoutées dans le fichier /usr/local/nagios/etc/servers/client.zabeth16.local.cfg (sur zabeth17) :

define service{
use local-service
host_name client.zabeth16.local
service_description Disk smart Load
check_command check_nrpe!check_smart
}

Installation de Zabbix sur zabeth17

  • Récupération du paquetage Zabbix pour Debian
 wget http://repo.zabbix.com/zabbix/3.4/debian/pool/main/z/zabbix-release/zabbix-release_3.4-1+stretch_all.deb
 mv zabbix-release_3.4-1+stretch_all.deb  /usr/src
  • Installation du paquetage
 cd /usr/src
 dpkg -i zabbix-release_3.4-1+stretch_all.deb 
 apt install zabbix-frontend-php
 apt install zabbix-server-mysql
  • Création de la base de données pour le serveur Zabbix
zcat /usr/share/zabbix-server-mysql/schema.sql.gz | mysql -uzabbix -p zabbix
zcat /usr/share/zabbix-server-mysql/data.sql.gz | mysql -uzabbix -p zabbix
zcat /usr/share/zabbix-server-mysql/images.sql.gz | mysql -uzabbix -p zabbix
  • Ajout du mot de passe de la base dans le fichier de configuration de Zabbix
 vi  /etc/zabbix/zabbix_server.conf
 service zabbix-server start
 cd /etc/apache2/conf-enable/
 ln -s ../conf-available/zabbix-frontend-php.conf 
 service apache2 stop
 service apache2 start
  • Ajout des modules PHP pour Zabbix
 apt install php7.0-bcmath
 vi /etc/php/7.0/apache2/php.ini 
 service apache2 restart
Installation de XYmon sur zabeth17

Travail restant à effectuer

  • Essai d'installation de Nagios, Zabbix et Xymon sur zabeth17 avec remontée d'informations de zabeth15 et de zabeth16 (charge cpu, température, état des systèmes de fichiers et des disques). Décrire pas à pas dans le Wiki les opérations à faire pour les installations.
  • Dessiner le schéma du réseau de la plateforme maths/info, trouver un moyen de tester les connexion réseau.
  • Trouver des commandes pour évaluer l'état des disques du serveur de sauvegarde (baleine). Regarder ce que peut dire l'utilitaire linux "hpssacli". Regarder aussi du coté des utilitaires "smart disks". Commencer par installer les utilitaires smart disk sur zabeth17 pour tester.
  • Réparer l'espace de stockage de baleine (un disque semble presque défecteux), essayer d'évaluer la durée de vie des autres disques, les remplacer si nécessaire.
  • Faire un essai de sauvegarde d'une machine virtuelle sur baleine.
  • Essayer de trouver un outil pour afficher des informations sur les KSK et ZSK du DNSSEC (en particulier la date de création et la date de fin de vie).

Présentation générale du projet 2

Changement de projet

Pendant le stage, j'ai eu l'opportunité de changer de sujet et de reprendre un sujet de projet IMA4 n'ayant pas abouti. J'ai ainsi pu approfondir d'autres aspects de ma formation. Autant le premier sujet était orienté administration système et réseau, autant le second sujet est dans le domaine de la robotique et de l'électronique.

L'objet de ce second sujet est de concevoir et de fabriquer des robots mobiles relativement petits, simples et peu coûteux. Les robots devront pouvoir communiquer entre eux par infrarouge. La simplicité et le bas côut de fabrication des robots doit permettre d'en fabriquer en nombre suffisant pour simuler des comportements d'essaim d'insectes.

Description de la seconde partie du stage

L'objectif est de réaliser une petite carte de contrôle de robot mobile. Les robots pourront avoir trois types de motorisations : vibreurs, servo-moteurs continus et micro-moteurs.

Je suis partie d'une carte déjà conçue à l'école pour les bureau d'étude PeiP. Cette carte contient un micro-contrôleur ATMega328p, un FTDI (conversion USB série), un contrôleur de moteurs TB6612, des détecteurs infrarouges (3 TSOP IR), une LED infrarouge et des lignes pour des servo-moteurs.

Pour la communication nous utiliserons le protocole infra-rouge RC5 qui permet une certaine immunité à la lumière ambiante.

Avancement du stage "micro-robots"

Semaine 3

Durant la troisième semaine, j'ai utilisé le logiciel inkscape pour construire le chassis du robot. Ensuite, comparé à ce que mes camarades faisaient auparavant, j'ai apporté quelques améliorations. J'ai utilisé le logiciel freecad pour vérifier si la taille des pièces était correcte en assemblant ces pièces. La version de freecad que j'utilisais n'avait pas la fonctionnalité assemblage. Donc j'ai du trouver un paquet d'installation sur Internet pour l'ajouter le module assemblage à freecad. Ensuite, j'ai importé l'image de la structure des pièces realisé par inkscape dans le logiciel freecad.

J'ai modifié l'image vectorielle plusieurs fois pour que les pièces puissent être assemblées avec succès.

Le fichier freecad est disponible: Media:support_robot.zip

Le fichier vectoriel est disponible : Media:new_robot_plain.svg

L'image ci-dessous en donne un aperçu.

New robot plain.png

Semaine 4

J'ai pris un circuit déjà disponible mais je l'ai soudé :

Robot PCB.png
Robot pcb.jpg


Grâce à l'utilisation de freecad pour simuler l'assemblage, j'ai pu découper du plexiglas pour fabriquer un chassis directement fonctionnel.

Après avoir récupéré mes pièces, j'ai assemblé le chariot.

Chariotrobot.jpg

Semaine 5

J'ai appris à utiliser d'une bibliothèque infrarouge sur Arduino par ce site: https://learn.adafruit.com/using-an-infrared-library/controlling-neopixels-with-ir-1

Tout d'abord, j'ai installé la bibliothèque IRLib en suivant les étapes décrite sur ce site. Après l'installation, j'ai pu tester les récepteurs UR du robot avec un exemple de code. Ce code permet de recevoir un signal IR, de le décoder et d'imprimer des informations à son sujet sur le moniteur série. Voici un extrait du code:

void setup() {
 Serial.begin(9600);
 delay(2000); while (!Serial); //delay for Leonardo
 myReceiver.enableIRIn(); // Start the receiver
 Serial.println(F("Ready to receive IR signals"));
}
void loop() {
 //Continue looping until you get a complete signal received
 if (myReceiver.getResults()) {
   myDecoder.decode();           //Decode it
   myDecoder.dumpResults(true);  //Now print results. Use false for less detail
   myReceiver.enableIRIn();      //Restart receiver
 }
}

Le code est disponible :Media:sketch_jun15a.zip

Pour faire marcher le code, il fallait trouver sur quelle entrée étaient connectés les récepteurs TSOP IR. Dans mon cas, c'était l'entrée numéro 2. Puis j'ai vérifié que les autres broches étaient correctement connectées : la broche centrale à la masse et la broche droite au +5v.

Light TSOP38238.png

Enfin, j'ai utilisé une télécommande IR de téléviseur, le récepteur IR capte l'information et le programme l'affiche.

Pendant ces test d'infra-rouge, il m'a été demandé de tester aussi le contrôleur de moteur. J'ai fait un test en adaptant un programme qui utilisait le même contrôleur de moteur que celui soudé sur la carte. J'ai adapté le programme pour utiliser les connexions de la carte vers le contrôleur :

int STBY = 9; //standby
//Motor A
int PWMA = 6; //Speed control
int AIN1 = 8; //Direction
int AIN2 = 7; //Direction
//Motor B
int PWMB = 10; //Speed control
int BIN1 = 4; //Direction
int BIN2 = A5; //Direction
void loop(){
move(1, 255, 1); //motor 1, full speed, left
move(2, 255, 1); //motor 2, full speed, left
delay(1000); //go for 1 second
stop(); //stop
delay(250); //hold for 250ms until move again
move(1, 128, 0); //motor 1, half speed, right
move(2, 128, 0); //motor 2, half speed, right
delay(1000);
stop();
delay(250);
}

Le code est disponible :Media:Moteurtest.zip

Le test des moteurs, ni celui des servo-moteurs, n'étant concluant. Il m'a été demandé de changer la pile de 9v par un porte-piles de 6 piles de 1,5v pour avoir une plus grande puissance.

Il a fallu refaire un chassis pour supporter le porte-piles :

4chassis.png

Et puis,j'ai assemblé le chariot.

Chariotnew1.jpg

Semaine 6

J'ai combiné et modifié les deux ensembles de code ci-dessus pour implémenter les fonctions suivantes :

  • lorsque j'appuie sur la touche 2 de la télécommande, la voiture avance ;
  • lorsque j'appuie sur la touche 8 de la télécommande, la voiture recule ;
  • lorsque j'appuie sur la touche 4 de la télécommande, la voiture tourne à gauche ;
  • lorsque j'appuie sur la touche 6 de la télécommande, la voiture tourne à droite.

Voici un extrait du code:

if (myReceiver.getResults()) {
   myDecoder.decode();           //Decode it
   int value=myDecoder.value&0xff;
   switch(value){
     case 2 :
       move(1, speed, 0);
       move(2, speed, 1);
       break;
     case 4 :
       move(1, speed, 1);
       move(2, speed, 1);
       break;  
     case 6 :
       move(1, speed, 0);
       move(2, speed, 0);
       break;   
     case 8 :
       move(1, speed, 1);
       move(2, speed, 0);
       break;     
   }

Le code est disponible :Media:RobotIR.zip

Le même code mais en utilisant des servo-moteurs et non plus des moteurs simples :

if (myReceiver.getResults()) {
   myDecoder.decode();           //Decode it
   int value=myDecoder.value&0xff;
   switch(value){
     case 2 :
       motor1.write(0);
       motor2.write(180);
       break;
     case 4 :
       motor1.write(100+speed);
       motor2.write(100+speed);
       break;  
     case 5 :
       motor1.write(90);
       motor2.write(90);
       break;  
     case 6 :
       motor1.write(90-speed);
       motor2.write(90-speed);
       break;   
     case 8 :
       motor1.write(180);
       motor2.write(0);
       break; 
   }

Le code est disponible :Media:RobotIRServo.zip

J'ai assemblé un autre chariot avec un capteur de distance.

Chariotnew2.jpg

Fichiers rendus

Rapport

Le rapport est disponible ici : Media:Rapport-stage-zhang_lihe.odt

Les fichier

Le code est disponible ici : Media: RobotServosIRSonar.zip

Le soutenance est disponible ici : Media: stage_lihe.odp