So verwenden Sie den docker service logs-Befehl, um Dienst- und Aufgaben-Logs anzuzeigen

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 den Befehl docker service logs effektiv nutzen können, um die von Docker-Diensten und ihren einzelnen Aufgaben erzeugten Logs anzuzeigen und zu verwalten. Wir beginnen damit, einen einfachen Docker-Dienst mithilfe des alpine-Images und des ping-Befehls zu erstellen.

Nachdem der Dienst erstellt wurde, werden Sie untersuchen, wie Sie die Logs für den gesamten Dienst anzeigen können, um eine zusammengefasste Ansicht der Ausgabe aller laufenden Aufgaben zu erhalten. Anschließend lernen Sie, wie Sie Ihre Suche einschränken können, um die Logs für eine bestimmte Aufgabe innerhalb des Dienstes anzuzeigen. Abschließend zeigt das Lab, wie Sie verschiedene Optionen mit dem Befehl docker service logs nutzen können, um die Log-Ausgabe nach Ihren Bedürfnissen zu filtern und zu formatieren.


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{{"So verwenden Sie den docker service logs-Befehl, um Dienst- und Aufgaben-Logs anzuzeigen"}} docker/ls -.-> lab-555226{{"So verwenden Sie den docker service logs-Befehl, um Dienst- und Aufgaben-Logs anzuzeigen"}} docker/ps -.-> lab-555226{{"So verwenden Sie den docker service logs-Befehl, um Dienst- und Aufgaben-Logs anzuzeigen"}} docker/rm -.-> lab-555226{{"So verwenden Sie den docker service logs-Befehl, um Dienst- und Aufgaben-Logs anzuzeigen"}} docker/logs -.-> lab-555226{{"So verwenden Sie den docker service logs-Befehl, um Dienst- und Aufgaben-Logs anzuzeigen"}} docker/pull -.-> lab-555226{{"So verwenden Sie den docker service logs-Befehl, um Dienst- und Aufgaben-Logs anzuzeigen"}} end

Erstellen eines einfachen Docker-Dienstes

In diesem Schritt werden wir einen einfachen Docker-Dienst mithilfe des Befehls docker service create erstellen. Ein Docker-Dienst ist eine Gruppe von Containern, die das gleiche Image verwenden. Wenn Sie einen Dienst erstellen, legen Sie fest, welches Container-Image verwendet werden soll und welche Befehle innerhalb der Container ausgeführt werden sollen.

Zunächst laden wir das alpine-Image herunter, eine leichtgewichtige Linux-Distribution, die häufig in Docker-Containern verwendet wird.

docker pull alpine

Sie sollten eine Ausgabe sehen, die anzeigt, dass das Image heruntergeladen wird.

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

Jetzt erstellen wir einen Docker-Dienst namens my-service mithilfe des alpine-Images. Wir geben auch den Befehl ping labex.io an, der in jedem Container des Dienstes ausgeführt werden soll. Der --name-Parameter weist dem Dienst einen Namen zu, und der Teil alpine ping labex.io gibt das Image und den auszuführenden Befehl an.

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

Nach der Ausführung des Befehls sollten Sie eine ähnliche Ausgabe sehen, die anzeigt, dass der Dienst erstellt wurde. Die lange Zeichenfolge ist die Dienst-ID.

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

Um zu überprüfen, ob der Dienst läuft, können Sie den Befehl docker service ls verwenden. Dieser Befehl listet alle Dienste auf, die in Ihrem Docker-Swarm laufen.

docker service ls

Sie sollten eine ähnliche Ausgabe sehen, in der Ihr my-service mit einer laufenden Replik aufgeführt ist.

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

Dies bestätigt, dass Ihr Docker-Dienst my-service erfolgreich erstellt wurde und mit einer Aufgabe (Container) läuft, die den Befehl ping labex.io ausführt.

Anzeigen der Logs für den gesamten Dienst

Im vorherigen Schritt haben wir einen Docker-Dienst namens my-service erstellt, der einen Container ausführt, der den Befehl ping labex.io ausführt. Dieser Befehl erzeugt während der Ausführung Ausgabe (Logs). In diesem Schritt lernen wir, wie wir die Logs für den gesamten Dienst anzeigen können.

Um die Logs für einen Docker-Dienst anzuzeigen, verwenden Sie den Befehl docker service logs, gefolgt vom Dienstnamen.

docker service logs my-service

Die Ausführung dieses Befehls zeigt die Logs an, die von allen Aufgaben (Containern) des my-service-Dienstes erzeugt wurden. Da unser Dienst derzeit nur eine Aufgabe hat, sehen Sie die Ausgabe des ping labex.io-Befehls, der in diesem Container ausgeführt wird.

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
...

Die Ausgabe zeigt die Log-Einträge, die mit dem Dienstnamen, der Aufgaben-Nummer und einer eindeutigen Aufgaben-ID vorangestellt sind. Dies hilft Ihnen zu identifizieren, welche Aufgabe welchen Log-Eintrag erzeugt hat, insbesondere wenn Sie mehrere Aufgaben für einen Dienst ausführen.

Sie können auch die Option -f oder --follow verwenden, um die Logs in Echtzeit zu streamen. Dies ist nützlich, um die Aktivität des Dienstes zu überwachen, während sie stattfindet.

docker service logs -f my-service

Dieser Befehl zeigt kontinuierlich neue Log-Einträge an, sobald sie von den Aufgaben des Dienstes erzeugt werden. Um das Folgen der Logs zu beenden, drücken Sie Ctrl+C.

Das Anzeigen der Logs für den gesamten Dienst ist hilfreich, um einen Überblick über die Gesundheit und Aktivität des Dienstes zu erhalten.

Anzeigen der Logs für eine bestimmte Aufgabe innerhalb des Dienstes

Im vorherigen Schritt haben wir die Logs für den gesamten my-service-Dienst angesehen. Wenn ein Dienst mehrere Aufgaben (Replikate) hat, kann das Anzeigen der kombinierten Logs überwältigend sein. In diesem Schritt lernen wir, wie wir die Logs für eine bestimmte Aufgabe innerhalb eines Dienstes anzeigen können.

Zunächst müssen wir die Aufgaben-ID identifizieren, für die wir die Logs anzeigen möchten. Wir können diese Informationen mithilfe des Befehls docker service ps erhalten, der die mit einem Dienst verknüpften Aufgaben auflistet.

docker service ps my-service

Dieser Befehl zeigt Ihnen die für my-service laufenden Aufgaben an. Die Ausgabe sieht in etwa so aus:

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

In dieser Ausgabe ist abcdefghijkl die Aufgaben-ID und my-service.1 der Aufgabenname. Der Aufgabenname setzt sich aus dem Dienstnamen und der Aufgaben-Nummer zusammen.

Um die Logs für eine bestimmte Aufgabe anzuzeigen, verwenden Sie den Befehl docker service logs, gefolgt von der Aufgaben-ID.

docker service logs abcdefghijkl

Hinweis: Ersetzen Sie abcdefghijkl durch die tatsächliche Aufgaben-ID, die Sie aus der Ausgabe des docker service ps-Befehls erhalten haben.

Die Ausführung dieses Befehls zeigt nur die Logs an, die von dem für diese bestimmte Aufgabe laufenden Container erzeugt wurden. Dies ist nützlich, um Probleme mit einzelnen Aufgaben zu debuggen.

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
...

Sie können auch hier die Option -f verwenden, um die Logs der bestimmten Aufgabe in Echtzeit zu verfolgen.

docker service logs -f abcdefghijkl

Das Anzeigen der Logs für einzelne Aufgaben ermöglicht es Ihnen, Probleme zu isolieren und das Verhalten bestimmter Instanzen Ihres Dienstes zu verstehen.

Verwenden von Optionen zum Filtern und Formatieren von Dienst-Logs

In diesem Schritt werden wir einige nützliche Optionen zum Filtern und Formatieren der Ausgabe des docker service logs-Befehls untersuchen. Diese Optionen können Ihnen helfen, spezifische Informationen in den Logs zu finden und die Ausgabe lesbarer zu gestalten.

Eine häufige Anforderung besteht darin, nur die neuesten Log-Einträge anzuzeigen. Sie können die Option --tail verwenden, um die Anzahl der Zeilen anzugeben, die vom Ende der Logs angezeigt werden sollen. Beispielsweise um die letzten 5 Zeilen der Logs für my-service anzuzeigen:

docker service logs --tail 5 my-service

Dies gibt die letzten 5 Log-Einträge des Dienstes aus.

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

Eine weitere nützliche Option ist --since, die es Ihnen ermöglicht, Logs anzuzeigen, die nach einem bestimmten Zeitstempel oder Zeitraum erzeugt wurden. Beispielsweise um Logs anzuzeigen, die in den letzten 5 Minuten erzeugt wurden:

docker service logs --since 5m my-service

Sie können auch einen bestimmten Zeitstempel im RFC3339Nano-Format, ein Datum (YYYY-MM-DD) oder ein Datum und eine Uhrzeit (YYYY-MM-DDTHH:MM:SS) angeben.

Um Zeitstempel in der Ausgabe einzuschließen, verwenden Sie die Option --timestamps oder -t:

docker service logs -t my-service

Dies fügt einen Zeitstempel an den Anfang jedes Log-Eintrags hinzu.

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
...

Schließlich können Sie diese Optionen kombinieren, um Ihre Log-Anzeige zu verfeinern. Beispielsweise um die letzten 10 Log-Einträge mit Zeitstempeln anzuzeigen:

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

Diese Optionen bieten Flexibilität bei der Anzeige und Analyse Ihrer Docker-Dienst-Logs und erleichtern die Überwachung und Fehlerbehebung Ihrer Anwendungen.

Bevor wir das Lab beenden, lassen Sie uns den von uns erstellten Dienst aufräumen. Wir können den Dienst mithilfe des Befehls docker service rm entfernen.

docker service rm my-service

Sie werden eine Ausgabe sehen, die die Entfernung des Dienstes bestätigt.

my-service

Dieser Befehl stoppt und entfernt alle mit dem Dienst verknüpften Aufgaben.

Zusammenfassung

In diesem Lab haben wir gelernt, wie man einen einfachen Docker-Dienst mit dem Befehl docker service create erstellt, indem man das Image und den Befehl angibt, der innerhalb der Aufgaben des Dienstes ausgeführt werden soll. Wir haben die Erstellung und den Status des Dienstes mit docker service ls überprüft.

Anschließend haben wir untersucht, wie man die Logs für den gesamten Dienst mit docker service logs <service_name> anzeigt und wie man die Logs für eine bestimmte Aufgabe innerhalb des Dienstes anzeigt. Dazu haben wir zunächst die Aufgaben-ID mit docker service ps <service_name> ermittelt und dann docker service logs <task_id> verwendet. Schließlich haben wir gelernt, wie man verschiedene Optionen mit docker service logs verwendet, um die Log-Ausgabe zu filtern und zu formatieren, wie z. B. --follow zum Streamen der Logs, --since zum Anzeigen von Logs ab einem bestimmten Zeitpunkt und --tail zum Anzeigen der letzten N Zeilen der Logs.