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 étant la solution de journal par défaut pour CloudWatch Container Insights, il est recommandé d'utiliser Fluent Bit au lieu de Fluentd.Amazon fournit une image de conteneur d'agent Fluent Bit sur Amazon Elastic Container Registry (Amazon ECR). Pour plus d'informations, consultez la section AWS pour les référentiels d’images AWS for Fluent Bit pour Amazon ECS.
Pour télécharger Fluent Bit, consultez la section Mise en route 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.
Lorsque vous configurez Fluent Bit en tant que DaemonSet pour envoyer des journaux à CloudWatch, Fluent Bit crée les groupes de journaux et les sources suivants :
- /aws/containerinsights/Cluster_Name/application : La source du journal est constituée de tous les fichiers journaux contenus dans /var/log/containers.
- /aws/containerinsights/Cluster_Name/host : La source du journal est constituée des journaux provenant de /var/log/dmesg, /var/log/secure et de /var/log/messages.
- /aws/containerinsights/Cluster_Name/dataplane : La source du journal est constituée des journaux dans /var/log/journal pour kubelet.service, kubeproxy.service et docker.service.
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ésoudre des erreurs liées à l’AWS CLI. Vérifiez également que vous utilisez bien la version la plus récente de l'interface.
Diffuser les journaux de conteneurs qui s'exécutent dans Amazon EKS sur un cluster Amazon EC2
Procédez comme suit :
-
Pour créer un espace de noms appelé amazon-cloudwatch, 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/cloudwatch-namespace.yaml -
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, exécutez la commande suivante :
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 et my-cluster-region par le nom de votre cluster et votre région.
-
Pour utiliser Fluent Bit afin d'envoyer des journaux à un cluster Amazon Elastic Compute Cloud (Amazon EC2), exécutez la commande DaemonSet 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.yaml -
(Facultatif) Pour utiliser Fluent Bit sur Amazon ECR, exécutez la commande DaemonSet aws-for-fluent-bit suivante :
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"}]}}}}' -
Pour créer des rôles AWS Identity and Access Management pour les comptes de service (IRSA), exécutez la commande eksctl suivante :
eksctl create iamserviceaccount \ --name fluent-bit \ --namespace amazon-cloudwatch \ --cluster $CLUSTER \ --attach-policy-arn "arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy" \ --approve \ --override-existing-serviceaccountsPour plus d'informations, consultez la section Configurer Fluent Bit en tant que DaemonSet pour envoyer des journaux à CloudWatch Logs.
Résoudre les problèmes de déploiement de Fluent Bit
Procédez comme suit :
-
Pour répertorier les noms de pods dans l'espace de noms amazon-cloudwatch, exécutez la commande suivante :
kubectl get pods -n amazon-cloudwatchRemarque : Le nom du pod est renvoyé sous la forme fluent-bit-*****.
-
Pour vérifier la sortie des événements, exécutez la commande suivante :
kubectl describe pod POD_NAME -n amazon-cloudwatchRemarque : Remplacez POD_NAME par le nom de votre pod.
-
Pour vérifier les journaux, exécutez la commande suivante :
kubectl logs pod-name -n amazon-cloudwatchRemarque : Remplacez POD_NAME par le nom de votre pod.
Supprimer le déploiement de Fluent Bit
Pour supprimer le déploiement de Fluent Bit, exécutez les commandes suivantes :
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
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 pour vous. Pour plus de détails, consultez la section Démarrer la journalisation AWS Fargate pour votre cluster.
Pour diffuser les journaux des conteneurs vers CloudWatch Logs, 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. Associez ensuite la politique IAM au rôle d'exécution du pod que vous avez spécifié pour votre profil Fargate.
Pour télécharger le fichier de politique IAM, exécutez la commande suivante :
curl -o permissions.json https://raw.githubusercontent.com/aws-samples/amazon-eks-fluent-logging-examples/mainline/examples/fargate/cloudwatchlogs/permissions.jsonPour créer une politique IAM à partir du fichier de politique, exécutez la commande create-policy suivante :
aws iam create-policy --policy-name eks-fargate-logging-policy --policy-document file://permissions.jsonPour associer la politique IAM au rôle d'exécution du pod que vous avez spécifié pour votre profil Fargate, exécutez la commande attach-role-policy suivante :
aws iam attach-role-policy \ --policy-arn arn:aws:iam::111122223333:policy/eks-fargate-logging-policy \ --role-name your-pod-execution-roleRemarque : Remplacez 111122223333 par votre ID de compte.
Pour en savoir plus, consultez la section Résolution des problèmes.
Désactiver les journaux de streaming pour EKS sur les pods Fargate
Pour désactiver les journaux de streaming pour vos pods EKS sur Fargate, exécutez la commande suivante :
kubectl delete namespace aws-observability
Supprimez des pods, puis redéployez-les après avoir supprimé l'espace de noms aws-observability.
- Langue
- Français

Contenus pertinents
- demandé il y a 2 mois
- demandé il y a 2 ans
- demandé il y a 3 ans
- demandé il y a 3 ans
AWS OFFICIELA mis à jour il y a 3 ans