Tous les produits
Search
Centre de documentation

Simple Log Service:Collecter les journaux des conteneurs (sortie standard et fichiers)

Dernière mise à jour :Sep 25, 2026

Déployez LoongCollector en mode DaemonSet et créez une configuration de collecte dans la console SLS pour centraliser la collecte des journaux des conteneurs Kubernetes et activer le traitement structuré afin d'optimiser les requêtes et l'analyse.

Prérequis

  • Environnement d'exécution

    • Prend en charge Container Service for Kubernetes (ACK) (éditions managées et dédiées) ainsi que les clusters Kubernetes auto-gérés.

    • Kubernetes 1.10.0 ou version ultérieure, prenant en charge Mount propagation: HostToContainer.

    • Moteur de conteneur (Docker et Containerd uniquement)

      • Docker :

        • Requiert un accès à docker.sock.

        • La collecte de la sortie standard prend uniquement en charge le pilote de journal JSON.

        • Prend uniquement en charge les pilotes de stockage overlay et overlay2. Pour utiliser d'autres types de pilotes de stockage, montez manuellement le répertoire des journaux.

      • Containerd : Requiert un accès à containerd.sock.

  • Exigences en matière de ressources : LoongCollector (Logtail) s'exécute avec la classe de priorité élevée system-cluster-critical. Le déploiement sur un cluster aux ressources limitées peut entraîner l'éviction des Pods existants.

    • CPU : Réservez au moins 0,1 cœur.

    • Mémoire : Réservez au moins 150 Mo pour le composant de collecte et au moins 100 Mo pour le composant contrôleur.

    • L'utilisation réelle dépend du taux de collecte, du nombre de répertoires et de fichiers surveillés, ainsi que de la congestion d'envoi. Maintenez l'utilisation des ressources en dessous de 80 % des limites spécifiées.

  • Exigences en matière d'autorisations : Pour le déploiement, le compte Alibaba Cloud ou l'utilisateur RAM doit disposer de l'autorisation AliyunLogFullAccess.

    Pour créer des stratégies personnalisées avec des autorisations granulaires, copiez les autorisations de la stratégie système AliyunCSManagedLogRolePolicy et accordez-les à l'utilisateur ou au rôle RAM cible.

Configuration de la collecte

  1. Installer LoongCollector : Déployez LoongCollector en mode DaemonSet. Cela garantit qu'un conteneur de collecte s'exécute sur chaque nœud du cluster pour collecter les journaux de tous les conteneurs présents sur ce nœud.

    Pour le modèle Sidecar, utilisez Collecter les journaux texte des pods Kubernetes (modèle Sidecar) .
  2. Créer un Logstore : Un Logstore stocke les journaux collectés.

  3. Créer et configurer les règles de collecte de journaux

    1. Configuration globale et entrée : Définissez le nom de la configuration de collecte et spécifiez la source et la portée de la collecte des journaux.

    2. Traitement et structuration des journaux : Configurez les règles de traitement en fonction du format des journaux.

      • Journaux multilignes : Gérez les entrées de journal qui s'étendent sur plusieurs lignes, telles que les piles d'exceptions Java ou les traces Python, en définissant une expression régulière de première ligne pour identifier le début de chaque entrée.

      • Analyse structurée : Configurez des plugins d'analyse, tels que les expressions régulières, les délimiteurs ou le mode NGINX, pour extraire les chaînes brutes sous forme de paires clé-valeur structurées, permettant ainsi des requêtes et une analyse efficaces.

    3. Filtrage des journaux : Configurez des listes noires de collecte et des règles de filtrage de contenu pour exclure les données de journal indésirables. Cela permet de réduire la transmission et le stockage de données redondantes.

    4. Catégorisation des journaux : Configurez les topics et les tags des journaux pour distinguer les journaux provenant de différents services, conteneurs ou sources de chemin d'accès.

  4. Configuration des requêtes et de l'analyse : L'indexation en texte intégral est activée par défaut pour les recherches par mot-clé. Pour des requêtes précises et l'analyse de champs structurés, activez les index de champ afin d'améliorer l'efficacité de la recherche.

  5. Vérification et dépannage : Une fois la configuration terminée, vérifiez que les journaux sont bien collectés. Si vous rencontrez des problèmes tels qu'un échec de collecte de données, un échec de heartbeat ou des erreurs d'analyse, consultez la section FAQ de dépannage.

Étape 1 : Installer LoongCollector

LoongCollector est l'agent de collecte de journaux de nouvelle génération de Simple Log Service et le successeur de Logtail. LoongCollector et Logtail ne peuvent pas coexister. Pour installer Logtail, consultez Installer, exécuter, mettre à niveau et désinstaller Logtail .

Installez LoongCollector en utilisant l'une des méthodes ci-dessous. Pour plus de détails sur les paramètres, consultez Installation et configuration. Si LoongCollector ou Logtail est déjà installé, passez directement à l'Étape 2 : Créer un logstore.

Remarque

La modification de l'heure de l'hôte pendant l'exécution de LoongCollector (Logtail) peut entraîner une collecte en double ou une perte de données.

Cluster ACK

Installez LoongCollector dans la console Container Service for Kubernetes. Par défaut, les journaux sont envoyés vers un projet Simple Log Service au sein du compte Alibaba Cloud actuel.

  1. Connectez-vous à la console ACK. Dans le volet de navigation de gauche, cliquez sur Clusters.

  2. Cliquez sur le nom du cluster cible.

  3. Dans le volet de navigation de gauche, cliquez sur Add-ons.

  4. Sous l'onglet Logs and Monitoring, recherchez LoongCollector, puis cliquez sur Install.

    Remarque

    Lors de la création d'un cluster, vous pouvez sélectionner Enable Log Service sur la page Component Configurations. Vous avez la possibilité de choisir Create Project ou Select Project. Lors de l'installation de LoongCollector pour un cluster existant, la boîte de dialogue d'installation permet de spécifier un nom de projet à l'aide du paramètre projectName. Si ce champ est laissé vide, la valeur par défaut k8s-log-{cluster_id} est utilisée.

    Une fois l'installation terminée, Simple Log Service crée automatiquement les ressources suivantes dans le compte actuel. Vous pouvez les consulter dans la console Simple Log Service.

    Type de ressource

    Nom de la ressource

    Description

    Projet

    k8s-log-${cluster_id}

    Isole les journaux des différents services.

    Pour une gestion flexible des journaux, Créer un projet.

    Groupe de machines

    k8s-group-${cluster_id}

    Un ensemble de nœuds de collecte de journaux. Les adresses IP des nœuds Kubernetes changent dynamiquement lors du scaling du cluster (ajout ou suppression de nœuds), ce qui peut provoquer des échecs de heartbeat si le groupe de machines est identifié par adresse IP. Par conséquent, les groupes de machines dans les scénarios Kubernetes utilisent un identifiant personnalisé. Pour plus d'informations, consultez le Guide d'association des groupes de machines aux configurations de collecte.

    Important

    Le composant LoongCollector ne crée pas de logstore nommé config-operation-log. Si ce logstore existe déjà, LoongCollector n'y écrit pas de journaux.

Cluster auto-géré

  1. Connectez-vous au cluster Kubernetes et exécutez la commande appropriée pour votre région :

    Régions en Chine

    wget https://aliyun-observability-release-cn-shanghai.oss-cn-shanghai.aliyuncs.com/loongcollector/k8s-custom-pkg/3.0.12/loongcollector-custom-k8s-package.tgz; tar xvf loongcollector-custom-k8s-package.tgz; chmod 744 ./loongcollector-custom-k8s-package/k8s-custom-install.sh

    Régions hors de Chine

    wget https://aliyun-observability-release-ap-southeast-1.oss-ap-southeast-1.aliyuncs.com/loongcollector/k8s-custom-pkg/3.0.12/loongcollector-custom-k8s-package.tgz; tar xvf loongcollector-custom-k8s-package.tgz; chmod 744 ./loongcollector-custom-k8s-package/k8s-custom-install.sh
  2. Accédez au répertoire loongcollector-custom-k8s-package et modifiez le fichier de configuration ./loongcollector/values.yaml.

    # ===================== Required Information =====================
    # The name of the Project to which logs from this cluster are sent. Example: k8s-log-custom-sd89ehdq
    projectName: ""
    # The region where the Project is located. Example: cn-shanghai
    region: ""
    # The UID of the Alibaba Cloud account that owns the Project. Enclose the UID in quotation marks (""). Example: "123456789"
    aliUid: ""
    # The network type. Valid values: Internet and Intranet. Default value: Internet.
    net: Internet
    # The AccessKey ID and AccessKey secret of the Alibaba Cloud account or RAM user. The account or RAM user must have the AliyunLogFullAccess system policy permission.
    accessKeyID: ""
    accessKeySecret: ""
    # A custom cluster ID. The ID can contain only uppercase letters, lowercase letters, digits, and hyphens (-).
    clusterID: ""
  3. Dans le répertoire loongcollector-custom-k8s-package, exécutez la commande suivante pour installer LoongCollector et ses dépendances :

    bash k8s-custom-install.sh install
  4. Une fois l'installation terminée, vérifiez que les composants sont en cours d'exécution.

    Si un pod ne démarre pas, vérifiez les configurations dans le fichier values.yaml et assurez-vous que les images requises ont été extraites.
    # Check the pod status
    kubectl get po -n kube-system | grep loongcollector-ds

    Simple Log Service crée également automatiquement les ressources suivantes. Vous pouvez les consulter dans la console Simple Log Service.

    Type de ressource

    Nom de la ressource

    Description

    Projet

    La valeur de projectName que vous avez spécifiée dans le fichier values.yaml

    Isole les journaux des différents services.

    Pour une gestion flexible des journaux, Créer un projet.

    Groupe de machines

    k8s-group-${cluster_id}

    Un ensemble de nœuds de collecte de journaux. Les adresses IP des nœuds Kubernetes changent dynamiquement lors du scaling du cluster (ajout ou suppression de nœuds), ce qui peut provoquer des échecs de heartbeat si le groupe de machines est identifié par adresse IP. Par conséquent, les groupes de machines dans les scénarios Kubernetes utilisent un identifiant personnalisé. Pour plus d'informations, consultez le Guide d'association des groupes de machines aux configurations de collecte.

    Important

    Le composant LoongCollector ne crée pas de logstore nommé config-operation-log. Si ce logstore existe déjà, LoongCollector n'y écrit pas de journaux.

Étape 2 : Créer un logstore

Un logstore est l'unité de stockage de base pour les journaux dans SLS.

  1. Connectez-vous à la console Simple Log Service et cliquez sur le nom du projet cible.

  2. Dans le volet de navigation de gauche, sélectionnez imageLogstores, cliquez sur +, puis créez un logstore :

    • Logstore Name : Saisissez un nom unique au sein du projet. Ce nom ne peut pas être modifié après la création.

    • Logstore Type : Sélectionnez Standard ou Query en fonction de la comparaison des fonctionnalités.

    • Billing Mode :

      • Pay-by-feature (Cannot Be Changed) : Vous êtes facturé indépendamment pour chaque ressource, telle que le stockage, l'indexation et les opérations de lecture/écriture. Ce mode convient aux cas d'utilisation à petite échelle ou lorsque l'utilisation des fonctionnalités est incertaine.

      • Pay-by-ingested-data : Vous êtes facturé uniquement pour le volume de données brutes que vous écrivez. Ce mode offre 30 jours de stockage gratuit et des fonctionnalités gratuites, telles que la transformation et la distribution des données. Il convient aux cas d'utilisation professionnels où la période de rétention est proche de 30 jours ou lorsque le pipeline de traitement des données est complexe.

    • Data Retention Period : Nombre de jours de conservation des journaux. La valeur peut aller de 1 à 3 650. Une valeur de 3 650 indique une conservation permanente. La valeur par défaut est de 30 jours.

    • Conservez les valeurs par défaut pour les autres paramètres et cliquez sur OK. Gérer un logstore.

Étape 3 : Configurer une règle de collecte de journaux

Définissez les journaux à collecter, leur méthode d'analyse et les filtres de contenu, puis appliquez la configuration à un groupe de machines.

  1. Sur la page Logstore image, cliquez sur l'icône image située devant le nom du Logstore cible pour le développer.

  2. Cliquez sur l'icône image à côté de Import Data. Dans la boîte de dialogue Quick Data Import, sélectionnez un modèle en fonction de la source des journaux et cliquez sur Integrate Now :

  3. Dans la section Machine Group Configurations, effectuez la configuration et cliquez sur Next :

    • Scenario : Sélectionnez Docker Containers.

    • Deployment method : Sélectionnez ACK DaemonSet ou Self-managed Cluster in DaemonSet Mode.

    • Dans la liste Source Machine Group, déplacez le groupe de machines créé par le système k8s-group-${cluster_id} vers la liste Applied Machine Group.

  4. Sur la page Logtail Configuration, configurez les paramètres suivants, puis cliquez sur Next.

1. Configuration globale et configuration d'entrée

À cette étape, définissez le nom, la source des journaux et la portée de votre configuration de collecte.

Sortie standard des conteneurs

Global Configurations

  • Configuration Name : Saisissez un nom personnalisé pour la configuration de collecte. Le nom doit être unique au sein du projet et ne peut pas être modifié après la création. Conventions de nommage :

    • Ne peut contenir que des lettres minuscules, des chiffres, des traits d'union (-) et des underscores (_).

    • Doit commencer et se terminer par une lettre minuscule ou un chiffre.

Input configuration

  • Activez les commutateurs Stdout and Stderr et/ou Standard Error. Les deux sont activés par défaut.

    Important

    Nous vous déconseillons d'activer simultanément la sortie standard et la sortie d'erreur standard, car cela peut entraîner une collecte des journaux dans le désordre.

Journaux textuels du cluster

Global Configurations :

  • Configuration Name : Saisissez un nom personnalisé pour la configuration de collecte. Le nom doit être unique au sein du projet et ne peut pas être modifié après la création. Conventions de nommage :

    • Ne peut contenir que des lettres minuscules, des chiffres, des traits d'union (-) et des underscores (_).

    • Doit commencer et se terminer par une lettre minuscule ou un chiffre.

Input Configurations :

  • File Path Type :

    • Path in Container : Collectez les fichiers journaux depuis l'intérieur d'un conteneur.

    • Host Path : Collectez les journaux des services locaux sur la machine hôte.

  • File Path : Le chemin absolu pour la collecte des journaux.

    • Linux : Doit commencer par une barre oblique (/), par exemple /data/mylogs/**/*.log. Ce chemin indique tous les fichiers se terminant par .log dans le répertoire /data/mylogs et ses sous-répertoires.

    • Windows : Doit commencer par une lettre de lecteur, par exemple C:\Program Files\Intel\**\*.log.

  • Maximum Directory Monitoring Depth : La profondeur maximale de répertoire que le caractère générique ** dans le champ File Path peut correspondre. La valeur par défaut est 0 (répertoire actuel uniquement) et la plage valide va de 0 à 1 000.

    Nous vous recommandons de définir cette valeur sur 0 et de configurer le chemin vers le répertoire contenant les fichiers journaux.

2. Traitement et structuration des journaux

Configurez des règles de traitement pour convertir les journaux bruts en données structurées et consultables. Ajoutez un exemple de journal avant de configurer les règles.

Sur la page Logtail Configuration, dans la zone Processor Configurations, cliquez sur Add Sample Log et saisissez le contenu du journal que vous souhaitez collecter. Le système utilise cet exemple pour identifier le format du journal et aider à générer des expressions régulières et des règles d'analyse, ce qui simplifie le processus de configuration.

Cas d'utilisation 1 : Traiter les journaux multilignes

Les journaux tels que les traces de pile Java et les objets JSON s'étendent souvent sur plusieurs lignes. Par défaut, ils sont divisés en enregistrements incomplets. Activez le mode multiligne et configurez une expression régulière pour la première ligne afin de fusionner les lignes consécutives en enregistrements complets.

Exemple :

Journal brut non traité

En mode par défaut, chaque ligne est traitée comme un journal distinct, ce qui fragmente la trace de pile et perd le contexte.

Avec le mode multiligne activé, une expression régulière identifie un journal complet, préservant ainsi sa structure sémantique.

image

image

image

Procédure : Sur la page Logtail Configuration, dans la zone Processor Configurations, activez Multi-line Mode.

  • Type : Sélectionnez Custom ou Multi-line JSON.

    • Custom : Si le format du journal brut n'est pas fixe, vous devez configurer une Regex to Match First Line pour identifier la ligne de départ de chaque entrée de journal.

      • Regex to Match First Line : Vous pouvez la générer automatiquement ou la saisir manuellement. L'expression doit correspondre à une ligne entière de données. Pour l'exemple ci-dessus, l'expression régulière correspondante est \[\d+-\d+-\w+:\d+:\d+,\d+]\s\[\w+]\s.*.

        • Génération automatique : Cliquez sur Auto-generate Regular Expression. Dans la zone de texte Log Sample, sélectionnez le contenu du journal à extraire et cliquez sur Generate Regex.

        • Saisie manuelle : Cliquez sur Manually Enter Regular Expression. Après avoir saisi l'expression, cliquez sur Validate.

    • Multi-line JSON : Sélectionnez cette option lorsque les journaux bruts sont au format JSON standard. LoongCollector gère automatiquement les sauts de ligne au sein d'une seule entrée JSON.

  • Processing Method If Splitting Fails :

    • Discard : Si un segment de texte ne correspond pas à l'expression régulière de la première ligne, il est ignoré.

    • Retain Single Line : Le texte non correspondant est divisé et conservé selon le mode original sur une seule ligne.

Cas d'utilisation 2 : Structurer les journaux

Lorsque les journaux bruts sont du texte non structuré (par exemple, les journaux d'accès Nginx), l'interrogation directe est inefficace. LoongCollector fournit des plugins d'analyse qui convertissent les journaux bruts en paires clé-valeur structurées pour l'analyse, la surveillance et les alertes.

Exemple :

Journal brut non traité

Journal après analyse structurée

192 168.*.* - - [15/Apr/2025:16:40:00 +0800] "GET /nginx-logo.png HTTP/1,1" 0 000 514 200 368 "-" "Mozilla/5,0 (Windows NT 10.0; Win64; x64) AppleWebKit/537,36 (KHTML, like Gecko) Chrome/131,0.*.* Safari/537,36"
body_bytes_sent: 368
http_referer: -
http_user_agent : Mozi11a/5,0 (Nindows NT 10.0; Win64; x64) AppleMebKit/537,36 (KHTML, like Gecko) Chrome/131,0.x.x Safari/537.36
remote_addr:192.168.*.*
remote_user: -
request_length: 514
request_method: GET
request_time: 0 000
request_uri: /nginx-logo.png
status: 200
time_local: 15/Apr/2025:16:40:00

Procédure : Dans la zone Processor Configurations de la page Logtail Configuration :

  1. Ajouter un plugin d'analyse : Cliquez sur Add Processor et configurez un plugin d'analyse regex, délimiteur ou JSON en fonction du format de vos journaux. Pour cet exemple NGINX, sélectionnez Native Processor > Data Parsing (NGINX Mode).

  2. NGINX Log Configuration : copiez l'intégralité de la définition log_format depuis le fichier de configuration de votre serveur Nginx (nginx.conf) et collez-la dans cette zone de texte.

    Exemple :

    log_format main  '$remote_addr - $remote_user [$time_local] "$request" ''$request_time $request_length ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent"';
    Important

    La définition du format ici doit correspondre exactement au format qui génère les journaux sur le serveur ; sinon, l'analyse échouera.

  3. Paramètres courants : Les paramètres suivants sont communs à plusieurs plugins d'analyse de données et fonctionnent de la même manière.

    • Original field : Spécifie le champ source à analyser. La valeur par défaut est content, qui correspond à l'entrée de journal collectée dans son intégralité.

    • Keep original field on failure : Recommandé. Si un journal ne parvient pas à être analysé (par exemple, en raison d'une incompatibilité de format), cette option conserve le contenu du journal original dans le champ source spécifié.

    • Keep original field on success : Lorsqu'elle est sélectionnée, le contenu du journal original est conservé même après une analyse réussie.

3. Filtrage des journaux

La collecte de journaux de faible valeur ou non pertinents, tels que ceux au niveau DEBUG ou INFO, gaspille de l'espace de stockage, augmente les coûts, altère les performances des requêtes et peut introduire des risques de sécurité. Mettez en œuvre des politiques de filtrage granulaires pour une collecte de journaux efficace et sécurisée.

Filtrage du contenu

Filtrez les journaux en fonction du contenu des champs, par exemple en ne collectant que les journaux dont le niveau est WARNING ou ERROR.

Exemple :

Journaux bruts non traités

Collecter uniquement les journaux WARNING ou ERROR

{"level":"WARNING","timestamp":"2025-09-23T19:11:40+0800","cluster":"yilu-cluster-0728","message":"Disk space is running low","freeSpace":"15%"}
{"level":"ERROR","timestamp":"2025-09-23T19:11:42+0800","cluster":"yilu-cluster-0728","message":"Failed to connect to database","errorCode":5003}
{"level":"INFO","timestamp":"2025-09-23T19:11:47+0800","cluster":"yilu-cluster-0728","message":"User logged in successfully","userId":"user-123"}
{"level":"WARNING","timestamp":"2025-09-23T19:11:40+0800","cluster":"yilu-cluster-0728","message":"Disk space is running low","freeSpace":"15%"}
{"level":"ERROR","timestamp":"2025-09-23T19:11:42+0800","cluster":"yilu-cluster-0728","message":"Failed to connect to database","errorCode":5003}

Procédure : Dans la zone Processor Configurations de la page Logtail Configuration :

Cliquez sur Add Processor et sélectionnez Native Processor > Data Filtering.

  • Field Name : Le champ de journal sur lequel appliquer le filtre.

  • Field Value : L'expression régulière pour le filtrage. Seule la correspondance de texte intégral est prise en charge ; la correspondance partielle par mot-clé ne l'est pas.

Liste noire de collecte

Utilisez une liste noire pour exclure des répertoires ou des fichiers spécifiés, empêchant ainsi le téléchargement de journaux non pertinents ou sensibles.

Procédure : Sur la page Logtail Configuration, accédez à la zone Input Configurations > Other Input Configurations, activez Collection Blacklist et cliquez sur Add.

Prend en charge la correspondance exacte et avec caractères génériques pour les répertoires et les noms de fichiers. Les seuls caractères génériques pris en charge sont l'astérisque (*) et le point d'interrogation (?).
  • File Path Blacklist : Les chemins de fichiers à ignorer. Exemples :

    • /home/admin/private*.log : Ignore tous les fichiers du répertoire /home/admin/ qui commencent par « private » et se terminent par « .log ».

    • /home/admin/private*/*_inner.log : Ignore les fichiers se terminant par « _inner.log » situés dans des sous-répertoires commençant par « private » sous le répertoire /home/admin/.

  • File Blacklist : Les noms de fichiers à ignorer lors de la collecte. Exemple :

    • app_inner.log : Ignore tous les fichiers nommés app_inner.log.

  • Directory Blacklist : Le chemin du répertoire ne peut pas se terminer par une barre oblique (/). Exemples :

    • /home/admin/dir1/ : La liste noire de répertoires ne prendra pas effet.

    • /home/admin/dir* : Ignore tous les fichiers contenus dans les sous-répertoires de /home/admin/ qui commencent par « dir ».

    • /home/admin/*/dir : Ignore tous les fichiers de tout sous-répertoire de deuxième niveau nommé « dir » sous /home/admin/. Par exemple, les fichiers dans /home/admin/a/dir sont ignorés, mais les fichiers dans /home/admin/a/b/dir sont collectés.

Filtrage des conteneurs

Définissez des conditions de collecte basées sur les métadonnées du conteneur — telles que les variables d'environnement, les libellés Pod, les namespaces et les noms de conteneurs — pour contrôler précisément quels journaux de conteneurs sont collectés.

Procédure : Dans la zone Input Configurations de la page Logtail Configuration, activez Container Filtering et cliquez sur Add.

Plusieurs conditions sont combinées avec un « ET » logique. Toute la correspondance d'expressions régulières est basée sur le moteur RE2 de Go, qui présente des limitations par rapport à des moteurs comme PCRE. Assurez-vous que vos expressions sont conformes aux Annexe : Limites d'utilisation des expressions régulières (filtrage des conteneurs) .
  • Liste noire/liste d'autorisation de variables d'environnement : Filtrez les conteneurs en fonction de leurs variables d'environnement.

  • Liste noire/liste d'autorisation de libellés Pod K8s : Filtrez les Pods en fonction de leurs libellés.

  • Correspondance d'expression régulière du nom du Pod K8s : Collectez les journaux des Pods dont les noms correspondent à l'expression régulière spécifiée.

  • Correspondance d'expression régulière du namespace K8s : Sélectionne les conteneurs à collecter en fonction du nom du namespace.

  • Correspondance d'expression régulière du nom du conteneur K8s : Collectez les journaux des conteneurs dont les noms correspondent à l'expression régulière spécifiée.

  • Liste noire/liste d'autorisation de libellés de conteneur : Collectez les journaux des conteneurs avec des libellés correspondants. Ceci est destiné aux scénarios Docker et n'est pas recommandé pour les scénarios K8s.

4. Catégorisation des journaux

Dans les scénarios où plusieurs applications partagent un format de journal, il est difficile de distinguer la source. Configurez des topics et des tags de journaux pour permettre une association contextuelle automatisée et une catégorisation logique.

Topics de journaux

Lorsque plusieurs applications ou instances partagent un format de journal mais ont des chemins différents (par exemple, /apps/app-A/run.log et /apps/app-B/run.log), il est difficile de distinguer la source. Pour résoudre ce problème, vous pouvez générer un topic de journal basé sur le groupe de machines, un nom personnalisé ou l'extraction du chemin de fichier afin de différencier les journaux provenant de diverses sources métier ou de chemins.

Procédure : Accédez à Global Configurations > Other Global Configurations > Log Topic Type et sélectionnez une méthode de génération de topic parmi les trois options suivantes :

  • Machine group topic : Lorsqu'une configuration de collecte est appliquée à plusieurs groupes de machines, LoongCollector utilise automatiquement le nom du groupe de machines comme valeur du champ __topic__. Cela convient aux scénarios où les journaux sont catégorisés par cluster d'hôtes.

  • Custom : Le format est customized://<custom_topic_name>, par exemple customized://app-login. Cela convient aux scénarios de topics statiques avec des identifiants métier fixes.

  • File path extraction : Extrait les informations clés du chemin complet du fichier journal pour marquer dynamiquement la source du journal. Cela convient lorsque plusieurs utilisateurs ou applications partagent le même nom de fichier journal mais ont des chemins différents.

    Lorsque plusieurs utilisateurs ou services écrivent des journaux dans des répertoires de premier niveau différents avec des sous-chemins et des noms de fichiers identiques, la source ne peut pas être distinguée par le nom de fichier seul. Par exemple :

    /data/logs
    ├── userA
    │   └── serviceA
    │       └── service.log
    ├── userB
    │   └── serviceA
    │       └── service.log
    └── userC
        └── serviceA
            └── service.log

    Dans ce cas, vous pouvez configurer l'extraction du chemin de fichier et utiliser une expression régulière pour extraire les informations clés du chemin complet. Le résultat correspondant est ensuite téléchargé vers le Logstore en tant que topic de journal.

    Règle d'extraction : Groupes de capture regex

    Lorsque vous configurez une expression régulière, le système détermine automatiquement le format du champ de sortie en fonction du nombre et du nom des groupes de capture, comme suit :

    Dans l'expression régulière d'un chemin de fichier, les barres obliques (/) doivent être échappées.

    Type de groupe de capture

    Cas d'utilisation

    Champ généré

    Exemple de regex

    Chemin d'exemple

    Champ généré

    Un seul groupe de capture (un (.*?))

    Une seule dimension est nécessaire pour distinguer les sources (par exemple, nom d'utilisateur, environnement).

    Génère un champ __topic__.

    \/logs\/(.*?)\/app\.log

    /logs/userA/app.log

    __topic__:userA

    Plusieurs groupes de capture sans nom (plusieurs (.*?))

    Plusieurs dimensions sont nécessaires mais sans libellés sémantiques.

    Génère des champs Tag formatés comme __tag__:__topic_{i}__:value, où {i} est l'index du groupe de capture.

    \/logs\/(.*?)\/(.*?)\/app\.log

    /logs/userA/svcA/app.log

    __tag__:__topic_1__:userA;

    __tag__:__topic_2__:svcA

    Plusieurs groupes de capture nommés (utilisation de (?P<name>.*?))

    Plusieurs dimensions sont nécessaires avec des noms de champs clairs et sémantiques pour faciliter l'interrogation et l'analyse.

    Génère des champs Tag formatés comme __tag__:{name}:value.

    \/logs\/(?P<user>.*?)\/(?P<service>.*?)\/app\.log

    /logs/userA/svcA/app.log

    __tag__:user:userA;

    __tag__:service:svcA

Tagging des journaux

Activez la fonction d'enrichissement des tags de journaux pour extraire les informations clés des variables d'environnement du conteneur ou des libellés Pod Kubernetes et les joindre en tant que Tags pour un regroupement fin des journaux.

Procédure : Sur la page Logtail Configuration, dans la zone Input Configurations, activez Log Tag Enrichment et cliquez sur Add.

  • Environment Variables : Configurez un nom de variable d'environnement et une clé de Tag. La valeur de la variable d'environnement sera stockée comme valeur du Tag.

    • Nom de la variable d'environnement : Le nom de la variable d'environnement à extraire.

    • Clé de Tag : La clé du nouveau Tag.

  • Pod Labels : Configurez une clé de libellé Pod et une clé de Tag. La valeur du libellé Pod sera stockée comme valeur du Tag.

    • Clé de libellé Pod : La clé du libellé Kubernetes Pod à extraire.

    • Clé de Tag : La clé du nouveau Tag.

5. Configuration de sortie

Par défaut, tous les journaux sont envoyés vers le Logstore actuel avec une compression lz4. Pour distribuer les journaux provenant d'une même source vers différents Logstores, suivez les étapes ci-dessous.

Distribution dynamique multi-destinations

Important
  • La distribution dynamique multi-destinations est disponible uniquement pour LoongCollector 3.0.0 et versions ultérieures. Cette fonctionnalité n'est pas prise en charge par Logtail.

  • Vous pouvez configurer un maximum de cinq destinations de sortie.

  • Une fois que vous avez configuré plusieurs destinations de sortie, cette configuration de collecte n'apparaîtra plus dans la liste des configurations de collecte du Logstore actuel. Pour afficher, modifier ou supprimer la configuration, consultez Comment gérer les configurations de distribution multi-destinations ?.

Procédure : Sur la page Logtail Configuration, dans la zone Output Configurations :

  1. Cliquez sur image pour développer la configuration de sortie.

  2. Cliquez sur Add Output Targets et renseignez les paramètres suivants :

    • Logstores : Sélectionnez le Logstore cible.

    • Compression Method : Prend en charge lz4 et zstd.

    • Route Settings : Acheminez les journaux en fonction des champs Tag. Les journaux correspondant à la configuration de routage sont envoyés vers le Logstore cible. Si ce champ est laissé vide, tous les journaux collectés sont envoyés vers le Logstore cible.

      • Tag Name : La clé Tag utilisée pour le routage. Saisissez directement la clé (par exemple, __path__) sans le préfixe __tag__:. Les champs Tag se divisent en deux catégories :

        Les tags sont expliqués dans Gérer les tags de collecte LoongCollector .
        • Liés à l'agent : Générés par l'agent de collecte et indépendants de tout plugin. Exemples : __hostname__ et __user_defined_id__.

        • Liés au plugin d'entrée : Fournis et enrichis par les plugins d'entrée. Exemples : __path__ issu de la collecte de fichiers et _pod_name_ ou _container_name_ issus de la collecte K8s.

      • Tag Value : Les journaux dont la valeur Tag correspond à ce paramètre sont envoyés vers le Logstore cible.

      • Discard this tag? : Si cette option est activée, ce champ Tag ne sera pas inclus dans les journaux téléchargés.

Étape 4 : Requête et analyse

Après avoir configuré le traitement des journaux et les plugins, cliquez sur Next pour accéder à la page Query and Analysis Configurations :

  • Par défaut, le système active l'index full-text, qui vous permet de rechercher du contenu brut de journal par mot-clé.

  • Pour interroger les données par champs spécifiques, cliquez sur Automatic Index Generation après le chargement de Preview Data. Log Service génère un index de champ basé sur la première entrée de journal dans les données d'aperçu.

Une fois la configuration terminée, cliquez sur Next pour finaliser le processus de collecte.

Étape 5 : Validation et dépannage

Après avoir créé et appliqué une configuration de collecte à un groupe de machines, le système la déploie automatiquement et commence à collecter les journaux incrémentiels.

Afficher les journaux collectés

  1. Vérifiez que le fichier journal contient de nouveaux contenus : LoongCollector collecte uniquement les journaux incrémentiels. Exécutez tail -f /path/to/your/log/file et déclenchez des opérations métier pour vous assurer que de nouveaux journaux sont écrits.

  2. Recherchez des journaux : Accédez à la page Search & Analyze du Logstore cible. Cliquez sur Search & Analyze. La plage de temps par défaut est les 15 dernières minutes. Vérifiez si de nouveaux journaux sont ingérés. Chaque journal texte de conteneur collecté inclut par défaut les champs suivants :

    Paramètre

    Description

    __tag__:__hostname__

    Nom de l'hôte du conteneur.

    __tag__:__path__

    Chemin du fichier journal dans le conteneur.

    __tag__:_container_ip_

    Adresse IP du conteneur.

    __tag__:_image_name_

    Nom de l'image utilisée par le conteneur.

    __tag__:_pod_name_

    Nom du Pod.

    __tag__:_namespace_

    Namespace du Pod.

    __tag__:_pod_uid_

    Identifiant unique (UID) du Pod.

Interroger les nœuds historiques d'un Pod

Si un Pod a migré ou redémarré, vous pouvez interroger les journaux d'événements Kubernetes de votre cluster ACK dans Simple Log Service pour identifier les nœuds sur lesquels le Pod s'exécutait précédemment.

  1. Connectez-vous à la console Simple Log Service et localisez le projet k8s-log-{cluster_id} dans la liste des projets.

  2. Cliquez sur le LogStore k8s-event pour accéder à la page de requête et d'analyse.

  3. Dans la zone de recherche, saisissez une instruction de requête filtrant par nom de Pod, par exemple pod_name: my-pod, puis cliquez sur Search & Analyze.

  4. Dans les résultats renvoyés, vérifiez la valeur du champ hostname. Cette valeur correspond au nom d'hôte du nœud sur lequel le Pod s'exécutait.

Remarque

Dans le LogStore k8s-event, les noms de champs sont pod_name et hostname, sans le préfixe __tag__:. Le format avec préfixe __tag__: s'applique à la collecte stdout des conteneurs et aux journaux texte, mais pas aux journaux d'événements Kubernetes.

Résoudre les problèmes courants

Échec du heartbeat du groupe de machines

  1. Vérifiez l'identifiant utilisateur : Si votre serveur n'est pas une instance ECS, ou si l'instance ECS et le Project appartiennent à des comptes Alibaba Cloud différents, assurez-vous que l'identifiant utilisateur correct existe dans le répertoire spécifié.

    • Sous Linux, exécutez la commande cd /etc/ilogtail/users/ && touch <uid> pour créer un fichier d'identifiant utilisateur.

    • Windows : Accédez au répertoire C:\LogtailData\users\ et créez un fichier vide nommé <uid>.

    L'identifiant utilisateur est correctement configuré si le chemin spécifié contient un fichier dont le nom correspond à l'ID de compte Alibaba Cloud du Project actuel.

  2. Vérifiez l'identifiant du groupe de machines : Si vous utilisez un identifiant personnalisé pour un groupe de machines, vérifiez si le fichier user_defined_id existe dans le répertoire spécifié. Si le fichier existe, vérifiez si son contenu correspond à l'identifiant personnalisé configuré pour le groupe de machines.

    • Linux :

      # Configure the custom identifier. If the directory does not exist, create it manually.
      echo "user-defined-1" > /etc/ilogtail/user_defined_id
    • Windows : Dans le répertoire C:\LogtailData, créez un fichier nommé user_defined_id et écrivez-y l'identifiant personnalisé. (Si le répertoire n'existe pas, créez-le manuellement.)

  3. Si l'identifiant utilisateur et l'identifiant du groupe de machines sont correctement configurés, consultez la rubrique Dépannage des groupes de machines LoongCollector (Logtail) pour poursuivre le dépannage.

Erreurs de collecte de journaux ou erreurs de format

Ce problème survient généralement lorsque votre connexion réseau et votre configuration de base sont correctes, mais que le contenu du journal ne correspond pas aux règles d'analyse. Pour diagnostiquer le problème, affichez le message d'erreur spécifique :

  1. Sur la page Logtail Configuration, cliquez sur le nom de la configuration LoongCollector (Logtail) présentant des erreurs de collecte. Dans l'onglet Log Collection Error, cliquez sur Select Time Range pour définir la période de requête.

  2. Dans la section , consultez le type d'alerte du journal d'erreur et reportez-vous à la rubrique Types d'erreurs courants lors de la collecte de données pour trouver la solution correspondante.

Étapes suivantes

  1. Requête et analyse des journaux :

  2. Visualisation des données : Utilisez des tableaux de bord de visualisation pour surveiller les tendances des métriques clés.

  3. Alerte d'anomalies de données : Configurez des politiques d'alerte pour détecter les anomalies de données en temps réel.

Dépannage de la collecte de journaux de conteneurs

  1. Vérifiez que de nouveaux journaux sont générés dans le fichier journal cible. Logtail ne collecte pas de données tant que de nouveaux journaux n'apparaissent pas.

2. Vérifier les journaux d'exécution de Logtail

  1. Connectez-vous au conteneur Logtail :

    1. Recherchez le pod Logtail.

      kubectl get po -n kube-system | grep logtail

      Le résultat ressemble à ce qui suit :

      logtail-ds-****d                                             1/1       Running    0          8d
      logtail-ds-****8                                             1/1       Running    0          8d
    2. Connectez-vous au pod.

      kubectl exec -it -n kube-system logtail-ds-****d -- bash

      Remplacez logtail-ds-****d par l'ID réel de votre pod.

  1. Vérifiez les journaux d'exécution de Logtail :

    Les journaux Logtail sont stockés dans le répertoire /usr/local/ilogtail/ du conteneur Logtail. Les noms de fichiers sont ilogtail.LOG et logtail_plugin.LOG. Connectez-vous au conteneur Logtail et exécutez les commandes suivantes pour afficher les journaux :

    # Go to the /usr/local/ilogtail/ directory.
    cd /usr/local/ilogtail
    
    # View the ilogtail.LOG and logtail_plugin.LOG files.
    cat ilogtail.LOG
    cat logtail_plugin.LOG

    Consultez les journaux d'erreurs pour identifier le type d'alerte et trouvez la solution correspondante dans la rubrique Erreurs courantes lors de la collecte de données Simple Log Service.

3. Vérifier le heartbeat du groupe de machines

Accédez à la page Resource Group > Machine Groups et cliquez sur le nom du groupe de machines cible. Dans la section Machine Group Configurations > Machine Group Status, consultez le statut Heartbeat et notez le nombre de nœuds affichant le statut « OK ».

  1. Vérifiez le nombre de nœuds worker dans le cluster de conteneurs.

    1. Se connecter à un cluster ACK à l'aide de kubectl.

    2. Vérifiez le nombre de nœuds worker dans le cluster.

      kubectl get node | grep -v master

      Le résultat ressemble à ce qui suit :

      NAME                                 STATUS    ROLES     AGE       VERSION
      cn-hangzhou.i-bp17enxc2us3624wexh2   Ready     <none>    238d      v1.10.4
      cn-hangzhou.i-bp1ad2b02jtqd1shi2ut   Ready     <none>    220d      v1.10.4
  2. Comparez le nombre de nœuds dont le statut heartbeat est OK au nombre de nœuds worker dans le cluster de conteneurs. Ensuite, suivez les étapes de dépannage appropriées en fonction du résultat.

    • Le statut heartbeat de tous les nœuds du groupe de machines est Failed :

      • Pour un cluster auto-géré, vérifiez que les paramètres {regionId}, {aliuid}, {access-key-id} et {access-key-secret} sont corrects.

        S'ils sont incorrects, exécutez la commande helm del --purge alibaba-log-controller pour supprimer le package d'installation, puis réinstallez-le.

    • Le nombre de nœuds dont le statut heartbeat est OK est inférieur au nombre de nœuds worker dans le cluster.

      • Vérifiez si un DaemonSet a été déployé manuellement à l'aide d'un fichier YAML.

        1. Exécutez la commande suivante. Si un résultat est renvoyé, cela indique qu'un DaemonSet a été précédemment déployé manuellement à l'aide d'un fichier YAML.

          kubectl get po -n kube-system -l k8s-app=logtail
        2. Téléchargez la dernière version du modèle DaemonSet.

        3. Configurez les paramètres tels que ${your_region_name}, ${your_aliyun_user_id} et ${your_machine_group_name} avec vos valeurs réelles.

        4. Mettez à jour la ressource.

          kubectl apply -f ./logtail-daemonset.yaml

4. Vérifier les filtres de collecte

Dans la console SLS, vérifiez la configuration de collecte Logtail. Assurez-vous que les paramètres IncludeLabel, ExcludeLabel, IncludeEnv et ExcludeEnv de la configuration Logtail répondent à vos exigences de collecte.

  • Dans ce contexte, « label » fait référence au label de conteneur issu de la sortie inspect de Docker, et non à un label Kubernetes.

  • Pour tester vos filtres, supprimez temporairement les paramètres IncludeLabel, ExcludeLabel, IncludeEnv et ExcludeEnv et vérifiez si les journaux sont collectés. Si c'est le cas, votre configuration de filtre est incorrecte.

FAQ

Gérer les configurations de distribution multi-destinations

Étant donné que les configurations de distribution multi-destinations s'appliquent à plusieurs logstores, gérez-les depuis la page de gestion au niveau du Project :

  1. Connectez-vous à la console Simple Log Service et cliquez sur le nom du Project cible.

  2. Sur la page Project, dans le volet de navigation de gauche, cliquez sur imageResource Group > Configurations.

    Remarque

    Cette page gère toutes les configurations de collecte au sein du Project, y compris les configurations des logstores qui ont été accidentellement supprimés.

Envoyer les journaux ACK vers un Project inter-comptes

Vous pouvez envoyer les journaux de conteneurs vers un Project Simple Log Service (SLS) appartenant à un autre compte Alibaba Cloud en installant manuellement le composant LoongCollector (Logtail) dans le cluster ACK et en le configurant avec l'ID de compte Alibaba Cloud du compte cible ou ses identifiants d'accès (AccessKey).

Description du scénario : Si vous devez collecter des données de journaux dans le Project SLS d'un autre compte à des fins organisationnelles, de permissions ou de surveillance, installez manuellement LoongCollector (Logtail) pour activer la collecte inter-comptes.

Procédure : Suivez ces étapes pour installer manuellement LoongCollector. Pour plus d'informations sur l'installation de Logtail, consultez la rubrique Installer et configurer Logtail.

  1. Connectez-vous au cluster Kubernetes et exécutez la commande appropriée pour votre région :

    Régions Chine

    wget https://aliyun-observability-release-cn-shanghai.oss-cn-shanghai.aliyuncs.com/loongcollector/k8s-custom-pkg/3.0.12/loongcollector-custom-k8s-package.tgz; tar xvf loongcollector-custom-k8s-package.tgz; chmod 744 ./loongcollector-custom-k8s-package/k8s-custom-install.sh

    Régions hors Chine

    wget https://aliyun-observability-release-ap-southeast-1.oss-ap-southeast-1.aliyuncs.com/loongcollector/k8s-custom-pkg/3.0.12/loongcollector-custom-k8s-package.tgz; tar xvf loongcollector-custom-k8s-package.tgz; chmod 744 ./loongcollector-custom-k8s-package/k8s-custom-install.sh
  2. Accédez au répertoire loongcollector-custom-k8s-package et modifiez le fichier de configuration ./loongcollector/values.yaml.

    # ===================== Required Information =====================
    # The name of the Project to which logs from this cluster are sent. Example: k8s-log-custom-sd89ehdq
    projectName: ""
    # The region where the Project is located. Example: cn-shanghai
    region: ""
    # The UID of the Alibaba Cloud account that owns the Project. Enclose the UID in quotation marks (""). Example: "123456789"
    aliUid: ""
    # The network type. Valid values: Internet and Intranet. Default value: Internet.
    net: Internet
    # The AccessKey ID and AccessKey secret of the Alibaba Cloud account or RAM user. The account or RAM user must have the AliyunLogFullAccess system policy permission.
    accessKeyID: ""
    accessKeySecret: ""
    # A custom cluster ID. The ID can contain only uppercase letters, lowercase letters, digits, and hyphens (-).
    clusterID: ""
  3. Dans le répertoire loongcollector-custom-k8s-package, exécutez la commande suivante pour installer LoongCollector et ses dépendances :

    bash k8s-custom-install.sh install
  4. Une fois l'installation terminée, vérifiez que les composants sont en cours d'exécution.

    Si un pod ne démarre pas, vérifiez les configurations dans le fichier values.yaml et assurez-vous que les images requises ont été extraites.
    # Check the pod status
    kubectl get po -n kube-system | grep loongcollector-ds

    Simple Log Service crée également automatiquement les ressources suivantes. Vous pouvez les consulter dans la console Simple Log Service.

    Type de ressource

    Nom de la ressource

    Description

    Project

    La valeur de projectName que vous avez spécifiée dans le fichier values.yaml

    Isole les journaux des différents services.

    Pour une gestion flexible des journaux, consultez la rubrique Créer un projet.

    Groupe de machines

    k8s-group-${cluster_id}

    Un ensemble de nœuds de collecte de journaux. Les adresses IP des nœuds Kubernetes changent dynamiquement lors de la mise à l'échelle du cluster (ajout ou suppression de nœuds), ce qui peut entraîner des échecs de heartbeat si le groupe de machines est identifié par adresse IP. Par conséquent, les groupes de machines dans les scénarios Kubernetes utilisent un identifiant personnalisé. Pour plus d'informations, consultez le Guide d'association des groupes de machines aux configurations de collecte.

    Important

    Le composant LoongCollector ne crée pas de logstore nommé config-operation-log. Si ce logstore existe déjà, LoongCollector n'y écrit pas de journaux.

Utiliser plusieurs configurations pour la même source

Par défaut, afin d'éviter la duplication des données, Simple Log Service (SLS) n'autorise qu'une seule configuration de collecte pour chaque source de journaux :

  • Un fichier journal texte ne peut correspondre qu'à une seule configuration de collecte Logtail.

  • Sortie standard (stdout) d'un conteneur :

    • Si vous utilisez la nouvelle version du modèle de sortie standard, stdout ne peut être collecté que par une seule configuration de collecte de sortie standard par défaut.

    • Si vous utilisez l'ancienne version du modèle de sortie standard, aucune configuration supplémentaire n'est requise et plusieurs collectes sont prises en charge par défaut.

  1. Connectez-vous à la console Simple Log Service et accédez au Project cible.

  2. Dans le volet de navigation de gauche, choisissez image Logstores et recherchez le logstore cible.

  3. Cliquez sur l'icône image située à côté de son nom pour développer le logstore.

  4. Cliquez sur Logtail Configuration. Dans la liste des configurations, recherchez la configuration Logtail cible et cliquez sur Manage Logtail Configuration dans la colonne Actions.

  5. Sur la page de configuration Logtail, cliquez sur Edit et faites défiler jusqu'à la section Input Configurations :

    • Pour collecter les journaux de fichiers texte, activez l'option Allow File to Be Collected for Multiple Times.

    • Pour collecter la sortie standard des conteneurs, activez l'option Allow Collection by Different Logtail Configurations.

Erreur de dépendance lors de la désinstallation de loongcollector

Problème : Lorsque vous tentez de désinstaller le composant loongcollector (logtail-ds) dans Container Service for Kubernetes (ACK), vous recevez une erreur indiquant que les dépendances du composant ne sont pas satisfaites.

Dependencies of addons are not met: terway-eniip depends on logtail-ds(>0.0) whose version is v3.x.x.x-aliyun or will be v3.x.x.x-aliyun.

Cause : Le plugin réseau terway-eniip a la collecte de journaux activée, ce qui crée une dépendance envers le composant loongcollector (logtail-ds). Par conséquent, ACK ne vous permet pas de désinstaller loongcollector (logtail-ds) tant que cette dépendance n'est pas supprimée.

Solution : Suivez ces étapes pour supprimer la dépendance, puis désinstallez le composant :

  1. Connectez-vous à la console ACK.

  2. Dans la liste des clusters, cliquez sur le nom du cluster cible pour accéder à sa page de détails.

  3. Dans le volet de navigation de gauche, cliquez sur Add-ons.

  4. Dans la liste des add-ons, recherchez le composant terway-eniip et cliquez sur Disable Logging.

  5. Dans la boîte de dialogue qui s'affiche, cliquez sur OK.

  6. Une fois la configuration appliquée, tentez à nouveau de désinstaller le composant loongcollector (logtail-ds).

Dernière entrée de journal retardée ou tronquée

Cause : La troncature des journaux se produit généralement lorsqu'il manque un saut de ligne final dans un fichier journal, ou lorsqu'une entrée multiligne, telle qu'une pile d'exceptions, n'a pas été entièrement écrite. Comme le collecteur ne peut pas déterminer si l'entrée de journal est complète, la dernière entrée peut être divisée ou retardée. La gestion de cette situation dépend de votre version de LoongCollector (Logtail) :

  • Versions antérieures à 1,8 : Si la dernière ligne d'un journal ne contient pas de saut de ligne (retour chariot) ou si un bloc de journal multiligne est incomplet, le collecteur attend la prochaine opération d'écriture pour déclencher une sortie. Cela peut retarder considérablement la dernière entrée de journal jusqu'à ce qu'un nouveau journal soit écrit.

  • Version 1.8 et ultérieures : Ces versions introduisent un mécanisme de vidage avec délai d'expiration pour éviter que les journaux ne restent bloqués. Lorsqu'une ligne de journal incomplète est détectée, le système lance un minuteur. À l'expiration du délai d'attente, le contenu actuel est automatiquement soumis pour garantir que le journal est finalement collecté.

    • Délai d'expiration par défaut : 60 secondes (garantit l'intégrité des données dans la plupart des scénarios)

    • Vous pouvez ajuster cette valeur selon vos besoins. Toutefois, nous vous recommandons de ne pas la définir sur 0, car cela pourrait entraîner une troncature des journaux ou une perte partielle de données.

Solution :

Vous pouvez prolonger le temps d'attente pour vous assurer qu'une entrée de journal complète est écrite avant sa collecte :

  1. Connectez-vous à la console Simple Log Service et accédez au Project cible.

  2. Dans le volet de navigation de gauche, choisissez image Logstores et recherchez le logstore cible.

  3. Cliquez sur l'icône image située à côté de son nom pour développer le logstore.

  4. Cliquez sur Logtail Configuration. Dans la liste des configurations, recherchez la configuration Logtail cible et cliquez sur Manage Logtail Configuration dans la colonne Actions.

  5. Sur la page de configuration Logtail, cliquez sur Edit.

    • Accédez à Input Configurations > Other Input Configurations > Advanced Parameters et ajoutez la configuration JSON suivante pour personnaliser le délai d'expiration.

      {
        "FlushTimeoutSecs": 1
      }
      • Valeur par défaut : Déterminée par le paramètre de démarrage default_reader_flush_timeout, qui est généralement de quelques secondes.

      • Unité : Secondes.

      • Valeur recommandée : ≥ 1 seconde. Nous vous recommandons de ne pas la définir sur 0, car cela pourrait entraîner une troncature des journaux ou une perte partielle de données.

  6. Une fois la configuration terminée, cliquez sur OK.

Basculement et récupération du réseau LoongCollector

Si LoongCollector (Logtail) détecte un problème de connectivité au réseau interne, tel qu'une panne ou un délai d'expiration, il bascule automatiquement vers le réseau public. Ce mécanisme de basculement garantit une collecte fiable des journaux et prévient les retards ou la perte de données.

  • LoongCollector : Rebascule automatiquement vers le réseau interne après la récupération du réseau.

  • Logtail : Ne rebascule pas automatiquement. Vous devez le redémarrer pour rétablir la communication via le réseau interne.

Annexe : Processeurs natifs

Sur la page Logtail Configuration, dans la zone Processor Configurations, vous pouvez ajouter des plug-ins de traitement pour structurer les journaux bruts. Pour ajouter un plug-in de traitement à une configuration de collecte existante, procédez comme suit :

  1. Dans le volet de navigation de gauche, choisissez image Logstores et localisez le Logstore cible.

  2. Cliquez sur image à gauche de son nom pour développer le Logstore.

  3. Cliquez sur Logtail Configuration. Dans la liste des configurations, repérez la configuration Logtail cible et cliquez sur Manage Logtail Configuration dans la colonne Actions.

  4. Sur la page de configuration Logtail, cliquez sur Edit.

Cette section présente uniquement les plug-ins de traitement couramment utilisés qui couvrent les scénarios de traitement de journaux fréquents. Pour en savoir plus sur les autres fonctionnalités, consultez Plug-ins de traitement étendus .
Important

Règles de combinaison des plug-ins (s'applique à LoongCollector / Logtail 2.0 et versions ultérieures) :

  • Les plug-ins de traitement natifs et étendus peuvent être utilisés indépendamment ou conjointement selon vos besoins.

  • Il est recommandé d'utiliser en priorité les plug-ins de traitement natifs, car ils offrent de meilleures performances et une stabilité accrue.

  • Lorsque les fonctionnalités natives ne suffisent pas à répondre aux exigences métier, vous pouvez ajouter des plug-ins de traitement étendus après ceux natifs configurés afin d'effectuer un traitement complémentaire.

Contrainte d'ordre :

Tous les plug-ins sont exécutés séquentiellement dans l'ordre de leur configuration, formant ainsi une chaîne de traitement. Remarque : Tous les plug-ins de traitement natifs doivent précéder tout plug-in de traitement étendu. Une fois que vous avez ajouté un plug-in de traitement étendu, il n'est plus possible d'ajouter d'autres plug-ins de traitement natifs.

Analyse par expression régulière

Ce processeur utilise une expression régulière pour analyser les journaux en paires clé-valeur. Vous pouvez ensuite interroger et analyser chaque champ extrait indépendamment.

Exemple :

Journal brut

Résultat de l'analyse

127.0.0.1 - - [16/Aug/2024:14:37:52 +0800] "GET /wp-admin/admin-ajax.php?action=rest-nonce HTTP/1,1" 200 41 "http://www.example.com/wp-admin/post-new.php?post_type=page" "Mozilla/5,0 (Windows NT 10.0; Win64; x64) AppleWebKit/537,36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36 Edg/127.0.0.0"
body_bytes_sent: 41
http_referer: http://www.example.com/wp-admin/post-new.php?post_type=page
http_user_agent: Mozilla/5,0 (Windows NT 10.0; ×64) AppleWebKit/537,36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36 Edg/127.0.0.0
remote_addr: 127.0.0.1
remote_user: -
request_method: GET
request_protocol: HTTP/1,1
request_uri: /wp-admin/admin-ajax.php?action=rest-nonce
status: 200
time_local: 16/Aug/2024:14:37:52 +0800

Étapes : Sur la page Logtail Configuration, dans la zone Processor Configurations, cliquez sur Add Processor, puis sélectionnez Native Processor > Data Parsing (Regex Mode) :

  • Regular Expression : correspond aux entrées de journal. Vous pouvez soit la générer automatiquement, soit la saisir manuellement.

    • Pour générer automatiquement une expression régulière :

      • Cliquez sur Generate Regular Expression.

      • Dans la zone Log Sample, mettez en surbrillance le contenu à extraire.

      • Cliquez sur Generate.

        image

    • Saisissez manuellement une expression régulière adaptée au format de votre journal.

    Après avoir configuré l'expression, cliquez sur Validate pour vérifier qu'elle analyse correctement votre exemple de journal.

  • Extracted Field : attribuez un nom (clé) au contenu extrait (valeur).

  • Pour plus d'informations sur les autres paramètres, consultez la description des paramètres de configuration courants dans Scénario 2 : Journaux structurés.

Analyse par délimiteur

Ce processeur utilise un délimiteur pour analyser les journaux en paires clé-valeur. Vous pouvez utiliser des délimiteurs constitués d'un ou de plusieurs caractères.

Exemple :

Journal brut

Utilisation du caractère spécifié, pour diviser un champ

05/May/2025:13:30:28,10.10.*.*,"POST /PutData?Category=YunOsAccountOpLog&AccessKeyId=****************&Date=Fri%2C%2028 %20Jun%202013 %2006 %3A53%3A30%20GMT&Topic=raw&Signature=******************************** HTTP/1,1",200,18204,aliyun-sdk-java
ip:10.10.*.*
request:POST /PutData?Category=YunOsAccountOpLog&AccessKeyId=****************&Date=Fri%2C%2028 %20Jun%202013 %2006 %3A53%3A30%20GMT&Topic=raw&Signature=******************************** HTTP/1.1
size:18204
status:200
time:05/May/2025:13:30:28
user_agent:aliyun-sdk-java

Procédure : Sur la page Logtail Configuration, dans la zone Processor Configurations, cliquez sur Add Processor, puis sélectionnez Native Processor > Data Parsing (Delimiter Mode) :

  • Delimiter : caractère qui sépare les champs dans le journal.

    Exemple : pour un fichier CSV, sélectionnez Custom et saisissez une virgule (,).

  • Quote : caractère utilisé pour encadrer la valeur d'un champ. Cette option est nécessaire si une valeur de champ peut contenir le délimiteur, afin d'éviter une division incorrecte.

  • Extracted Field : attribuez un nom de champ (clé) à chaque colonne, dans l'ordre séquentiel. Les noms de champs doivent respecter les règles suivantes :

    • Ils ne peuvent contenir que des lettres, des chiffres et des traits de soulignement (_).

    • Ils doivent commencer par une lettre ou un trait de soulignement (_).

    • Longueur maximale : 128 octets.

  • Pour plus d'informations sur les autres paramètres, consultez la description des paramètres de configuration courants dans Scénario 2 : Journaux structurés.

Analyse JSON standard

Ce processeur analyse une entrée de journal au format objet JSON en paires clé-valeur.

Exemple :

Journal brut

Résultat de l'analyse

{"url": "POST /PutData?Category=YunOsAccountOpLog&AccessKeyId=U0Ujpek********&Date=Fri%2C%2028%20Jun%202013%2006%3A53%3A30%20GMT&Topic=raw&Signature=pD12XYLmGxKQ%2Bmkd6x7hAgQ7b1c%3D HTTP/1.1", "ip": "10.200.98.220", "user-agent": "aliyun-sdk-java", "request": {"status": "200", "latency": "18204"}, "time": "05/Jan/2025:13:30:28"}
ip: 10.200.98.220
request: {"status": "200", "latency" : "18204" }
time: 05/Jan/2025:13:30:28
url: POST /PutData?Category=YunOsAccountOpLog&AccessKeyId=U0Ujpek******&Date=Fri%2C%2028 %20Jun%202013 %2006 %3A53%3A30%20GMT&Topic=raw&Signature=pD12XYLmGxKQ%2Bmkd6x7hAgQ7b1c%3D HTTP/1,1
user-agent:aliyun-sdk-java

Procédure : Sur la page Logtail Configuration, dans la section Processor Configurations, cliquez sur Add Processor, puis sélectionnez Native Processor > Data Parsing (JSON Mode) :

  • Original Field : la valeur par défaut est content. Ce champ stocke le contenu brut du journal à analyser.

  • Pour plus d'informations sur les autres paramètres, consultez la description des paramètres de configuration courants dans Scénario 2 : Journaux structurés.

Analyse JSON imbriqué

Ce processeur développe un objet JSON imbriqué en paires clé-valeur. Vous contrôlez le développement à l'aide du paramètre JSON expansion depth.

Exemple :

Journal brut

Résultat (profondeur : 0)

Résultat (profondeur : 1)

{"s_key":{"k1":{"k2":{"k3":{"k4":{"k51":"51","k52":"52"},"k41":"41"}}}}}
0_s_key_k1_k2_k3_k41:41
0_s_key_k1_k2_k3_k4_k51:51
0_s_key_k1_k2_k3_k4_k52:52
1_s_key:{"k1":{"k2":{"k3":{"k4":{"k51":"51","k52":"52"},"k41":"41"}}}}

Procédure : Sur la page Logtail Configuration, dans la section Processor Configurations, cliquez sur Add Processor, puis sélectionnez Extended Processor > Expand JSON Field :

  • Original Field : nom du champ d'origine à développer, par exemple content.

  • JSON Expansion Depth : nombre de niveaux à développer au sein de l'objet JSON. La valeur 0 développe tous les niveaux (par défaut), 1 développe uniquement le niveau supérieur, etc.

  • Character to Concatenate Expanded Keys : caractère utilisé pour joindre les clés des objets imbriqués. La valeur par défaut est un trait de soulignement (_).

  • Name Prefix of Expanded Keys : préfixe à ajouter au nom de chaque clé développée.

  • Expand Array : activez cette option pour développer un tableau en paires clé-valeur indexées.

    Par exemple, {"k":["a","b"]} se développe en {"k[0]":"a","k[1]":"b"}.

    Pour renommer un champ développé (par exemple, passer de prefix_s_key_k1 à new_field_name ), ajoutez un processeur Rename Fields après celui-ci.
  • Pour plus d'informations sur les autres paramètres, consultez la description des paramètres de configuration courants dans Scénario 2 : Journaux structurés.

Analyse de tableau JSON

Utilisez la fonction json_extract pour extraire un objet JSON d'un tableau JSON.

Exemple :

Journal brut

Résultat de l'analyse

[{"key1":"value1"},{"key2":"value2"}]
json1:{"key1":"value1"}
json2:{"key2":"value2"}

Procédure : Sur la page Logtail Configuration, dans la section Processor Configurations, définissez la Processing Method sur SPL. Configurez ensuite l'instruction SPL pour utiliser la fonction json_extract afin d'extraire les objets JSON du tableau JSON.

Exemple : À partir du champ de journal content, extrayez les éléments d'un tableau JSON et stockez les résultats respectivement dans les nouveaux champs json1 et json2.

* | extend json1 = json_extract(content, '$[0]'), json2 = json_extract(content, '$[1]')

Analyse des journaux Apache

Ce processeur analyse les journaux d'accès Apache en paires clé-valeur selon votre directive Apache LogFormat.

Exemple :

Journal brut

Analyse au format Common Log Format Apache combined

1 192.168.1.10 - - [08/May/2024:15:30:28 +0800] "GET /index.html HTTP/1,1" 200 1234 "https://www.example.com/referrer" "Mozilla/5,0 (Windows NT 10.0; Win64; x64) AppleWebKit/537,36 (KHTML, like Gecko) Chrome/123,0.X.X Safari/537,36"
http_referer:https://www.example.com/referrer
http_user_agent:Mozilla/5,0 (Windows NT 10.0; Win64; x64) AppleWebKit/537,36 (KHTML, like Gecko) Chrome/123,0.X.X Safari/537.36
remote_addr:192.168.1.10
remote_ident:-
remote_user:-
request_method:GET
request_protocol:HTTP/1,1
request_uri:/index.html
response_size_bytes:1234
status:200
time_local:[08/May/2024:15:30:28 +0800]

Procédure : Sur la page Logtail Configuration, dans la section Processor Configurations, cliquez sur Add Processor, puis sélectionnez Native Processor > Data Parsing (Apache Mode) :

  • Log Format : combined

  • APACHE LogFormat Configuration : le système remplit automatiquement ce champ en fonction du Log Format sélectionné.

    Important

    Vérifiez que le contenu renseigné automatiquement est identique à la directive LogFormat définie dans le fichier de configuration Apache de votre serveur, généralement situé à l'emplacement /etc/apache2/apache2.conf.

  • Pour les autres paramètres, consultez la description des paramètres de configuration courants dans Scénario 2 : Journal structuré.

Masquage des données

Masquez les données sensibles présentes dans vos journaux.

Exemple :

Journal brut

Résultat masqué

[{'account':'1812213231432969','password':'04a23f38'}, {'account':'1812213685634','password':'123a'}]
[{'account':'1812213231432969','password':'********'}, {'account':'1812213685634','password':'********'}]

Procédure : Sur la page Logtail Configuration, dans la section Processor Configurations, cliquez sur Add Processor et sélectionnez Native Processor > Data Masking :

  • Original Field : champ source contenant les données à masquer.

  • Data Masking Method :

    • const : remplace les données sensibles par une chaîne spécifiée.

    • md5 : remplace les données sensibles par leur valeur de hachage MD5.

  • Replacement String : chaîne utilisée pour le masquage. Ce paramètre est requis lorsque la Data Masking Method est définie sur const.

  • Content Expression that Precedes Replaced Content : expression régulière utilisant la syntaxe RE2 pour localiser le contenu situé immédiatement avant les données sensibles.

  • Content Expression to Match Replaced Content : expression régulière utilisant la syntaxe RE2 pour identifier les données sensibles à remplacer.

Analyse temporelle

Cette fonction analyse le champ horaire du journal et définit le résultat obtenu comme valeur du champ __time__ du journal.

Exemple :

Journal brut

Résultat analysé

{"level":"INFO","timestamp":"2025-09-23T19:11:47+0800","cluster":"yilu-cluster-0728","message":"User logged in successfully","userId":"user-123"}

image

Procédure : Sur la page Logtail Configuration, dans la section Processor Configurations, cliquez sur Add Processor et sélectionnez Native Processor > Time Parsing :

  • Original Field : champ source contenant la chaîne horaire à analyser.

  • Time Format : format horaire correspondant à la chaîne horaire présente dans vos journaux.

  • Time Zone : fuseau horaire du champ temporel du journal. Si ce paramètre n'est pas spécifié, le fuseau horaire de la machine exécutant LoongCollector (Logtail) est utilisé par défaut.

Annexe : Limitations des expressions régulières (filtrage de conteneur)

Les expressions régulières utilisées pour le filtrage de conteneur s'appuient sur le moteur Go RE2. Par rapport à d'autres moteurs tels que PCRE, le moteur RE2 présente plusieurs limitations syntaxiques. Tenez compte des points suivants lors de la rédaction de vos expressions régulières :

1. Différences de syntaxe pour les groupes nommés

Go utilise la syntaxe (?P<name>...) pour définir un groupe nommé et ne prend pas en charge la syntaxe (?<name>...) issue de PCRE.

  • Correct : (?P<year>\d{4})

  • Incorrect : (?<year>\d{4})

2. Fonctionnalités d'expressions régulières non prises en charge

Le moteur RE2 ne prend pas en charge les fonctionnalités d'expressions régulières courantes mais complexes suivantes. Évitez de les utiliser :

  • Assertions : (?=...), (?!...), (?<=...) et (?<!...)

  • Expressions conditionnelles : (?(condition)true|false)

  • Correspondance récursive : (?R) et (?0)

  • Références de sous-programmes : (?&name) et (?P>name)

  • Groupes atomiques : (?>...)

3. Recommandations

Utilisez un outil tel que Regex101 pour déboguer vos expressions régulières. Afin de garantir la compatibilité, sélectionnez le mode Golang (RE2) pour la validation. L'utilisation d'une syntaxe non prise en charge entraînera l'échec de l'analyse ou de la correspondance de l'expression par le plug-in.

Annexe : Comparaison des versions de la sortie standard des conteneurs

Pour améliorer l'efficacité du stockage et la cohérence de la collecte, le format des métadonnées des journaux pour la sortie standard des conteneurs a été mis à niveau. Le nouveau format regroupe les métadonnées sous le champ __tag__, ce qui optimise le stockage et normalise le format.

Principaux avantages de la nouvelle sortie standard

  • Performances considérablement améliorées

  • Réécrite en C++, la nouvelle version offre une amélioration des performances de 180 % à 300 % par rapport à l'implémentation Go précédente.

  • Elle prend en charge le traitement des données avec des plug-ins natifs et le traitement parallèle multithread, exploitant ainsi pleinement les ressources système.

  • Elle permet des combinaisons flexibles de plug-ins natifs et de plug-ins Go pour répondre aux besoins de scénarios complexes.

  • Fiabilité accrue

  • Elle prend en charge une file d'attente rotative pour les journaux de sortie standard et unifie le mécanisme de collecte des journaux avec celui de la collecte de fichiers, offrant ainsi une haute fiabilité lors de la rotation rapide des journaux de sortie standard.

  • Consommation de ressources réduite

  • L'utilisation du CPU est réduite de 20 % à 25 %.

  • L'utilisation de la mémoire est réduite de 20 % à 25 %.

  • Cohérence O&M renforcée

  • Configuration unifiée des paramètres : les paramètres de configuration du nouveau plug-in de collecte de sortie standard sont identiques à ceux du plug-in de collecte de fichiers.

  • Gestion unifiée des métadonnées : la dénomination des champs de métadonnées des conteneurs et l'emplacement de stockage des tags sont uniformisés avec le scénario de collecte de fichiers, permettant ainsi au côté consommateur de ne maintenir qu'un seul ensemble de logique de traitement.

Comparaison des fonctionnalités entre les nouvelles et anciennes versions

Fonctionnalité

Ancienne version

Nouvelle version

Méthode de stockage

Les métadonnées sont intégrées au contenu du journal sous forme de champs réguliers.

Les métadonnées sont regroupées sous le tag __tag__.

Efficacité du stockage

Chaque entrée de journal contient une copie complète des métadonnées, ce qui consomme davantage d'espace de stockage.

Plusieurs entrées de journal dans le même contexte peuvent réutiliser les métadonnées, ce qui permet de réduire les coûts de stockage.

Cohérence du format

Le format n'est pas cohérent avec celui de la collecte de fichiers de conteneur.

La dénomination des champs et la structure de stockage sont entièrement alignées sur la collecte de fichiers de conteneur, offrant ainsi une expérience unifiée.

Méthode d'accès aux requêtes

Vous pouvez interroger les métadonnées directement par nom de champ, par exemple _container_name_.

Vous devez accéder à la paire clé-valeur correspondante via __tag__, par exemple __tag__: _container_name_.

Mappage des champs de métadonnées des conteneurs

Ancien nom de champ

Nouveau nom de champ

_container_ip_

__tag__:_container_ip_

_container_name_

__tag__:_container_name_

_image_name_

__tag__:_image_name_

_namespace_

__tag__:_namespace_

_pod_name_

__tag__:_pod_name_

_pod_uid_

__tag__:_pod_uid_

Dans la nouvelle version, tous les champs de métadonnées sont stockés dans la section des tags du journal au format __tag__:<key> au lieu d'être intégrés au contenu du journal.

Impact de la nouvelle version sur les utilisateurs

  • Adaptation côté consommateur : étant donné que l'emplacement de stockage passe du contenu au tag, vous devez ajuster votre logique de consommation des journaux en conséquence. Par exemple, vous devez accéder aux champs via __tag__ lors de l'exécution d'une requête.

  • Compatibilité SQL : le langage de requête SQL est déjà automatiquement compatible avec les deux versions, vous n'avez donc pas besoin de modifier vos instructions de requête pour traiter les journaux de l'une ou l'autre version.

Informations complémentaires

Paramètres globaux

Paramètre

Description

Nom de la configuration

Nom de la configuration Logtail. Il doit être unique au sein du projet. Le nom ne peut pas être modifié après la création de la configuration Logtail.

Type de rubrique de journal

Spécifiez comment la rubrique de journal est générée. Les options incluent Machine Group Topic, File Path Extraction et Custom.

Paramètres avancés

Paramètres avancés facultatifs pour la configuration globale. Créer une configuration de pipeline Logtail.

Paramètres d'entrée

Paramètre

Description

Mode de déploiement Logtail

DaemonSet : Déploie un LoongCollector sur chaque nœud du cluster pour collecter les journaux de tous les conteneurs présents sur ce nœud.

Sidecar : Chaque Pod exécute un conteneur LoongCollector afin de collecter les journaux de tous les conteneurs au sein de ce Pod. La collecte des journaux est isolée entre les différents Pods.

Type de chemin de fichier

Prend en charge la configuration d'un Path in Container ou d'un Host Path.

  • Path in Container : Sélectionnez cette option pour collecter des fichiers journaux texte depuis l'intérieur d'un conteneur.

  • Host Path : Sélectionnez cette option pour collecter les journaux de service depuis les nœuds du cluster.

Chemin de fichier

Spécifiez le répertoire des journaux et le nom du fichier en fonction de leur emplacement sur l'hôte, tel qu'une instance ECS.

  • Si l'hôte cible est un système Linux, le chemin du journal doit commencer par une barre oblique (/). Par exemple, /apsara/nuwa/**/app.Log.

  • Si l'hôte cible est un système Windows, le chemin du journal doit commencer par une lettre de lecteur. Par exemple, C:\Program Files\Intel\**\*.Log.

Les noms de répertoires et de fichiers prennent en charge la correspondance exacte ainsi que les caractères génériques. Consultez la page Correspondance avec caractères génériques. Les seuls caractères génériques pris en charge pour les chemins de journaux sont l'astérisque (*) et le point d'interrogation (?).

La collecte des journaux utilise une correspondance de répertoires à plusieurs niveaux. Cela signifie que Logtail recherche tous les fichiers correspondant aux critères dans le répertoire spécifié et dans tous ses sous-répertoires. Par exemple :

  • /apsara/nuwa/**/*.log indique les fichiers portant l'extension .log dans le répertoire /apsara/nuwa et ses sous-répertoires récursifs.

  • /var/logs/app_*/**/.log indique les fichiers portant l'extension .log dans tous les répertoires correspondant au format app_ sous le répertoire /var/logs et leurs sous-répertoires récursifs.

  • /var/log/nginx/**/access* indique les fichiers dont le nom commence par access dans le répertoire /var/log/nginx et ses sous-répertoires récursifs.

Profondeur maximale de surveillance des répertoires

Spécifiez la profondeur maximale des répertoires à surveiller. Il s'agit de la profondeur maximale des répertoires correspondant au caractère générique ** dans le champ File Path. Une valeur de 0 indique que seul le répertoire actuel est surveillé.

Sortie standard

Si vous activez l'option Stdout and Stderr, Logtail collecte la sortie standard du conteneur.

Erreur standard

Si vous activez l'option Standard Error, Logtail collecte l'erreur standard du conteneur.

Autoriser la collecte multiple de la sortie standard

Par défaut, la sortie standard d'un conteneur ne peut être collectée que par une seule configuration Logtail. Pour collecter la sortie standard avec plusieurs configurations, activez l'option Allow File to Be Collected for Multiple Times.

Activer l'aperçu des métadonnées du conteneur

L'activation de l'option Enable Container Metadata Preview vous permet de consulter les métadonnées du conteneur après la création d'une configuration Logtail. Cela inclut les informations sur les conteneurs correspondants ainsi que les informations complètes sur les conteneurs.

Filtrage des conteneurs

  • Conditions de filtrage

Important
  • Un libellé de conteneur correspond au libellé présent dans la sortie de la commande docker inspect et diffère d'un libellé Kubernetes. Obtenir les libellés de conteneur.

  • Une variable d'environnement est configurée au démarrage d'un conteneur. Obtenir les variables d'environnement du conteneur.

  • Dans les scénarios Kubernetes, utilisez les informations au niveau Kubernetes pour le filtrage des conteneurs, telles que K8s Pod Name Regular Matching, K8s Namespace Regular Matching, K8s Container Name Regular Matching et Kubernetes Pod Label Whitelist.

  1. Dans Kubernetes, les namespaces et les noms de conteneurs sont mappés respectivement aux libellés de conteneur io.kubernetes.pod.namespace et io.kubernetes.container.name. Nous vous recommandons d'utiliser ces libellés pour le filtrage des conteneurs. Par exemple, si un Pod appartient au namespace backend-prod et possède un conteneur nommé worker-server, vous pouvez collecter les journaux du conteneur en définissant la liste d'autorisation des libellés de conteneur sur io.kubernetes.pod.namespace : backend-prod ou io.kubernetes.container.name : worker-server.

  2. Si ces deux libellés de conteneur ne répondent pas à vos besoins de filtrage, utilisez la liste d'autorisation ou de blocage des variables d'environnement pour le filtrage des conteneurs.

K8s Pod Name Regular Matching

Spécifiez une expression régulière pour faire correspondre les noms de Pod. Les journaux sont collectés depuis les conteneurs situés dans les Pods correspondants. Par exemple, si vous définissez ce paramètre sur ^(nginx-log-demo.*)$, tous les conteneurs des Pods dont le nom commence par nginx-log-demo sont concernés.

K8s Namespace Regular Matching

Spécifiez une expression régulière pour faire correspondre les namespaces. Les journaux sont collectés depuis les conteneurs situés dans les namespaces correspondants. Par exemple, si vous définissez ce paramètre sur ^(default|nginx)$, tous les conteneurs des namespaces nginx et default sont concernés.

K8s Container Name Regular Matching

Spécifiez une expression régulière pour faire correspondre les noms de conteneur. Le nom du conteneur Kubernetes est défini dans spec.containers. Les journaux sont collectés depuis les conteneurs dont le nom correspond. Par exemple, si vous définissez ce paramètre sur ^(container-test)$, tous les conteneurs nommés container-test sont concernés.

Container Label Whitelist (We recommend that you configure this parameter in a Docker environment and do not configure this parameter in a Kubernetes environment.)

Spécifiez les conteneurs depuis lesquels collecter les journaux. Par défaut, ce champ est vide, ce qui signifie que la sortie standard de tous les conteneurs est collectée. Pour définir une liste d'autorisation de libellés de conteneur, LabelKey est obligatoire et LabelValue est facultatif.

  • Si LabelValue est vide, tous les conteneurs possédant le libellé LabelKey sont concernés.

  • Si LabelValue n'est pas vide, seuls les conteneurs dont le libellé est strictement identique à LabelKey=LabelValue sont concernés.

    Par défaut, LabelValue utilise une correspondance de chaîne. La correspondance aboutit uniquement si LabelValue est identique à la valeur du libellé du conteneur. Si la valeur commence par ^ et se termine par $, une correspondance par expression régulière est utilisée. Par exemple, si vous définissez LabelKey sur io.kubernetes.container.name et LabelValue sur ^(nginx|cube)$, les conteneurs nommés nginx ou cube sont concernés.

Plusieurs entrées de liste d'autorisation ont une relation logique OU. Un conteneur est concerné si son libellé correspond à l'une des entrées de la liste d'autorisation.

Container Label Blacklist (We recommend that you configure this parameter in a Docker environment and do not configure this parameter in a Kubernetes environment.)

Exclut les conteneurs de la collecte des journaux. Par défaut, ce champ est vide, ce qui signifie qu'aucun conteneur n'est exclu. Pour définir une liste de blocage de libellés de conteneur, LabelKey est obligatoire et LabelValue est facultatif.

  • Si LabelValue est vide, tous les conteneurs possédant le libellé LabelKey sont exclus.

  • Si LabelValue n'est pas vide, seuls les conteneurs dont le libellé est strictement identique à LabelKey=LabelValue sont exclus.

    LabelValue utilise par défaut une correspondance de chaîne. La correspondance aboutit uniquement si la valeur de LabelValue est identique à la valeur du libellé du conteneur. Si la valeur commence par ^ et se termine par $, une correspondance par expression régulière est effectuée. Par exemple, si vous définissez LabelKey sur io.kubernetes.container.name et LabelValue sur ^(nginx|cube)$, cela concerne les conteneurs nommés nginx ou cube.

Plusieurs entrées de liste de blocage ont une relation logique OU. Un conteneur est exclu si son libellé correspond à l'une des entrées de la liste de blocage.

Environment Variable Whitelist

Spécifiez les conteneurs depuis lesquels collecter les journaux. Par défaut, ce champ est vide, ce qui signifie que la sortie standard de tous les conteneurs est collectée. Pour définir une liste d'autorisation de variables d'environnement, EnvKey est obligatoire et EnvValue est facultatif.

  • Si EnvValue est vide, tous les conteneurs possédant la variable d'environnement EnvKey sont concernés.

  • Si EnvValue n'est pas vide, seuls les conteneurs dont la variable d'environnement est strictement identique à EnvKey=EnvValue sont concernés.

    Par défaut, EnvValue utilise une correspondance de chaîne. La correspondance aboutit uniquement si la valeur de EnvValue est identique à la valeur de la variable d'environnement. Si la valeur commence par ^ et se termine par $, il s'agit d'une correspondance par expression régulière. Par exemple, si vous définissez EnvKey sur NGINX_SERVICE_PORT et EnvValue sur ^(80|6379)$, cette configuration concerne les conteneurs dont le port de service est 80 ou 6379.

Plusieurs entrées de liste d'autorisation ont une relation logique OU. Un conteneur est concerné si ses variables d'environnement correspondent à l'une des paires clé-valeur spécifiées.

Environment Variable Blacklist

Exclut les conteneurs de la collecte des journaux. Par défaut, ce champ est vide, ce qui signifie qu'aucun conteneur n'est exclu. Pour définir une liste de blocage de variables d'environnement, EnvKey est obligatoire et EnvValue est facultatif.

  • Si EnvValue est vide, les journaux de tous les conteneurs possédant la variable d'environnement EnvKey sont exclus.

  • Si EnvValue n'est pas vide, seuls les conteneurs dont la variable d'environnement est strictement identique à EnvKey=EnvValue sont exclus.

    Par défaut, EnvValue utilise une correspondance de chaîne, ce qui signifie que la correspondance aboutit uniquement si la valeur de EnvValue est identique à la valeur de la variable d'environnement. Si la valeur commence par ^ et se termine par $, elle est traitée comme une expression régulière. Par exemple, si vous définissez EnvKey sur NGINX_SERVICE_PORT et EnvValue sur ^(80|6379)$, cette configuration concerne les conteneurs dont le port de service est 80 ou 6379.

Plusieurs entrées de liste de blocage ont une relation logique OU. Un conteneur est exclu si ses variables d'environnement correspondent à l'une des paires clé-valeur spécifiées.

Kubernetes Pod Label Whitelist

Spécifiez les conteneurs depuis lesquels collecter les journaux en utilisant une liste d'autorisation de libellés Kubernetes. Pour définir une liste d'autorisation de libellés Kubernetes, LabelKey est obligatoire et LabelValue est facultatif.

  • Si LabelValue est vide, tous les conteneurs possédant le libellé Kubernetes LabelKey sont concernés.

  • Si LabelValue n'est pas vide, seuls les conteneurs dont le libellé Kubernetes est strictement identique à LabelKey=LabelValue sont concernés.

    Par défaut, LabelValue utilise une correspondance de chaîne, ce qui signifie que la correspondance aboutit uniquement si LabelValue est identique à la valeur du libellé Kubernetes. Si la valeur commence par ^ et se termine par $, elle est traitée comme une expression régulière. Par exemple, définir LabelKey sur app et LabelValue sur ^(test1|test2)$ concerne les conteneurs possédant le libellé Kubernetes app:test1 ou app:test2.

Plusieurs entrées de liste d'autorisation ont une relation logique OU. Un conteneur est concerné si son libellé Kubernetes correspond à l'une des entrées de la liste d'autorisation.

Remarque
  • Si vous modifiez un libellé sur un contrôleur de ressources Kubernetes tel qu'un Deployment pendant l'exécution, le Pod en cours d'exécution n'est pas redémarré. Par conséquent, le Pod ne peut pas détecter la modification, ce qui peut entraîner l'échec des règles de correspondance. Lorsque vous configurez la liste d'autorisation et la liste de blocage des libellés Kubernetes, utilisez les libellés Kubernetes présents sur les Pods. Pour plus d'informations sur les libellés Kubernetes, consultez la page Labels and Selectors.

Kubernetes Pod Label Blacklist

Exclut les conteneurs de la collecte des journaux en utilisant une liste de blocage de libellés Kubernetes. Pour définir une liste de blocage de libellés Kubernetes, LabelKey est obligatoire et LabelValue est facultatif.

  • Si LabelValue est vide, tous les conteneurs possédant le libellé Kubernetes LabelKey sont exclus.

  • Si LabelValue n'est pas vide, seuls les conteneurs dont le libellé Kubernetes est strictement identique à LabelKey=LabelValue sont exclus.

    Par défaut, LabelValue effectue une correspondance exacte de chaîne. La correspondance aboutit uniquement si LabelValue est identique à la valeur du libellé Kubernetes. Si la valeur commence par ^ et se termine par $, elle est traitée comme une expression régulière. Par exemple, si vous définissez LabelKey sur app et LabelValue sur ^(test1|test2)$, cela concerne les conteneurs possédant les libellés Kubernetes app:test1 ou app:test2.

Plusieurs entrées de liste de blocage ont une relation logique OU. Un conteneur est exclu si son libellé Kubernetes correspond à l'une des entrées de la liste de blocage.

Remarque
  • Si vous modifiez un libellé sur un contrôleur de ressources Kubernetes tel qu'un Deployment pendant l'exécution, le Pod en cours d'exécution n'est pas redémarré. Par conséquent, le Pod ne peut pas détecter la modification, ce qui peut entraîner l'échec des règles de correspondance. Lorsque vous configurez la liste d'autorisation et la liste de blocage des libellés Kubernetes, utilisez les libellés Kubernetes présents sur les Pods. Pour plus d'informations sur les libellés Kubernetes, consultez la page Labels and Selectors.

Enrichissement des tags de journal

Ajoute des variables d'environnement et des libellés Kubernetes aux journaux sous forme de tags de journal.

Environment Variables

Après avoir configuré les champs d'extension de variable d'environnement, Log Service ajoute des champs liés aux variables d'environnement à vos journaux. Par exemple, si vous définissez Environment Variable Name sur VERSION et Tag Name sur env_version, et qu'un conteneur possède la variable d'environnement VERSION=v1.0.0, le champ __tag__:__env_version__: v1.0.0 est ajouté à vos journaux.

Pod Labels

Après avoir configuré les champs d'extension de Pod Kubernetes, Log Service ajoute des champs liés aux Pods Kubernetes à vos journaux. Par exemple, si vous définissez Pod Label Name sur app et Tag Name sur k8s_pod_app, le champ __tag__:__k8s_pod_app__: serviceA est ajouté aux journaux d'un Pod possédant le libellé app=serviceA.

Encodage de fichier

Spécifiez le format d'encodage des fichiers journaux.

Taille de la première collecte

Lorsque la configuration prend effet pour la première fois, ce paramètre spécifie la position de départ de la collecte, mesurée à partir de la fin du fichier. La valeur par défaut est de 1 024 Ko.

  • Pour la première collecte, si un fichier est inférieur à 1 024 Ko, la collecte commence depuis le début du fichier.

  • Pour la première collecte, si un fichier est supérieur à 1 024 Ko, la collecte commence à 1 024 Ko de la fin du fichier.

Vous pouvez modifier la valeur de First Collection Size. La valeur, exprimée en Ko, peut aller de 0 à 10 485 760.

Liste de blocage de collecte

L'activation de l'option Collection Blacklist vous permet de configurer une liste de blocage pour ignorer certains répertoires ou fichiers lors de la collecte. Vous pouvez spécifier des répertoires et des noms de fichiers par correspondance exacte ou à l'aide de caractères génériques. Les seuls caractères génériques pris en charge sont l'astérisque (*) et le point d'interrogation (?).

Important
  • Si vous utilisez un caractère générique dans le champ File Path mais souhaitez filtrer certains des chemins résultants, vous devez saisir les chemins complets correspondants dans la Collection Blacklist pour garantir que la configuration de la liste de blocage prenne effet.

    Par exemple, si vous définissez le File Path sur /home/admin/app/log/.log mais souhaitez exclure tous les sous-répertoires du répertoire /home/admin/app1, sélectionnez Directory Blacklist et définissez le répertoire sur /home/admin/app1/**. Si vous définissez le répertoire sur /home/admin/app1*, la liste de blocage ne prendra pas effet.

  • La correspondance avec la liste de blocage entraîne une surcharge de calcul. Pour des performances optimales, utilisez 10 entrées de liste de blocage ou moins.

  • Un chemin de répertoire ne peut pas se terminer par une barre oblique (/). Par exemple, si vous définissez le chemin sur /home/admin/dir1/, la liste de blocage de répertoires ne prend pas effet.

Vous pouvez configurer une liste de blocage par chemin de fichier, nom de fichier ou répertoire.

File Path Blacklist

  • Sélectionnez File Path Blacklist et définissez le chemin sur /home/admin/private*.log pour ignorer tous les fichiers du répertoire /home/admin/ commençant par private et se terminant par .log lors de la collecte.

  • Sélectionnez File Path Blacklist et définissez le chemin sur /home/admin/private/_inner.log pour ignorer les fichiers se terminant par _inner.log dans les répertoires commençant par private sous le répertoire /home/admin/. Par exemple, le fichier /home/admin/private/app_inner.log est ignoré, mais le fichier /home/admin/private/app.log est collecté.

Liste de blocage de fichiers

Si vous sélectionnez File Blacklist et définissez le nom de fichier sur app_inner.log, tous les fichiers nommés app_inner.log sont ignorés lors de la collecte.

Liste de blocage de répertoires

  • Sélectionnez Directory Blacklist et définissez le répertoire sur /home/admin/dir1. Cela ignore tous les fichiers du répertoire /home/admin/dir1 lors de la collecte.

  • Sélectionnez Directory Blacklist et définissez le répertoire sur /home/admin/dir* pour ignorer tous les fichiers des sous-répertoires commençant par dir sous le répertoire /home/admin/ lors de la collecte.

  • Sélectionnez Directory Blacklist et définissez le répertoire sur /home/admin/*/dir. Cela ignore tous les fichiers de tout sous-répertoire de deuxième niveau nommé dir sous le répertoire /home/admin/ lors de la collecte. Par exemple, les fichiers du répertoire /home/admin/a/dir sont ignorés, mais les fichiers du répertoire /home/admin/a/b/dir sont collectés.

Autoriser la collecte multiple d'un fichier

Par défaut, un fichier journal ne peut correspondre qu'à une seule configuration Logtail. Si les journaux d'un fichier doivent être collectés plusieurs fois, activez l'option Allow File to Be Collected for Multiple Times.

Paramètres avancés

Paramètres avancés facultatifs pour le plug-in d'entrée de fichier. Créer une configuration de pipeline Logtail.

Paramètres du processeur

Paramètre

Description

Exemple de journal

Un exemple du journal que vous souhaitez collecter. Utilisez un exemple de journal issu de votre cas d'utilisation réel. L'exemple vous aide à configurer plus facilement les paramètres de traitement. Vous pouvez ajouter plusieurs exemples. La longueur totale ne peut pas dépasser 1 500 caractères.

[2023-10-01T10:30:01,000] [INFO] java.lang.Exception: exception happened
    at TestPrintStackTrace.f(TestPrintStackTrace.java:3)
    at TestPrintStackTrace.g(TestPrintStackTrace.java:7)
    at TestPrintStackTrace.main(TestPrintStackTrace.java:16)

Mode multiligne

  • Type de journal multiligne : Un journal multiligne est une entrée qui s'étend sur plusieurs lignes. Vous devez définir une règle pour identifier le début de chaque entrée de journal.

    • Custom : Utilise une Regex to Match First Line pour identifier chaque entrée de journal.

    • Multi-line JSON : Chaque objet JSON est développé sur plusieurs lignes. Exemple :

      {
        "name": "John Doe",
        "age": 30,
        "address": {
          "city": "New York",
          "country": "USA"
        }
      }
  • Action en cas d'échec du fractionnement :

    Exception in thread "main" java.lang.NullPointerException
        at com.example.MyClass.methodA(MyClass.java:12)
        at com.example.MyClass.methodB(MyClass.java:34)
        at com.example.MyClass.main(MyClass.java:½0)

    Si Log Service ne parvient pas à fractionner le contenu du journal précédent :

    • Discard : Ignore ce segment de journal.

    • Retain Single Line : Conserve chaque ligne de texte en tant qu'entrée de journal distincte, ce qui donne un total de quatre entrées de journal.

Mode de traitement

Processors, qui inclut le Native Processor et le Extended Processor. Pour plus d'informations sur les processeurs, consultez la rubrique Utiliser des processeurs natifs et étendus.

Important

Reportez-vous aux invites de la console pour connaître les limitations d'utilisation des processeurs.

  • Logtail 2.0 et versions ultérieures :

    • Vous pouvez combiner les processeurs natifs de n'importe quelle manière.

    • Vous pouvez combiner des processeurs natifs et étendus, mais tous les processeurs étendus doivent suivre tous les processeurs natifs.

  • Versions de Logtail antérieures à 2.0 :

    • Vous ne pouvez pas utiliser conjointement des processeurs natifs et étendus.

    • Les processeurs natifs peuvent être utilisés uniquement pour collecter des journaux texte. Lors de l'utilisation de processeurs natifs, vous devez respecter les exigences suivantes :

      • Le premier processeur doit être un processeur d'analyse par expression régulière, d'analyse basée sur des délimiteurs, d'analyse JSON, d'analyse de modèle Nginx, d'analyse de modèle Apache ou d'analyse de modèle IIS.

      • Après le processeur d'analyse initial, vous pouvez ajouter au maximum un processeur d'analyse temporelle, un processeur de filtrage et plusieurs processeurs de masquage de données.

    • Pour les paramètres Retain Original Field if Parsing Fails et Retain Original Field if Parsing Succeeds, seules les combinaisons suivantes sont valides.

      • Télécharger uniquement les journaux analysés avec succès :

        image

      • Télécharger les journaux analysés en cas de succès et les journaux bruts en cas d'échec :

        image

      • En cas de succès, téléchargez les journaux analysés et ajoutez le champ de journal brut. En cas d'échec, téléchargez les journaux bruts.

        Par exemple, si le journal original "content": "{"request_method":"GET", "request_time":"200"}" est analysé avec succès, l'ajout du champ original ajoute un nouveau champ au journal analysé. Le nom du champ est le nom du champ original renommé (s'il est laissé vide, le nom prend par défaut le nom du champ original), et la valeur du champ est le journal original {"request_method":"GET", "request_time":"200"}.

        image