Comment effacer les journaux des conteneurs Docker en cours d’exécution
Les conteneurs Docker de longue durée peuvent rapidement accumuler un grand nombre de lignes de journal. Ceux-ci consomment de la capacité de stockage et réduisent les performances lors de l’accès et du filtrage des données. Alors que Docker inclut des outils intégrés pour afficher les journaux, il n’y a pas de mécanisme intégré pour les nettoyer.
Dans cet article, vous apprendrez à effacer les journaux des conteneurs Docker en cours d’exécution, sans les redémarrer ni les remplacer. Vous verrez également quelques techniques pour gérer plus efficacement les journaux volumineux tout en conservant les anciennes données.
Sommaire
Comprendre le problème
Docker collecte les journaux à partir des flux de sortie et d’erreur standard des processus de premier plan du conteneur. La docker logs
La commande est utilisée pour récupérer ces journaux mais elle ne vous permet pas de supprimer les anciennes lignes.
Docker prend en charge de nombreux pilotes de journalisation différents, il n’est donc pas possible d’offrir un mécanisme de nettoyage standardisé. Cet article se concentre sur la norme json-file
logging driver, où les lignes de journal sont stockées dans un fichier JSON sur le système de fichiers de votre hôte de conteneur. Reportez-vous à la documentation de votre pilote de stockage si vous avez besoin de nettoyer les journaux transmis à un hôte distant.
Les fichiers journaux créés par le json-file
pilote sont stockés sous le /var/lib/docker/containers
annuaire. Chaque conteneur obtient son propre fichier journal qui est utilisé tout au long de sa durée de vie. Il n’y a pas de rotation de journal configurée par défaut.
La simple suppression du fichier journal n’est pas une solution efficace. Docker s’attend à ce que le fichier soit disponible en permanence et ne le recréera pas automatiquement s’il est supprimé. C’est plus sûr de dégager le contenu du journal existant pour éviter d’affecter les écritures en cours.
Découverte du chemin du fichier journal
Recherchez d’abord le chemin d’accès au fichier journal de votre conteneur cible. Vous pouvez récupérer le chemin du fichier journal pour un conteneur appelé my-app
en exécutant la commande suivante :
$ docker inspect --format="{{.LogPath}}" my-app /var/lib/containers/1380d936...-json.log
Effacement du fichier journal
Vous pouvez effacer le contenu du journal sans le supprimer en renvoyant une chaîne vide dans son contenu. Le fichier appartiendra à root
vous devrez donc effectuer cette opération dans un shell root. La commande suivante videra le fichier journal pour vous :
$ sudo sh -c 'echo "" > $(docker inspect --format="{{.LogPath}}" my-app)'
L’interpolation Shell est utilisée pour récupérer dynamiquement le chemin du fichier journal pour le my-app
récipient. Vous pouvez remplacer manuellement le chemin récupéré précédemment à la place.
Quand tu cours docker logs my-app
vous verrez maintenant une sortie vide à moins que le conteneur n’ait repris l’écriture de lignes entre-temps.
Limitation de la sortie du journal
La docker logs
La commande accepte quelques arguments qui peuvent être utilisés pour limiter la sortie des journaux bruyants. Ceux-ci permettent d’atténuer la nécessité de nettoyer le journal tout en empêchant votre terminal d’être inondé d’anciennes lignes chaque fois que vous accédez au fichier.
--tail
– Cet indicateur indique à Docker de n’émettre qu’un nombre spécifique d’anciennes lignes de journal, en commençant par la plus récente.--until
et--since
– Ces drapeaux limitent la sortie aux lignes de journal émises pendant une période de temps spécifique. Ils sont utiles lorsque vous connaissez la période approximative dans laquelle un événement s’est produit.
Voici quelques exemples:
Afficher les 100 lignes de journal les plus récentes
docker logs my-app --tail 100
Afficher les lignes de journal écrites au cours de la dernière heure
docker logs my-app --since 1h
Afficher jusqu’à 100 lignes de journal écrites au cours de la dernière heure
docker logs my-app --tail 100 --since 1h
Configuration de la rotation des journaux
Le fait de devoir régulièrement nettoyer les fichiers journaux de cette manière indique généralement que les journaux de votre application sont trop verbeux ou qu’il y a tout simplement trop d’activité à stocker dans un seul fichier.
De nombreux pilotes de journalisation Docker, y compris json-file
disposent d’une prise en charge facultative de la rotation des journaux que vous pouvez activer globalement pour le démon Docker ou par conteneur.
Les paramètres du démon sont configurés dans /etc/docker/daemon.json
. Voici un exemple qui fait pivoter les journaux de conteneur une fois qu’ils atteignent 8 Mo. Jusqu’à cinq fichiers seront conservés à tout moment, les anciens étant automatiquement supprimés au fur et à mesure que de nouvelles rotations se produisent.
{ "log-opts": { "max-size": "8m", "max-file": "5" } }
Redémarrez le démon Docker pour appliquer la modification :
$ sudo service docker restart
La rotation au niveau du démon s’applique à tous les conteneurs nouvellement créés. Les modifications n’affecteront pas les conteneurs qui existent déjà sur votre hôte.
La rotation peut être configurée pour des conteneurs individuels à l’aide de --log-opts
drapeaux. Ceux-ci remplaceront vos paramètres de démon Docker par défaut.
docker run --name app --log-driver json-file --log-opts max-size=8M --log-opts max-file=5 app-image:latest
Sommaire
Les journaux de conteneur Docker peuvent devenir bruyants lorsque des applications occupées écrivent une sortie importante. L’accès aux journaux détaillés est utile pour le débogage, mais ils consomment de l’espace de stockage, compliquent le filtrage des données et peuvent réduire les performances.
Vous pouvez nettoyer les fichiers journaux à la demande en utilisant des commandes shell pour vider leur contenu. Cependant, il est préférable de configurer la rotation des journaux afin que cela se produise automatiquement une fois que les fichiers atteignent une taille spécifique. La docker logs
La commande prend également en charge les indicateurs qui peuvent aider à apprivoiser les journaux encombrants au point d’accès.