kubernetes est un orchestrateur de conteneurs évolutif. D'un côté, il peut prendre en charge des systèmes d'entreprise complexes avec des milliers d'applications et d'hôtes, de l'autre, il est assez léger pour prendre en charge les appareils IoT.
En l'absence de service centralisé de journalisation et d'agrégation de log dans les clusters Kubernetes, kubectl logs est là pour survivre. La commande est utile pour un pod, mais si vous voulez déboguer votre application distribuée qui s'étend sur plusieurs pods, kubectl n'est peut-être pas la meilleure solution.
Avec stern, vous allez pouvoir lire les logs de plusieurs pods dans K8S.
Stern est un outil open-source riche en fonctionnalités pour lire les journaux produits par les pods dans Kubernetes. Il vous permet de suivre plusieurs pods sur votre cluster et plusieurs conteneurs sur chaque pod. Il vous permet de déboguer et de tracer des applications distribuées. Il montre les logs de l'application à travers plusieurs pods en temps réel.
Téléchargement de la dernière version de stern
# curl -LO https://github.com/wercker/stern/releases/download/1.11.0/stern_linux_amd64 % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 623 100 623 0 0 3068 0 --:--:-- --:--:-- --:--:-- 3068 100 20.7M 100 20.7M 0 0 8228k 0 0:00:02 0:00:02 --:--:-- 9573k
On rend le binaire exécutable et on le déplace dans “/usr/local/bin”
# chmod +x stern_linux_amd64 # mv stern_linux_amd64 /usr/local/bin/stern
On vérifie notre installation
# stern --version
stern version 1.11.0
Stern ouvre une connexion par pod avec l'API et kubelet pour récupérer le flux de journaux.
Oui, cela crée une certaine charge réseau sur Kubernetes, mais cela convient généralement aux clusters de petite ou moyenne taille. Il s'agit d'un outil léger qui ne nécessite aucune persistance. Il utilise un code de couleur pour distinguer les lignes des différents pods.
Il fonctionne mieux avec les journaux en direct et bien sûr il supporte le streaming -follow (-f).
Vous pouvez utiliser le drapeau -timestamp (-t) pour imprimer l'horodatage.
$ stern -t --selector=env=dev
Affichez les journaux en utilisant une requête de pod : Elle correspondra à tout pod contenant le terme web et à tous les conteneurs qu'il contient.
# stern web
S'il y a plusieurs conteneurs par pod, Stern peut récupérer les journaux d'un conteneur particulier en utilisant l'indicateur -container (-c).
La commande suivante montrera les journaux d'un conteneur particulier. Elle correspondra à tout pod contenant le terme web et uniquement au conteneur nginx.
# stern web -c nginx
Afficher les journaux d'il y a 15m avec l'horodatage.
# stern web -t --since 15m
| Option | Description |
|---|---|
| –exclude-container | Permet d’exclude des containers d’un pod contenant des sidecars |
| –container-state | Permet de filter en fonction de l’état du pod : running, waiting or terminated. Par défaut running. |
| –since | N’affiche que les dernières logs depuis le temps indiqué : 52, 2m, or 3h. |
| –exclude | Permet d’excludre certaines lignes. Vous pouvez en ajouter plusieurs. |
| –namespace | Change de namespace |
| –kubeconfig | Le fichier de config à prendre en compte |
| –all-namespaces | Affiche les logs de tous les namespaces |
| –tail n | N’affiche que les n lignes |
| –color | Force le jeu de couleur ou pas. auto, always, never |
| –output | Format de sortie : default, raw, json |
Stern est un utilitaire génial pour obtenir les journaux de plusieurs pods et conteneurs.
Il affiche les journaux de plusieurs applications en temps réel. Il peut donc être un outil utile pour déboguer et tracer les applications distribuées en temps réel. Il s'agit d'un outil léger sans aucune persistance.
La limitation avec Stern est que lorsqu'un nœud tombe en panne, ses journaux ne sont plus disponibles, puisqu'ils ne sont que dans ce nœud. C'est là que la journalisation centralisée joue un rôle important.