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

0
143

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 une fonction de journalisation intégrée à l'aide de la commande kubectl logs. 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.

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 vous montrer comment utiliser toutes ces fonctionnalités pour accélérer l'accès à vos journaux Kubernetes.

Premiers pas

Stern est distribué sous forme de fichiers 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 chargera par défaut .kube/config. Utilisez l'indicateur –kubeconfig ou définissez la variable d'environnement KUEBCONFIG si vous devez modifier ce chemin.

Les contextes Kubernetes sont également pris en charge de manière transparente. Ajoutez l'indicateur –context pour spécifier un contexte particulier dans votre fichier de configuration actuellement chargé. Vous pouvez également utiliser l'indicateur –namespace 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 ; l'indicateur –all-namespaces 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 de un argument :

stern api-server

Fournissez 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 de requête de pod.

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 afin que vous puissiez assembler des sélections avancées de pods en utilisant une syntaxe standard.

L'exemple sévère api-server ci-dessus correspondra à n'importe quel pod contenant api-server dans son nom. Si vous le changiez en stern .*-server, vous verriez 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 regroupent les lignes de plusieurs composants de votre pile.

Les requêtes n'affectent que les pods sélectionnés. Stern inclut automatiquement les journaux de tous les conteneurs de ces pods. Vous pouvez contrôler cela à l'aide de l'indicateur facultatif –container qui accepte une autre expression régulière définissant des noms de conteneur 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 expression régulière :

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

Les sélecteurs d'étiquettes sont également pris en charge. Définissez l'indicateur –selector avec une expression régulière définissant les étiquettes pour faire correspondre les pods. La 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

Stern affiche par défaut uniquement les journaux des conteneurs en cours d'exécution. Utilisez l'indicateur –container-state pour obtenir des lignes enregistrées par des conteneurs dans un état différent. Il prend en charge les paramètres d'exécution, d'attente et terminé :

# Afficher les journaux des conteneurs arrêtés stern .*-server –container-state terminated

Filtrer les 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 propose quelques options pour réduire le bruit et vous aider à vous concentrer sur des données significatives :

  • –depuis – Obtenez des journaux écrits dans un délai relatif lisible par l'homme, puisque 5 m ou 1 h.
  • –tail– Obtenez beaucoup de ces lignes de journal pour commencer. La valeur par défaut est -1 (aucune limite), de sorte que votre terminal est rempli de tous les journaux préexistants avant le début de la sortie en direct.
  • –exclude – Excluez les lignes de journal qui correspondent à cette expression régulière. Vous pouvez utiliser cet indicateur plusieurs fois ; les conditions seront combinées comme un “et” clause.

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 des modèles de sortie

Stern présente normalement le journal lignes au format suivant :

<nom de l'espace de noms> <nom du module> <nom du conteneur> <ligne de journal d'origine>

Ce format est personnalisable à l'aide de l'indicateur –template. La syntaxe de modèle Go est prise en charge pour accéder aux variables Namespace, PodName, ContainerName et Message dans votre formateur :

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

Parfois, vous voudrez peut-être lire les lignes de journal sans aucun formatage supplémentaire. L'utilisation de –output raw affichera les messages simples tels quels, produisant une sortie similaire à Kubectl.

Une option alternative est –output json pour obtenir les données du journal dans un format plus adapté à consommation programmatique. Il émettra un flux d'objets JSON avec les propriétés message, namespace, podName et containerName.

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

Enfin, Stern prend en charge un indicateur –color qui peut être utilisé pour forcer ou désactiver l'utilisation de la sortie colorisée. Il accepte auto, jamais ou toujours comme valeur. Cette dernière option est utile si le programme ne détecte pas correctement le TTY de votre shell.

Résumé

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 la journalisation en temps réel dans le cadre d'un débogage ou d'une surveillance active traiter. 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.

LIRE LA SUITE

  • › Jusqu'où peut aller une voiture électrique avec une seule charge ?
  • › Les 10 meilleurs films originaux de Netflix en 2022
  • › Examen de PrivadoVPN : perturber le marché ?
  • &rsaquo ; Ces gadgets bannissent les moustiques
  • &rsaquo ; "Atari était très, très dur" Nolan Bushnell sur Atari, 50 ans plus tard
  • &rsaquo ; Combien coûte la recharge d'une batterie ?