Dans Docker, le driver de logs par défaut est json-file
.
Son inconvénient majeur est que les logs avec ce driver sont supprimés dès que le conteneur est supprimé.
journald
/etc/docker/daemon.json
pour utiliser le driver journald
.docker.service
journalctl -f
et le bon label.Ce driver est utile car les logs sont désormais archivés dès leur création, tout en permettant d’utiliser les features de filtrage et de rotation de journald
.
json-file
ou supprimez le fichier /etc/docker/daemon.json
), et restartez le service docker.service
pour ne pas interférer avec la seconde moitié de l’exercice : la config Elastic de l’exercice suivant fonctionne avec le driver json-file
.L’utilité d’Elasticsearch est que, grâce à une configuration très simple de son module Filebeat, nous allons pouvoir centraliser les logs de tous nos conteneurs Docker. Pour ce faire, il suffit d’abord de télécharger une configuration de Filebeat prévue à cet effet :
curl -L -O https://raw.githubusercontent.com/elastic/beats/7.10/deploy/docker/filebeat.docker.yml
Renommons cette configuration et rectifions qui possède ce fichier pour satisfaire une contrainte de sécurité de Filebeat :
mv filebeat.docker.yml filebeat.yml
sudo chown root filebeat.yml
sudo chmod go-w filebeat.yml
Enfin, créons un fichier docker-compose.yml
pour lancer une stack Elasticsearch :
services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:7.5.0
environment:
- discovery.type=single-node
- xpack.security.enabled=false
networks:
- logging-network
filebeat:
image: docker.elastic.co/beats/filebeat:7.5.0
user: root
depends_on:
- elasticsearch
volumes:
- ./filebeat.yml:/usr/share/filebeat/filebeat.yml:ro
- /var/lib/docker/containers:/var/lib/docker/containers:ro
- /var/run/docker.sock:/var/run/docker.sock
networks:
- logging-network
environment:
- -strict.perms=false
kibana:
image: docker.elastic.co/kibana/kibana:7.5.0
depends_on:
- elasticsearch
ports:
- 5601:5601
networks:
- logging-network
networks:
logging-network:
driver: bridge
Il suffit ensuite de :
5601
)*
dans le champ indiqué, de valider@timestamp
, puis de valider.L’index nécessaire à Kibana est créé, vous pouvez vous rendre dans la partie Discover à gauche (l’icône boussole 🧭) pour lire vos logs.
Il est temps de faire un petit docker stats
pour découvrir l’utilisation du CPU et de la RAM de vos conteneurs !
Avec WSL, l’emplacement des logs est assez difficile à trouver ! Vous pouvez vous aider de cette page pour ce TP : https://gist.github.com/Bert-R/e5bb77b9ce9c94fdb1a90e4e615ee518
Puis, à l’aide de la documentation Elasticsearch et/ou en adaptant de bouts de code Docker Compose trouvés sur internet, ajoutez et configurez un nœud Elastic. Toujours à l’aide de la documentation Elasticsearch, vérifiez que ce nouveau nœud communique bien avec le premier.
microblog
Dans la dernière version de l’app microblog
, Elasticsearch est utilisé pour fournir une fonctionnalité de recherche puissante dans les posts de l’app.
Avec l’aide du tutoriel de Miguel Grinberg, écrivez le docker-compose.yml
qui permet de lancer une stack entière pour microblog
. Elle devra contenir un conteneur microblog
, un conteneur mysql
, un conteneur elasticsearch
et un conteneur kibana
.
Suivre ce tutoriel pour du monitoring des conteneurs Docker : https://prometheus.io/docs/guides/cadvisor/
On pourra se servir de cette stack Compose : https://github.com/vegasbrianc/prometheus/
Vous pouvez aussi aspirer le port 9191 du container identidock
qui affiche un JSON de stats du serveur Gunicorn.
Une alternative est Netdata, joli et configuré pour monitorer des conteneurs out-of-the-box : https://learn.netdata.cloud/docs/netdata-agent/installation/docker
On peut aussi regarder du côté de Signoz (logging, monitoring et alerting) : https://github.com/SigNoz/signoz
Ou bien Loki : https://grafana.com/docs/loki/latest/setup/install/docker/
Ressources utiles :