dzienniki kubectl - w sposób ciągły

109
kubectl logs <pod-id>

pobiera najnowsze dzienniki z mojego wdrożenia - pracuję nad błędem i jestem zainteresowany poznaniem dzienników w czasie wykonywania - jak mogę uzyskać ciągły strumień dzienników?

edycja: poprawione pytanie na końcu.

npr
źródło

Odpowiedzi:

188
kubectl logs -f <pod-id>

Możesz użyć -fflagi:

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

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

Yu-Ju Hong
źródło
a co z logami serwisowymi lub czymkolwiek innym niż strąki?
Alexander Mills
4
działa to przez krótki czas, a następnie dzienniki się zatrzymują. Muszę ctrl-c wyjść z kubectl, a następnie ponownie je uruchomić. To pokazuje więcej dzienników po, ale ponownie się zatrzymuje. Czy ktoś wie, dlaczego dzienniki zatrzymują się w przypadkowych miejscach, skoro nadal są generowane przez kapsułę?
pferrel
21

kubectl logs --help poprowadzi Cię:

Przykład:

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

Flagi:

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

Możesz także dodać --since=10mlub tak zacząć od tego względnego czasu temu.

manojlds
źródło
czy w kapsule może znajdować się więcej niż jeden pojemnik?
Alexander Mills
@AlexanderMills tak, to jest wzór „
wózka
8

Musiałem uzyskać dostęp do dzienników długo działającego kapsuły i -fzacząłem przesyłać strumieniowo dzienniki sprzed kilku dni, co zajęłoby godziny, aby dotrzeć do miejsca, w którym potrzebowałem wyświetlić (zaledwie kilka ostatnich minut).

Jest --since=10mflaga, ale wydawało mi się, że to nie działa.

Dziwne było to --tail=100, gdzie 100jest liczba ostatnich wierszy do wyświetlenia.

arszbot
źródło
4

poczekaj, aż kubes zakręci kapsułą i przejdź dalej ...

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

kłody ogonowe

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

poszukaj wskaźnika sukcesu

tail logfile | grep successful! 
RESULT=$?
exit $RESULT
ddtraveller
źródło
'odnoszący sukcesy!' może wymagać zmiany w zależności od kapsuły.
ddtraveller
Wziąłem te dwie pierwsze części z kilku innych postów stackoverflow, więc nie mogę przypisać im zasługi, ale mam nadzieję, że kombinacja będzie dobrze służyć innym ...
ddtraveller
4

Jeśli chcesz uzyskać strumień logów z aplikacji multi pod, możesz użyć kubetail , na przykład:

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

Za pomocą tego polecenia kubetail śledzi dzienniki z aplikacji pod app2-v31-9pbpn i app2-v31-q74wg

db80
źródło
2

Możesz śledzić dzienniki za pomocą -f

kubectl logs -f <pod_name>

Jeśli logi są zatrzymywane, najprawdopodobniej kapsuła ulega awarii, czy możesz sprawdzić, czy zasobnik faktycznie działa, czy nie? Sprawdź wiek może lub:

kubectl describe deploy/ds <deploy_or_ds_name>?

Możesz też sprawdzić dzienniki dotyczące kontenera wewnątrz kapsuły, ponieważ istnieje wiele kontenerów

kubectl logs -f <pod_name> -c <container_name> 
Abhi Gadroo
źródło
1

Spróbuj tego,

kłody ogonowe ze strąków

kubectl --tail <"no of lines"> loguje <"pod_name">

Przykład :

kubectl --tail 100 logów app_pod

Saurabh Bishnoi
źródło
0

kubctl logs -f = true [nazwa-poda] -c [nazwa-kontenera]

Jeśli masz tylko jeden kontener nad kapsułą, nazwa kontenera nie jest konieczna, w przeciwnym razie użyj nazwy kontenera z opcją -c. -f ie follow jest domyślnie fałszywe. Jeśli nie ustawisz tego na true, otrzymasz migawkę dzienników kontenerów.

Jaraws
źródło