L'exécution kubectl logs
me montre le stderr / stdout d'un conteneur Kubernetes.
Comment puis-je obtenir le stderr / stdout agrégé d'un ensemble de pods, de préférence ceux créés par un certain contrôleur de réplication?
logging
kubernetes
google-kubernetes-engine
Torsten Bronger
la source
la source
Réponses:
Vous pouvez utiliser des étiquettes
la source
--all-namespaces
.-f
maintenant (à partir de Kubernetes 1.12+ /kubectl
1.12+). Aussi @Shubham - il affiche les messages dans l'ordre reçu, il n'y a pas de balises ou quoi que ce soit sur les lignes de journal. C'est juste pour un débogage rapide. Si vous avez besoin de plus de détails sur les journaux, vous devrez envoyer vos journaux à un système de journalisation central tel que EFK, SumoLogic, Datadog, etc.J'ai créé un petit script bash appelé
kubetail
qui rend cela possible. Par exemple, pour suivre tous les journaux des pods nommés "app1", vous pouvez faire:Vous pouvez trouver le script ici .
la source
brew tap johanhaleby/kubetail && brew install kubetail --with-short-names
documentation détaillée:kt -h
génial!Vous pouvez obtenir les journaux de plusieurs conteneurs en utilisant des étiquettes comme Adrian Ng l'a suggéré:
Si vous avez un pod avec plusieurs conteneurs, la commande ci-dessus échouera et vous devrez spécifier le nom du conteneur:
Remarque: si vous souhaitez voir quelles étiquettes vous sont disponibles, la commande suivante les répertorie toutes:
... où la sortie ressemblera à quelque chose comme
Notez que certains des libellés peuvent ne pas être partagés par d'autres pods - choisir "application" semble être le plus simple
la source
Pour construire sur la réponse précédente si vous ajoutez,
-f
vous pouvez suivre les journaux.la source
Les solutions fournies précédemment ne sont pas optimales. L'équipe kubernetes elle-même a fourni une solution il y a quelque temps, appelée stern.
Il correspond également aux expressions régulières et fait par défaut tail et -f (follow). Un avantage appréciable est qu'il vous montre également le pod qui a généré le journal.
Prenez le go-binary pour Linux ou installez via brew pour OSX.
https://kubernetes.io/blog/2016/10/tail-kubernetes-with-stern/
https://github.com/wercker/stern
la source
J'utilise ce script simple pour obtenir un journal des pods d'un déploiement:
Contenu essentiel du scénario
Utilisation: log_deployment.sh "nom-de-déploiement".
Le script affichera alors le journal de tous les pods commençant par ce "nom de déploiement".
la source
Une option consiste à configurer la journalisation du cluster via Fluentd / ElasticSearch comme décrit à l' adresse https://kubernetes.io/docs/user-guide/logging/elasticsearch/ . Une fois les journaux dans ES, il est facile d'appliquer des filtres dans Kibana pour afficher les journaux de certains conteneurs.
la source
Vous pouvez obtenir de l'aide
kubectl logs -h
et selon les informations,-c
est le nom du conteneur et--tail
affichera les dernières lignes numériques , mais cela choisira un pod du déploiement, pas tous les pods. C'est quelque chose que vous devez garder à l'esprit.Si vous souhaitez afficher les journaux de tous les pods, vous pouvez utiliser
-l
et spécifier une étiquette, mais en même temps,-f
elle ne sera pas utilisée.la source
Vous pouvez également le faire par nom de service.
Tout d'abord, essayez de trouver le nom de service du pod respectif qui correspond à plusieurs pods du même service.
kubectl get svc
.Ensuite, exécutez la commande suivante pour afficher les journaux de chaque conteneur.
la source
Dans cet exemple, vous pouvez remplacer
<namespace>
et<app-name>
pour obtenir les journaux lorsque plusieurs conteneurs sont définis dans un pod.la source
Si les pods sont nommés de manière significative, on peut utiliser un simple Plain Old Bash:
Explication: Parcourez les pods en cours d'exécution dont le nom contient "nodejs". Complétez le journal de chacun d'eux en parallèle (une seule esperluette s'exécute en arrière-plan) en vous assurant que si l'un des pods échoue, la commande entière se termine (double esperluette). Transformez les flux de chacune des commandes tail en un flux unique. Eval est nécessaire pour exécuter cette commande générée dynamiquement.
la source
J'utilise cette commande.
la source
Je ne sais pas si c'est une nouveauté, mais avec les déploiements, il est possible de le faire comme ceci:
la source