Comment utiliser la commande docker service logs pour visualiser les journaux de service et de tâche

DockerDockerBeginner
Pratiquer maintenant

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Dans ce laboratoire, vous apprendrez à utiliser efficacement la commande docker service logs pour visualiser et gérer les journaux générés par les services Docker et leurs tâches individuelles. Nous commencerons par créer un simple service Docker en utilisant l'image alpine et la commande ping.

Après avoir créé le service, vous explorerez comment visualiser les journaux de l'ensemble du service, offrant ainsi une vue consolidée de la sortie de toutes les tâches en cours d'exécution. Vous apprendrez ensuite à affiner votre recherche pour visualiser les journaux d'une tâche spécifique au sein du service. Enfin, le laboratoire montrera comment tirer parti des diverses options de la commande docker service logs pour filtrer et formater la sortie des journaux selon vos besoins.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker/ContainerOperationsGroup -.-> docker/run("Run a Container") docker/ContainerOperationsGroup -.-> docker/ls("List Containers") docker/ContainerOperationsGroup -.-> docker/ps("List Running Containers") docker/ContainerOperationsGroup -.-> docker/rm("Remove Container") docker/ContainerOperationsGroup -.-> docker/logs("View Container Logs") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") subgraph Lab Skills docker/run -.-> lab-555226{{"Comment utiliser la commande docker service logs pour visualiser les journaux de service et de tâche"}} docker/ls -.-> lab-555226{{"Comment utiliser la commande docker service logs pour visualiser les journaux de service et de tâche"}} docker/ps -.-> lab-555226{{"Comment utiliser la commande docker service logs pour visualiser les journaux de service et de tâche"}} docker/rm -.-> lab-555226{{"Comment utiliser la commande docker service logs pour visualiser les journaux de service et de tâche"}} docker/logs -.-> lab-555226{{"Comment utiliser la commande docker service logs pour visualiser les journaux de service et de tâche"}} docker/pull -.-> lab-555226{{"Comment utiliser la commande docker service logs pour visualiser les journaux de service et de tâche"}} end

Créer un simple service Docker

Dans cette étape, nous allons créer un simple service Docker en utilisant la commande docker service create. Un service Docker est un groupe de conteneurs de la même image. Lorsque vous créez un service, vous définissez quelle image de conteneur utiliser et quelles commandes exécuter à l'intérieur des conteneurs.

Tout d'abord, téléchargeons l'image alpine, qui est une distribution Linux légère couramment utilisée dans les conteneurs Docker.

docker pull alpine

Vous devriez voir une sortie indiquant que l'image est en cours de téléchargement.

Using default tag: latest
latest: Pulling from library/alpine
...
Status: Downloaded newer image for alpine:latest
docker.io/library/alpine:latest

Maintenant, nous allons créer un service Docker nommé my-service en utilisant l'image alpine. Nous spécifierons également la commande ping labex.io à exécuter à l'intérieur de chaque conteneur du service. Le flag --name attribue un nom au service, et la partie alpine ping labex.io spécifie l'image et la commande à exécuter.

docker service create --name my-service alpine ping labex.io

Après avoir exécuté la commande, vous verrez une sortie similaire à celle-ci, indiquant que le service a été créé. La longue chaîne de caractères est l'ID du service.

p1234567890abcdefghijklmnopqrstu
overall progress: 1 out of 1 tasks
1/1: running   [==================================================>]
verify: Service converged

Pour vérifier que le service est en cours d'exécution, vous pouvez utiliser la commande docker service ls. Cette commande liste tous les services en cours d'exécution sur votre swarm Docker.

docker service ls

Vous devriez voir une sortie similaire à celle-ci, montrant votre my-service répertorié avec 1 réplique en cours d'exécution.

ID             NAME         MODE         REPLICAS   IMAGE          PORTS
p1234567890   my-service   replicated   1/1        alpine:latest

Cela confirme que votre service Docker my-service a été créé avec succès et est en cours d'exécution avec une tâche (conteneur) exécutant la commande ping labex.io.

Visualiser les journaux de l'ensemble du service

Dans l'étape précédente, nous avons créé un service Docker nommé my-service qui exécute un conteneur exécutant la commande ping labex.io. Cette commande génère une sortie (journaux) au fur et à mesure de son exécution. Dans cette étape, nous allons apprendre à visualiser les journaux de l'ensemble du service.

Pour visualiser les journaux d'un service Docker, vous utilisez la commande docker service logs suivie du nom du service.

docker service logs my-service

L'exécution de cette commande affichera les journaux générés par toutes les tâches (conteneurs) appartenant au service my-service. Étant donné que notre service a actuellement une seule tâche, vous verrez la sortie de la commande ping labex.io s'exécutant dans ce conteneur.

my-service.1.abcdefghijkl  PING labex.io (1.2.3.4): 56 data bytes
my-service.1.abcdefghijkl  64 bytes from 1.2.3.4: seq=0 ttl=50 time=123.456 ms
my-service.1.abcdefghijkl  64 bytes from 1.2.3.4: seq=1 ttl=50 time=123.456 ms
...

La sortie montre les entrées de journal, préfixées par le nom du service, le numéro de tâche et un identifiant de tâche unique. Cela vous aide à identifier quelle tâche a généré quelle entrée de journal, en particulier lorsque vous avez plusieurs tâches en cours d'exécution pour un service.

Vous pouvez également utiliser le flag -f ou --follow pour diffuser les journaux en temps réel. Cela est utile pour surveiller l'activité du service au fur et à mesure qu'elle se produit.

docker service logs -f my-service

Cette commande affichera en continu les nouvelles entrées de journal au fur et à mesure qu'elles sont générées par les tâches du service. Pour arrêter de suivre les journaux, appuyez sur Ctrl+C.

La visualisation des journaux de l'ensemble du service est utile pour avoir une vue d'ensemble de la santé et de l'activité du service.

Visualiser les journaux d'une tâche spécifique au sein du service

Dans l'étape précédente, nous avons visualisé les journaux de l'ensemble du service my-service. Lorsqu'un service a plusieurs tâches (répliques), la visualisation des journaux combinés peut être écrasante. Dans cette étape, nous allons apprendre à visualiser les journaux d'une tâche spécifique au sein d'un service.

Tout d'abord, nous devons identifier l'ID de la tâche pour laquelle nous voulons visualiser les journaux. Nous pouvons obtenir ces informations en utilisant la commande docker service ps, qui liste les tâches associées à un service.

docker service ps my-service

Cette commande vous montrera les tâches en cours d'exécution pour my-service. La sortie ressemblera à ceci :

ID             NAME           IMAGE          NODE         DESIRED STATE   CURRENT STATE           ERROR   PORTS
abcdefghijkl   my-service.1   alpine:latest   labex-vm   Running         Running 2 minutes ago

Dans cette sortie, abcdefghijkl est l'ID de la tâche, et my-service.1 est le nom de la tâche. Le nom de la tâche est composé du nom du service et du numéro de la tâche.

Pour visualiser les journaux d'une tâche spécifique, vous utilisez la commande docker service logs suivie de l'ID de la tâche.

docker service logs abcdefghijkl

Remarque : Remplacez abcdefghijkl par l'ID de tâche réel que vous avez obtenu à partir de la sortie de la commande docker service ps.

L'exécution de cette commande affichera uniquement les journaux générés par le conteneur en cours d'exécution pour cette tâche spécifique. Cela est utile pour déboguer les problèmes liés à des tâches individuelles.

my-service.1.abcdefghijkl  PING labex.io (1.2.3.4): 56 data bytes
my-service.1.abcdefghijkl  64 bytes from 1.2.3.4: seq=0 ttl=50 time=123.456 ms
my-service.1.abcdefghijkl  64 bytes from 1.2.3.4: seq=1 ttl=50 time=123.456 ms
...

Vous pouvez également utiliser le flag -f ici pour suivre en temps réel les journaux de la tâche spécifique.

docker service logs -f abcdefghijkl

La visualisation des journaux des tâches individuelles vous permet d'isoler les problèmes et de comprendre le comportement d'instances spécifiques de votre service.

Utiliser des options pour filtrer et formater les journaux de service

Dans cette étape, nous allons explorer quelques options utiles pour filtrer et formater la sortie de la commande docker service logs. Ces options peuvent vous aider à trouver des informations spécifiques dans les journaux et à rendre la sortie plus lisible.

Une exigence courante est de visualiser uniquement les entrées de journal les plus récentes. Vous pouvez utiliser l'option --tail pour spécifier le nombre de lignes à afficher à partir de la fin des journaux. Par exemple, pour visualiser les dernières 5 lignes de journaux pour my-service :

docker service logs --tail 5 my-service

Cela affichera les dernières 5 entrées de journal du service.

my-service.1.abcdefghijkl  64 bytes from 1.2.3.4: seq=10 ttl=50 time=123.456 ms
my-service.1.abcdefghijkl  64 bytes from 1.2.3.4: seq=11 ttl=50 time=123.456 ms
my-service.1.abcdefghijkl  64 bytes from 1.2.3.4: seq=12 ttl=50 time=123.456 ms
my-service.1.abcdefghijkl  64 bytes from 1.2.3.4: seq=13 ttl=50 time=123.456 ms
my-service.1.abcdefghijkl  64 bytes from 1.2.3.4: seq=14 ttl=50 time=123.456 ms

Une autre option utile est --since, qui vous permet de visualiser les journaux générés après un horodatage (timestamp) ou une durée spécifique. Par exemple, pour visualiser les journaux générés au cours des 5 dernières minutes :

docker service logs --since 5m my-service

Vous pouvez également spécifier un horodatage spécifique au format RFC3339Nano, une date (AAAA-MM-JJ) ou une date et une heure (AAAA-MM-JJTHH:MM:SS).

Pour inclure les horodatages dans la sortie, utilisez le flag --timestamps ou -t :

docker service logs -t my-service

Cela ajoutera un horodatage au début de chaque entrée de journal.

2023-10-27T10:30:00.123456789Z my-service.1.abcdefghijkl  PING labex.io (1.2.3.4): 56 data bytes
2023-10-27T10:30:01.123456789Z my-service.1.abcdefghijkl  64 bytes from 1.2.3.4: seq=0 ttl=50 time=123.456 ms
...

Enfin, vous pouvez combiner ces options pour affiner votre visualisation des journaux. Par exemple, pour visualiser les dernières 10 entrées de journal avec des horodatages :

docker service logs --tail 10 -t my-service

Ces options offrent une grande flexibilité dans la façon dont vous visualisez et analysez les journaux de votre service Docker, facilitant ainsi la surveillance et la résolution des problèmes de vos applications.

Avant de conclure le laboratoire, nettoyons le service que nous avons créé. Nous pouvons supprimer le service en utilisant la commande docker service rm.

docker service rm my-service

Vous verrez une sortie confirmant la suppression du service.

my-service

Cette commande arrête et supprime toutes les tâches associées au service.

Résumé

Dans ce laboratoire, nous avons appris à créer un simple service Docker en utilisant la commande docker service create, en spécifiant l'image et la commande à exécuter au sein des tâches du service. Nous avons vérifié la création et l'état du service en utilisant docker service ls.

Ensuite, nous avons exploré comment visualiser les journaux de l'ensemble du service en utilisant docker service logs <service_name> et comment visualiser les journaux d'une tâche spécifique au sein du service en identifiant d'abord l'ID de la tâche avec docker service ps <service_name> puis en utilisant docker service logs <task_id>. Enfin, nous avons appris à utiliser diverses options avec docker service logs pour filtrer et formater la sortie des journaux, comme --follow pour diffuser en continu les journaux, --since pour visualiser les journaux à partir d'un moment spécifique et --tail pour visualiser les dernières N lignes de journaux.