logs do kubectl - continuamente

109
kubectl logs <pod-id>

obtém os logs mais recentes da minha implantação - Estou trabalhando em um bug e interessado em saber os logs em tempo de execução - Como posso obter um fluxo contínuo de logs?

editar: questão corrigida no final.

NPR
fonte

Respostas:

188
kubectl logs -f <pod-id>

Você pode usar a -fbandeira:

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

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

Yu-Ju Hong
fonte
que tal logs para serviço ou qualquer coisa diferente de pods?
Alexander Mills
4
isso funciona por um curto período de tempo e os logs param. Preciso ctrl-c para sair do kubectl e reinicie-os. Isso mostra mais logs depois, mas para novamente. Alguém sabe por que os logs param em pontos aleatórios quando obviamente ainda estão sendo gerados pelo pod?
pferrel
21

kubectl logs --help irá guiá-lo:

Exemplo:

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

Bandeiras:

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

Você também pode adicionar --since=10mou começar a partir desse tempo relativo atrás.

manojlds
fonte
pode haver mais de um contêiner em um pod?
Alexander Mills
@AlexanderMills sim, este é o padrão "sidecar"
grokpot
8

Eu precisava acessar os logs de um pod de longa execução e -fcomecei a transmitir os logs dias atrás, o que levaria horas para chegar onde eu precisava ver (apenas os últimos minutos ou mais).

Existe uma --since=10mbandeira, mas isso não parece funcionar para mim.

O que fez maravilhas foi --tail=100onde 100está o número de linhas recentes a serem exibidas.

arshbot
fonte
4

espere os kubes girarem e siga em frente ...

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

toras da cauda

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

procure o indicador de sucesso

tail logfile | grep successful! 
RESULT=$?
exit $RESULT
ddtraveller
fonte
'bem sucedido!' pode ser necessário alterar dependendo do seu pod.
ddtraveller
Peguei essas duas primeiras partes de vários outros posts stackoverflow, então não posso levar o crédito por eles inteiramente, mas o combo espero que sirva bem aos outros ...
ddtraveller
4

Se você deseja obter o fluxo de registros de um aplicativo multi-pod, pode usar o kubetail , por exemplo:

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

Com esse comando, kubetail está seguindo os registros de pod app2-v31-9pbpn e app2-v31-q74wg

db80
fonte
2

Você pode seguir os registros com -f

kubectl logs -f <pod_name>

Se os registros forem interrompidos, provavelmente o pod está travando, você pode verificar se o pod está realmente em execução ou não? Verifique a idade talvez ou:

kubectl describe deploy/ds <deploy_or_ds_name>?

Ou você também pode verificar os registros do contêiner dentro do pod, pois há vários contêineres

kubectl logs -f <pod_name> -c <container_name> 
Abhi Gadroo
fonte
1

Tente isto,

registros finais de pods

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

Exemplo :

kubectl --tail 100 logs app_pod

Saurabh Bishnoi
fonte
0

kubctl logs -f = true [pod-name] -c [container-name]

Se você tiver apenas um único contêiner sobre o pod, o nome do contêiner não será necessário, caso contrário, use o nome do contêiner com a opção -c. -f ie follow é falso por padrão. Se você não definir como verdadeiro, obterá um instantâneo dos logs do seu contêiner.

Jaraws
fonte