Supervision des serveurs de la plateforme : Différence entre versions
(→Semaine 5) |
(→Semaine 6) |
||
Ligne 509 : | Ligne 509 : | ||
Le code est disponible :[[Media:RobotIRServo.zip]] | Le code est disponible :[[Media:RobotIRServo.zip]] | ||
+ | |||
+ | J'ai assemblé un autre chariot. | ||
+ | [[Fichier:chariotnew2.jpg|thumb|200px|center]] | ||
== Fichiers rendus == | == Fichiers rendus == |
Version du 26 juin 2018 à 16:05
Sommaire
- 1 Présentation générale du projet 1
- 1.1 Objectif du stage
- 1.2 Recherche sur des applications de surveillance système et réseau
- 1.3 Notices d'installation
- 2 Présentation générale du projet 2
- 3 Fichiers rendus
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
Recherche sur des applications de surveillance système et réseau
Nagios
Possibilités:
- Superviser des services réseaux : (SMTP, POP3, HTTP, NNTP, ICMP, SNMP, LDAP, etc.)
- 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.
- Interface avec le protocole SNMP.
- 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.
- 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.
- La remontée des alertes est entièrement paramétrable grâce à l'utilisation de plugins (alerte par courrier électronique, SMS, etc.).
- Acquittement des alertes par les administrateurs.
- Gestion des escalades pour les alertes (une alerte non acquittée est envoyée à un groupe différent).
- 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).
- 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 1 : WARNING (le seuil d'alerte est dépassé)
- Code 2 : CRITICAL (le service a un problème)
- 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:
- Affichage des données et état des machines
- Génération de graphiques (évolution des données et état des machines/liens)
- Classement et groupement des machines surveillées
- Auto découverte de machines et ajout automatique
- 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.
Semaine 4
J'ai pris un circuit déjà disponible mais je l'ai soudé :
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.
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.
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 :
Et puis,j'ai assemblé le chariot
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.
Fichiers rendus
Rapport
Le rapport est disponible ici : [[Fichier:]]