Découvrez comment collecter, traiter et analyser les journaux de conteneurs Kubernetes avec SLS et LoongCollector. Cette rubrique couvre les concepts fondamentaux, les modes de déploiement, les flux de collecte et les bonnes pratiques.
Dans la console ACK, la vue Pod logs affiche au maximum 500 entrées de journal. Pour obtenir l'intégralité des journaux de vos conteneurs, utilisez SLS afin de collecter les journaux des conteneurs du cluster Kubernetes. Vous pourrez ainsi conserver et interroger toutes les données de journalisation. Pour les instructions de configuration, consultez Collecter les journaux de conteneurs d'un cluster Kubernetes à l'aide d'une CRD (sortie standard/fichier).
Fonctionnalités
SLS offre les capacités suivantes pour la collecte des journaux de conteneurs Kubernetes :
-
Prise en charge multi-source
Collecte de divers types de journaux : sortie standard (stdout), erreur standard (stderr) et fichiers texte de conteneurs.
-
Filtrage granulaire des conteneurs
Incluez ou excluez des conteneurs selon le nom du namespace, le nom du pod, le nom du conteneur, les labels du conteneur ou les variables d'environnement.
-
Traitement avancé des journaux
Collectez des journaux multilignes : fusionnez les entrées multilignes, telles que les traces de pile Java, en événements de journal uniques.
Prétraitez les journaux : éliminez les données invalides via un plugin de filtrage des données, ou masquez et structurez les données sensibles grâce aux plugins de masquage et de chiffrement des données et aux plugins de traitement des champs.
Analysez les champs : structurez les journaux bruts avant stockage à l'aide des plugins d'analyse des données.
-
Association intelligente des métadonnées
Associez automatiquement les métadonnées aux journaux des conteneurs, notamment le nom du conteneur, l'image, le pod, le namespace et les variables d'environnement.
-
Fiabilité
Un mécanisme de checkpoint enregistre la position actuelle de la collecte pour garantir l'intégrité des journaux.
Gérez les journaux lors de l'arrêt d'un conteneur grâce à différentes stratégies adaptées aux divers environnements d'exécution de conteneurs.
Limites
-
Environnement d'exécution des conteneurs : seuls Docker et Containerd sont pris en charge.
Docker :
Nécessite des permissions d'accès à docker.sock.
Pour la collecte de la sortie standard, seul le driver de journalisation
json-fileest pris en charge.Seuls les drivers de stockage
overlayetoverlay2sont pris en charge. Pour les autres drivers de stockage, montez le répertoire des journaux via un volume.
Containerd :
Nécessite des permissions d'accès à containerd.sock.
-
Limite des journaux multilignes :
Par défaut, la dernière ligne collectée reste en mémoire tampon pendant 3 secondes afin d'éviter que les journaux multilignes ne soient scindés en raison de retards de sortie. Ajustez ce comportement avec le paramètre
BeginLineTimeoutMs(minimum : 1 000 ms). -
Sortie standard :
La taille maximale par défaut d'une entrée de journal est de 512 Ko (524 288 octets), avec une limite supérieure de 8 Mo (8 388 608 octets). Pour augmenter cette limite, définissez la variable d'environnement
max_read_buffer_sizesur le conteneur LoongCollector.ImportantN'activez pas simultanément la collecte de stdout et stderr. Cela risquerait d'entraîner une imbrication incorrecte des entrées de journal.
Vue d'ensemble du flux de collecte
Préparer la source de journaux : identifiez les journaux de sortie standard ou les fichiers texte à collecter.
Installer LoongCollector : déployez le collecteur pour transmettre les journaux à SLS.
Configurer les règles de collecte : définissez les règles de collecte des journaux et les plugins d'analyse.
Interroger et analyser les journaux : surveillez vos services à l'aide des données de journalisation collectées.
Processus clés
Exigences relatives à la source de journaux et au point de montage
Pour les journaux de sortie standard, LoongCollector découvre automatiquement le chemin du fichier de journal en fonction des métadonnées du conteneur.
-
Pour les fichiers texte de conteneurs, LoongCollector monte par défaut le répertoire racine de l'hôte sur
/logtail_host. Un montage manuel n'est généralement pas nécessaire. Si vous utilisez un point de montage personnalisé, assurez-vous qu'il respecte les exigences suivantes :
Installer le collecteur
LoongCollector prend en charge deux modes de déploiement :
Mode de déploiement : DaemonSet ou sidecar.
-
Mode DaemonSet : déploie automatiquement un agent LoongCollector sur chaque nœud. Ce mode convient à la plupart des scénarios.
-
En mode DaemonSet, la méthode de déploiement dépend du type de cluster et de la relation avec le compte SLS.
Pour les clusters Container Service for Kubernetes (ACK), le composant loongcollector-ds est pré-intégré. Activez-le dans la console ACK pour terminer l'installation. Par défaut, les journaux sont stockés dans le projet SLS du compte propriétaire du cluster. Installation et configuration.
Pour collecter les journaux d'un cluster ACK vers un projet SLS appartenant à un autre compte Alibaba Cloud, installez manuellement LoongCollector et configurez-le avec l'ID ou l'AccessKey du compte de destination. Installation et configuration.
Pour les clusters auto-gérés, installez manuellement LoongCollector et configurez-le avec l'ID ou l'AccessKey du compte Alibaba Cloud de destination. Installation et configuration.
LoongCollector doit être installé avant de pouvoir commencer la collecte des journaux. Collecter les journaux de conteneurs d'un cluster Kubernetes à l'aide d'une CRD (sortie standard/fichier) .
-
Mode Sidecar : injecte un conteneur LoongCollector dans chaque pod d'application. Utilisez ce mode pour les conteneurs serverless, les pods à fort volume dépassant la capacité du mode DaemonSet, ou les clusters utilisant des environnements d'exécution de conteneurs sécurisés. Collecter les journaux texte des pods Kubernetes (mode sidecar).
Règles de collecte
SLS propose deux méthodes pour définir les règles de collecte :
Méthode de configuration | Fonctionnalités | Cas d'utilisation | Notes |
| Recommandé pour les clusters de production et les environnements CI/CD. |
| |
| Idéal pour les petits clusters, le débogage ou les environnements hors production. |
Concepts clés
Kubernetes : plateforme open source d'orchestration de conteneurs qui automatise le déploiement, la mise à l'échelle et la gestion des applications conteneurisées.
Sortie standard, erreur standard et fichiers texte de journaux : la sortie standard (stdout) capture la sortie normale du programme (journaux métier, enregistrements opérationnels). L'erreur standard (stderr) capture les erreurs et les avertissements (traces de pile, échecs de démarrage). Toutes deux sont dirigées vers le terminal et capturées par le moteur de conteneur. Les fichiers texte de journaux sont écrits dans des fichiers par les applications (par exemple, Nginx
access.log) et sont supprimés lors de la destruction du conteneur, sauf s'ils sont conservés via un volume.Mécanisme de checkpoint : enregistre la position de la collecte dans un fichier, sauvegardé par défaut dans
/tmp/logtail_checkpoint. Garantit une collecte fiable après le redémarrage de LoongCollector ou en cas de défaillance d'un nœud.LoongCollector (Logtail) : collecteur de journaux haute performance développé par Alibaba Cloud, prenant en charge le déploiement DaemonSet et sidecar dans Kubernetes. LoongCollector succède à Logtail et est entièrement rétrocompatible.
CRD Kubernetes : une CustomResourceDefinition permettant de définir des ressources personnalisées pour la configuration. SLS utilise AliyunPipelineConfig comme type de CRD.
Configuration de collecte : définit les règles concernant les types de journaux, les chemins de collecte, le filtrage, l'analyse et l'emplacement de stockage. Qu'est-ce qu'une configuration de collecte ?.
Plugin d'analyse : unité de traitement au sein de la configuration des plugins de traitement servant à structurer, fractionner, filtrer ou désensibiliser le contenu des journaux. Prend en charge les modes expression régulière, séparateur, JSON et multiligne.
Fonctionnement
Un utilisateur crée une ressource personnalisée (CR) à l'aide de
kubectlpour définir une règle de collecte.Le composant
loongcollector-operatorsurveille en permanence les modifications des CR dans le cluster.Lorsqu'une modification est détectée, l'Operator convertit la CR en une configuration LoongCollector et l'applique à Simple Log Service.
L'agent LoongCollector envoie périodiquement des signaux de présence (heartbeats) à Simple Log Service pour récupérer les mises à jour de configuration, télécharge la dernière configuration de collecte et l'applique dynamiquement.
L'agent
loongcollector-dscollecte les journaux conformément à la nouvelle configuration et les envoie à SLS via l'endpoint configuré.
Mode DaemonSet
Déploie un agent LoongCollector sur chaque nœud pour collecter les journaux de tous les conteneurs présents sur ce nœud. Offre une exploitation simple, une faible consommation de ressources et une configuration flexible, mais avec une isolation des locataires moins stricte.
Mode Sidecar
Injecte un sidecar LoongCollector aux côtés du conteneur d'application dans chaque pod. Le répertoire des journaux de l'application est partagé via un volume Kubernetes (emptyDir, hostPath ou PVC), permettant à LoongCollector de lire directement les fichiers de journaux. Assure une forte isolation des locataires et des performances élevées, mais consomme davantage de ressources.
Découverte des conteneurs
Avant de collecter leurs journaux, LoongCollector doit identifier les conteneurs en cours d'exécution sur le nœud. Ce processus est appelé découverte des conteneurs.
LoongCollector communique directement avec le démon de l'environnement d'exécution de conteneurs sur le nœud, et non avec le kube-apiserver du cluster. Cela évite de surcharger le kube-apiserver.
LoongCollector accède au socket de l'environnement d'exécution de conteneurs (Docker ou Containerd) sur l'hôte. Il permet d'inclure ou d'exclure des conteneurs par namespace, nom de pod, labels de pod ou variables d'environnement.
Collecte de la sortie standard
LoongCollector identifie automatiquement l'API ou le driver de journalisation approprié pour chaque environnement d'exécution de conteneurs (Docker, Containerd) en fonction des métadonnées. Il lit directement le flux stdout sans accéder aux systèmes de fichiers des conteneurs.
LoongCollector enregistre périodiquement la progression de la collecte dans un fichier de checkpoint et reprend à la dernière position après un redémarrage.
Collecte des journaux de fichiers texte de conteneurs
Kubernetes isole les systèmes de fichiers des conteneurs ; un collecteur ne peut donc pas accéder directement aux fichiers d'autres conteneurs. LoongCollector monte le système de fichiers racine de l'hôte pour accéder indirectement aux fichiers du conteneur d'application.
Par défaut, le système de fichiers racine de l'hôte est monté sur
/logtail_host. Un montage manuel n'est généralement pas nécessaire. Par exemple, si un fichier de journal de conteneur se trouve dans/log/app.loget que son chemin sur l'hôte est/var/lib/docker/containers/<container-id>/log/app.log, LoongCollector le lit depuis/logtail_host/var/lib/docker/containers/<container-id>/log/app.log.
Analyse des journaux multilignes
LoongCollector utilise une expression régulière définie par l'utilisateur pour détecter le début d'une ligne de journal.
Correspondance trouvée : la ligne est considérée comme le début d'une nouvelle entrée de journal.
Aucune correspondance : la ligne est ajoutée à l'entrée de journal en cours.
Lorsqu'une autre ligne correspond à l'expression régulière de début de ligne, l'entrée de journal en cours est finalisée et une nouvelle commence.
Traitement des journaux lors de l'arrêt d'un conteneur
|
Environnement d'exécution |
Risque de latence de destruction |
Intégrité des journaux |
Optimisation |
|
Docker |
Lorsqu'un conteneur est arrêté, LoongCollector libère immédiatement le descripteur de fichier du conteneur, permettant à ce dernier de se fermer normalement. |
Si la collecte subit un retard avant l'arrêt du conteneur, par exemple en raison d'une latence réseau ou d'une utilisation élevée des ressources, certains journaux générés juste avant l'arrêt peuvent être perdus. |
Augmentez la fréquence d'envoi des journaux (diminuez |
|
Containerd |
Si la collecte est retardée, par exemple en raison d'une latence réseau ou d'une utilisation élevée des ressources, le conteneur d'application pourrait ne pas être détruit rapidement. |
Lorsqu'un conteneur est arrêté, LoongCollector conserve les descripteurs de fichiers du conteneur, maintenant les fichiers de journaux ouverts jusqu'à ce que tout le contenu ait été envoyé. |
Configurez |
Après la suppression d'un pod, les journaux déjà collectés dans le LogStore Simple Log Service ne sont pas affectés. Ils sont conservés pendant la durée de rétention des données du LogStore et restent interrogeables durant cette période. Vous pouvez modifier la durée de rétention dans la console Simple Log Service.
Après la suppression d'un pod, les configurations de collecte basées sur des labels ou des namespaces s'appliquent automatiquement aux nouveaux pods portant les mêmes labels. Lors d'une mise à jour progressive (rolling update) d'un Deployment qui supprime les anciens pods et en crée de nouveaux, Simple Log Service collecte automatiquement les journaux des nouveaux pods, sans qu'il soit nécessaire de reconfigurer les règles de collecte.
Récupération des métadonnées de conteneurs
LoongCollector récupère les métadonnées Kubernetes directement via l'API CRI (Container Runtime Interface), ce qui permet un étiquetage non intrusif et en temps réel des métadonnées pendant la collecte.
-
Docker : LoongCollector utilise le client Docker pour communiquer avec le démon Docker afin de récupérer les métadonnées. Les principales API incluent :
ContainerList : liste les conteneurs en cours d'exécution sur le nœud.
ContainerInspect : renvoie la configuration détaillée et l'état du conteneur.
Events : écoute les événements du cycle de vie des conteneurs en temps réel.
Principaux champs de métadonnées récupérés via le client Docker :
LogPath : chemin sur l'hôte du fichier de journal stdout du conteneur.
GraphDriver.Data : chemin sur l'hôte du rootfs du conteneur, utilisé pour l'accès au système de fichiers et le dépannage.
-
Containerd : LoongCollector utilise le CRI pour prendre en charge les environnements
containerdet CRI-O, en collectant les métadonnées des environnements d'exécution sous-jacents tels queruncou Kata Containers.-
Le CRI fournit le chemin sur l'hôte du fichier de journal stdout, mais pas le chemin du rootfs du conteneur. LoongCollector utilise ces méthodes pour le trouver :
Recherche de chemin de fichier : recherche le chemin du rootfs du conteneur dans le système de fichiers de l'hôte à l'aide de l'ID du conteneur.
Interaction directe avec containerd : LoongCollector peut contourner le CRI et communiquer directement avec containerd pour obtenir le chemin du rootfs et d'autres métadonnées non disponibles via le CRI.
-
Bonnes pratiques
Requête unifiée entre environnements
Pour interroger les journaux de plusieurs environnements (par exemple, test et production), utilisez l'une des méthodes suivantes :
Stockez les données de tous les environnements dans le même LogStore et ajoutez des tags pour distinguer les environnements. Collecter les journaux de conteneurs d'un cluster à l'aide de la console (sortie standard/fichier).
Collectez les données dans des LogStores ou des projets distincts. Créez une StoreView pour les requêtes inter-LogStores. Cette méthode n'engendre aucun coût de stockage supplémentaire, mais elle est en lecture seule et ne prend pas en charge les alertes. Utilisez un champ
tagpour identifier le LogStore source de chaque entrée de journal.(Recommandé) Collectez les données dans des LogStores ou des projets distincts. Utilisez la manipulation des données pour copier les données sélectionnées vers un LogStore centralisé. Prend en charge l'analyse avant stockage et les alertes, mais constitue une fonctionnalité payante.
Collecte de journaux provenant de sources multiples
Chaque configuration de collecte cible une seule source. Créez une configuration distincte pour chaque source de journaux.
Collecte granulaire et isolation multi-locataire
Dans un environnement multi-locataire, utilisez des projets distincts pour isoler les données. Les données de différents projets sont inaccessibles entre elles, et chaque projet peut disposer de permissions d'accès indépendantes.
Opérations automatisées et intégration CI/CD
Utilisez la méthode CRD pour intégrer les configurations de collecte dans les flux de travail GitOps ou IaC, assurant ainsi une gestion automatisée et traçable de la collecte des journaux.