So zeigen Sie Kubernetes-Pod-Protokolle mit Kubectl an

0
233

Das Anzeigen von Pod-Protokollen ist oft der erste Schritt bei der Diagnose eines Problems mit Ihrem Cluster& #8217;s Arbeitslasten. So verwenden Sie Kubectl zum Livestreamen von Protokollen auf Ihr Terminal, damit Sie die Ausgabe Ihrer Anwendung überprüfen können.

Erste Schritte

Make Stellen Sie sicher, dass Kubectl installiert und mit Ihrem Cluster verbunden ist. Sie können eine Kubeconfig-Datei angeben, indem Sie die Umgebungsvariable KUBECONFIG in Ihrer Shell festlegen:

export KUBECONFIG=~/.kube/my-cluster.yaml

Verwenden Sie dann Kubectl, um Ihre Pods aufzulisten:

kubectl get pods

Denken Sie daran, das Flag –namespace hinzuzufügen, wenn Ihre Pods außerhalb des Standard-Namespaces leben:

kubectl –namespace my-namespace get pods

Das Hinzufügen eines temporären Alias ​​zu Ihrer Shell ist eine gute Möglichkeit, dies zu verkürzen Dieser Schritt hilft Ihnen, mehrere Befehle für denselben Namespace auszuführen:

alias k=”kubectl –namespace my-namespace” k get pods

Auf Pod-Protokolle zugreifen

Mit dem Befehl kubectl logs können Sie die von einem benannten . erstellten Protokolle überprüfen Pod:

kubectl logs pod-name Advertisement

Die vorhandenen Logs des Pods werden an Ihr Terminal ausgegeben. Wenn der Pod aus mehr als einem Container besteht, müssen Sie auch den Namen des zu untersuchenden Containers angeben:

kubectl logs pod-name container-name

Alternativ setzen Sie das Flag –all-containers so, dass es Protokollzeilen einschließt, die von einem von die Container im Pod. Beachten Sie, dass Sie eine ausführliche und sich wiederholende Ausgabe sehen können, wenn dieses Flag für einen beschäftigten Pod verwendet wird:

kubectl logs pod-name –all-containers

Sie können die Protokolle auch von einer Reihe von Pods mit einem bestimmten abrufen Etikett. Auf diese Weise können Sie Logs von verschiedenen Pods zusammenfassen, vorausgesetzt, sie haben alle das gleiche Label:

kubectl logs -l my-label=my-value –all-containers

Kontinuierliches Streaming von Logs

Der plain logs-Befehl gibt die aktuell gespeicherten Pod-Logs aus und dann Ausgänge. Fügen Sie dem Befehl das Flag -f (–follow) hinzu, um den Protokollen zu folgen und sie live auf Ihr Terminal zu streamen.

Kubectl gibt jede neue Protokollzeile in Ihr Terminal aus, bis Sie den Befehl mit Strg+ . beenden C. Dies entspricht der Verwendung von tail -f mit einer lokalen Protokolldatei in einer nicht containerisierten Umgebung.

Ältere Protokolle anzeigen

kubectl-Protokolle enthalten keine Protokollzeilen, die von alten Containern erstellt wurden, die einst Pod-Mitglieder waren, aber seitdem ersetzt wurden. Auf diese Protokolle kann durch Hinzufügen des Flags -p (–vorher) zugegriffen werden.

Werbung

Kubectl zeigt dann das gesamte gespeicherte Protokoll für den Pod an, einschließlich der Zeilen, die von Containern ausgegeben wurden, die wurden inzwischen beendet.

Neueste Protokolle abrufen

Manchmal müssen Sie nicht den gesamten Log-Stream sehen. Kubectl unterstützt ein –since-Flag, das Protokollzeilen anzeigt, die nach einer bestimmten Zeit ausgegeben werden:

kubectl logs pod-name –since=2h

Dieser Befehl zeigt die Protokollausgabe von pod-name an, die innerhalb der letzten zwei Stunden. Eine andere Variante, –since-time, unterstützt eine RFC3339-konforme Zeitstempelzeichenfolge anstelle des oben gezeigten relativen Zeitausdrucks.

Das Flag –tail ist eine weitere Option zum Verdichten von Protokollen. Dies begrenzt die Anzahl der angezeigten Zeilen und vermeidet ein vollständiges Terminal, wenn Sie nur die neueste Ausgabe sehen müssen:

# Zeigt die letzten 10 Zeilen des Protokolls an kubectl logs pod-name –tail=10

Kubectl zeigt standardmäßig keine Zeilenzeitstempel an, da viele Anwendungen sie bereits in ihre Protokollausgabe aufnehmen. Fügen Sie das Flag –timestamps hinzu, damit Kubectl Zeitstempel am Anfang von Zeilen hinzufügt, wenn Ihre Workload sie nicht bereitstellt.

Sie können die überprüften Pod- und Containernamen auch den Protokollzeilen voranstellen. Diese Funktionalität wird mit dem Flag –prefix aktiviert. Es kann mit –timestamps kombiniert werden, um die Zeit anzuzeigen, zu der jede Zeile erstellt wurde und aus welcher Quelle sie stammt.

Zugriff auf Protokolle von anderen Ressourcen Typen

kubectl logs arbeitet mit Bereitstellungs- und Jobressourcen zusätzlich zu Pods:

kubectl logs job/my-job kubectl logs deploy/my-deployment

Sie erhalten die Protokolle aus dem ersten Container innerhalb des Jobs oder der Bereitstellung. Verwenden Sie das Flag –all-containers, um Protokolle anzuzeigen, die von einem der übereinstimmenden Container erstellt wurden. Sie können alle oben beschriebenen Flags verwenden, unabhängig davon, ob Sie einen Pod, eine Bereitstellung oder einen Job anzeigen.

Erweiterte Protokollverwaltung

< p>Kubectl bietet keine Möglichkeit zum Filtern, Durchsuchen oder Transformieren Ihrer Protokolle. Es ist am besten, die kubectl-Protokollausgabe zu diesem Zweck in etablierte Terminal-Tools wie awk, grep oder sed zu leiten.

kubectl loggt meinen Pod | grep search-expression

Verwenden Sie auf ähnliche Weise die vorhandenen Umleitungsfunktionen in Ihrer Shell, um Protokolle in einer Datei zu speichern:

kubectl logs my-pod > my-pod-logs.txt

Zusammenfassung

Mit Kubectl können Sie auf Logs von Ihren Ressourcen entweder auf Containerbasis oder zusammengefasst zugreifen. Sie können eine Momentaufnahme der aktuell gesammelten Protokolle anzeigen, kontinuierlich neue Zeilen an Ihr Terminal streamen und auf historische Zeilen zugreifen, die von beendeten Containern ausgegeben wurden.

Der Befehl bietet einige eingeschränkte Anpassungsoptionen, einschließlich einer Zeilenzahlbegrenzung und eines vereinfachten Datums Filterung. Wenn eine anspruchsvollere Analyse erforderlich ist, leiten Sie die Ausgabe an Unix-Terminalbefehle weiter, um Ihre Protokolle schnell zu analysieren und die Ursachen von Fehlern in Ihren Anwendungen zu finden.

Werbung

Kubectl sammelt Protokolle aus den Standardausgabe- und Fehlerstreams Ihrer Container. Es ist wichtig sicherzustellen, dass Sie die Ausgabe in diese Streams korrekt schreiben, da ein falsch konfigurierter Container beim Ausführen von kubectl-Protokollen zu einer leeren Ausgabe führt.