R5B08 - Séance 1

Supervision ad-hoc rapide

Lors de ce TP vous allez :

  1. mettre en place une petite architecture système, utilisée lors des séances suivantes,
  2. construire une premier système simple de supervision réseau.

1. Environnement des TPs

L'ensemble de vos TPs devra être effectué sur une machine de salles de TP. En fin de TP vous devrez donc toujours supprimer l'infrastructure utilisée pendant le TP via un appel à vagrant destroy. Pensez-donc à bien sauvegarder vos modifications en dehors de vos machines virtuelles et à les remettre en place au moment de la recréation de votre infrastructure (par exemple via un provisionnement).

1.1. Création des postes

Grâce à vagrant préparez une infrastructure composée de 3 serveurs virtuels nommés moniteur, poste1 et poste2 telle que :

  • les serveurs soient connectés au réseau 192.168.62.0/24 ;
  • moniteur ait comme adresse IPv4 192.168.62.10 ;
  • poste1 ait comme adresse IPv4 192.168.62.21 ;
  • poste2 ait comme adresse IPv4 192.168.62.22 ;
  • chacun des 3 serveurs soient accessibles par leur nom (moniteur, poste1, poste2) depuis chacun des serveurs ;
  • chacun des 3 serveurs, outre un éditeur de textes de votre choix (emacs, vim, etc.), dispose des outils suivants :
    • file
    • less
    • netcat
    • netstat
    • nmap
    • screen
    • xauth
  • TODO finir le Vagrantfile en plusieurs versions
    • 1 fichier Vagrant par étape le Vagrantfile pour la version finale
    • clé SSH spécifique
    • ajout apache2, rrdtool, gnuplot
    • export port apache

1.2. Connexion SSH

Faites en sorte que, une fois votre infrastructure démarrée, vous puissiez vous connecter, depuis votre machine physique, en ssh en tant que root sur chacun des 3 postes via les commandes shell suivantes, sans spécifier de mot de passe lors de la connexion (c'est-à-dire en utilisant une authentification par clés plutôt que par mot de passe) et avec une redirection des demandes d'affichage graphiques de la machine virtuelle vers la machine physique :

  • ssh moniteur
  • ssh poste1
  • ssh poste2

2. Première supervision ad-hoc

Sauf spécification explicite, les différentes questions de cet exercice sont à exécuter sur le moniteur.

2.1. Vérification d'accès aux postes

Écrivez un script shell, nommé /usr/local/sbin/verifie-postes, qui :

  • Pour les postes poste1 et poste2
    1. envoie deux paquets ICMP ECHO_REQUEST via la commande ping(1)
    2. ajoute dans le fichier /var/log/local-ping une ligne de la forme

      TIMESTAMP:POSTE:RTT

      avec

      • TIMESTAMP l'heure UNIX (c'est-à-dire le nombre de secondes depuis l'epoch Unix)
      • POSTE le nom du poste
      • RTT le temps moyen de réponse du ping

2.2. Planification de la vérification

Sur le moniteur, planifiez l'exécution de ce script toutes les minutes grâce à une table crontab(5) placée dans /etc/cron.d/local-ping.

2.3. Première présentation du suivi

  1. Installez le serveur apache2.
  2. Écrivez un script (shell ou python), nommé /usr/local/sbin/ping2html, qui convertit le contenu de /var/log/local-ping en un document HTML, dans /var/www/html/ping-tableaux.html. Ce document doit contenir deux tableaux représentants les temps moyens de réponses pour chacun des deux postes.

    Si possible dans ce tableau les dates (timestamps) doivent être représentées sous la forme AAAA-MM-JJ-hh:mm.

  3. Planifiez la création de ce document HTML toutes les minutes en appelant ping2html juste après l'exécution de verifie-postes, si celle-ci a réussi, dans la crontab mise en place précédemment.

2.4. Amélioration de la représentation

La commande suivante permet de générer une image SVG dans /tmp/image.svg avec comme nom courbe. Il faut pour cela lui transmettre via son entrée standard des lignes de texte composés de 2 mots (une date et un temps de réponse).

gnuplot -e 'set terminal svg ; set output "/tmp/image.svg" ; set grid ; plot "-" using 1:2 with linespoint title "courbe"'
  1. Installez l'outil gnuplot
  2. Écrivez un script, nommé /usr/local/sbin/ping2svg, qui convertit le contenu de /var/log/local-ping en deux images au format SVG, respectivement /var/www/html/poste1.svg et /var/www/html/poste2.svg. Chaque image doit représenter la courbe des temps de réponse de chacun des 2 postes.
  3. Planifiez la création de ces deux images toutes les minutes en appelant ping2svg juste après l'exécution de ping2html, si celle-ci a réussi, dans la crontab mise en place précédemment.
  4. Modifiez la commande /usr/local/sbin/ping2html pour remplacer les tableaux par les 2 images générées.

2.5. Tests sur poste1

  • Écrivez un script, nommé /usr/local/sbin/panne-aleatoire, qui change l'état de l'interface réseau aléatoirement (en shell la variable $RANDOM pourra vous être utile)
  • Planifiez l'appel de ce script toutes les 2 minutes
  • Vérifiez la prise en compte des pertes de connexion dans le rapport HTML

3. Modification du stockage

3.1. Rotation des logs

Conserver les données sous la forme actuelle peut vite devenir très consommateur d'espace disque.

Configurez votre système pour qu'une rotation du fichier /var/log/local-ping soit effectuée à chaque fois que le fichier dépasse 250 octets. Les 6 dernières versions du fichier devront être conservées et accessibles en lecture à tous les utilisateurs de la machine.

L'étude des pages logrotate(8) et logrotate.conf(5) sont indispensables.

3.2. Utilisation de syslog

Modifier vos scripts de façon à ce que les données de connexion aux postes soit stockées (et donc récupérés) via syslog pour le service local0 avec la priorité info.

3.3. Utilisation de RRD

Stocker les informations de lattence sous la forme texte actuelle et en effaçant brutalement les données les plus anciennes fait perdre de l'information.

Après avoir installé rrdtool et étudié son manuel, transformez le stockage des données de lattence en une archive RRD dans une base nommée /var/log/local-ping.rrd et remplacer la construction des courbes par des graphes produits par rrdgraph.

Documentez vos différents choix de paramétrages de la base de données et des archives RRD.