A execução kubectl logs
me mostra o stderr / stdout de um contêiner Kubernetes.
Como posso obter o stderr / stdout agregado de um conjunto de pods, de preferência aqueles criados por um determinado controlador de replicação?
logging
kubernetes
google-kubernetes-engine
Torsten Bronger
fonte
fonte
Respostas:
Você pode usar rótulos
fonte
--all-namespaces
.-f
agora (a partir do Kubernetes 1.12+ /kubectl
1.12+). Também @Shubham - exibe as mensagens na ordem de recebimento, não há tags ou nada nas linhas de log. Isso é apenas para depuração rápida. Se você precisar de mais detalhes de registro, você precisará enviar seus registros para um sistema de registro central como EFK, SumoLogic, Datadog, etc.Eu criei um pequeno script bash chamado
kubetail
que torna isso possível. Por exemplo, para limitar todos os registros de pods chamados "app1", você pode fazer:Você pode encontrar o script aqui .
fonte
brew tap johanhaleby/kubetail && brew install kubetail --with-short-names
documentação detalhada:kt -h
Incrível!Você pode obter os registros de vários contêineres usando rótulos, conforme sugeriu Adrian Ng:
Caso você tenha um pod com vários contêineres, o comando acima falhará e você precisará especificar o nome do contêiner:
Nota: Se quiser ver quais rótulos estão disponíveis para você, o seguinte comando listará todos eles:
... onde a saída será semelhante a
Observe que alguns dos rótulos podem não ser compartilhados por outros pods - escolher "app" parece ser o mais fácil
fonte
Para desenvolver a resposta anterior, se você adicionar,
-f
pode limitar os registros.fonte
As soluções fornecidas anteriormente não são tão ideais. A própria equipe do kubernetes forneceu uma solução há algum tempo, chamada stern.
Também está combinando expressões regulares e segue e -f (segue) por padrão. Um bom benefício é que ele mostra o pod que gerou o log também.
Pegue o binário go para linux ou instale via brew para OSX.
https://kubernetes.io/blog/2016/10/tail-kubernetes-with-stern/
https://github.com/wercker/stern
fonte
Eu uso este script simples para obter um registro dos pods de uma implantação:
Síntese do roteiro
Uso: log_deployment.sh "nome da implantação".
O script mostrará o log de todos os pods que começam com esse "nome de implantação".
fonte
Uma opção é configurar o registro de cluster via Fluentd / ElasticSearch conforme descrito em https://kubernetes.io/docs/user-guide/logging/elasticsearch/ . Uma vez que os logs estão no ES, é fácil aplicar filtros no Kibana para visualizar os logs de certos contêineres.
fonte
Você pode obter ajuda
kubectl logs -h
e de acordo com as informações,-c
é o nome do contêiner e--tail
mostrará as linhas numéricas mais recentes, mas isso escolherá um pod da implantação, não todos os pods. Isso é algo que você deve ter em mente.Se você quiser mostrar os registros de todos os pods, pode usar
-l
e especificar uma etiqueta, mas ao mesmo tempo-f
não será usada.fonte
Você também pode fazer isso pelo nome do serviço.
Primeiro, tente encontrar o nome do serviço do respectivo pod que corresponde a vários pods do mesmo serviço.
kubectl get svc
.Em seguida, execute o seguinte comando para exibir os logs de cada contêiner.
fonte
Neste exemplo, você pode substituir o
<namespace>
e<app-name>
para obter os logs quando houver vários contêineres definidos em um pod.fonte
Se os pods forem nomeados de forma significativa, pode-se usar o simples Plain Old Bash:
Explicação: Faça um loop pelos pods em execução com o nome que contém "nodejs". Acompanhe o log de cada um deles em paralelo (e comercial único executado em segundo plano), garantindo que, se algum dos pods falhar, todo o comando será encerrado (e comercial duplo). Catar os fluxos de cada um dos comandos da cauda em um único fluxo. Eval é necessário para executar este comando construído dinamicamente.
fonte
Eu uso este comando.
fonte
Não tenho certeza se isso é uma coisa nova, mas com implantações é possível fazer assim:
fonte