Laufen kubectl logs
zeigt mir das stderr / stdout eines Kubernetes-Containers.
Wie kann ich das aggregierte stderr / stdout einer Reihe von Pods abrufen, vorzugsweise derjenigen, die von einem bestimmten Replikationscontroller erstellt wurden?
logging
kubernetes
google-kubernetes-engine
Torsten Bronger
quelle
quelle
Antworten:
Sie können Etiketten verwenden
quelle
--all-namespaces
.-f
jetzt funktioniert (ab Kubernetes 1.12+ /kubectl
1.12+). Auch @Shubham - es zeigt die Nachrichten in der Reihenfolge an, in der sie empfangen wurden, es gibt keine Tags oder irgendetwas in den Protokollzeilen. Dies dient nur zum schnellen Debuggen. Wenn Sie mehr Protokolldetails benötigen, müssen Sie Ihre Protokolle an ein zentrales Protokollierungssystem wie EFK, SumoLogic, Datadog usw.Ich habe ein kleines Bash-Skript namens erstellt
kubetail
, das dies ermöglicht. Um beispielsweise alle Protokolle für Pods mit dem Namen "app1" zu beenden, können Sie Folgendes tun:Das Skript finden Sie hier .
quelle
brew tap johanhaleby/kubetail && brew install kubetail --with-short-names
Detaillierte Dokumentation:kt -h
Super!Sie können die Protokolle aus mehreren Containern mithilfe von Etiketten abrufen, wie von Adrian Ng vorgeschlagen:
Wenn Sie einen Pod mit mehreren Containern haben, schlägt der obige Befehl fehl und Sie müssen den Containernamen angeben:
Hinweis: Wenn Sie sehen möchten, welche Beschriftungen Ihnen zur Verfügung stehen, werden sie mit dem folgenden Befehl alle aufgelistet:
... wo die Ausgabe ungefähr so aussehen wird
Beachten Sie, dass einige der Labels möglicherweise nicht von anderen Pods geteilt werden. Die Auswahl von "App" scheint die einfachste zu sein
quelle
Um auf der vorherigen Antwort aufzubauen
-f
, können Sie die Protokolle beenden.quelle
Zuvor bereitgestellte Lösungen sind nicht so optimal. Das kubernetes-Team selbst hat vor einiger Zeit eine Lösung namens stern bereitgestellt.
Es stimmt auch mit regulären Ausdrücken überein und führt standardmäßig tail und -f (follow) aus. Ein schöner Vorteil ist, dass es Ihnen auch den Pod zeigt, der das Protokoll generiert hat.
Holen Sie sich die Go-Binärdatei für Linux oder installieren Sie sie über Brew für OSX.
https://kubernetes.io/blog/2016/10/tail-kubernetes-with-stern/
https://github.com/wercker/stern
quelle
Ich verwende dieses einfache Skript, um ein Protokoll aus den Pods einer Bereitstellung abzurufen:
Kern des Drehbuchs
Verwendung: log_deployment.sh "Bereitstellungsname".
Das Skript zeigt dann das Protokoll aller Pods an, die mit diesem "Bereitstellungsnamen" beginnen.
quelle
Eine Möglichkeit besteht darin, die Clusterprotokollierung über Fluentd / ElasticSearch einzurichten, wie unter https://kubernetes.io/docs/user-guide/logging/elasticsearch/ beschrieben . Sobald sich Protokolle in ES befinden, können Filter in Kibana einfach angewendet werden, um Protokolle aus bestimmten Containern anzuzeigen.
quelle
Sie können Hilfe von
kubectl logs -h
und gemäß den Informationen erhalten,-c
ist der Containername und--tail
zeigt die neuesten Zahlenlinien an. Dabei wird jedoch ein Pod der Bereitstellung ausgewählt, nicht alle Pods. Dies ist etwas, das Sie beachten müssen.Wenn Sie Protokolle aller Pods
-l
anzeigen möchten, können Sie eine Beschriftung verwenden und angeben, diese wird jedoch gleichzeitig-f
nicht verwendet.quelle
Sie können dies auch anhand des Dienstnamens tun.
Versuchen Sie zunächst, den Dienstnamen des jeweiligen Pods zu ermitteln, der mehreren Pods desselben Dienstes entspricht.
kubectl get svc
.Führen Sie als Nächstes den folgenden Befehl aus, um Protokolle von jedem Container anzuzeigen.
quelle
In diesem Beispiel können Sie das
<namespace>
und ersetzen<app-name>
, um die Protokolle abzurufen, wenn in einem Pod mehrere Container definiert sind.quelle
Wenn die Pods sinnvoll benannt sind, könnte man einfachen Plain Old Bash verwenden:
Erläuterung: Durchlaufen Sie laufende Pods mit dem Namen "nodejs". Tail das Protokoll für jeden von ihnen parallel (einzelnes kaufmännisches Und läuft im Hintergrund), um sicherzustellen, dass der gesamte Befehl beendet wird, wenn eines der Pods fehlschlägt (doppeltes kaufmännisches Und). Ordnen Sie die Streams von jedem der Tail-Befehle einem eindeutigen Stream zu. Eval wird benötigt, um diesen dynamisch erstellten Befehl auszuführen.
quelle
Ich benutze diesen Befehl.
quelle
Ich bin mir nicht sicher, ob dies eine neue Sache ist, aber mit Bereitstellungen ist es möglich, dies folgendermaßen zu tun:
quelle