
Logs Docker avec Systemd
Suite à notre article sur l’utilisation des conteneurs avec Systemd. Je voudrais préciser un point sur la gestion des logs dans les conteneurs.
La Règle Docker
La bonne pratique officielle est de ne pas générer les logs dans un
fichier dans le conteneur (/var/log/conteneur.log
). La règle est donc
d’envoyer tous les logs dans la sortie standard et de laisser Docker
s’occuper des logs.
C’est très pratique car on peut ensuite consulter les logs avec les outils docker :
docker logs
docker-compose logs
Cependant, attention à bien configurer votre deamon docker car par défaut il n’effectue pas de rotation de logs ce qui peut provoquer la saturation de l’espace disque.
# /etc/docker/daemon.json
{
"log-driver": "json-file",
"log-opts": {
"max-size": "50m",
"max-file":"10",
"compress": "true"
}
}
Avec SystemD (et JournalD)
Dans le cas d’un démarrage des conteneurs avec systemd
, il peut être
préférable d’envoyer les logs vers journald
en activant le bon
log-driver.
# /etc/docker/daemon.json
{
"log-driver": "journald"
}
Vous pouvez ensuite consulter les logs docker dans journald
directement. (Attention, le changement du log-driver
ne s’applique pas
aux conteneurs déjà créés)
systemctl restart docker
docker run -d --rm --name hello_world \
alpine sh -c 'while true; do sleep 1.5; echo "hello world"; done'
journalctl CONTAINER_NAME=hello_world
dockerd[944]: hello world
dockerd[944]: hello world
dockerd[944]: hello world
docker stop hello_world
Pour se simplifier la vie, vous pouvez également utiliser les tags pour
filtrer vos logs. Ce qui nécessite de définir le paramètre --log-opt
.
Par exemple
for i in $(seq 0 2); do
docker run -d --rm \
--log-opt labels=app --label app=hello \
alpine sh -c "while true; do sleep 1.5; echo \"hello world $i\"; done"
done
journalctl app=hello
dockerd[17136]: hello world 0
dockerd[17136]: hello world 1
dockerd[17136]: hello world 2
dockerd[17136]: hello world 0
dockerd[17136]: hello world 1
dockerd[17136]: hello world 2
docker container ls -f "label=app=hello" -q | xargs docker stop
Maintenant vous avez une solution simple mais efficace pour gérer vos logs docker. Pour vous aider dans la conteneurisation de vos applications historique, contactez nous.