Table des matières

Introduction

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.

Qu'est-ce que Stern ?

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.

Installation

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

Lire les logs en utilisant stern

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

Options

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

Conclusion

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.

Annexe

https://github.com/wercker/stern/releases