Quelques outils de monitoring ou d'administration

Mise en place

Pour ce TP, vous devez utiliser une machine virtuelle dans le projet ASBD. Utiliser le snapshot snap-docker-ready

Sur cette machine, copiez l'archive docker.tgz. C'est un ensemble de docker qui mettent en place un petit site web et sa base de donnée. Pour le lancer, il faut :

Utilisation du réseau des docker

Les conteneurs sont par définition isolé. Cela pose des problème lorsque l'on cherche à tester. En effet, on ne dispose pas forcement dans le conteneur des outils nécessaires. Mais il est possible d'utiliser les espace de nom pour exécuter des logiciels de l'hôte dans le réseau des dockers. Il faut utiliser les espace de nom réseaux. Ces derniers ne fonctionnent pas au départ à cause d'un petit bug, qu'il faut corriger en tapant la commande

ln -s /var/run/docker/netns/ /var/run/netns

Ensuite vous pouvez lister les espaces de noms réseaux générés par les dockers :

ip netns list

Le liste obtenue correspond aux identifiants des sandbox associé au docker.

Sysdig

Sysdig est un utilitaire qui permet d'explorer un grand nombre évènements du système. Il peut remplacer plusieurs logiciels spécialisés comme ps, top, htop, lsof … De plus il est développé pour tenir compte des conteneurs docker.

Attention, sysdig fonctionne à partir d'un module du noyau qui doit être recompilé automatiquement à chaque version (via dkms). Pour que cela fonctionne, il faut installer les fichiers entêtes du noyau : linux-headers-<version-du-noyau-linux>. Vous pouvez connaître la version du noyau grâce à la commande uname -a.

sysdig permet de filtrer les événements du système, par exemple

  1. ceux d'un processus de nom particulier : proc.name=apache2,
  2. ceux d'un utilisateur particulier : user.name=toto,
  3. ceux d'un conteneur particulier : container.name=dockapache.

Vous pouvez voir la liste des champs qui permettent de faire des filtres (ou des affichage) grâce à la commande sysdig -l

Les chisels

Ce sont des scripts qui permettent d'agréger les événements afin obtenir une sortie plus claire. Vous pouvez créer vos propres scripts, mais un grand nombre de chisels sont déjà implémentés et permettent de faire l'équivalent des commandes standard. Vous pouvez en obtenir la liste avec sysdig -cl. Vous pouvez obtenir des détails sur un chisel particulier en tapant la commande : sysdig -i <nom chisel>.

csysdig

C'est une interface utilisant curse qui permet d'explorer le système et par exemple d'afficher les conteneurs, leurs connexions … Vous pouvez consulter la vidéo suivante pour voir les possibilité de la commande https://www.infoq.com/presentations/container-monitoring. Pour le lancer avec un meilleur support de docker utiliser la commande

csysdig -pc

Monitoring réseau

iptraf est un outil pour afficher les connexions en cours sur la machine,

ntop est un outil pour afficher des statistiques réseau. Il lance un serveur web dont les login/motdepasse sont par défaut admin/admin.

Service de sauvegarde

Vous devez mettre en place un système de sauvegarde de la base de donnée. Le mot de passe root de la base est motdepasse.

Pour cela, il faut exécuter la commande suivante toutes les heures :

docker-compose -f /home/ubuntu/Docker/docker-compose.yml exec  mysql mysqldump -u root -pmotdepasse tiny  > sauv-$(date +%Y%m%d-%H%M%S).sql

Voir le tutoriel suivant https://ungeek.fr/systemd-timer/. Attention, contrairement à ce qui est écrit dans le tutoriel, il faut ajouter Unit=NOMDUSERVICE.service dans le champs Timer de la tâche récurrente.

Cliquez ici pour la correction

Cliquez ici pour la correction

D'abord il faut créer un script qui effectue la sauvegarde :

mkdir -p /var/sauv/
chown -R www-data:www-data /var/sauv/
/var/sauv/sauv.sh
#! /usr/bin/env bash
docker-compose -f /home/ubuntu/Docker/docker-compose.yml exec  mysql mysqldump -u root -pmotdepasse tiny  > /var/sauv/bdd-tiny-$(date +%Y%m%d-%H%M%S).sql
exit 0

Rendre le fichier exécutable et le tester

chmod a+x /var/sauv/sauv.sh
/var/sauv/sauv.sh

Créer le service

[Unit]
Description=Sauvegarde de la bdd
Documentation=http://ungeek.fr/systemd-timer-cest-trop-bien/
After=network.target
 
[Service]
WorkingDirectory=/var/sauv/
User=www-data
ExecStart=/var/sauv/sauv.sh
Type=oneshot
# nécessaire pour ne pas avoir de probleme de tty avec docker-compose exec
StandardInput=null
StandardOutput=null

Enregistrer et tester le service

systemctl daemon-reload 
systemctl start savbase.service

Créer le timer

[Unit]
Description=Lance la sauvegarde toutes les minutes (juste comme demo)
 
 
[Timer]
OnCalendar=minutely
Unit=savbase.service
 
[Install]
WantedBy=timers.target

Créer, lancer le timer et le rendre actif dès le démerrage de la machine

systemctl daemon-reload
systemctl start savbase.timer
systemctl enable savbase.timer

Vérifier le résultat :

root@test:/etc/systemd/system# systemctl status savbase.timer 
● savbase.timer - Lance la sauvegarde toutes les minutes (juste comme demo)
   Loaded: loaded (/etc/systemd/system/savbase.timer; disabled; vendor preset: enabled)
   Active: active (waiting) since Thu 2019-09-26 12:32:34 UTC; 25min ago
  Trigger: Thu 2019-09-26 12:58:00 UTC; 8s left

Sep 26 12:32:34 test systemd[1]: Started Lance la sauvegarde toutes les minutes (juste comme demo)