Geekflare est soutenu par son public. Nous pouvons percevoir des commissions d'affiliation sur les liens d'achat présents sur ce site.
En DevOps Dernière mise à jour : 25 septembre 2023
Partager sur :
Invicti Web Application Security Scanner - la seule solution qui offre une vérification automatique des vulnérabilités avec Proof-Based Scanning™.

Docker, une plateforme de virtualisation populaire au niveau du système d'exploitation, nous permet de fournir des applications dans des paquets connus sous le nom de conteneurs qui, en termes simples, sont des environnements isolés avec leurs propres logiciels, bibliothèques et fichiers de configuration

Comme tout autre logiciel moderne, la journalisation des événements et des messages tels que les avertissements et les erreurs fait partie intégrante de la plateforme Docker, ce qui vous permet de déboguer vos applications et vos problèmes de production

Nous allons aborder quelques méthodes simples pour gérer et surveiller les journaux de vos conteneurs. Commençons

Commande Docker Logs

La syntaxe de base pour récupérer les logs d'un conteneur est la suivante

$ docker logs [OPTIONS] <CONTAINER-NAME OR ID&gt

OU

$ docker container logs [OPTIONS] <NOM DU CONTENEUR OU ID&gt

Les deux syntaxes sont essentiellement les mêmes, nous nous concentrerons donc sur le reste des commandes de cet article en tant que docker logs

Notez cependant que la commande ci-dessus ne fonctionne que pour les conteneurs qui sont démarrés avec le pilote de journalisation json-file ou journald

Ici, OPTIONS fait référence aux drapeaux disponibles et supportés par la commande docker logs, qui sont listés ci-dessous

Nom, raccourci Défaut Description
--details Affiche les détails supplémentaires fournis aux journaux.
-follow, -f Suivre la sortie du journal
--since Affiche les journaux depuis l'horodatage (par exemple 2021-08-28T15:23:37Z) ou de manière relative (par exemple 56m pour 56 minutes)
--tail , -n all Nombre de lignes à afficher à partir de la fin des journaux
--timestamps, -t Afficher les horodatages
--until API 1.35
Affiche les journaux avant un horodatage (par exemple 2021-08-28T15:23:37Z) ou relatif (par exemple 56m pour 56 minutes)

Exemple

$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
28913415ed22 nginx "/docker-entrypoint...." 2 seconds ago Up 1 second 80/tcp gifted_edison
$ docker logs 28913415ed22
/docker-entrypoint.sh : /docker-entrypoint.d/ n'est pas vide, tentera d'effectuer la configuration
/docker-entrypoint.sh : Recherche de scripts shell dans /docker-entrypoint.d/
/docker-entrypoint.sh : Lancement de /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
10-listen-on-ipv6-by-default.sh : info : Récupère la somme de contrôle de /etc/nginx/conf.d/default.conf
10-listen-on-ipv6-by-default.sh : info : Activation de l'écoute sur IPv6 dans /etc/nginx/conf.d/default.conf
/docker-entrypoint.sh : Lancement de /docker-entrypoint.d/20-envsubst-on-templates.sh
/docker-entrypoint.sh : Launching /docker-entrypoint.d/30-tune-worker-processes.sh
/docker-entrypoint.sh : Configuration terminée ; prêt à démarrer
2021/08/28 09:02:59 <x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x>[notice]</x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x> 1#1 : using the "epoll" event method
2021/08/28 09:02:59 <x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x>[notice]</x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x> 1#1 : nginx/1.21.1
2021/08/28 09:02:59 <x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x>[notice]</x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x> 1#1 : built by gcc 8.3.0 (Debian 8.3.0-6)
2021/08/28 09:02:59 <x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x>[notice]</x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x> 1#1 : OS : Linux 5.8.0-1039-azure
2021/08/28 09:02:59 <x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x>[notice]</x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x> 1#1 : getrlimit(RLIMIT_NOFILE) : 1048576:1048576
2021/08/28 09:02:59 <x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x>[notice]</x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x> 1#1 : start worker processes
2021/08/28 09:02:59 <x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x>[notice]</x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x> 1#1 : start worker process 31
2021/08/28 09:02:59 <x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x>[notice]</x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x> 1#1 : start worker process 32

$

Emplacement des journaux Docker

Par défaut, Docker capture la sortie standard (et l'erreur standard) de tous vos conteneurs et les écrit dans des fichiers au format JSON. Ceci est réalisé en utilisant le pilote de journalisation JSON File ou json-file. Ces journaux sont stockés par défaut à des emplacements spécifiques aux conteneurs dans le système de fichiers /var/lib/docker

/var/lib/docker/containers/<container_id>/<container_id>-json.log

Par exemple, pour mon conteneur redis listé ci-dessous, je peux vérifier son fichier journal json comme indiqué dans l'extrait ci-dessous

$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
551c9273bbea redis "docker-entrypoint.s..." Il y a 19 minutes Up 19 minutes 6379/tcp redis
6cc871763df1 nginx "/docker-entrypoint...." Il y a 7 heures Up 7 heures 0.0.0.0:8080->80/tcp, :: :8080->80/tcp nostalgic_wescoff
$ sudo ls -l /var/lib/docker/containers/551c9273bbea6eaf66523ed735866b9ebe6924c3b504dfeb44bef90e69d59c73/551c9273bbea6eaf66523ed735866b9ebe6924c3b504dfeb44bef90e69d59c73-json.log
-rw-r----- 1 root root 1437 Aug 28 16:53 /var/lib/docker/containers/551c9273bbea6eaf66523ed735866b9ebe6924c3b504dfeb44bef90e69d59c73/551c9273bbea6eaf66523ed735866b9ebe6924c3b504dfeb44bef90e69d59c73-json.log
$ sudo tail -10 /var/lib/docker/containers/551c9273bbea6eaf66523ed735866b9ebe6924c3b504dfeb44bef90e69d59c73/551c9273bbea6eaf66523ed735866b9ebe6924c3b504dfeb44bef90e69d59c73-json.log
{"log" : "1:C 28 Aug 2021 16:53:42.160 # oO0OoO0OoOo Redis démarre oO0OoO0Oo\n", "stream" : "stdout", "time" : "2021-08-28T16:53:42.16031257Z"}
{"log" : "1:C 28 Aug 2021 16:53:42.160 # Redis version=6.2.5, bits=64, commit=00000000, modified=0, pid=1, just started\n", "stream" : "stdout", "time" : "2021-08-28T16:53:42.160337871Z"}
{"log" : "1:C 28 Aug 2021 16:53:42.160 # Warning : no config file specified, using the default config. Pour spécifier un fichier de configuration, utilisez redis-server /path/to/redis.conf\n", "stream" : "stdout", "time" : "2021-08-28T16:53:42.160342171Z"}
{"log" : "1:M 28 Aug 2021 16:53:42.160 * horloge monotone : POSIX clock_gettime\n", "stream" : "stdout", "time" : "2021-08-28T16:53:42.160792578Z"}
{"log" : "1:M 28 Aug 2021 16:53:42.161 * Running mode=standalone, port=6379.\n", "stream" : "stdout", "time" : "2021-08-28T16:53:42.161148683Z"}
{"log" : "1:M 28 Aug 2021 16:53:42.161 # Server initialized\n", "stream" : "stdout", "time" : "2021-08-28T16:53:42.161170984Z"}
{"log" : "1:M 28 Aug 2021 16:53:42.161 # WARNING overcommit_memory is set to 0 ! La sauvegarde en arrière-plan peut échouer si la mémoire est faible. Pour résoudre ce problème, ajoutez 'vm.overcommit_memory = 1' au fichier /etc/sysctl.conf, puis redémarrez ou exécutez la commande 'sysctl vm.overcommit_memory=1' pour que cela prenne effet.

\n", "

stream" : "stdout", "time" : "2021-08-28T16:53:42.161186984Z"}
{"log" : "1:M 28 Aug 2021 16:53:42.161 * Prêt à accepter des connexions\n", "stream" : "stdout", "time" : "2021-08-28T16:53:42.161484389Z"}

$

Afficher les détails supplémentaires

Pour afficher les détails supplémentaires fournis aux journaux, utilisez l'option --details

Exemple

$ docker logs 6cc871763df1 --details
 /docker-entrypoint.sh : /docker-entrypoint.d/ n'est pas vide, tentera d'effectuer la configuration
 /docker-entrypoint.sh : Recherche de scripts shell dans /docker-entrypoint.d/
 /docker-entrypoint.sh : Lancement de /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
 10-listen-on-ipv6-by-default.sh : info : Récupère la somme de contrôle de /etc/nginx/conf.d/default.conf
 10-listen-on-ipv6-by-default.sh : info : Activation de l'écoute sur IPv6 dans /etc/nginx/conf.d/default.conf
 /docker-entrypoint.sh : Lancement de /docker-entrypoint.d/20-envsubst-on-templates.sh
 /docker-entrypoint.sh : Launching /docker-entrypoint.d/30-tune-worker-processes.sh
 /docker-entrypoint.sh : Configuration terminée ; prêt pour le démarrage
 2021/08/28 10:29:05 <x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x>[notice]</x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x> 1#1 : using the "epoll" event method
 2021/08/28 10:29:05 <x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x>[notice]</x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x> 1#1 : nginx/1.21.1
 2021/08/28 10:29:05 <x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x>[notice]</x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x> 1#1 : built by gcc 8.3.0 (Debian 8.3.0-6)
 2021/08/28 10:29:05 <x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x>[notice]</x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x> 1#1 : OS : Linux 5.8.0-1039-azure
 2021/08/28 10:29:05 <x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x>[notice]</x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x> 1#1 : getrlimit(RLIMIT_NOFILE) : 1048576:1048576
 2021/08/28 10:29:05 <x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x>[notice]</x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x> 1#1 : start worker processes
 2021/08/28 10:29:05 <x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x>[notice]</x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x> 1#1 : start worker process 33
 2021/08/28 10:29:05 <x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x>[notice]</x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x> 1#1 : start worker process 34
 172.

17.0.

1 - - [28/Aug/2021:10:29:26 0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.68.0" "-"

$

Suivez la sortie du journal

Vous pouvez utiliser les drapeaux --follow ou -f pour suivre la sortie du journal. Cela vous permet de surveiller les nouvelles mises à jour dans le flux de journaux à partir de STDOUT et STDERR

Exemple

$ docker logs 6cc871763df1 -f
/docker-entrypoint.sh : /docker-entrypoint.d/ is not empty, will attempt to perform configuration
/docker-entrypoint.sh : Recherche de scripts shell dans /docker-entrypoint.d/
/docker-entrypoint.sh : Lancement de /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
10-listen-on-ipv6-by-default.sh : info : Récupère la somme de contrôle de /etc/nginx/conf.d/default.conf
10-listen-on-ipv6-by-default.sh : info : Activation de l'écoute sur IPv6 dans /etc/nginx/conf.d/default.conf
/docker-entrypoint.sh : Lancement de /docker-entrypoint.d/20-envsubst-on-templates.sh
/docker-entrypoint.sh : Launching /docker-entrypoint.d/30-tune-worker-processes.sh
/docker-entrypoint.sh : Configuration terminée ; prêt pour le démarrage
2021/08/28 10:29:05 <x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x>[notice]</x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x> 1#1 : using the "epoll" event method
2021/08/28 10:29:05 <x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x>[notice]</x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x> 1#1 : nginx/1.21.1
2021/08/28 10:29:05 <x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x>[notice]</x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x> 1#1 : built by gcc 8.3.0 (Debian 8.3.0-6)
2021/08/28 10:29:05 <x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x>[notice]</x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x> 1#1 : OS : Linux 5.8.0-1039-azure
2021/08/28 10:29:05 <x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x>[notice]</x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x> 1#1 : getrlimit(RLIMIT_NOFILE) : 1048576:1048576
2021/08/28 10:29:05 <x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x>[notice]</x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x> 1#1 : start worker processes
2021/08/28 10:29:05 <x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x>[notice]</x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x> 1#1 : start worker process 33
2021/08/28 10:29:05 <x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x>[notice]</x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x> 1#1 : start worker process 34
172.

17.0.

1 - - [28/Aug/2021:10:29:26 0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.68.0" "-"

Journaux de queue

Les journaux des conteneurs peuvent être mis en queue pour limiter le nombre de sorties affichées à l'écran avec l'option --tail ou -n. Par défaut, cet indicateur prend all comme argument, ce qui permet d'afficher le flux de données complet. Pour afficher un nombre fixe de lignes à partir de la fin des journaux, indiquez un nombre entier positif à la suite de l'indicateur --tail ou -n

Exemple

$ docker logs 6cc871763df1 -n 10
/docker-entrypoint.sh : Configuration complete ; ready for start up
2021/08/28 10:29:05 <x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x>[notice]</x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x> 1#1 : using the "epoll" event method
2021/08/28 10:29:05 <x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x>[notice]</x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x> 1#1 : nginx/1.21.1
2021/08/28 10:29:05 <x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x>[notice]</x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x> 1#1 : built by gcc 8.3.0 (Debian 8.3.0-6)
2021/08/28 10:29:05 <x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x>[notice]</x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x> 1#1 : OS : Linux 5.8.0-1039-azure
2021/08/28 10:29:05 <x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x>[notice]</x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x> 1#1 : getrlimit(RLIMIT_NOFILE) : 1048576:1048576
2021/08/28 10:29:05 <x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x>[notice]</x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x> 1#1 : start worker processes
2021/08/28 10:29:05 <x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x>[notice]</x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x> 1#1 : start worker process 33
2021/08/28 10:29:05 <x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x>[notice]</x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x> 1#1 : start worker process 34
172.

17.0.

1 - - [28/Aug/2021:10:29:26 0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.68.0" "-"

$

Afficher les journaux depuis

Nous pouvons limiter la sortie des journaux en utilisant l'option --since et en donnant un timestamp comme une valeur absolue avec la syntaxe 2021-08-28T15:23:37Z ou une valeur relative comme 56m verser 56 minutes

L'option --since n'affiche que les journaux de conteneurs générés après une date donnée. Vous pouvez spécifier la date sous la forme d'une date RFC 3339, d'un horodatage UNIX ou d'une chaîne de durée Go (par exemple, 1m30s, 3h). Le fuseau horaire local du client sera utilisé si vous ne fournissez pas un Z ou un décalage de fuseau horaire de -00:00 à la fin de l'horodatage. Vous pouvez combiner l'option --since avec l'une ou l'autre des options --follow ou --tail, ou les deux

Exemple

$ docker logs --since=1m nostalgic_wescoff
172.17.0.1 - - [28/Aug/2021:15:19:24 0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.68.0" "-"
172.17.0.1 - - [28/Aug/2021:15:19:25 0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.68.0" "-"

$
Dans l'exemple ci-dessus, les journaux depuis seulement 2 minutes sont affichés où nostalgic_wescoff est le nom auto-généré assigné pour le conteneur nginx

Afficher les journaux jusqu'à

Comme l'option --since, docker logs supporte également l'option --until, qui affiche les logs avant l'horodatage donné. De même, l'horodatage suit une convention similaire à la précédente et peut être spécifié comme une valeur absolue avec la syntaxe 2021-08-28T15:23:37Z ou une valeur relative comme 56m verser 56 minutes

Exemple: $ docker logs -until

$ docker logs --until=1h30m nostalgic_wescoff
/docker-entrypoint.sh : /docker-entrypoint.d/ n'est pas vide, tentera d'effectuer la configuration
/docker-entrypoint.sh : Recherche de scripts shell dans /docker-entrypoint.d/
/docker-entrypoint.sh : Lancement de /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
10-listen-on-ipv6-by-default.sh : info : Récupération de la somme de contrôle du fichier /etc/nginx/conf.d/default.conf
10-listen-on-ipv6-by-default.sh : info : Activation de l'écoute sur IPv6 dans /etc/nginx/conf.d/default.conf
/docker-entrypoint.sh : Lancement de /docker-entrypoint.d/20-envsubst-on-templates.sh
/docker-entrypoint.sh : Launching /docker-entrypoint.d/30-tune-worker-processes.sh
/docker-entrypoint.sh : Configuration terminée ; prêt à démarrer
2021/08/28 10:29:05 <x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x>[notice]</x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x> 1#1 : using the "epoll" event method
2021/08/28 10:29:05 <x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x>[notice]</x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x> 1#1 : nginx/1.21.1
2021/08/28 10:29:05 <x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x>[notice]</x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x> 1#1 : built by gcc 8.3.0 (Debian 8.3.0-6)
2021/08/28 10:29:05 <x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x>[notice]</x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x> 1#1 : OS : Linux 5.8.0-1039-azure
2021/08/28 10:29:05 <x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x>[notice]</x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x> 1#1 : getrlimit(RLIMIT_NOFILE) : 1048576:1048576
2021/08/28 10:29:05 <x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x>[notice]</x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x> 1#1 : start worker processes
2021/08/28 10:29:05 <x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x>[notice]</x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x> 1#1 : start worker process 33
2021/08/28 10:29:05 <x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x>[notice]</x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x> 1#1 : start worker process 34
172.

17.0.

1 - - [28/Aug/2021:10:29:26 0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.68.0" "-"

$
Dans l'exemple ci-dessus, tous les journaux antérieurs à 1 heure 30 minutes sont affichés

Afficher les horodatages

De nombreuses applications de conteneurs offrent des horodatages intégrés dans leur sortie de journal, de sorte que Docker les affiche également avec la commande docker logs. Si vous avez besoin que Docker préfixe explicitement ses horodatages dans la sortie, utilisez le drapeau --timestamps ou -t

Exemple

$ docker logs -t redis
2021-08-28T16:53:42.160312570Z 1:C 28 Aug 2021 16:53:42.160 # oO0OoO0OoO0Oo Redis démarre oO0OoO0Oo
2021-08-28T16:53:42.160337871Z 1:C 28 Aug 2021 16:53:42.160 # Redis version=6.2.5, bits=64, commit=00000000, modified=0, pid=1, vient de démarrer
2021-08-28T16:53:42.160342171Z 1:C 28 Aug 2021 16:53:42.160 # Warning : no config file specified, using the default config. Pour spécifier un fichier de configuration, utilisez redis-server /path/to/redis.conf
2021-08-28T16:53:42.160792578Z 1:M 28 Aug 2021 16:53:42.160 * horloge monotone : POSIX clock_gettime
2021-08-28T16:53:42.161148683Z 1:M 28 Aug 2021 16:53:42.161 * Running mode=standalone, port=6379.
2021-08-28T16:53:42.161170984Z 1:M 28 Aug 2021 16:53:42.161 # Serveur initialisé
2021-08-28T16:53:42.161186984Z 1:M 28 Aug 2021 16:53:42.161 # WARNING overcommit_memory is set to 0 ! La sauvegarde en arrière-plan peut échouer si la mémoire est faible. Pour résoudre ce problème, ajoutez 'vm.overcommit_memory = 1' au fichier /etc/sysctl.conf, puis redémarrez ou exécutez la commande 'sysctl vm.overcommit_memory=1' pour que cela prenne effet.
2021-08-28T16:53:42.161484389Z 1:M 28 Aug 2021 16:53:42.161 * Prêt à accepter les connexions

$

Drapeaux de fusion

Docker propose de combiner certains drapeaux pour obtenir une sortie plus filtrée plutôt que d'imprimer tout le contenu du journal à l'écran. Par exemple, nous pouvons combiner le drapeau --tail avec --since pour obtenir une sortie plus restreinte

Exemple: $ docker logs -since

$ docker logs --since=2h -f nostalgic_wescoff
172.17.0.1 - - [28/Aug/2021:15:19:24 0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.68.0" "-"
172.17.0.1 - - [28/Aug/2021:15:19:25 0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.68.0" "

-”
Cela peut également fonctionner avec d'autres drapeaux

Filtrer avec les utilitaires Shell

Les utilitaires de l'interpréteur de commandes de Linux peuvent également être utilisés pour plus de dextérité dans la sortie des journaux. Des utilitaires comme grep, head, tail, etc. peuvent être acheminés vers la sortie des logs de docker pour des opérations plus avancées

Exemple: $ docker logs -since

$ docker logs --since=7h nostalgic_wescoff 2>&1 | grep GET
172.17.0.1 - - [28/Aug/2021:10:29:26 0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.68.0" "-"
172.17.0.1 - - [28/Aug/2021:15:19:24 0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.68.0" "-"
172.17.0.1 - - [28/Aug/2021:15:19:25 0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.68.0" "-"

$
Notez ici que nous devons rediriger les flux de logs pour fournir une entrée unique pour grep en utilisant 2>&1

Résumé 👩‍💻

Docker est une plateforme polyvalente qui offre de nombreuses fonctionnalités pour administrer son environnement. La gestion des logs d'un système est l'une des compétences essentielles que tout administrateur système doit connaître. La gestion des logs dans Docker est facile une fois que vous connaissez les commandes disponibles et les drapeaux possibles en fonction de vos besoins

Pour en savoir plus sur Docker et ses fonctionnalités, consultez la documentation de Docker.

  • Abhishek Nair
    Auteur
Merci à nos sponsors
Plus de lectures sur DevOps
Alimentez votre entreprise
Quelques outils et services pour aider votre entreprise à se développer.
  • Invicti utilise le Proof-Based Scanning™ pour vérifier automatiquement les vulnérabilités identifiées et générer des résultats exploitables en quelques heures seulement.
    Essayez Invicti
  • Web scraping, proxy résidentiel, proxy manager, web unlocker, search engine crawler, et tout ce dont vous avez besoin pour collecter des données web.
    Essayez Brightdata
  • Monday.com est un système d'exploitation tout-en-un qui vous aide à gérer vos projets, vos tâches, votre travail, vos ventes, votre CRM, vos opérations, vos flux de travail et bien plus encore.
    Essayez le lundi
  • Intruder est un scanner de vulnérabilité en ligne qui détecte les faiblesses de votre infrastructure en matière de cybersécurité, afin d'éviter des violations de données coûteuses.
    Essayer l'intrus