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 :
Un cluster ACK Serverless est créé.
ack-virtual-node version 2.7.0 ou ultérieure est installé.
Configurer la collecte de journaux
Déployer alibaba-log-controller
Connectez-vous à la console ACK.
Dans le coin supérieur gauche, sélectionnez une région.
Sur la page Clusters, cliquez sur le nom de votre cluster.
Dans le volet de navigation de gauche, choisissez Operations > Add-ons.
Cliquez sur l'onglet Logs and Monitoring, localisez la carte Alibaba-log-controller, puis cliquez sur Install.
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
configNamedoit correspondre exactement à celle demetadata.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.namespaceNom 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.
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
Connectez-vous à la console SLS.
Cliquez sur le nom du projet.
Cliquez sur le Logstore correspondant à vos conteneurs pour afficher les journaux.
Collecte de journaux texte :

Collecte de journaux stdout :

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