Comment puis-je diffuser des journaux de conteneurs vers CloudWatch dans Amazon EKS ?
Je souhaite utiliser Fluent Bit ou Fluentd pour diffuser des journaux depuis des conteneurs exécutés dans Amazon Elastic Kubernetes Service (Amazon EKS) vers Amazon CloudWatch Logs.
Brève description
Fluent Bit est la solution de journalisation par défaut pour CloudWatch Container Insights. Il est recommandé d'utiliser Fluent Bit au lieu de Fluentd. Amazon fournit une image de conteneur Fluent Bit sur Amazon Elastic Container Registry (Amazon ECR). Pour plus d'informations, consultez la section AWS pour les référentiels AWS pour Fluent Bit Image pour Amazon ECS.
Pour télécharger Fluent Bit, consultez la section Premiers pas avec Fluent Bit sur le site Web de Fluent Bit. Pour Fluentd, consultez la section Télécharger Fluentd sur le site Web de Fluentd.
Résolution
Remarque : si des erreurs surviennent lorsque vous exécutez des commandes de l'interface de la ligne de commande AWS (AWS CLI), consultez la section Résolution des erreurs liées à l'AWS CLI. Vérifiez également que vous utilisez bien la version la plus récente de l'AWS CLI.
Diffuser les journaux de conteneurs qui s'exécutent dans Amazon EKS sur un cluster Amazon EC2
Procédez comme suit :
-
Exécutez la commande kubectl suivante pour créer un espace de noms appelé amazon-cloudwatch :
kubectl apply -f https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/daemonset/container-insights-monitoring/cloudwatch-namespace.yaml -
Exécutez la commande suivante pour créer un ConfigMap appelé fluent-bit-cluster-info qui inclut le nom du cluster et la région AWS vers laquelle vous souhaitez envoyer des journaux :
ClusterName=MY-CLUSTER-NAME RegionName=MY-CLUSTER-REGION FluentBitHttpPort='2020' FluentBitReadFromHead='Off' [[ ${FluentBitReadFromHead} = 'On' ]] && FluentBitReadFromTail='Off'|| FluentBitReadFromTail='On' [[ -z ${FluentBitHttpPort} ]] && FluentBitHttpServer='Off' || FluentBitHttpServer='On' kubectl create configmap fluent-bit-cluster-info \ --from-literal=cluster.name=${ClusterName} \ --from-literal=http.server=${FluentBitHttpServer} \ --from-literal=http.port=${FluentBitHttpPort} \ --from-literal=read.head=${FluentBitReadFromHead} \ --from-literal=read.tail=${FluentBitReadFromTail} \ --from-literal=logs.region=${RegionName} -n amazon-cloudwatchRemarque : remplacez MY-CLUSTER-NAME par le nom de votre cluster et MY-CLUSTER-REGION par la région de votre cluster.
-
Pour déployer Fluent Bit en tant que DaemonSet afin d'envoyer des journaux à votre cluster Amazon Elastic Compute Cloud (Amazon EC2), exécutez la commande suivante :
kubectl apply -f https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/daemonset/container-insights-monitoring/fluent-bit/fluent-bit.yamlUne fois que vous avez exécuté la commande précédente, Fluent Bit crée les groupes de journaux et les sources d'applications, d'hôtes et de plans de données suivants dans CloudWatch :
La source du journal /aws/containerinsights/Cluster_Name/application est constituée de tous les fichiers journaux du groupe de journaux /var/log/containers.
La source de journal /aws/containerinsights/Cluster_Name/host collecte les journaux des groupes de journaux /var/log/dmesg, /var/log/secure et /var/log/messages.
La source de journal /aws/containerinsights/Cluster_Name/dataplane collecte les journaux des groupes de journaux /var/log/journal pour les groupes de journaux kubelet.service,kubeproxy.service, et docker.service. -
(Facultatif) Exécutez la commande suivante pour utiliser Fluent Bit sur Amazon ECR au lieu de l'image par défaut :
kubectl patch ds fluent-bit -n amazon-cloudwatch -p \'{"spec":{"template":{"spec":{"containers":[{"name":"fluent-bit","image":"public.ecr.aws/aws-observability/aws-for-fluent-bit:latest"}]}}}}' -
Installez eksctl.
Remarque : pour exécuter la commande suivante, vous devez installer eksctl. -
Exécutez la commande eksctl suivante Pour créer des rôles Gestion des identités et des accès AWS (IAM) pour les comptes de service (IRSA) :
eksctl create iamserviceaccount \ --name fluent-bit \ --namespace amazon-cloudwatch \ --cluster $CLUSTER \ --attach-policy-arn "arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy" \ --approve \ --override-existing-serviceaccounts
Vérifier le déploiement de Fluent Bit
Procédez comme suit :
- Exécutez la commande kubectl suivante pour répertorier les noms de pods dans l'espace de noms amazon-cloudwatch :
Remarque : le nom du pod est renvoyé sous la forme fluent-bit-*****.kubectl get pods -n amazon-cloudwatch - Exécutez la commande kubectl describe suivante pour vérifier la sortie des événements pour un pod spécifique :
Remarque : remplacez POD_NAME par le nom de votre pod.kubectl describe pod POD_NAME -n amazon-cloudwatch - Exécutez la commande kubectl suivante pour vérifier les journaux :
Remarque : remplacez POD_NAME par le nom de votre pod.kubectl logs pod-name -n amazon-cloudwatch
Diffuser les journaux de conteneurs qui s'exécutent dans Amazon EKS sur un cluster Fargate
Amazon EKS sur un cluster AWS Fargate comprend un routeur de journal intégré basé sur Fluent Bit. AWS exécute automatiquement Fluent Bit en votre nom. Pour plus de détails, consultez la section Démarrer la journalisation AWS Fargate pour votre cluster.
Procédez comme suit :
-
Pour créer un espace de noms Kubernetes dédié appelé aws-observability, exécutez la commande suivante :
cat <<EOF > aws-observability-namespace.yaml kind: Namespace apiVersion: v1 metadata: name: aws-observability labels: aws-observability: enabled EOF kubectl apply -f aws-observability-namespace.yaml -
Pour créer un ConfigMap avec une valeur de données FluentConf afin de diffuser les journaux de conteneurs vers CloudWatch Logs, exécutez la commande suivante :
cat <<EOF > aws-logging-cloudwatch-configmap.yaml kind: ConfigMap apiVersion: v1 metadata: name: aws-logging namespace: aws-observability data: output.conf: | [OUTPUT] Name cloudwatch_logs Match * region region-code log_group_name fluent-bit-cloudwatch log_stream_prefix from-fluent-bit- auto_create_group true log_key log parsers.conf: | [PARSER] Name crio Format Regex Regex ^(?<time>[^ ]+) (?<stream>stdout|stderr) (?<logtag>P|F) (?<log>.*)$ Time_Key time Time_Format %Y-%m-%dT%H:%M:%S.%L%z filters.conf: | [FILTER] Name parser Match * Key_name log Parser crio EOF kubectl apply -f aws-logging-cloudwatch-configmap.yaml -
Créez une politique gérée par AWS pour CloudWatch.
Remarque : associez ensuite la politique IAM au rôle d'exécution du pod que vous avez spécifié pour votre profil Fargate. Remplacez 111122223333 par votre identifiant de compte AWS et your-pod-execution-role par le nom de votre rôle d'exécution de pod. -
Pour télécharger le fichier de politique IAM, exécutez la commande curl suivante :
curl -o permissions.json https://raw.githubusercontent.com/aws-samples/amazon-eks-fluent-logging-examples/mainline/examples/fargate/cloudwatchlogs/permissions.json -
Exécutez la commande create-policy suivante pour créer une politique IAM à partir du fichier de politique :
aws iam create-policy --policy-name eks-fargate-logging-policy --policy-document file://permissions.json -
Exécutez la commande attach-role-policy suivante au rôle d'exécution du pod que vous avez spécifié pour votre profil Fargate, pour associer la politique IAM :
aws iam attach-role-policy \ --policy-arn arn:aws:iam::111122223333:policy/eks-fargate-logging-policy \ --role-name your-pod-execution-role -
Exécutez la commande kubectl suivante pour vérifier que la configuration de journalisation s'applique à vos pods Fargate :
kubectl describe pod POD-NAMERemarque : remplacez POD_NAME par le nom de votre pod. La sortie inclut des événements Pod qui confirment si la journalisation est active. Pour en savoir plus, consultez la section Résolution des problèmes.
Nettoyez le déploiement du flux de journaux Fluent Bit
Si vous avez déployé Fluent Bit sur un cluster EC2, exécutez les commandes kubectl suivantes pour supprimer le déploiement de Fluent Bit :
kubectl delete configmap fluent-bit-cluster-info -n amazon-cloudwatch kubectl delete -f https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/daemonset/container-insights-monitoring/fluent-bit/fluent-bit.yaml
Si vous avez déployé Fluent Bit sur un cluster Fargate, exécutez la commande kubectl suivante pour supprimer l'espace de noms aws-observability. Cela supprime le ConfigMap et arrête la diffusion des journaux :
kubectl delete namespace aws-observability
Remarque : une fois que vous avez supprimé l'espace de noms aws-observability, les nouveaux pods Fargate n'envoient pas de journaux à CloudWatch Logs. Les pods existants continuent à envoyer des journaux jusqu'à ce que vous les supprimiez et que vous les redéployiez. Les journaux que CloudWatch a déjà reçus restent disponibles dans CloudWatch Logs.
Informations connexes
Configurer Fluent Bit en tant que DaemonSet pour envoyer des journaux à CloudWatch Logs
- Langue
- Français

This article was reviewed and updated on 2026-05-25.
Contenus pertinents
demandé il y a un an
demandé il y a 4 ans
demandé il y a 2 ans
demandé il y a 4 ans
AWS OFFICIELA mis à jour il y a 4 ans