Wie man den Befehl docker system events verwendet, um die Docker-Aktivität zu überwachen

DockerDockerBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In diesem Lab lernen Sie, wie Sie die Docker-Aktivität effektiv mit dem Befehl docker system events überwachen können. Sie beginnen damit, auf Echtzeit-Docker-Ereignisse zu lauschen, die durch Aktionen wie das Herunterladen von Images und das Starten von Containern generiert werden.

Anschließend werden Sie untersuchen, wie Sie diese Ereignisse basierend auf verschiedenen Kriterien filtern können. Dies umfasst das Filtern nach Zeit mithilfe der Flags --since und --until, das Filtern nach Objekttyp und Aktion mithilfe der Flag --filter sowie das Kombinieren mehrerer Filter für eine spezifischere Überwachung. Abschließend lernen Sie, wie Sie die Ausgabe der Ereignisse mithilfe der Flag --format für eine bessere Lesbarkeit und Analyse formatieren können.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container 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{{"Wie man den Befehl docker system events verwendet, um die Docker-Aktivität zu überwachen"}} docker/ps -.-> lab-555248{{"Wie man den Befehl docker system events verwendet, um die Docker-Aktivität zu überwachen"}} docker/pull -.-> lab-555248{{"Wie man den Befehl docker system events verwendet, um die Docker-Aktivität zu überwachen"}} end

Auf Echtzeit-Docker-Ereignisse lauschen

In diesem Schritt lernen Sie, wie Sie auf Echtzeit-Docker-Ereignisse lauschen können. Docker-Ereignisse werden vom Docker-Daemon generiert, wenn bestimmte Aktionen auftreten, wie das Starten, Stoppen oder Löschen von Containern, Images oder Volumes. Die Überwachung dieser Ereignisse kann für Automatisierung, Protokollierung und Debugging nützlich sein.

Um auf Docker-Ereignisse zu lauschen, verwenden Sie den Befehl docker events. Standardmäßig gibt dieser Befehl die Ereignisse kontinuierlich aus, sobald sie eintreten.

Zunächst öffnen wir ein Terminal und führen den Befehl docker events aus. Dieser Befehl blockiert und wartet auf Ereignisse.

docker events

Nun öffnen Sie ein neues Terminal (lassen Sie das erste Terminal mit dem laufenden docker events-Befehl offen). In diesem neuen Terminal werden wir einen einfachen Docker-Container ausführen. Diese Aktion wird Ereignisse generieren, die Sie im ersten Terminal sehen werden.

Führen Sie im neuen Terminal den folgenden Befehl aus, um das hello-world-Image herunterzuladen. Dies wird ein pull-Ereignis generieren.

docker pull hello-world

Sie sollten im ersten Terminal eine Ausgabe sehen, die anzeigt, dass ein Image-Herunterladeereignis stattgefunden hat.

Als Nächstes führen Sie den hello-world-Container aus. Dies wird create-, start- und die-Ereignisse generieren.

docker run hello-world

Beobachten Sie die Ausgabe im ersten Terminal. Sie sollten Ereignisse sehen, die sich auf das Erstellen, Starten und anschließende Beenden (Sterben) des Containers beziehen.

Sie können den docker events-Befehl im ersten Terminal beenden, indem Sie Ctrl+C drücken.

Ereignisse nach Zeit mithilfe von --since und --until filtern

In diesem Schritt lernen Sie, wie Sie Docker-Ereignisse basierend auf der Zeit mithilfe der Flags --since und --until filtern können. Dies ist nützlich, um Ereignisse anzuzeigen, die innerhalb eines bestimmten Zeitraums aufgetreten sind.

Die Flag --since ermöglicht es Ihnen, Ereignisse anzuzeigen, die seit einem bestimmten Zeitpunkt aufgetreten sind. Die Flag --until ermöglicht es Ihnen, Ereignisse anzuzeigen, die bis zu einem bestimmten Zeitpunkt aufgetreten sind. Sie können diese Flags zusammen verwenden, um ein Zeitfenster festzulegen.

Die Zeit kann in verschiedenen Formaten angegeben werden, darunter im RFC3339-Datumsformat (z.B. 2023-10-27T10:00:00Z), als Unix-Timestamp (z.B. 1698393600) oder als relative Zeitangabe (z.B. 10m für vor 10 Minuten, 1h für vor 1 Stunde).

Zunächst generieren wir einige Ereignisse. Wir werden den hello-world-Container erneut ausführen.

docker run hello-world

Jetzt versuchen wir, die Ereignisse anzuzeigen, die in den letzten 5 Minuten aufgetreten sind. Wir können die Flag --since mit einer relativen Zeitangabe verwenden.

docker events --since 5m

Sie sollten die Ereignisse sehen, die sich auf das Ausführen des hello-world-Containers beziehen, das Sie gerade durchgeführt haben.

Als Nächstes versuchen wir, Ereignisse anzuzeigen, die in den letzten 10 Minuten, aber nicht in den letzten 2 Minuten aufgetreten sind. Wir können sowohl die Flag --since als auch die Flag --until mit relativen Zeitangaben verwenden.

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

Je nachdem, wann Sie den hello-world-Container ausgeführt haben, sehen Sie möglicherweise die Ereignisse oder auch nicht. Wenn Sie keine Ereignisse sehen, versuchen Sie, die Zeiträume anzupassen.

Sie können auch absolute Zeitstempel verwenden. Um den aktuellen Unix-Timestamp zu erhalten, können Sie den Befehl date +%s verwenden.

Lassen Sie uns den aktuellen Zeitstempel abrufen.

date +%s

Jetzt führen Sie den hello-world-Container erneut aus.

docker run hello-world

Rufen Sie erneut den aktuellen Zeitstempel ab.

date +%s

Verwenden Sie nun die beiden Zeitstempel, die Sie abgerufen haben, mit den Flags --since und --until, um die Ereignisse anzuzeigen, die zwischen diesen beiden Zeitpunkten aufgetreten sind. Ersetzen Sie START_TIMESTAMP und END_TIMESTAMP durch die tatsächlichen Zeitstempel, die Sie aufgezeichnet haben.

docker events --since START_TIMESTAMP --until END_TIMESTAMP

Sie sollten die Ereignisse vom Ausführen des hello-world-Containers sehen, die zwischen den beiden Zeitstempeln aufgetreten sind.

Ereignisse nach Objekttyp und Aktion mithilfe von --filter filtern

In diesem Schritt lernen Sie, wie Sie Docker-Ereignisse basierend auf dem Objekttyp und der Aktion mithilfe der Flag --filter filtern können. Dies ermöglicht es Ihnen, sich auf bestimmte Arten von Ereignissen zu konzentrieren, wie z.B. Container-Ereignisse oder Image-Ereignisse, sowie auf bestimmte Aktionen, wie create, start, stop oder delete.

Die Flag --filter nimmt ein Schlüssel-Wert-Paar im Format key=value entgegen. Zum Filtern nach Objekttyp lautet der Schlüssel type, und der Wert kann container, image, volume, network, daemon oder plugin sein. Zum Filtern nach Aktion lautet der Schlüssel event, und der Wert ist die spezifische Aktion.

Beginnen wir damit, nur Container-Ereignisse zu filtern. Wir werden den hello-world-Container erneut ausführen, um Ereignisse zu generieren.

docker run hello-world

Verwenden Sie nun den Befehl docker events mit der Flag --filter type=container, um nur Container-bezogene Ereignisse anzuzeigen.

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

Sie sollten Ereignisse wie create, start und die für den hello-world-Container sehen, aber keine Ereignisse, die sich auf das Herunterladen von Images beziehen.

Als Nächstes filtern wir nach einer spezifischen Aktion, beispielsweise nur nach start-Ereignissen für Container.

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

Dieser Befehl zeigt nur das start-Ereignis für den hello-world-Container an, wenn es in den letzten 5 Minuten aufgetreten ist.

Sie können auch nach dem Namen oder der ID des Objekts filtern. Beispielsweise würden Sie --filter container=my-container verwenden, um Ereignisse für einen bestimmten Container mit dem Namen my-container zu filtern.

Lassen Sie uns den hello-world-Container mit einem bestimmten Namen ausführen.

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

Filtern Sie nun speziell die Ereignisse für den Container mit dem Namen my-hello-container.

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

Sie sollten alle Ereignisse sehen, die sich auf den my-hello-container in den letzten 5 Minuten beziehen.

Ereignisse nach mehreren Kriterien mithilfe mehrerer --filter-Flags filtern

In diesem Schritt lernen Sie, wie Sie mehrere --filter-Flags kombinieren können, um Docker-Ereignisse gleichzeitig nach mehreren Kriterien zu filtern. Dies ermöglicht es Ihnen, spezifischere Filter zu erstellen, um genau die Ereignisse zu finden, an denen Sie interessiert sind.

Wenn Sie mehrere --filter-Flags verwenden, wendet Docker eine "UND"-Logik an. Das bedeutet, dass ein Ereignis alle angegebenen Filter erfüllen muss, um in der Ausgabe enthalten zu sein.

Lassen Sie uns die Filterung nach Objekttyp und Aktion kombinieren. Wir werden nach Container-start-Ereignissen filtern.

Zunächst führen Sie einen Container aus, um ein start-Ereignis zu generieren.

docker run hello-world

Verwenden Sie nun zwei --filter-Flags: eines für den Objekttyp (type=container) und eines für die Aktion (event=start). Wir werden auch --since 5m verwenden, um den Zeitraum zu begrenzen.

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

Sie sollten nur das start-Ereignis für den hello-world-Container sehen, wenn es in den letzten 5 Minuten aufgetreten ist. Ereignisse wie create oder die werden ausgeschlossen, da sie nicht dem event=start-Filter entsprechen.

Sie können auch die Filterung nach Zeit, Typ und Aktion kombinieren. Beispielsweise filtern wir nach Container-die-Ereignissen, die in den letzten 10 Minuten, aber nicht in den letzten 2 Minuten aufgetreten sind.

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

Dieser Befehl zeigt Container-die-Ereignisse an, die in das angegebene Zeitfenster fallen.

Sie können sogar noch mehr Filter hinzufügen, wie z.B. die Filterung nach Containernamen oder Imagenamen. Lassen Sie uns nach start-Ereignissen eines Containers mit dem Namen my-specific-container filtern, der das ubuntu-Image verwendet.

Zunächst laden Sie das ubuntu-Image herunter.

docker pull ubuntu

Führen Sie nun einen ubuntu-Container mit einem bestimmten Namen aus.

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

Filtern Sie nun nach start-Ereignissen des Containers mit dem Namen my-specific-container.

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

Sie sollten das start-Ereignis für den my-specific-container sehen, wenn es in den letzten 5 Minuten aufgetreten ist.

Ausgabe von Ereignissen mithilfe von --format formatieren

In diesem Schritt lernen Sie, wie Sie die Ausgabe von Docker-Ereignissen mithilfe der Flag --format formatieren können. Dies ermöglicht es Ihnen, die für jedes Ereignis angezeigten Informationen anzupassen, was das Parsen oder Lesen erleichtert.

Die Flag --format verwendet die Syntax des Go-Pakets text/template. Sie können auf verschiedene Felder des Ereignisobjekts zugreifen, wie z.B. .Time, .Type, .Action, .Actor.ID und .Actor.Attributes.

Beginnen wir damit, die Zeit, den Typ und die Aktion jedes Ereignisses anzuzeigen.

Zunächst generieren wir einige Ereignisse, indem wir den hello-world-Container ausführen.

docker run hello-world

Verwenden Sie nun den Befehl docker events mit der Flag --format, um das gewünschte Ausgabeformat anzugeben. Wir werden die Zeit, den Typ und die Aktion anzeigen, getrennt durch ein Tabulatorzeichen (\t).

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

Sie sollten eine Ausgabe ähnlich der folgenden sehen, aber mit anderen Zeitstempeln und IDs:

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

Sie können auch auf Attribute des Actors zugreifen, der das Ereignis ausgelöst hat. Beispielsweise können Sie .Actor.Attributes.name verwenden, um den Containernamen anzuzeigen.

Lassen Sie uns den hello-world-Container erneut mit einem Namen ausführen.

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

Formatieren Sie nun die Ausgabe, um den Containernamen einzubeziehen.

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

Die Ausgabe sollte nun den Containernamen enthalten:

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

Sie können verschiedene Template-Funktionen und Steuerstrukturen innerhalb der Formatzeichenkette für komplexere Formatierungen verwenden. Weitere Details finden Sie in der Dokumentation von Go text/template.

Zusammenfassung

In diesem Lab haben Sie gelernt, wie Sie den Befehl docker events verwenden können, um die Docker-Aktivität in Echtzeit zu überwachen. Sie haben damit begonnen, alle Docker-Ereignisse zu verfolgen, wie sie auftreten, und haben die Ereignisse beobachtet, die beim Herunterladen und Ausführen eines einfachen Containers generiert wurden.

Anschließend haben Sie untersucht, wie Sie diese Ereignisse nach verschiedenen Kriterien filtern können. Sie haben gelernt, Ereignisse nach Zeit mithilfe der Flags --since und --until zu filtern, um Ereignisse innerhalb eines bestimmten Zeitraums anzuzeigen. Sie haben auch herausgefunden, wie Sie Ereignisse nach Objekttyp und Aktion mithilfe der Flag --filter filtern können und wie Sie mehrere Filter gleichzeitig anwenden können, um den Ereignisstrom einzugrenzen. Schließlich haben Sie gelernt, wie Sie die Ausgabe des Befehls docker events mithilfe der Flag --format formatieren können, um die Lesbarkeit und das Parsen zu verbessern.