Comment utiliser la commande docker system events pour surveiller l'activité Docker

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 (lab), vous apprendrez à surveiller efficacement l'activité Docker à l'aide de la commande docker system events. Vous commencerez par écouter les événements Docker en temps réel générés par des actions telles que le téléchargement d'images et le lancement de conteneurs.

Ensuite, vous explorerez comment filtrer ces événements en fonction de différents critères. Cela inclut le filtrage par temps à l'aide des options --since et --until, le filtrage par type d'objet et d'action à l'aide de l'option --filter, et la combinaison de plusieurs filtres pour une surveillance plus précise. Enfin, vous apprendrez à formater la sortie des événements pour une meilleure lisibilité et analyse à l'aide de l'option --format.


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/ps("List Running Containers") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") subgraph Lab Skills docker/run -.-> lab-555248{{"Comment utiliser la commande docker system events pour surveiller l'activité Docker"}} docker/ps -.-> lab-555248{{"Comment utiliser la commande docker system events pour surveiller l'activité Docker"}} docker/pull -.-> lab-555248{{"Comment utiliser la commande docker system events pour surveiller l'activité Docker"}} end

Écouter les événements Docker en temps réel

Dans cette étape, vous apprendrez à écouter les événements Docker en temps réel. Les événements Docker sont générés par le démon Docker lorsque certaines actions se produisent, telles que le démarrage, l'arrêt ou la suppression de conteneurs, d'images ou de volumes. Surveiller ces événements peut être utile pour l'automatisation, la journalisation et le débogage.

Pour écouter les événements Docker, vous utilisez la commande docker events. Par défaut, cette commande affichera continuellement les événements au fur et à mesure qu'ils se produisent.

Tout d'abord, ouvrons un terminal et exécutons la commande docker events. Cette commande bloquera et attendra les événements.

docker events

Maintenant, ouvrez un nouveau terminal (gardez le premier terminal en cours d'exécution avec la commande docker events). Dans ce nouveau terminal, nous allons exécuter un simple conteneur Docker. Cette action générera des événements que vous verrez dans le premier terminal.

Dans le nouveau terminal, exécutez la commande suivante pour télécharger l'image hello-world. Cela générera un événement pull.

docker pull hello-world

Vous devriez voir une sortie dans le premier terminal indiquant qu'un événement de téléchargement d'image s'est produit.

Ensuite, exécutez le conteneur hello-world. Cela générera des événements create, start et die.

docker run hello-world

Observez la sortie dans le premier terminal. Vous devriez voir des événements liés à la création, au démarrage puis à la sortie (arrêt) du conteneur.

Vous pouvez arrêter la commande docker events dans le premier terminal en appuyant sur Ctrl+C.

Filtrer les événements par temps à l'aide de --since et --until

Dans cette étape, vous apprendrez à filtrer les événements Docker en fonction du temps à l'aide des options --since et --until. Cela est utile pour afficher les événements qui se sont produits dans une plage de temps spécifique.

L'option --since vous permet d'afficher les événements qui se sont produits depuis un moment spécifique. L'option --until vous permet d'afficher les événements qui se sont produits jusqu'à un moment spécifique. Vous pouvez utiliser ces options ensemble pour spécifier une fenêtre de temps.

Le temps peut être spécifié dans différents formats, y compris le format de date RFC3339 (par exemple, 2023-10-27T10:00:00Z), les timestamps Unix (par exemple, 1698393600), ou des temps relatifs (par exemple, 10m pour il y a 10 minutes, 1h pour il y a 1 heure).

Commençons par générer quelques événements. Nous allons exécuter à nouveau le conteneur hello-world.

docker run hello-world

Maintenant, essayons d'afficher les événements qui se sont produits au cours des 5 dernières minutes. Nous pouvons utiliser l'option --since avec un temps relatif.

docker events --since 5m

Vous devriez voir les événements liés à l'exécution du conteneur hello-world que vous venez de réaliser.

Ensuite, essayons d'afficher les événements qui se sont produits au cours des 10 dernières minutes, mais pas au cours des 2 dernières minutes. Nous pouvons utiliser les options --since et --until avec des temps relatifs.

docker events --since 10m --until 2m

Selon le moment où vous avez exécuté le conteneur hello-world, vous pourriez ou non voir les événements. Si vous ne voyez aucun événement, essayez d'ajuster les plages de temps.

Vous pouvez également utiliser des timestamps absolus. Pour obtenir le timestamp Unix actuel, vous pouvez utiliser la commande date +%s.

Obtenons le timestamp actuel.

date +%s

Maintenant, exécutez à nouveau le conteneur hello-world.

docker run hello-world

Obtenez le timestamp actuel à nouveau.

date +%s

Maintenant, utilisez les deux timestamps que vous avez obtenus avec les options --since et --until pour afficher les événements qui se sont produits entre ces deux moments. Remplacez START_TIMESTAMP et END_TIMESTAMP par les timestamps réels que vous avez enregistrés.

docker events --since START_TIMESTAMP --until END_TIMESTAMP

Vous devriez voir les événements de l'exécution du conteneur hello-world qui se sont produits entre les deux timestamps.

Filtrer les événements par type d'objet et action à l'aide de --filter

Dans cette étape, vous apprendrez à filtrer les événements Docker en fonction du type d'objet et de l'action à l'aide de l'option --filter. Cela vous permet de vous concentrer sur des types spécifiques d'événements, tels que les événements de conteneur ou les événements d'image, et sur des actions spécifiques, telles que create, start, stop ou delete.

L'option --filter prend une paire clé-valeur au format key=value. Pour filtrer par type d'objet, la clé est type et la valeur peut être container, image, volume, network, daemon ou plugin. Pour filtrer par action, la clé est event et la valeur est l'action spécifique.

Commençons par filtrer uniquement les événements de conteneur. Nous allons exécuter à nouveau le conteneur hello-world pour générer des événements.

docker run hello-world

Maintenant, utilisez la commande docker events avec l'option --filter type=container pour afficher uniquement les événements liés aux conteneurs.

docker events --filter type=container --since 5m

Vous devriez voir des événements tels que create, start et die pour le conteneur hello-world, mais pas les événements liés au téléchargement d'image.

Ensuite, filtrons pour une action spécifique, par exemple, uniquement les événements start pour les conteneurs.

docker events --filter type=container --filter event=start --since 5m

Cette commande n'affichera que l'événement start pour le conteneur hello-world s'il s'est produit au cours des 5 dernières minutes.

Vous pouvez également filtrer par le nom ou l'ID de l'objet. Par exemple, pour filtrer les événements pour un conteneur spécifique nommé my-container, vous utiliseriez --filter container=my-container.

Exécutons le conteneur hello-world avec un nom spécifique.

docker run --name my-hello-container hello-world

Maintenant, filtrez les événements spécifiquement pour le conteneur nommé my-hello-container.

docker events --filter container=my-hello-container --since 5m

Vous devriez voir tous les événements liés au conteneur my-hello-container au cours des 5 dernières minutes.

Filtrer les événements par plusieurs critères à l'aide de plusieurs options --filter

Dans cette étape, vous apprendrez à combiner plusieurs options --filter pour filtrer les événements Docker en fonction de plusieurs critères simultanément. Cela vous permet de créer des filtres plus spécifiques pour trouver exactement les événements qui vous intéressent.

Lorsque vous utilisez plusieurs options --filter, Docker applique une logique "ET". Cela signifie qu'un événement doit correspondre à tous les filtres spécifiés pour être inclus dans la sortie.

Combinons le filtrage par type d'objet et par action. Nous allons filtrer les événements start des conteneurs.

Tout d'abord, exécutons un conteneur pour générer un événement start.

docker run hello-world

Maintenant, utilisons deux options --filter : une pour le type d'objet (type=container) et une pour l'action (event=start). Nous allons également utiliser --since 5m pour limiter la plage de temps.

docker events --filter type=container --filter event=start --since 5m

Vous devriez voir uniquement l'événement start pour le conteneur hello-world s'il s'est produit au cours des 5 dernières minutes. Les événements tels que create ou die seront exclus car ils ne correspondent pas au filtre event=start.

Vous pouvez également combiner le filtrage par temps, par type et par action. Par exemple, filtrons les événements die des conteneurs qui se sont produits au cours des 10 dernières minutes, mais pas au cours des 2 dernières minutes.

docker events --filter type=container --filter event=die --since 10m --until 2m

Cette commande affichera les événements die des conteneurs qui se situent dans la fenêtre de temps spécifiée.

Vous pouvez ajouter encore plus de filtres, comme filtrer par nom de conteneur ou par nom d'image. Filtrons les événements start d'un conteneur nommé my-specific-container utilisant l'image ubuntu.

Tout d'abord, téléchargeons l'image ubuntu.

docker pull ubuntu

Maintenant, exécutons un conteneur ubuntu avec un nom spécifique.

docker run --name my-specific-container ubuntu echo "Hello from Ubuntu"

Maintenant, filtrons les événements start du conteneur nommé my-specific-container.

docker events --filter type=container --filter event=start --filter container=my-specific-container --since 5m

Vous devriez voir l'événement start pour le conteneur my-specific-container s'il s'est produit au cours des 5 dernières minutes.

Formater la sortie des événements à l'aide de --format

Dans cette étape, vous apprendrez à formater la sortie des événements Docker à l'aide de l'option --format. Cela vous permet de personnaliser les informations affichées pour chaque événement, facilitant ainsi son analyse ou sa lecture.

L'option --format utilise la syntaxe du package text/template de Go. Vous pouvez accéder à divers champs de l'objet événement, tels que .Time, .Type, .Action, .Actor.ID et .Actor.Attributes.

Commençons par afficher l'heure, le type et l'action de chaque événement.

Tout d'abord, générons quelques événements en exécutant le conteneur hello-world.

docker run hello-world

Maintenant, utilisez la commande docker events avec l'option --format pour spécifier le format de sortie souhaité. Nous allons afficher l'heure, le type et l'action, séparés par une tabulation (\t).

docker events --since 5m --format '{{.Time}}\t{{.Type}}\t{{.Action}}'

Vous devriez voir une sortie similaire à celle-ci, mais avec des horodatages et des ID différents :

2023-10-27 10:30:00.123456789 +0000 UTC	container	create
2023-10-27 10:30:00.987654321 +0000 UTC	container	start
2023-10-27 10:30:01.567890123 +0000 UTC	container	die

Vous pouvez également accéder aux attributs de l'acteur qui a déclenché l'événement. Par exemple, pour afficher le nom du conteneur, vous pouvez utiliser .Actor.Attributes.name.

Exécutons à nouveau le conteneur hello-world avec un nom.

docker run --name my-formatted-container hello-world

Maintenant, formatez la sortie pour inclure le nom du conteneur.

docker events --since 5m --format '{{.Time}}\t{{.Type}}\t{{.Action}}\t{{.Actor.Attributes.name}}'

La sortie devrait maintenant inclure le nom du conteneur :

2023-10-27 10:35:00.123456789 +0000 UTC	container	create	my-formatted-container
2023-10-27 10:35:00.987654321 +0000 UTC	container	start	my-formatted-container
2023-10-27 10:35:01.567890123 +0000 UTC	container	die	my-formatted-container

Vous pouvez utiliser diverses fonctions de modèle et des structures de contrôle dans la chaîne de formatage pour des mises en forme plus complexes. Reportez-vous à la documentation de text/template de Go pour plus de détails.

Résumé

Dans ce laboratoire, vous avez appris à utiliser la commande docker events pour surveiller en temps réel l'activité Docker. Vous avez commencé par écouter tous les événements Docker au fur et à mesure de leur survenue, en observant les événements générés par le téléchargement et l'exécution d'un simple conteneur.

Ensuite, vous avez exploré comment filtrer ces événements en fonction de divers critères. Vous avez appris à filtrer les événements par temps en utilisant les options --since et --until pour afficher les événements dans une plage de temps spécifique. Vous avez également découvert comment filtrer les événements par type d'objet et par action en utilisant l'option --filter, et comment appliquer plusieurs filtres simultanément pour affiner le flux d'événements. Enfin, vous avez appris à formater la sortie de la commande docker events en utilisant l'option --format pour une meilleure lisibilité et analyse.