====== 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 {{ :asbd:2019: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 : * ouvrir l'archive tar xzvf docker.tgz ## Si cela ne fonctionne pas essayez : mv docker.tgz docker.tgz.gz gunzip docker.tgz.gz tar xzvf docker.tgz * lancer les dockers cd Docker docker-compose up ====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. * Via les commandes ''docker ps'' et ''docker inspect NOMDOCKER'' retrouvez la correspondance entre les dockers créés et les espace de mom réseau. * En utilisant ''ip netns exec ...'', * affichez les interfaces et les tables de routage des dockers; * placez une écoute réseau sur le docker ''mysql''. ====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. * Installez //sysdig// sur votre VM. 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-''. Vous pouvez connaître la version du noyau grâce à la commande ''uname -a''. * testez la commande ''sysdig'' que voyez-vous ? //sysdig// permet de filtrer les événements du système, par exemple - ceux d'un processus de nom particulier : ''proc.name=apache2'', - ceux d'un utilisateur particulier : ''user.name=toto'', - 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 * affichez les évènements en relation avec des sockets ipv4 de vos conteneurs apache. === 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 ''. * Que fait le //chisel// //spy_syslog// ? Testez le. * Utilisez le //chisel// //httplog//. A quoi cela peut-il servir ? ===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==== * Installez ''iptraf-ng'' et ''ntopng''. //iptraf// est un outil pour afficher les connexions en cours sur la machine, * sur votre VM, utilisez le pour identifier toutes les connexions : quel est le service, le client, son port ... //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''. * sur votre VM, retrouvez sur quel port ce service est lancé et utilisez un tunnel pour y accéder. ====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. D'abord il faut créer un script qui effectue la sauvegarde : mkdir -p /var/sauv/ chown -R www-data:www-data /var/sauv/ #! /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)