Comment changer rapidement de contexte Kubernetes avec Kubectx et Kubens
Agence web » Actualités du digital » Comment surveiller les journaux de pod Kubernetes en temps réel avec Stern

Comment surveiller les journaux de pod Kubernetes en temps réel avec Stern

Stern est un outil open source qui facilite la diffusion en temps réel des journaux Kubernetes sur votre terminal. Vous pouvez utiliser Stern pour surveiller simultanément les journaux de plusieurs conteneurs, ce qui vous donne une vue combinée de l’activité à l’intérieur des pods.

Pourquoi utiliser Stern ?

Kubectl propose un log tailing intégré utilisant le kubectl logs commande. Bien que cela puisse bien fonctionner dans des cas simples, il ne prend pas en charge l’agrégation de journaux provenant de plusieurs sources avec un filtrage supplémentaire des résultats. Cela peut rendre son utilisation fastidieuse lorsque vous devez surveiller plusieurs pods ou que vous travaillez avec des données détaillées.

image de l'outil de visualisation de journaux Kubernetes, Stern

Stern offre une expérience de journalisation Kubernetes avec une prise en charge de premier ordre pour plusieurs pods et conteneurs. Chaque conteneur de votre flux de journaux est colorisé de manière unique afin que vous puissiez identifier rapidement les lignes qui défilent devant vous. Stern vous permet de sélectionner les pods à inclure à l’aide de requêtes complexes construites à partir d’expressions régulières.

Il existe également des fonctionnalités de filtrage intégrées pour sélectionner les journaux en fonction de l’horodatage, de l’état du conteneur et du sélecteur Kubernetes. Dans cet article, nous allons montrer comment utiliser toutes ces fonctionnalités pour accélérer l’accès à vos logs Kubernetes.

Commencer

Stern est distribué sous forme de binaires précompilés pour Windows, macOS et Linux sur la page des versions GitHub du projet. Sélectionnez le téléchargement approprié pour votre système et ajoutez le binaire à votre PATH. Les utilisateurs de macOS peuvent choisir d’installer via Homebrew à la place en exécutant brew install stern.

Stern utilise vos fichiers de configuration Kubernetes existants pour se connecter à votre cluster. Il sera chargé par défaut .kube/config. Utilisez le --kubeconfig marquer ou définir le KUEBCONFIG variable d’environnement si vous devez modifier ce chemin.

Les contextes Kubernetes sont également pris en charge de manière transparente. Ajouter le --context flag pour spécifier un contexte particulier dans votre fichier de configuration actuellement chargé. Vous pouvez également utiliser le --namespace flag pour sélectionner manuellement un espace de noms dans votre cluster. Stern ne suivra que les journaux des objets dans le contexte et l’espace de noms indiqués ; la --all-namespaces flag peut être utilisé pour diffuser les journaux de l’ensemble du cluster.

Utilisation de base

La syntaxe de base de Stern n’a besoin que d’un seul argument :

stern api-server

Indiquez un nom de pod pour diffuser les journaux provenant des conteneurs de ce pod. Cette utilisation dément cependant le véritable pouvoir de Stern; le nom du pod n’est qu’un exemple d’un requête de module.

Requêtes de pod

Stern utilise des requêtes Pod pour déterminer les flux de journaux à faire apparaître. Les requêtes sont des expressions régulières qui vous permettent d’assembler des sélections avancées de pods à l’aide d’une syntaxe standard.

La stern api-server exemple ci-dessus correspondra à n’importe quel pod contenant api-server en son nom. Si vous l’avez changé en stern .*-servervous verrez des journaux provenant de tous vos pods avec des noms se terminant par -server. Cela vous permet d’assembler rapidement des flux de journaux qui agrègent les lignes de plusieurs composants de votre pile.

Les requêtes n’affectent que Gousses qui sont sélectionnés. Stern inclut automatiquement les journaux de tous les conteneurs de ces pods. Vous pouvez contrôler cela à l’aide de l’option --container flag qui accepte une autre expression régulière définissant des noms de conteneurs acceptables à inclure.

stern .*-server --container .*-0

De même, vous pouvez exclure des conteneurs spécifiques à l’aide de la --exclude-container flag et une regex :

stern .*-server --exclude-container .*-helper

Les sélecteurs d’étiquettes sont également pris en charge. Met le --selector flag avec une expression régulière définissant les étiquettes pour faire correspondre les pods. Cette valeur par défaut est .*y compris tous les pods correspondant à la requête d’origine.

stern .*-server --selector app-version=v1.*

Filtrage basé sur l’état du conteneur

Par défaut, Stern n’affiche que les journaux des conteneurs en cours d’exécution. Utilisez le --container-state flag pour obtenir des lignes enregistrées par des conteneurs dans un état différent. Elle supporte running, waitinget terminated paramètres:

# Show logs from stopped containers
stern .*-server --container-state terminated

Filtrage des lignes de journal individuelles

Une fois que vous avez sélectionné le bon ensemble de pods et de conteneurs, vous pouvez passer au filtrage des données de journal réelles. Stern vous offre quelques options pour réduire le bruit et vous aider à vous concentrer sur des données significatives :

  • --since – Obtenez des journaux écrits dans un délai relatif lisible par l’homme, car 5m ou 1h.
  • --tail – Obtenez de nombreuses lignes de journal pour commencer. Par défaut à -1 (pas de limite), de sorte que votre terminal est rempli de tous les journaux préexistants avant le début de la sortie en direct.
  • --exclude – Exclure les lignes de journal qui correspondent à cette expression régulière. Vous pouvez utiliser cet indicateur plusieurs fois ; les conditions seront combinées sous la forme d’une clause « et » logique.

Voici un exemple de récupération d’une sélection limitée de journaux significatifs récents à partir d’un service Web :

stern web-server --since 1h --tail 100 --exclude .*GET /robots.txt.*

Utilisation de modèles de sortie

Stern présente normalement les lignes de journal au format suivant :

<namespace name> <pod name> <container name> <original log line>

Ce format est personnalisable à l’aide du --template drapeau. La syntaxe de modèle Go est prise en charge pour accéder au Namespace, PodName, ContainerNameet Message variables à l’intérieur de votre formateur :

stern .*-server --template 'Namespace: {{.Namespace}} Pod: {{.PodName}} - {{.Message}}'

Parfois, vous voudrez peut-être lire les lignes de journal sans aucune mise en forme supplémentaire. Utilisant --output raw affichera les messages simples tels quels, produisant une sortie similaire à Kubectl.

Une option alternative est --output json pour obtenir les données de journal dans un format plus adapté à la consommation programmatique. Il émettra un flux d’objets JSON avec message, namespace, podNameet containerName Propriétés.

Stern peut ajouter automatiquement des horodatages à chaque ligne de journal si vous incluez le --timestamps drapeau. Ceci est désactivé par défaut car de nombreux serveurs populaires ajoutent eux-mêmes ces informations avant qu’un message ne soit émis.

Enfin, Stern soutient une --color drapeau qui peut être utilisé pour forcer ou désactiver l’utilisation de la sortie colorisée. Il accepte auto, neverou always comme sa valeur. Cette dernière option est utile si le programme ne détecte pas correctement le TTY de votre shell.

Sommaire

Stern est un outil pratique de Kubernetes qui rend les journaux de pod plus utiles et accessibles. Vous pouvez facilement garder un œil sur plusieurs pods et conteneurs grâce à sa sortie colorisée, ses sélecteurs complexes et ses formats de sortie personnalisables.

Stern est conçu pour le log tailing en temps réel dans le cadre d’un processus de débogage ou de surveillance actif. Si vous recherchez une agrégation, une indexation et un stockage à long terme, il est généralement préférable d’intégrer un système d’observabilité dédié à votre cluster. Des plates-formes comme Prometheus et Elastic Stack fournissent des capacités d’inspection historique pour augmenter les flux de journaux en direct affichés par Stern.

★★★★★