Tous les produits
Search
Centre de documentation

Simple Log Service:Installer LoongCollector sur Kubernetes

Dernière mise à jour :Aug 18, 2026

LoongCollector est l'agent de collecte de journaux SLS de nouvelle génération et le successeur de Logtail. Installez-le dans un cluster Kubernetes en mode DaemonSet ou sidecar.

Prérequis

Avant d'installer LoongCollector, vérifiez la connectivité réseau entre les nœuds de votre cluster et l'endpoint SLS.

  1. Obtenez l'endpoint :

    1. Connectez-vous à la console Simple Log Service. Dans la liste des projets, cliquez sur le projet de destination.

    2. Cliquez sur l'icône image située à côté du nom du projet pour ouvrir la page de présentation du projet.

    3. Dans la section des endpoints, repérez les endpoints publics et privés correspondant à la région du projet.

  2. Exécutez un test de connectivité : Connectez-vous à un nœud du cluster et exécutez la commande curl suivante. Remplacez ${PROJECT_NAME} et ${SLS_ENDPOINT} par vos valeurs réelles.

    curl https://${PROJECT_NAME}.${SLS_ENDPOINT}
  3. Vérifiez les résultats :

    • Si la commande renvoie {"Error":{"Code":"OLSInvalidMethod",...}}, la connexion réseau entre votre nœud et Simple Log Service est établie.

      Remarque

      Cette erreur est attendue : le test vérifie uniquement la connectivité réseau. SLS renvoie une erreur car la requête ne contient pas les paramètres d'API requis.

    • Si la commande expire ou renvoie des erreurs telles que Connection refused, vérifiez la configuration réseau du nœud, les règles du groupe de sécurité et la résolution DNS.

Choisir une méthode d'installation

Sélectionnez une méthode en fonction du type de votre cluster.

Méthode d'installation

Cas d'utilisation

Installation sur un cluster ACK (mode DaemonSet)

Collecte de journaux provenant des clusters gérés et dédiés ACK au sein du même compte Alibaba Cloud et de la même région.

Installation sur un cluster auto-géré (mode DaemonSet)

  • Collecte de journaux provenant de clusters ACK situés dans différents comptes Alibaba Cloud ou régions.

  • Collecte de journaux provenant de clusters Kubernetes dans des centres de données auto-gérés.

  • Collecte de journaux provenant de clusters Kubernetes hébergés chez d'autres fournisseurs cloud.

Installation en mode Sidecar

Collecte de journaux pour des applications spécifiques répondant aux exigences suivantes :

  • Isolation des ressources : Empêche l'agent DaemonSet d'affecter les autres pods sur le nœud.

  • Collecte granulaire : Configurez une source de collecte, des règles de filtrage et une destination de sortie distinctes pour chaque application.

Installer sur un cluster ACK (mode DaemonSet)

Remarque

Si vous effectuez une mise à niveau depuis logtail-ds, désinstallez-le avant d'installer LoongCollector.

Installez LoongCollector en un clic depuis la console ACK. Par défaut, il collecte les journaux des conteneurs vers un projet situé dans le même compte et la même région. Pour une collecte inter-comptes ou inter-régions, consultez la section Installation sur un cluster auto-géré (mode DaemonSet).

Cluster ACK existant

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

  2. Sur la page Clusters, cliquez sur le nom de votre cluster. Dans le volet de navigation de gauche, cliquez sur Components and Add-ons .

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

  4. Après l'installation, SLS crée automatiquement les ressources suivantes dans la région du cluster. Vous pouvez les consulter dans la console Simple Log Service.

    Type

    Paramètre

    Description

    Projet

    k8s-log-${cluster_id}

    Unité de gestion des ressources qui isole les journaux des différents services.

    groupe de machines

    k8s-group-${cluster_id}

    Groupe de machines pour la collecte de journaux loongcollector-ds.

    k8s-group-${cluster_id}-cluster

    Groupe de machines pour la collecte de métriques loongcollector-cluster.

    k8s-group-${cluster_id}-singleton

    Groupe de machines pour la collecte mono-instance.

    Important

    LoongCollector ne crée pas de LogStore nommé config-operation-log. S'il existe déjà, LoongCollector n'y écrit pas.

Nouveau cluster ACK

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

  2. Cliquez sur Create Cluster. Sur la page Component Configurations, cochez la case Enable Log Service, puis sélectionnez Create New Project ou Use Existing Project.

    Cette rubrique couvre uniquement les configurations liées à SLS. Les autres paramètres du cluster sont documentés dans Créer un cluster ACK géré .
  3. Si vous sélectionnez Create Project, SLS crée automatiquement les ressources suivantes. Vous pouvez les consulter dans la console Simple Log Service.

    Type

    Paramètre

    Description

    Projet

    k8s-log-${cluster_id}

    Unité de gestion des ressources qui isole les journaux des différents services.

    groupe de machines

    k8s-group-${cluster_id}

    Groupe de machines pour la collecte de journaux loongcollector-ds.

    k8s-group-${cluster_id}-cluster

    Groupe de machines pour la collecte de métriques loongcollector-cluster.

    k8s-group-${cluster_id}-singleton

    Groupe de machines pour la collecte mono-instance.

    Important

    LoongCollector ne crée pas de LogStore nommé config-operation-log. S'il existe déjà, LoongCollector n'y écrit pas.

Installer sur un cluster auto-géré (mode DaemonSet)

Cas d'utilisation

  • Clusters Kubernetes dans des centres de données auto-gérés

  • Clusters Kubernetes déployés chez d'autres fournisseurs cloud

  • Collecte de journaux de conteneurs depuis des clusters ACK Alibaba Cloud situés dans différents comptes ou régions

Remarque

Assurez-vous que votre cluster auto-géré exécute Kubernetes 1.6 ou une version ultérieure.

Procédure

  1. Téléchargez et extrayez le package d'installation : Sur une machine où kubectl est configuré, exécutez la commande correspondant à la région de votre cluster.

    # Regions in Chinese mainland
    wget https://aliyun-observability-release-cn-shanghai.oss-cn-shanghai.aliyuncs.com/loongcollector/k8s-custom-pkg/3.2.6/loongcollector-custom-k8s-package.tgz; tar xvf loongcollector-custom-k8s-package.tgz; chmod 744 ./loongcollector-custom-k8s-package/k8s-custom-install.sh
    # Regions outside Chinese mainland
    wget https://aliyun-observability-release-ap-southeast-1.oss-ap-southeast-1.aliyuncs.com/loongcollector/k8s-custom-pkg/3.2.6/loongcollector-custom-k8s-package.tgz; tar xvf loongcollector-custom-k8s-package.tgz; chmod 744 ./loongcollector-custom-k8s-package/k8s-custom-install.sh
  2. Modifiez values.yaml : Dans le répertoire loongcollector-custom-k8s-package, modifiez le fichier ./loongcollector/values.yaml.

    Description

    values.yaml

    # ===================== Required Parameters =====================
    # The name of the Project for log collection in this cluster. Example: k8s-log-custom-sd89ehdq
    projectName: ""
    # The region of the Project. Example for Shanghai: cn-shanghai
    region: ""
    # The ID of the Alibaba Cloud account that owns the Project. Enclose the ID in quotation marks. Example: "123456789"
    aliUid: ""
    # The network type to use. Options: Internet or Intranet. Default: Internet
    net: Internet
    # The AccessKey ID and AccessKey secret of the Alibaba Cloud account or RAM user.
    accessKeyID: ""
    accessKeySecret: ""
    # A custom cluster ID. The ID can contain uppercase letters, lowercase letters, digits, and hyphens (-).
    clusterID: ""
    
    # ... Other optional parameters are omitted ...

    projectName String (Obligatoire)

    Nom du projet vers lequel LoongCollector télécharge les journaux. Les conventions de nommage sont les suivantes :

    • Le nom du projet ne peut contenir que des lettres minuscules, des chiffres et des traits d'union (-).

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

    • La longueur du nom doit être comprise entre 3 et 63 caractères.

    region String (Obligatoire)

    ID de la région où se trouve le projet. Pour obtenir la liste des ID de région, consultez la section Régions.

    aliUid String (Obligatoire)

    ID du compte Alibaba Cloud propriétaire du projet.

    net String (Obligatoire)

    Type de réseau utilisé pour la transmission des données de journal.

    • Internet (par défaut) : Réseau public.

    • Intranet : Réseau interne.

    accessKeyID String (Obligatoire)

    AccessKey ID du compte propriétaire du projet. Pour une meilleure sécurité, utilisez l'AccessKey d'un utilisateur RAM disposant de la stratégie AliyunLogFullAccess. Présentation des utilisateurs RAM.

    accessKeySecret String (Obligatoire)

    AccessKey Secret correspondant à l'AccessKey ID spécifié.

    clusterID String (Obligatoire)

    ID personnalisé pour le cluster. L'ID ne peut contenir que des lettres majuscules, des lettres minuscules, des chiffres et des traits d'union (-).

    Important

    N'attribuez pas le même ID de cluster à différents clusters Kubernetes.

  3. Exécutez le script d'installation : Depuis le répertoire loongcollector-custom-k8s-package, exécutez la commande suivante pour installer LoongCollector.

    bash k8s-custom-install.sh install
  4. Vérifiez l'installation : Exécutez la commande suivante pour vérifier l'état des composants :

    # Check the pod status
    kubectl get po -n kube-system | grep loongcollector-ds

    Exemple de sortie :

    loongcollector-ds-gnmnh   1/1     Running   0    63s

    Si un composant ne démarre pas (son état n'est pas Running) :

    1. Vérifiez les paramètres dans values.yaml.

    2. Vérifiez l'image : Exécutez la commande suivante et examinez la section Events pour confirmer que l'image a été extraite.

      kubectl describe pod loongcollector-ds -n kube-system
  5. Après l'installation, SLS crée automatiquement les ressources suivantes, consultables dans la console Simple Log Service.

    Type de ressource

    Nom de la ressource

    Objectif

    Projet

    Le projectName spécifié dans le fichier values.yaml

    Unité de gestion des ressources qui isole les journaux des différents services.

    groupe de machines

    k8s-group-${cluster_id}

    Groupe de nœuds utilisé pour la collecte de journaux.

    k8s-group-${cluster_id}-cluster

    Groupe de machines pour loongcollector-cluster. Utilisé pour la collecte de métriques.

    k8s-group-${cluster_id}-singleton

    Groupe de machines mono-instance pour la collecte mono-instance.

    Important

    LoongCollector ne crée pas de LogStore nommé config-operation-log. S'il existe déjà, LoongCollector cesse d'y écrire.

Installer en mode sidecar

Utilisez le mode sidecar pour une gestion granulaire des journaux, l'isolation multi-locataire ou la collecte de journaux couplée au cycle de vie. Un conteneur LoongCollector dédié est injecté dans chaque pod d'application. Pour tester le processus, utilisez l'exemple Annexe : Exemple YAML.

1. Modifier la configuration YAML du pod

  1. Définissez les volumes partagés

    Dans spec.template.spec.volumes, ajoutez trois volumes partagés au même niveau que containers :

    volumes:
      # Shared log directory (written by the application container, read by the sidecar)
      - name: ${shared_volume_name} # <-- The name must match the name in volumeMounts
        emptyDir: {}
      # Signal directory for inter-container communication (for graceful start/stop)
      - name: tasksite
        emptyDir:
          medium: Memory  # Use memory as the medium for better performance
          sizeLimit: "50Mi"
      # Shared host time zone configuration: Synchronizes the time zone for all containers in the pod
      - name: tz-config # <-- The name must match the name in volumeMounts
        hostPath:
          path: /usr/share/zoneinfo/Asia/Shanghai  # Modify the time zone as needed
    
  2. Configurez les montages du conteneur d'application

    Dans la section volumeMounts de votre conteneur d'application, tel que your-business-app-container, ajoutez les montages de volume suivants :

    Assurez-vous que le conteneur d'application écrit les journaux dans le répertoire ${shared_volume_path} afin que LoongCollector puisse les collecter.
    volumeMounts:
      # Mount the shared log volume to the application log output directory
      - name: ${shared_volume_name}
        mountPath: ${shared_volume_path}  # Example: /var/log/app
      # Mount the communication directory
      - name: tasksite
        mountPath: /tasksite  # Shared directory for communication with the LoongCollector container
      # Mount the timezone file
      - name: tz-config
        mountPath: /etc/localtime
        readOnly: true
    
  3. Injectez le conteneur sidecar LoongCollector

    Dans le tableau spec.template.spec.containers, ajoutez la définition de conteneur sidecar suivante :

    - name: loongcollector
      image: aliyun-observability-release-registry.cn-shenzhen.cr.aliyuncs.com/loongcollector/loongcollector:v3.1.1.0-20fa5eb-aliyun
      command: ["/bin/bash", "-c"]
      args:
        - |
          echo "[$(date)] LoongCollector: Starting initialization"
          # Start the LoongCollector service
          /etc/init.d/loongcollectord start
          # Wait for the configuration to download and the service to be ready
          sleep 15
          # Verify the service status
          if /etc/init.d/loongcollectord status; then
            echo "[$(date)] LoongCollector: Service started successfully"
            touch /tasksite/cornerstone
          else
            echo "[$(date)] LoongCollector: Failed to start service"
            exit 1
          fi
          # Wait for the application container to complete (via the tombstone file signal)
          echo "[$(date)] LoongCollector: Waiting for application container to complete"
          until [[ -f /tasksite/tombstone ]]; do
            sleep 2
          done
          # Allow time to upload remaining logs
          echo "[$(date)] LoongCollector: Business completed, waiting for log transmission"
          sleep 30
          # Stop the service
          echo "[$(date)] LoongCollector: Stopping service"
          /etc/init.d/loongcollectord stop
          echo "[$(date)] LoongCollector: Shutdown complete"
      # health check
      livenessProbe:
        exec:
          command: ["/etc/init.d/loongcollectord", "status"]
        initialDelaySeconds: 30
        periodSeconds: 10
        timeoutSeconds: 5
        failureThreshold: 3
      # resource configuration
      resources:
        requests:
          cpu: "100m"
          memory: "128Mi"
        limits:
          cpu: "2000m"
          memory: "2048Mi"
      # environment variable configuration
      env:
        - name: ALIYUN_LOGTAIL_USER_ID
          value: "${your_aliyun_user_id}"
        - name: ALIYUN_LOGTAIL_USER_DEFINED_ID
          value: "${your_machine_group_user_defined_id}"
        - name: ALIYUN_LOGTAIL_CONFIG
          value: "/etc/ilogtail/conf/${your_region_config}/ilogtail_config.json"
        # Enable full drain mode to ensure all logs are sent before the pod terminates
        - name: enable_full_drain_mode
          value: "true"  
        # Append pod environment information as log tags
        - name: ALIYUN_LOG_ENV_TAGS
          value: "_pod_name_|_pod_ip_|_namespace_|_node_name_|_node_ip_"
        # Automatically inject pod and node metadata as log tags
        - name: "_pod_name_"
          valueFrom:
            fieldRef:
              fieldPath: metadata.name
        - name: "_pod_ip_"
          valueFrom:
            fieldRef:
              fieldPath: status.podIP
        - name: "_namespace_"
          valueFrom:
            fieldRef:
              fieldPath: metadata.namespace
        - name: "_node_name_"
          valueFrom:
            fieldRef:
              fieldPath: spec.nodeName
        - name: "_node_ip_"
          valueFrom:
            fieldRef:
              fieldPath: status.hostIP
      # Volume mounts (shared with the application container)
      volumeMounts:
        # Read-only mount for the application log directory
        - name: ${shared_volume_name} # <-- Shared log directory name
          mountPath: ${dir_containing_your_files} # <-- Path to the shared directory in the sidecar
          readOnly: true
        # Mount the communication directory
        - name: tasksite
          mountPath: /tasksite
        # Mount the timezone
        - name: tz-config
          mountPath: /etc/localtime
          readOnly: true
    

2. Adapter la logique du cycle de vie du conteneur d'application

Selon le type de charge de travail, modifiez le conteneur d'application pour prendre en charge une sortie coordonnée avec le sidecar :

Tâches éphémères (Job/CronJob)

# 1. Wait for LoongCollector to be ready
echo "[$(date)] Application: Waiting for LoongCollector to be ready..."
until [[ -f /tasksite/cornerstone ]]; do
  sleep 1
done
echo "[$(date)] Application: LoongCollector is ready, starting application logic"
# 2. Execute core application logic (ensure logs are written to the shared directory)
echo "Hello, World!" >> /app/logs/business.log
# 3. Save the exit code
retcode=$?
echo "[$(date)] Application: Task completed with exit code: $retcode"
# 4. Notify LoongCollector that the application task is complete
touch /tasksite/tombstone
echo "[$(date)] Application: Tombstone created, exiting"
exit $retcode

Services de longue durée (Deployment / StatefulSet)

# Define the signal handler function
_term_handler() {
    echo "[$(date)] [nginx-demo] Caught SIGTERM, starting graceful shutdown..."
    # Send a QUIT signal to Nginx for a graceful stop
    if [ -n "$NGINX_PID" ]; then
        kill -QUIT "$NGINX_PID" 2>/dev/null || true
        echo "[$(date)] [nginx-demo] Sent SIGQUIT to Nginx PID: $NGINX_PID"
        # Wait for Nginx to stop gracefully
        wait "$NGINX_PID"
        EXIT_CODE=$?
        echo "[$(date)] [nginx-demo] Nginx stopped with exit code: $EXIT_CODE"
    fi
    # Notify LoongCollector that the application container has stopped
    echo "[$(date)] [nginx-demo] Writing tombstone file"
    touch /tasksite/tombstone
    exit $EXIT_CODE
}
# Register the signal handler
trap _term_handler SIGTERM SIGINT SIGQUIT
# Wait for LoongCollector to be ready
echo "[$(date)] [nginx-demo]: Waiting for LoongCollector to be ready..."
until [[ -f /tasksite/cornerstone ]]; do 
    sleep 1
done
echo "[$(date)] [nginx-demo]: LoongCollector is ready, starting application logic"
# Start Nginx
echo "[$(date)] [nginx-demo] Starting Nginx..."
nginx -g 'daemon off;' &
NGINX_PID=$!
echo "[$(date)] [nginx-demo] Nginx started with PID: $NGINX_PID"
# Wait for the Nginx process
wait $NGINX_PID
EXIT_CODE=$?
# Also notify LoongCollector if the exit was not caused by a signal
if [ ! -f /tasksite/tombstone ]; then
    echo "[$(date)] [nginx-demo] Unexpected exit, writing tombstone"
    touch /tasksite/tombstone
fi
exit $EXIT_CODE

3. Définir la période de grâce de terminaison

Dans spec.template.spec, définissez une période de grâce de terminaison suffisamment longue pour permettre à LoongCollector de téléverser tous les journaux restants.

spec:
  # ... Your other existing spec configurations ...
  template:
    spec:
      terminationGracePeriodSeconds: 600  # 10-minute graceful stop period

4. Variables

Paramètre

Description

${your_aliyun_user_id}

L'ID de votre compte Alibaba Cloud. Configurer les identifiants utilisateur.

${your_machine_group_user_defined_id}

Un identifiant personnalisé utilisé pour créer un groupe de machines. Exemple : nginx-log-sidecar.

Important

Assurez-vous que cet identifiant est unique dans la région du projet.

${your_region_config}

La configuration correspondant à la région de votre projet SLS et au type d'accès réseau. Régions de service.

Exemple : Si votre projet se trouve dans la région Chine (Hangzhou), utilisez cn-hangzhou pour l'accès au réseau interne Alibaba Cloud ou cn-hangzhou-internet pour l'accès au réseau public.

${shared_volume_name}

Un nom personnalisé pour le volume partagé.

Important

Le name dans volumeMounts doit correspondre au name dans volumes. Cela garantit que les deux conteneurs montent le même volume partagé.

${dir_containing_your_files}

Le chemin de montage dans le conteneur LoongCollector où se trouvent les journaux texte.

5. Appliquer la configuration et vérifier

  1. Exécutez la commande suivante pour déployer les modifications :

    kubectl apply -f <YOUR-YAML>
  2. Vérifiez l'état du pod pour confirmer que le conteneur LoongCollector a été injecté avec succès :

    kubectl describe pod <YOUR-POD-NAME>

    Si vous voyez deux conteneurs (le conteneur d'application et loongcollector) et que leur état est Running, l'injection a réussi.

6. Créer un groupe de machines avec identifiant personnalisé

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

  2. Dans le volet de navigation de gauche, sélectionnez image Resources > Machine Groups, puis cliquez sur Machine Group > Create Machine Group à droite de Machine Groups.

  3. Dans la boîte de dialogue Create Machine Group, configurez les paramètres suivants et cliquez sur OK.

    • Name : Nom du groupe de machines. Il ne peut pas être modifié après la création. Les conventions de nommage sont les suivantes :

      • 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.

      • La longueur doit être comprise entre 2 et 128 caractères.

    • Machine Group Identifier : Sélectionnez Custom Identifier.

    • Custom Identifier : Saisissez la valeur de la variable d'environnement ALIYUN_LOGTAIL_USER_DEFINED_ID que vous avez définie pour le conteneur LoongCollector dans 1. Modifier la configuration YAML du pod de service. La valeur doit correspondre exactement, sinon l'association échouera.

  4. Une fois le groupe de machines créé, vérifiez son état de pulsation en cliquant sur son nom et en consultant la zone d'état.

    • OK : LoongCollector s'est connecté avec succès à Simple Log Service et a enregistré le groupe de machines.

    • FAIL :

Chaque pod exécute sa propre instance de LoongCollector. Utilisez un identifiant personnalisé unique par application ou environnement pour une gestion granulaire.

FAQ

Collecte inter-comptes ou inter-régions

Par défaut, LoongCollector installé depuis la console ACK collecte les journaux de conteneur vers un projet SLS dans le même compte. Pour effectuer une collecte inter-comptes ou inter-régions, utilisez l'une des méthodes suivantes :

Méthode 1 : Désinstaller et réinstaller loongcollector.

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

  2. Sur la page Clusters, cliquez sur le nom de votre cluster. Dans le volet de navigation de gauche, cliquez sur Components and Add-ons .

  3. Sous l'onglet Logs and Monitoring, recherchez loongcollector et cliquez sur Uninstall.

  4. Réinstallez-le en suivant la procédure décrite dans Installer sur un cluster auto-géré (mode DaemonSet).

Méthode 2 : Mettre à jour la configuration Helm et redéployer loongcollector.

  1. Connectez-vous à la console ACK. Dans le volet de navigation de gauche, choisissez Apply > Helm.

  2. Sur la page Helm, recherchez loongcollector et cliquez sur Update dans la colonne Actions. Sur la page Update Release, modifiez les paramètres comme indiqué dans le tableau ci-dessous et cliquez sur OK.

    Cluster et projet

    Paramètre

    Même compte, région différente

    region : Le RegionID de la région où se trouve le projet.

    net : Définissez la valeur sur internet. Les données ne peuvent pas être transférées entre différentes régions via un intranet.

    Compte différent, même région

    aliUid : L'ID du compte Alibaba Cloud propriétaire du projet Simple Log Service. Séparez plusieurs ID de compte par une virgule (,).

    net : Définissez la valeur sur intranet. Le transfert de données au sein de la même région est plus efficace via l'intranet.

    Compte différent, région différente

    aliUid : L'ID du compte Alibaba Cloud propriétaire du projet Simple Log Service. Séparez plusieurs ID de compte par une virgule (,).

    region : Le RegionID de la région où se trouve le projet.

    net : Définissez la valeur sur internet. Les données ne peuvent pas être transférées entre différentes régions via un intranet.

  3. Créer un groupe de machines :

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

    2. Dans le volet de navigation de gauche, choisissez image Resources > > Machine Groups. À côté de Machine Groups, choisissez Machine Group > > Create Machine Group.

    3. Dans la boîte de dialogue Create Machine Group, configurez les paramètres suivants et cliquez sur OK.

      1. Saisissez un nom pour le groupe de machines.

      2. Pour l'identifiant du groupe de machines, sélectionnez Custom Identifier.

      3. Identifiant personnalisé : k8s-group-${cluster_id}. Remplacez ${cluster_id} par l'clusterID réel du cluster.

    4. Une fois le groupe de machines créé, recherchez-le dans la liste des groupes de machines et cliquez sur son nom. Dans la section Machine Group Configurations > > Machine Group Status, vérifiez l'état de Heartbeat. Un état Heartbeat OK indique que le groupe de machines fonctionne correctement. Si l'état n'est pas OK, vérifiez que les identifiants utilisateur et personnalisés sont corrects.

  4. Une fois les modifications terminées, cliquez sur Update.

Collecte de journaux pour d'autres clusters

Étapes suivantes

Après avoir installé LoongCollector, consultez la rubrique Collecter les journaux de conteneur d'un cluster Kubernetes pour découvrir les concepts de base et les bonnes pratiques, puis créez une configuration de collecte :

Annexe : exemples YAML

Vous trouverez ci-dessous les configurations YAML complètes pour un Job Kubernetes et un Deployment intégrant un conteneur sidecar LoongCollector.

Avant de commencer, remplacez les trois espaces réservés suivants :

  1. Remplacez ${your_aliyun_user_id} par l'UID de votre compte Alibaba Cloud.

  2. Remplacez ${your_machine_group_user_defined_id} par l'ID personnalisé du groupe de machines créé à l'étape 3. L'identifiant doit correspondre exactement.

  3. Remplacez ${your_region_config} par le nom de configuration correspondant à la région et au type de réseau de votre projet Log Service (SLS).

    Par exemple, pour un projet situé dans la région Chine (Hangzhou), utilisez cn-hangzhou pour un accès via le réseau interne ou cn-hangzhou-internet pour un accès via le réseau public.

Tâches éphémères (Job/CronJob)

apiVersion: batch/v1
kind: Job
metadata:
  name: demo-job
spec:
  backoffLimit: 3                   
  activeDeadlineSeconds: 3600        
  completions: 1                     
  parallelism: 1                    
  template:
    spec:
      restartPolicy: Never         
      terminationGracePeriodSeconds: 300 
      containers:
        # Application container
        - name: demo-job
          image: debian:bookworm-slim
          command: ["/bin/bash", "-c"]
          args:
            - |
              # Wait for LoongCollector to be ready.
              echo "[$(date)] Business: Waiting for LoongCollector to be ready..."
              until [[ -f /tasksite/cornerstone ]]; do 
                sleep 1
              done
              echo "[$(date)] Business: LoongCollector is ready, starting business logic"
              # Run the application logic.
              echo "Hello, World!" >> /app/logs/business.log
              # Save the exit code.
              retcode=$?
              echo "[$(date)] Business: Task completed with exit code: $retcode"
              # Notify LoongCollector that the task is finished.
              touch /tasksite/tombstone
              echo "[$(date)] Business: Tombstone created, exiting"
              exit $retcode
          # Resource requests and limits
          resources:
            requests:
              cpu: "100m"
              memory: "128Mi"
            limits:
              cpu: "500"
              memory: "512Mi"
          # volume mounts
          volumeMounts:
            - name: app-logs
              mountPath: /app/logs
            - name: tasksite
              mountPath: /tasksite
        # LoongCollector sidecar container
        - name: loongcollector
          image: aliyun-observability-release-registry.cn-hongkong.cr.aliyuncs.com/loongcollector/loongcollector:v3.1.1.0-20fa5eb-aliyun
          command: ["/bin/bash", "-c"]
          args:
            - |
              echo "[$(date)] LoongCollector: Starting initialization"
              # Start the LoongCollector service.
              /etc/init.d/loongcollectord start
              # Wait for the configuration to download and the service to be ready.
              sleep 15
              # Verify the service status.
              if /etc/init.d/loongcollectord status; then
                echo "[$(date)] LoongCollector: Service started successfully"
                touch /tasksite/cornerstone
              else
                echo "[$(date)] LoongCollector: Failed to start service"
                exit 1
              fi
              # Wait for the application container to finish.
              echo "[$(date)] LoongCollector: Waiting for business container to complete"
              until [[ -f /tasksite/tombstone ]]; do 
                sleep 2
              done
              echo "[$(date)] LoongCollector: Business completed, waiting for log transmission"
              # Allow sufficient time to send remaining logs.
              sleep 30
              echo "[$(date)] LoongCollector: Stopping service"
              /etc/init.d/loongcollectord stop
              echo "[$(date)] LoongCollector: Shutdown complete"
          # health check
          livenessProbe:
            exec:
              command: ["/etc/init.d/loongcollectord", "status"]
            initialDelaySeconds: 30
            periodSeconds: 10
            timeoutSeconds: 5
            failureThreshold: 3
          # Resource requests and limits
          resources:
            requests:
              cpu: "100m"
              memory: "128Mi"
            limits:
              cpu: "500m"
              memory: "512Mi"
          # environment variables
          env:
            - name: ALIYUN_LOGTAIL_USER_ID
              value: "your-user-id"
            - name: ALIYUN_LOGTAIL_USER_DEFINED_ID
              value: "your-user-defined-id"
            - name: ALIYUN_LOGTAIL_CONFIG
              value: "/etc/ilogtail/conf/cn-hongkong/ilogtail_config.json"
            - name: ALIYUN_LOG_ENV_TAGS
              value: "_pod_name_|_pod_ip_|_namespace_|_node_name_"
            # Inject pod metadata.
            - name: "_pod_name_"
              valueFrom:
                fieldRef:
                  fieldPath: metadata.name
            - name: "_pod_ip_"
              valueFrom:
                fieldRef:
                  fieldPath: status.podIP
            - name: "_namespace_"
              valueFrom:
                fieldRef:
                  fieldPath: metadata.namespace
            - name: "_node_name_"
              valueFrom:
                fieldRef:
                  fieldPath: spec.nodeName
          # volume mounts
          volumeMounts:
            - name: app-logs
              mountPath: /app/logs
              readOnly: true
            - name: tasksite
              mountPath: /tasksite
            - name: tz-config
              mountPath: /etc/localtime
              readOnly: true
      # Volume definitions
      volumes:
        - name: app-logs
          emptyDir: {}
        - name: tasksite
          emptyDir:
            medium: Memory
            sizeLimit: "10Mi"
        - name: tz-config
          hostPath:
            path: /usr/share/zoneinfo/Asia/Shanghai

Services de longue durée (Deployment / StatefulSet)

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-demo
  namespace: production
  labels:
    app: nginx-demo
    version: v1.0.0
spec:
  replicas: 3
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 1      
      maxSurge: 1          
  selector:
    matchLabels:
      app: nginx-demo
  template:
    metadata:
      labels:
        app: nginx-demo
        version: v1.0.0    
    spec:
      terminationGracePeriodSeconds: 600  # 10-minute graceful shutdown period
      containers:
        # Application container - Web application
        - name: nginx-demo
          image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6          
          # Startup command and signal handling
          command: ["/bin/sh", "-c"]
          args:
            - |
              # Define the signal handler.
              _term_handler() {
                  echo "[$(date)] [nginx-demo] Caught SIGTERM, starting graceful shutdown..."
                  # Send the QUIT signal to Nginx for a graceful stop.
                  if [ -n "$NGINX_PID" ]; then
                      kill -QUIT "$NGINX_PID" 2>/dev/null || true
                      echo "[$(date)] [nginx-demo] Sent SIGQUIT to Nginx PID: $NGINX_PID"
                      # Wait for Nginx to stop gracefully.
                      wait "$NGINX_PID"
                      EXIT_CODE=$?
                      echo "[$(date)] [nginx-demo] Nginx stopped with exit code: $EXIT_CODE"
                  fi
                  # Notify LoongCollector that the application container has stopped.
                  echo "[$(date)] [nginx-demo] Writing tombstone file"
                  touch /tasksite/tombstone
                  exit $EXIT_CODE
              }
              # Register the signal handler.
              trap _term_handler SIGTERM SIGINT SIGQUIT
              # Wait for LoongCollector to be ready.
              echo "[$(date)] [nginx-demo]: Waiting for LoongCollector to be ready..."
              until [[ -f /tasksite/cornerstone ]]; do 
                sleep 1
              done
              echo "[$(date)] [nginx-demo]: LoongCollector is ready, starting business logic"
              # Start Nginx.
              echo "[$(date)] [nginx-demo] Starting Nginx..."
              nginx -g 'daemon off;' &
              NGINX_PID=$!
              echo "[$(date)] [nginx-demo] Nginx started with PID: $NGINX_PID"
              # Wait for the Nginx process to exit.
              wait $NGINX_PID
              EXIT_CODE=$?
              # If the process exits without a signal, notify LoongCollector.
              if [ ! -f /tasksite/tombstone ]; then
                  echo "[$(date)] [nginx-demo] Unexpected exit, writing tombstone"
                  touch /tasksite/tombstone
              fi
              exit $EXIT_CODE
          # Resource requests and limits
          resources:
            requests:
              cpu: "200m"
              memory: "256Mi"
            limits:
              cpu: "1000m"
              memory: "1Gi"
          # volume mounts
          volumeMounts:
            - name: nginx-logs
              mountPath: /var/log/nginx
            - name: tasksite
              mountPath: /tasksite
            - name: tz-config
              mountPath: /etc/localtime
              readOnly: true
        # LoongCollector sidecar container
        - name: loongcollector
          image: aliyun-observability-release-registry.cn-shenzhen.cr.aliyuncs.com/loongcollector/loongcollector:v3.1.1.0-20fa5eb-aliyun
          command: ["/bin/bash", "-c"]
          args:
            - |
              echo "[$(date)] LoongCollector: Starting initialization"
              # Start the LoongCollector service.
              /etc/init.d/loongcollectord start
              # Wait for the configuration to download and the service to be ready.
              sleep 15
              # Verify the service status.
              if /etc/init.d/loongcollectord status; then
                echo "[$(date)] LoongCollector: Service started successfully"
                touch /tasksite/cornerstone
              else
                echo "[$(date)] LoongCollector: Failed to start service"
                exit 1
              fi
              # Wait for the application container to finish.
              echo "[$(date)] LoongCollector: Waiting for business container to complete"
              until [[ -f /tasksite/tombstone ]]; do 
                sleep 2
              done
              echo "[$(date)] LoongCollector: Business completed, waiting for log transmission"
              # Allow sufficient time to send remaining logs.
              sleep 30
              echo "[$(date)] LoongCollector: Stopping service"
              /etc/init.d/loongcollectord stop
              echo "[$(date)] LoongCollector: Shutdown complete"
          # health check
          livenessProbe:
            exec:
              command: ["/etc/init.d/loongcollectord", "status"]
            initialDelaySeconds: 30
            periodSeconds: 10
            timeoutSeconds: 5
            failureThreshold: 3
          # Resource requests and limits
          resources:
            requests:
              cpu: "100m"
              memory: "128Mi"
            limits:
              cpu: "2000m"
              memory: "2048Mi"
          # environment variables
          env:
            - name: ALIYUN_LOGTAIL_USER_ID
              value: "${your_aliyun_user_id}"
            - name: ALIYUN_LOGTAIL_USER_DEFINED_ID
              value: "${your_machine_group_user_defined_id}"
            - name: ALIYUN_LOGTAIL_CONFIG
              value: "/etc/ilogtail/conf/${your_region_config}/ilogtail_config.json"
            # Enable full drain mode to send all logs when the pod stops.
            - name: enable_full_drain_mode
              value: "true"
            # Append pod environment information as log tags.
            - name: "ALIYUN_LOG_ENV_TAGS"
              value: "_pod_name_|_pod_ip_|_namespace_|_node_name_|_node_ip_"
            # Get pod and node information.
            - name: "_pod_name_"
              valueFrom:
                fieldRef:
                  fieldPath: metadata.name
            - name: "_pod_ip_"
              valueFrom:
                fieldRef:
                  fieldPath: status.podIP
            - name: "_namespace_"
              valueFrom:
                fieldRef:
                  fieldPath: metadata.namespace
            - name: "_node_name_"
              valueFrom:
                fieldRef:
                  fieldPath: spec.nodeName
            - name: "_node_ip_"
              valueFrom:
                fieldRef:
                  fieldPath: status.hostIP
          # volume mounts
          volumeMounts:
            - name: nginx-logs
              mountPath: /var/log/nginx
              readOnly: true
            - name: tasksite
              mountPath: /tasksite
            - name: tz-config
              mountPath: /etc/localtime
              readOnly: true
      # Volume definitions
      volumes:
        - name: nginx-logs
          emptyDir: {}
        - name: tasksite
          emptyDir:
            medium: Memory
            sizeLimit: "50Mi"
        - name: tz-config
          hostPath:
            path: /usr/share/zoneinfo/Asia/Shanghai

Références

Régions

  1. Connectez-vous à la console Simple Log Service. Dans la liste des projets, cliquez sur le projet cible.

  2. Cliquez sur l'icône image située à côté du nom du projet pour ouvrir la page de présentation du projet.

  3. Dans la section Informations de base, vous pouvez consulter le nom de la région du projet actuel. Le tableau suivant présente la correspondance entre les noms de régions et les ID de région.

    Une région correspond à l'emplacement physique du centre de données hébergeant vos ressources cloud . Un ID de région identifie chaque région de manière unique.

    Nom de la région

    ID de région

    Chine (Qingdao)

    cn-qingdao

    Chine (Pékin)

    cn-beijing

    Chine (Zhangjiakou)

    cn-zhangjiakou

    Chine (Hohhot)

    cn-huhehaote

    Chine (Ulanqab)

    cn-wulanchabu

    Chine (Hangzhou)

    cn-hangzhou

    Chine (Shanghai)

    cn-shanghai

    Chine (Nanjing - Région locale - Mise hors service)

    cn-nanjing

    Chine (Fuzhou - Région locale - Mise hors service)

    cn-fuzhou

    Chine (Shenzhen)

    cn-shenzhen

    Chine (Heyuan)

    cn-heyuan

    Chine (Guangzhou)

    cn-guangzhou

    Philippines (Manille)

    ap-southeast-6

    Corée du Sud (Séoul)

    ap-northeast-2

    Malaisie (Kuala Lumpur)

    ap-southeast-3

    Japon (Tokyo)

    ap-northeast-1

    Thaïlande (Bangkok)

    ap-southeast-7

    Chine (Chengdu)

    cn-chengdu

    Singapour

    ap-southeast-1

    Indonésie (Jakarta)

    ap-southeast-5

    Chine (Hong Kong)

    cn-hongkong

    Allemagne (Francfort)

    eu-central-1

    États-Unis (Virginie)

    us-east-1

    États-Unis (Silicon Valley)

    us-west-1

    Royaume-Uni (Londres)

    eu-west-1

    Émirats arabes unis (Dubaï)

    me-east-1

    Arabie saoudite (Riyad)

    me-central-1

Types de transfert réseau

Un endpoint correspond au nom de domaine d'accès pour SLS. Il s'agit de l'URL utilisée pour accéder à un projet et à ses données de journalisation. L'endpoint est spécifique à la région où se trouve le projet. SLS propose des endpoints privés, des endpoints publics et des endpoints avec accélération de transfert. Consultez les endpoints comme suit :

  1. Connectez-vous à la console SLS. Dans la liste des projets, cliquez sur le projet cible.

  2. Cliquez sur l'icône image située à droite du nom du projet pour accéder à la page de présentation du projet.

  3. Dans la section Points de terminaison d'accès, consultez les informations relatives aux endpoints du projet actuel. Les différentes méthodes de transfert réseau correspondent à des endpoints distincts. Le choix de la méthode de transfert appropriée permet de garantir une transmission des données de journalisation plus rapide et plus stable.

Type de réseau

Type d'endpoint correspondant

Description

Scénarios

Réseau interne Alibaba Cloud

Endpoint privé

Le réseau interne Alibaba Cloud est un réseau partagé gigabit. Le transfert des données de journalisation via le réseau interne est plus rapide et plus stable que via Internet public. Le réseau interne inclut le VPC et le réseau classique.

L'instance ECS et le projet SLS se trouvent dans la même région, ou vous avez connecté votre serveur local au réseau interne.

Remarque

Créez un projet SLS dans la même région que votre instance ECS. Cela vous permet de collecter les journaux de l'instance ECS via le réseau interne Alibaba Cloud sans consommer de bande passante publique.

Internet public

Endpoint public

Lorsque vous transférez des données de journalisation via Internet public, la vitesse et la stabilité de la collecte des données peuvent être affectées par les limites de bande passante, les variations du réseau, la latence et la perte de paquets.

Transférez les données via Internet public dans les deux cas suivants.

  • L'instance ECS et le projet SLS se trouvent dans des régions différentes.

  • Le serveur est hébergé par un autre fournisseur de cloud ou dans votre centre de données local.

Accélération de transfert

Endpoint avec accélération de transfert

L'utilisation des nœuds périphériques d'Alibaba Cloud CDN pour accélérer la collecte des journaux offre des avantages significatifs en termes de latence réseau et de stabilité par rapport à la collecte via Internet public, mais le trafic engendre des frais supplémentaires.

Si votre serveur d'application et votre projet SLS se trouvent respectivement dans des régions chinoises et internationales, le transfert de données via Internet public peut entraîner une latence élevée et une instabilité. Utilisez l'accélération de transfert dans ce cas. Pour plus d'informations, consultez Accélération de transfert.

Modes d'exécution

Fonctionnalité

Mode DaemonSet

Mode Sidecar

Méthode de déploiement

Déploie un conteneur de collecte sur chaque nœud.

Déploie un conteneur de collecte dans chaque Pod.

Consommation de ressources

Faible (partage les ressources du nœud)

Plus élevée (chaque Pod consomme des ressources indépendamment)

Cas d'utilisation

Collecte de journaux unifiée au niveau du nœud

Collecte de journaux isolée pour des applications spécifiques

Isolation

Partage au niveau du nœud

Indépendance au niveau du Pod

Mode DaemonSet

Déploie un agent LoongCollector sur chaque nœud pour collecter les journaux de tous les conteneurs présents sur ce nœud. Cette approche offre une simplicité opérationnelle, une faible consommation de ressources et une configuration flexible, mais assure une isolation locataire moins stricte.

  • En mode DaemonSet, Kubernetes exécute exactement un conteneur LoongCollector sur chaque nœud afin de collecter les journaux de tous les conteneurs hébergés sur ce nœud.

  • Kubernetes crée et détruit automatiquement les conteneurs LoongCollector lorsque des nœuds rejoignent ou quittent le cluster, éliminant ainsi la gestion manuelle des instances.

image

Mode Sidecar

Injecte un sidecar LoongCollector aux côtés du conteneur d'application dans chaque pod. Le répertoire de journaux de l'application est partagé via un volume Kubernetes (emptyDir, hostPath ou PVC), permettant à LoongCollector de lire directement les fichiers de journaux. Ce mode offre une isolation locataire robuste et des performances élevées, mais consomme davantage de ressources.

  • En mode sidecar, chaque pod exécute un conteneur LoongCollector dédié. La collecte des journaux est isolée entre les pods.

  • Un volume partagé doit être monté à la fois dans les conteneurs d'application et LoongCollector pour permettre l'accès aux fichiers de journaux.

  • Lorsque le volume de journaux d'un pod dépasse la capacité du DaemonSet, le mode sidecar vous permet d'allouer des ressources dédiées à LoongCollector.

  • Les environnements serverless ne disposent pas de nœuds, rendant le DaemonSet inapplicable. Le mode sidecar s'intègre directement aux architectures serverless.

image