Aidez à améliorer cette page
Pour contribuer à ce guide de l’utilisateur, cliquez sur le lien Modifier cette page sur GitHub qui se trouve dans le volet droit de chaque page.
Démarrez la journalisation AWS Fargate pour votre cluster
Amazon EKS on Fargate propose un routeur de journal intégré basé sur Fluent Bit. Cela signifie que vous n’exécutez pas explicitement un conteneur Fluent Bit comme sidecar, mais qu’Amazon l’exécute pour vous. Tout ce que vous avez à faire est de configurer le routeur de journaux. La configuration se fait par le biais d'un ConfigMap qui doit répondre aux critères suivants :
-
Nommé
aws-logging -
Créé dans un espace de noms dédié appelé
aws-observability -
Ne doit pas dépasser 5 300 caractères.
Une fois que vous avez créé le ConfigMap, Amazon EKS on Fargate le détecte automatiquement et configure le routeur de journaux avec lui. Fargate utilise une version de AWS pour Fluent Bit, une distribution compatible en amont de Fluent Bit gérée par AWS. Pour plus d'informations, consultez AWS for Fluent Bit
Le routeur de journaux vous permet d'utiliser la diversité des services sur AWSpour l'analyse des journaux et le stockage. Vous pouvez diffuser les journaux depuis Fargate directement vers Amazon CloudWatch, Amazon OpenSearch Service. Vous pouvez également diffuser les journaux vers des destinations telles qu’Amazon S3
-
Un profil Fargate existant qui spécifie un espace de noms Kubernetes existant dans lequel vous déployez des pods Fargate. Pour de plus amples informations, consultez Étape 3 : créer un profil Fargate pour votre cluster.
-
Un rôle d’exécution de pod Fargate existant. Pour de plus amples informations, consultez Étape 2 : créer un rôle d’exécution Fargate Pod.
Configuration du routeur de journaux
Important
Pour que les journaux soient publiés avec succès, il doit y avoir un accès réseau depuis le VPC dans lequel se trouve votre cluster vers la destination des journaux. Cela concerne principalement les utilisateurs qui personnalisent les règles de sortie pour leur VPC. Pour un exemple d’utilisation de CloudWatch, consultez la section Utilisation des journaux CloudWatch avec les points de terminaison d’un VPC d’interface dans le Guide de l’utilisateur Amazon CloudWatch Logs.
Dans les étapes suivantes, remplacez chaque valeur d’exemple par vos propres valeurs.
-
Créez un espace de noms Kubernetes dédié nommé
aws-observability.-
Enregistrez le contenu suivant dans un fichier nommé
aws-observability-namespace.yamlsur votre ordinateur. La valeur pournamedoit êtreaws-observabilityet le labelaws-observability: enabledest obligatoire.kind: Namespace apiVersion: v1 metadata: name: aws-observability labels: aws-observability: enabled -
Créez l'espace de noms.
kubectl apply -f aws-observability-namespace.yaml
-
-
Créez un
ConfigMapavec une valeur de donnéesFluent Confpour envoyer les journaux des conteneurs vers une destination. Fluent Conf est Fluent Bit, qui est un langage de configuration de processeur de journaux rapide et léger, utilisé pour acheminer les journaux des conteneurs vers une destination de journalisation de votre choix. Pour plus d'informations, consultez Fichier de configurationdans la documentation Fluent Bit. Important
Dans une
Fluent Conftype, les principales sections incluses sontService,Input,FilteretOutput. Le routeur de journaux Fargate n'accepte cependant que :-
Les sections
FilteretOutput. -
Une section
Parser.
Si vous fournissez d'autres sections, elles seront rejetées.
Le routeur de journal Fargate gère les sections
ServiceetInput. Il comporte la sectionInputsuivante, qui ne peut pas être modifiée et n’est pas nécessaire dans votreConfigMap. Cependant, vous pouvez en tirer des informations, telles que la limite de la mémoire tampon et la balise appliquée pour les journaux.[INPUT] Name tail Buffer_Max_Size 66KB DB /var/log/flb_kube.db Mem_Buf_Limit 45MB Path /var/log/containers/*.log Read_From_Head On Refresh_Interval 10 Rotate_Wait 30 Skip_Long_Lines On Tag kube.*Lors de la création du
ConfigMap, prenez en compte les règles suivantes que Fargate utilise pour valider les champs :-
[FILTER],[OUTPUT]et[PARSER]sont censés être spécifiés sous chaque clé correspondante. Par exemple,[FILTER]doit être inférieur àfilters.conf. Vous pouvez avoir un ou plusieurs[FILTER]sousfilters.conf.[OUTPUT]et[PARSER]doivent également être sous leurs clés correspondantes. En spécifiant plusieurs sections[OUTPUT], vous pouvez acheminer vos journaux vers différentes destinations en même temps. -
Fargate valide les clés requises de chaque section.
Nameetmatchsont nécessaires pour chaque[FILTER]et[OUTPUT].Nameetformatsont nécessaires pour chaque[PARSER]. Ces noms sont sensibles à la casse. -
Les variables d’environnement telles que
${ENV_VAR}ne sont pas autorisées dans leConfigMap. -
L'indentation doit être la même pour la directive ou la paire clé-valeur dans chaque
filters.conf,output.confetparsers.conf. Les paires clé-valeur doivent être indentées plus que les directives. -
Fargate valide par rapport aux filtres pris en charge suivants :
grep,parser,record_modifier,rewrite_tag,throttle,nest,modifyetkubernetes. -
Fargate valide par rapport à la sortie prise en charge suivante :
es,firehose,kinesis_firehose,cloudwatch,cloudwatch_logsetkinesis. -
Au moins un plug-in
Outputdoit être fourni dans leConfigMappour activer la journalisation.FilteretParserne sont pas nécessaires pour activer la journalisation.Vous pouvez également exécuter Fluent Bit sur Amazon EC2 en utilisant la configuration souhaitée pour résoudre les problèmes qui surviennent lors de la validation. Créez votre
ConfigMapen utilisant l'un des exemples suivants.Important
La journalisation Amazon EKS Fargate ne prend pas en charge la configuration dynamique d’un
ConfigMap. Les modifications apportées à unConfigMapsont appliquées uniquement aux nouveaux pods. Les modifications ne sont pas appliquées aux pods existants.Créez un
ConfigMapen utilisant l'exemple pour votre destination de journal désirée.Note
Vous pouvez également utiliser Amazon Kinesis Data Streams comme destination du journal. Si vous utilisez Kinesis Data Streams, assurez-vous que l'autorisation
kinesis:PutRecordsa été accordée au rôle d'exécution du pod. Pour plus d’informations, consultez Permissionsd’Amazon Kinesis Data Streams dans le Manuel officiel Fluent Bit.
-
-
Configurez les autorisations pour le rôle d’exécution Fargate Pod afin d’envoyer les journaux vers votre destination.
-
Téléchargez la politique IAM pour votre destination sur votre ordinateur.
-
Créez une politique IAM à partir du fichier de politique que vous avez téléchargé.
aws iam create-policy --policy-name eks-fargate-logging-policy --policy-document file://permissions.json -
Attachez la politique IAM au rôle d'exécution de pod spécifié pour votre profil Fargate avec la commande suivante. Remplacez
111122223333par votre ID de compte. RemplacezAmazonEKSFargatePodExecutionRolepar votre rôle d’exécution de pod (pour plus d’informations, consultez Étape 2 : créer un rôle d’exécution Fargate Pod).aws iam attach-role-policy \ --policy-arn arn:aws:iam::111122223333:policy/eks-fargate-logging-policy \ --role-nameAmazonEKSFargatePodExecutionRole
-
Prise en charge des filtres Kubernetes
Le filtre Kubernetes de Fluent Bit vous permet d'ajouter des métadonnées Kubernetes à vos fichiers journaux. Pour plus d'informations sur le filtre, consultez Kubernetes
filters.conf: | [FILTER] Name kubernetes Match kube.* Merge_Log On Buffer_Size 0 Kube_Meta_Cache_TTL300s
Important
-
Kube_URL,Kube_CA_File,Kube_Token_CommandetKube_Token_Filesont des paramètres de configuration appartenant au service et ne doivent pas être spécifiés. Amazon EKS Fargate remplit ces valeurs. -
Kube_Meta_Cache_TTLest le moment où Fluent Bit attend qu'il communique avec le serveur d'API pour obtenir les dernières métadonnées. Si la valeurKube_Meta_Cache_TTLn’est pas spécifiée, Amazon EKS Fargate ajoute une valeur par défaut de 30 minutes pour diminuer la charge sur le serveur d’API.
Pour envoyer les journaux de processus de Fluent Bit à votre compte
Vous pouvez aussi envoyer les journaux de processus de Fluent Bit à Amazon CloudWatch en utilisant le ConfigMap suivant. L'envoi des journaux de processus Fluent Bit à CloudWatch implique des coûts supplémentaires d'ingestion de journaux et de stockage. Remplacez region-code par la région AWS dans laquelle votre cluster se situe.
kind: ConfigMap apiVersion: v1 metadata: name: aws-logging namespace: aws-observability labels: data: # Configuration files: server, input, filters and output # ====================================================== flb_log_cw: "true" # Ships Fluent Bit process logs to CloudWatch. output.conf: | [OUTPUT] Name cloudwatch Match kube.* regionregion-codelog_group_name fluent-bit-cloudwatch log_stream_prefix from-fluent-bit- auto_create_group true
Les journaux se trouvent dans CloudWatch, dans la même région AWS que le cluster. Le nom du groupe de journaux est
et le nom du flux de journaux Fluent Bit est my-cluster-fluent-bit-logsfluent-bit-.podname-pod-namespace
Note
-
Les journaux de processus sont envoyés seulement lorsque le processus Fluent Bit démarre avec succès. S'il y a un échec lors du démarrage de Fluent Bit, les journaux de processus sont manqués. Vous pouvez uniquement envoyer les journaux de processus à CloudWatch.
-
Pour déboguer l'envoi des journaux de processus à votre compte, vous pouvez appliquer le
ConfigMapprécédent pour obtenir les journaux de processus. L'échec du démarrage de Fluent Bit est généralement dû au fait que votreConfigMapn'est pas analysé ou accepté par Fluent Bit lors du démarrage.
Pour arrêter l’envoi des journaux de processus Fluent Bit
L'envoi des journaux de processus Fluent Bit à CloudWatch implique des coûts supplémentaires d'ingestion de journaux et de stockage. Pour exclure les journaux de processus d'une configuration de ConfigMap existante, procédez comme suit.
-
Localisez le groupe de journaux CloudWatch créé automatiquement pour les journaux de processus Fluent Bit de votre cluster Amazon EKS après avoir activé la journalisation Fargate. Il utilise le format
.my-cluster-fluent-bit-logs -
Supprimez les flux de journaux CloudWatch existants créés pour les journaux de processus de chaque pod dans le groupe de journaux CloudWatch.
-
Modifiez la
ConfigMapet définissezflb_log_cw: "false". -
Redémarrez tous les pods existants du cluster.
Tester l'application
-
Déployez un exemple de pod.
-
Enregistrez le contenu suivant dans un fichier nommé
sample-app.yamlsur votre ordinateur.apiVersion: apps/v1 kind: Deployment metadata: name: sample-app namespace:same-namespace-as-your-fargate-profilespec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:latest ports: - name: http containerPort: 80 -
Appliquez le fichier manifeste à votre cluster.
kubectl apply -f sample-app.yaml
-
-
Affichez les journaux NGINX en utilisant les destinations que vous avez configurées dans le fichier
ConfigMap.
Considérations sur les tailles
Nous vous suggérons de prévoir jusqu'à 50 Mo de mémoire pour le routeur de journaux. Si votre application doit générer des journaux à un débit très élevé, vous devez prévoir jusqu'à 100 Mo.
Dépannage
Pour vérifier si la fonctionnalité de journalisation est activée ou désactivée pour une raison quelconque, telle qu’une valeur non valide ConfigMap, et pourquoi elle n’est pas valide, vérifiez les événements de votre Pod avec kubectl describe pod . La sortie peut inclure des événements de pods qui précisent si la journalisation est activée ou non, comme l’exemple de sortie suivant.pod-name
[...] Annotations: CapacityProvisioned: 0.25vCPU 0.5GB Logging: LoggingDisabled: LOGGING_CONFIGMAP_NOT_FOUND [...] Events: Type Reason Age From Message ---- ------ ---- ---- ------- Warning LoggingDisabled <unknown> fargate-scheduler Disabled logging because aws-logging configmap was not found. configmap "aws-logging" not found
Les événements du pod sont éphémères avec une période de temps dépendant des paramètres. Vous pouvez également afficher les annotations d’un pod à l’aide de kubectl describe pod . Dans l’annotation du pod, il existe des informations sur l’activation ou la désactivation de la fonction de journalisation et la cause.pod-name