Tous les produits
Search
Centre de documentation

Container Service for Kubernetes:Collect ECI Pod logs with an SLS CRD

Dernière mise à jour :Aug 11, 2026

Déployez alibaba-log-controller et définissez des CRD AliyunLogConfig pour collecter les journaux texte et stdout depuis les pods ECI.

Prérequis

Vérifiez que :

Configurer la collecte de journaux

Déployer alibaba-log-controller

  1. Connectez-vous à la console ACK.

  2. Dans le coin supérieur gauche, sélectionnez une région.

  3. Sur la page Clusters, cliquez sur le nom de votre cluster.

  4. Dans le volet de navigation de gauche, choisissez Operations > Add-ons.

  5. Cliquez sur l'onglet Logs and Monitoring, localisez la carte Alibaba-log-controller, puis cliquez sur Install.

  6. Dans la boîte de dialogue de confirmation, cliquez sur OK.

Une fois l'installation terminée, le statut Installed s'affiche sur la carte Alibaba-log-controller.

Créer un CRD AliyunLogConfig

Connectez-vous au cluster ACK Serverless, puis rédigez un fichier de configuration YAML pour le CRD de collecte de journaux.

Tenez compte des contraintes suivantes avant de créer le CRD :

  • La valeur de configName doit correspondre exactement à celle de metadata.name.

  • La collecte de journaux basée sur les CRD s'applique uniquement aux pods ECI créés après le déploiement du CRD. Pour collecter les journaux des pods existants, recréez-les via une mise à jour progressive (rolling update).

  • Une fois la configuration Logtail créée via le CRD, gérez-la exclusivement par ce biais. Les modifications effectuées dans la console Simple Log Service (SLS) ne sont pas synchronisées en retour. Pour mettre à jour la configuration, modifiez directement le CRD AliyunLogConfig.

Modèle de CRD

apiVersion: log.alibabacloud.com/v1alpha1
kind: AliyunLogConfig
metadata:
  name: simple-stdout-example
spec:
  project: k8s-my-project
  logstore: k8s-stdout
  logstoreMode: standard
  shardCount: 2
  lifeCycle: 90
  logtailConfig:
    inputType: plugin
    configName: simple-stdout-example
    inputDetail:
      ...

Paramètres de base

Paramètre Type Obligatoire Description
project string Non Nom du projet SLS. La valeur par défaut correspond au projet d'installation de Logtail. Le projet est créé automatiquement s'il n'existe pas.
logstore string Oui Nom du Logstore. Le Logstore est créé automatiquement s'il n'existe pas.
logstoreMode string Non Type de Logstore. Valeurs valides : query, standard. Ce paramètre prend effet uniquement lors de la création. Consultez la rubrique Manage a Logstore.
shardCount int Non Nombre de shards. Valeurs valides : 1 à 10. Valeur par défaut : 2.
lifeCycle int Non Durée de rétention des journaux en jours. Valeurs valides : 1 à 3650. Valeur par défaut : 90. La valeur 3650 indique une conservation permanente. Ce paramètre prend effet uniquement lors de la création.
machineGroups array Non Groupe de machines. SLS crée automatiquement le groupe k8s-group-${your_k8s_cluster_id} lors de l'installation de Logtail.
logtailConfig object Oui Configuration Logtail. Voir les sous-paramètres ci-dessous.

Sous-paramètres de logtailConfig :

Sous-paramètre Description
configName Nom de la configuration Logtail. Doit correspondre à metadata.name.
inputType Type de source de journal. plugin : journaux stdout et sources basées sur des plugins (comme les journaux binaires MySQL). file : journaux texte avec des modes fixes tels que regex ou délimiteur.
inputDetail Configuration détaillée de l'entrée.
outputType Type de sortie. Définissez cette valeur sur LogService. Les journaux peuvent uniquement être envoyés vers SLS.
outputDetail Configuration détaillée de la sortie.
logSample Exemple d'entrée de journal.

Pour plus d'informations, consultez la documentation relative aux configurations Logtail.

Filtrage des conteneurs

Les options de filtrage dépendent de votre version de Logtail.

Logtail antérieur à la v1.0.34 — filtrez uniquement par variables d'environnement et étiquettes de conteneur.

L'espace de noms Kubernetes et le nom du conteneur correspondent aux étiquettes suivantes :

  • Espace de noms : io.kubernetes.pod.namespace

  • Nom du conteneur : io.kubernetes.container.name

Utilisez ces étiquettes pour filtrer les conteneurs. Si elles sont insuffisantes, utilisez des listes d'autorisation ou de blocage de variables d'environnement.

Logtail v1.0.34 et versions ultérieures — filtrez par métadonnées au niveau Kubernetes, y compris le nom du pod, l'espace de noms, le nom du conteneur et les étiquettes.

Configurez les paramètres de filtrage dans logtailConfig.inputDetail.advanced.k8s :

Paramètre Description
IncludeK8sLabel Liste d'autorisation des étiquettes Kubernetes — conteneurs à inclure
ExcludeK8sLabel Liste de blocage des étiquettes Kubernetes — conteneurs à exclure
K8sNamespaceRegex Filtrer par espace de noms (expression régulière)
K8sPodRegex Filtrer par nom de pod (expression régulière)
K8sContainerRegex Filtrer par nom de conteneur (expression régulière)

Consultez les rubriques Collect text logs from Kubernetes containers in DaemonSet mode et Collect stdout and stderr from Kubernetes containers in DaemonSet mode (old version).

Exemple : collecte de journaux texte

Créez le fichier log-file.yaml avec le contenu suivant :

apiVersion: log.alibabacloud.com/v1alpha1  # Use the default value. Do not modify.
kind: AliyunLogConfig                      # Use the default value. Do not modify.
metadata:
  name: test-file                  # Unique resource name in the Kubernetes cluster.
spec:
  project: k8s-log-c326bc86****    # Optional. Auto-created if the project does not exist.
  logstore: test-file              # Required. Auto-created if the Logstore does not exist.
  logtailConfig:
    inputType: file                # file = text logs; plugin = stdout logs.
    configName: test-file          # Must match metadata.name.
    inputDetail:
      logType: common_reg_log      # Simple mode.
      logPath: /log/               # Log file directory.
      filePattern: "*.log"         # Log file name pattern. Supports * and ?.
      dockerFile: true             # Set to true to collect from containers.
      advanced:
        k8s:
          K8sNamespaceRegex: ^(default)$
          K8sPodRegex: '^(eci-sls-demo.*)$'

Exemple : collecte de journaux stdout

Créez le fichier log-stdout.yaml avec le contenu suivant :

apiVersion: log.alibabacloud.com/v1alpha1   # Use the default value. Do not modify.
kind: AliyunLogConfig                       # Use the default value. Do not modify.
metadata:
  name: test-stdout               # Unique resource name in the Kubernetes cluster.
spec:
  project: k8s-log-c326bc86****   # Optional. Auto-created if the project does not exist.
  logstore: test-stdout           # Required. Auto-created if the Logstore does not exist.
  shardCount: 2                   # Optional. Default: 2. Valid values: 1–10.
  lifeCycle: 90                   # Optional. Default: 90 days. Valid values: 1–3650. 3650 = permanent.
  logtailConfig:
    inputType: plugin             # plugin = stdout logs; file = text logs.
    configName: test-stdout       # Must match metadata.name.
    inputDetail:
      plugin:
        inputs:
          - type: service_docker_stdout
            detail:
              Stdout: true
              Stderr: true
#              IncludeEnv:
#                aliyun_logs_test-stdout: "stdout"

Appliquer la configuration du CRD

kubectl apply -f log-file.yaml
kubectl apply -f log-stdout.yaml

Après avoir appliqué la configuration, Logtail collecte les journaux stdout ou texte de chaque conteneur et les envoie vers SLS.

Important

Créez des index dans le Logstore pour activer la requête et l'analyse. Consultez la rubrique Create indexes.

Tester la collecte de journaux

Une fois le CRD créé, les journaux des nouveaux pods sont collectés automatiquement. Suivez les étapes ci-dessous pour vérifier la configuration.

Créer une application de test

Créez le fichier test-sls-crd.yaml contenant le Deployment suivant. Le conteneur écrit à la fois dans stdout et dans un fichier journal.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: eci-sls-demo
  labels:
    app: sls
spec:
  replicas: 1
  selector:
    matchLabels:
      app: sls
  template:
    metadata:
      name: sls-test
      labels:
        app: sls
        alibabacloud.com/eci: "true"
    spec:
      containers:
      - args:
        - -c
        - mkdir -p /log;while true; do echo hello world; date; echo hello sls >> /log/busy.log; sleep 1;done
        command:
        - /bin/sh
        image: registry-vpc.cn-beijing.aliyuncs.com/eci_open/busybox:1.30
        imagePullPolicy: Always
        name: busybox
kubectl create -f test-sls-crd.yaml

Vérifier le statut du pod

kubectl get pod

Sortie attendue :

NAME                            READY   STATUS    RESTARTS   AGE
eci-sls-demo-7bf8849b9f-cgpbn   1/1     Running   0          2m14s

Afficher les journaux collectés

  1. Connectez-vous à la console SLS.

  2. Cliquez sur le nom du projet.

  3. Cliquez sur le Logstore correspondant à vos conteneurs pour afficher les journaux.

Collecte de journaux texte :

Text log collection

Collecte de journaux stdout :

Stdout log collection

Désactiver la collecte de journaux pour des pods spécifiques

Par défaut, le CRD collecte les journaux de tous les pods correspondants. Pour exclure des pods spécifiques, ajoutez l'annotation k8s.aliyun.com/eci-sls-enable: "false" aux métadonnées du pod.

Important
  • Ajoutez les annotations dans spec.template.metadata, et non dans les métadonnées de premier niveau.

  • Les annotations prennent effet uniquement lors de la création du pod. Les modifications apportées lors des mises à jour du pod n'ont aucun effet.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: eci-sls-demo2
  labels:
    app: sls
spec:
  replicas: 1
  selector:
    matchLabels:
      app: sls
  template:
    metadata:
      name: sls-test
      labels:
        app: sls
        alibabacloud.com/eci: "true"
      annotations:
        k8s.aliyun.com/eci-sls-enable: "false"    # Disables log collection.
    spec:
      containers:
      - args:
        - -c
        - mkdir -p /log;while true; do echo hello world; date; echo hello sls >> /log/busy.log; sleep 1;
          done
        command:
        - /bin/sh
        image: registry.cn-shanghai.aliyuncs.com/eci_open/busybox:1.30
        imagePullPolicy: Always
        name: busybox