kubectl logs - kontinuierlich

90
kubectl logs <pod-id>

Erhält die neuesten Protokolle aus meiner Bereitstellung. Ich arbeite an einem Fehler und bin daran interessiert, die Protokolle zur Laufzeit zu kennen. Wie kann ich einen kontinuierlichen Protokollstrom abrufen?

edit: Frage am Ende korrigiert.

NPR
quelle

Antworten:

158
kubectl logs -f <pod-id>

Sie können die -fFlagge verwenden:

-f, --follow=false: Specify if the logs should be streamed.

https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#logs

Yu-Ju Hong
quelle
Was ist mit Protokollen für den Service oder etwas anderem als den Pods?
Alexander Mills
2
Dies funktioniert für kurze Zeit, dann werden die Protokolle gestoppt. Ich muss Strg-C drücken, um kubectl zu verlassen, und sie dann neu starten. Dies zeigt mehr Protokolle nach, stoppt aber wieder. Weiß jemand, warum die Protokolle an zufälligen Stellen anhalten, wenn sie offensichtlich noch vom Pod generiert werden?
Pferrel
19

kubectl logs --help wird dich führen:

Beispiel:

# Begin streaming the logs of the ruby container in pod web-1
kubectl logs -f -c ruby web-1

Flaggen:

-f, --follow[=false]: Specify if the logs should be streamed.

Sie können auch hinzufügen --since=10moder so von dieser relativen Zeit vor beginnen.

Manojlds
quelle
Kann sich mehr als ein Behälter in einer Kapsel befinden?
Alexander Mills
@ AlexanderMills ja, das ist das "Beiwagen" -Muster
Grokpot
4

Ich musste auf die Protokolle eines lang laufenden Pods zugreifen und -fbegann vor Tagen mit dem Streaming von Protokollen. Es hätte Stunden gedauert, bis ich dort ankam, wo ich sie anzeigen musste (nur in den letzten paar Minuten oder so).

Es gibt eine --since=10mFlagge, aber das schien bei mir nicht zu funktionieren.

Was Wunder tat, war --tail=100, wo 100die Anzahl der zuletzt anzuzeigenden Zeilen ist.

Arshbot
quelle
4

Warten Sie, bis sich die Würfel drehen, und fahren Sie dann fort ...

k8s_pod=some_pod
kubectl get pods -w $k8s_pod | while read LOGLINE
do
   [[ "${LOGLINE}" == *"Running"* ]] && pkill -P $$ kubectl
done

Schwanzprotokolle

for line in $(kubectl get pods | grep $k8s_pod | awk '{print $1}'); do
    kubectl logs -f $line | tee logfile
done

nach Erfolgsindikator suchen

tail logfile | grep successful! 
RESULT=$?
exit $RESULT
ddtraveller
quelle
'erfolgreich!' Abhängig von Ihrem Pod müssen Sie möglicherweise Änderungen vornehmen.
ddtraveller
Ich habe die ersten beiden Teile von mehreren anderen Stackoverflow-Posts übernommen, daher kann ich diese nicht vollständig würdigen, aber die Combo, von der ich hoffe, dass sie anderen gut dient ...
ddtraveller
4

Wenn Sie den Protokollstrom von einer Multi-Pod-App abrufen möchten , können Sie kubetail verwenden . Beispiel:

kubectl get pods

NAME                   READY     STATUS    RESTARTS   AGE
app2-v31-9pbpn         1/1       Running   0          1d
app2-v31-q74wg         1/1       Running   0          1d

kubetail app2

Mit diesem Befehl wird kubetail Tailing die Protokolle von pod app2-v31-9pbpn und app2-v31-q74wg

db80
quelle
1

Versuche dies,

Schwanzprotokolle von Hülsen

kubectl --tail <"Anzahl der Zeilen"> protokolliert <"pod_name">

Beispiel :

kubectl --tail 100 logs app_pod

Saurabh Bishnoi
quelle
0

kubctl logs -f = true [Pod-Name] -c [Containername]

Wenn Sie nur einen einzelnen Container über dem Pod haben, ist der Containername nicht erforderlich. Andernfalls verwenden Sie den Containernamen mit der Option -c. -f dh follow ist standardmäßig false. Wenn Sie es nicht auf true setzen, erhalten Sie eine Momentaufnahme Ihrer Containerprotokolle.

Jaraws
quelle
0

Sie können Protokollen mit -f folgen

kubectl logs -f <pod_name>

Wenn Protokolle gestoppt werden, stürzt der Pod höchstwahrscheinlich ab. Können Sie überprüfen, ob der Pod tatsächlich ausgeführt wird oder nicht? Überprüfen Sie das Alter vielleicht oder:

kubectl describe deploy/ds <deploy_or_ds_name>?

Sie können auch die Protokolle auf Container im Pod überprüfen, in denen sich mehrere Container befinden

kubectl -f <pod_name> -c <container_name> 
Abhi Gadroo
quelle