# Docker ![Schema Docker Swarm](images/docker-wave-whale.svg "Schema Docker Swarm") **Monitoring des conteneurs** Maxime Poullain • Christian Tritten ## Monitorer des conteneurs Pourquoi c'est différent ? Avec l'introduction des conteneurs et des microservices, le monitoring doit pouvoir gérer des applications souvent éphémères et en perpétuelle fluctuation. Les solutions de monitoring ont donc besoin de s'adapter pour continuer à fournir des données pertinentes. ### Le monitoring sans conteneurs ![Stack Monitoring](images/monitoring2.png) Les outils de monitoring classiques permettent une couverture complète des éléments à surveiller. ### Le monitoring avec conteneurs ![Stack Monitoring](images/monitoring3.png) Les éléments propres à la couche des conteneurs ne peuvent pas être monitorés avec les outils classiques. Par exemple, il serait difficile de suivre la consommation mémoire de l'application A. ## Quelques outils Pour se faciliter la tâche ### Docker Stats Docker propose un équivalent de la commande `top` permettant d'afficher les statistiques des conteneurs en cours d'exécution sur l'hôte. Bien que pratique, ceci n'est pas adapté à une grosse infrastructure. `docker stats` ``` CONTAINER CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS 5098617c3654 0.05% 0B / 0B 0.00% 648B / 0B 0B / 0B 0 b2d0efcb5151 1.00% 0B / 0B 0.00% 648B / 0B 0B / 0B 0 cbdb1069b241 0.10% 0B / 0B 0.00% 648B / 0B 0B / 0B 0 ``` ### ctop Métriques des conteneurs dans une interface à la _top_ ![ctop](images/ctop.gif) ### Node-Exporter ![Prometheus](images/prometheus.png) * Outil de collecte de métriques système * Développé par Prometheus * C'est l'équivalent d'un collectd * Facile à déployer sur chaque hôte (sous forme de conteneur) ### cadvisor ![cadvisor](images/cadvisor.jpg) * Outil de monitoring de conteneurs * Développé par Google * Supporte nativement Docker * Collecte et exporte les métriques des conteneurs présents sur l'hôte * C'est un peu l'équivalent d'un `docker stats --all` * Facile à déployer sur chaque hôte (sous forme de conteneur) ### Prometheus ![Prometheus](images/prometheus.png) * Projet initié en 2012 chez Soundcloud * Interroge les agents _Node-Exporter_ et _cAdvisor_ des différents hôtes * Stocke les données de type time-series dans ses propres bases * Permet la configuration d'alertes via l'outil _Alert-Manager_ de Prometheus * Peut être lancé en tant que conteneur (1 seule instance pour un cluster ou plus) ### Alert Manager ![Prometheus](images/prometheus.png) * Outil de gestion et routage d'alertes * Développé par Prometheus * Se couple avec un serveur Prometheus * Supporte les notifications par Email/Webhook/Slack/... ### Grafana ![grafana](images/grafana.png) * Outil de conception et visualisation de tableaux de bord * Développé par Grafana Labs * Peut exploiter une base InfluxBD ou Prometheus * Peut être lancé en tant que conteneur (1 seule instance pour un cluster ou plus) ### Exemple de solution complète ![Stack Monitoring](images/monitoring.png) [https://github.com/stefanprodan/swarmprom](https://github.com/stefanprodan/swarmprom)