Journalisation Fargate - Amazon EKS

Aidez à améliorer cette page

Vous souhaitez contribuer à ce guide de l'utilisateur ? Faites défiler cette page vers le bas et sélectionnez Modifier cette page sur GitHub. Vos contributions aideront à améliorer notre guide de l'utilisateur pour tout le monde.

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Journalisation Fargate

Important

AWS Fargate avec Amazon EKS n'est pas disponible en AWS GovCloud (USA Est) et AWS GovCloud (USA Ouest).

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 composant complémentaire, 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 Fluent Bit for, une distribution Fluent Bit conforme en amont AWS de managed by. AWS Pour plus d'informations, reportez-vous AWS à la section Fluent Bit sur GitHub.

Le routeur de journaux vous permet d'utiliser l'ensemble des services proposés AWS pour l'analyse et le stockage des journaux. Vous pouvez diffuser les journaux de Fargate directement vers Amazon CloudWatch, Amazon Service. OpenSearch Vous pouvez également diffuser des journaux vers des destinations telles qu'Amazon S3, Amazon Kinesis Data Streams et des outils partenaires via Amazon Data Firehose.

Prérequis

Configuration du routeur de journaux

Pour configurer le routeur de journaux

Dans les étapes suivantes, remplacez chaque example value par vos propres valeurs.

  1. Créez un espace de noms Kubernetes dédié nommé aws-observability.

    1. Enregistrez le contenu suivant dans un fichier nommé aws-observability-namespace.yaml sur votre ordinateur. La valeur pour name doit être aws-observability et le label aws-observability: enabled est obligatoire.

      kind: Namespace apiVersion: v1 metadata: name: aws-observability labels: aws-observability: enabled
    2. Créez l'espace de noms.

      kubectl apply -f aws-observability-namespace.yaml
  2. Créez un ConfigMap avec une valeur de données Fluent Conf pour 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 configuration dans la documentation Fluent Bit.

    Important

    Dans une Fluent Conf type, les principales sections incluses sont Service, Input, Filter et Output. Le routeur de journaux Fargate n'accepte cependant que :

    • Les sections Filter et Output.

    • Une section Parser.

    Si vous fournissez d'autres sections, elles seront rejetées.

    Le routeur de journal Fargate gère les sections Service et Input. Il possède la section Input suivante, qui ne peut pas être modifiée et n'est pas nécessaire dans votre ConfigMap. 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] sous filters.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. Name et match sont nécessaires pour chaque [FILTER] et [OUTPUT]. Name et format sont 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 le ConfigMap.

    • L'indentation doit être la même pour la directive ou la paire clé-valeur dans chaque filters.conf, output.conf et parsers.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, modify et kubernetes.

    • Fargate valide par rapport à la sortie prise en charge suivante : es, firehose, kinesis_firehose, cloudwatch, cloudwatch_logs et kinesis.

    • Au moins un plugin Output doit être fourni dans le ConfigMap pour activer la journalisation. Filter et Parser ne 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 ConfigMap en utilisant l'un des exemples suivants.

    Important

    La journalisation Amazon EKS Fargate ne prend pas en charge la configuration dynamique de ConfigMaps. Les modifications apportées à ConfigMaps sont appliquées uniquement aux nouveaux Pods. Les modifications ne sont pas appliquées aux Pods existants.

    Créez un ConfigMap en 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:PutRecords a été accordée au rôle d'exécution du pod. Pour plus d'informations, consultez Permissions d'Amazon Kinesis Data Streams dans le Manuel officiel Fluent Bit.

    CloudWatch

    Pour créer une ConfigMap pour CloudWatch

    Deux options de sortie s'offrent à vous lorsque vous utilisez CloudWatch :

    L'exemple suivant montre comment utiliser le cloudwatch_logs plugin pour envoyer des journaux à CloudWatch.

    1. Enregistrez le contenu suivant dans un fichier nommé aws-logging-cloudwatch-configmap.yaml. region-codeRemplacez-le par Région AWS celui dans lequel se trouve votre cluster. Les paramètres sous [OUTPUT] sont requises.

      kind: ConfigMap apiVersion: v1 metadata: name: aws-logging namespace: aws-observability data: flb_log_cw: "false" # Set to true to ship Fluent Bit process logs to CloudWatch. filters.conf: | [FILTER] Name parser Match * Key_name log Parser crio [FILTER] Name kubernetes Match kube.* Merge_Log On Keep_Log Off Buffer_Size 0 Kube_Meta_Cache_TTL 300s output.conf: | [OUTPUT] Name cloudwatch_logs Match kube.* region region-code log_group_name my-logs log_stream_prefix from-fluent-bit- log_retention_days 60 auto_create_group true 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
    2. Appliquez le manifeste à votre cluster.

      kubectl apply -f aws-logging-cloudwatch-configmap.yaml
    3. Téléchargez la politique CloudWatch IAM sur votre ordinateur. Vous pouvez également consulter la politique sur GitHub.

      curl -O https://raw.githubusercontent.com/aws-samples/amazon-eks-fluent-logging-examples/mainline/examples/fargate/cloudwatchlogs/permissions.json
    Amazon OpenSearch Service

    Pour créer un OpenSearch service ConfigMap pour Amazon

    Si vous souhaitez envoyer des journaux à Amazon OpenSearch Service, vous pouvez utiliser es output, qui est un plugin écrit enC. L'exemple suivant montre comment utiliser le plugin pour envoyer des journaux à OpenSearch.

    1. Enregistrez le contenu suivant dans un fichier nommé aws-logging-opensearch-configmap.yaml. Remplacez chaque example value par vos propres valeurs.

      kind: ConfigMap apiVersion: v1 metadata: name: aws-logging namespace: aws-observability data: output.conf: | [OUTPUT] Name es Match * Host search-example-gjxdcilagiprbglqn42jsty66y.region-code.es.amazonaws.com Port 443 Index example Type example_type AWS_Auth On AWS_Region region-code tls On
    2. Appliquez le manifeste à votre cluster.

      kubectl apply -f aws-logging-opensearch-configmap.yaml
    3. Téléchargez la politique OpenSearch IAM sur votre ordinateur. Vous pouvez également consulter la politique sur GitHub.

      curl -O https://raw.githubusercontent.com/aws-samples/amazon-eks-fluent-logging-examples/mainline/examples/fargate/amazon-elasticsearch/permissions.json

      Assurez-vous que le contrôle d'accès OpenSearch des tableaux de bord est correctement configuré. all_access roleDans les OpenSearch tableaux de bord, le rôle d'exécution Pod Fargate et le rôle IAM doivent être mappés. Le même mappage doit être fait pour le rôle security_manager. Vous pouvez ajouter les mappages précédents en sélectionnant Menu, Security et Roles, puis sélectionner les rôles correspondants. Pour plus d'informations, consultez Comment résoudre les problèmes liés aux CloudWatch journaux afin qu'ils soient diffusés sur mon domaine Amazon ES ? .

    Firehose

    Pour créer un ConfigMap pour Firehose

    Deux options de sortie s'offrent à vous lorsque vous envoyez des logs à Firehose :

    L'exemple suivant vous montre comment utiliser le kinesis_firehose plugin pour envoyer des logs à Firehose.

    1. Enregistrez le contenu suivant dans un fichier nommé aws-logging-firehose-configmap.yaml. region-codeRemplacez-le par Région AWS celui dans lequel se trouve votre cluster.

      kind: ConfigMap apiVersion: v1 metadata: name: aws-logging namespace: aws-observability data: output.conf: | [OUTPUT] Name kinesis_firehose Match * region region-code delivery_stream my-stream-firehose
    2. Appliquez le manifeste à votre cluster.

      kubectl apply -f aws-logging-firehose-configmap.yaml
    3. Téléchargez la politique IAM de Firehose sur votre ordinateur. Vous pouvez également consulter la politique sur GitHub.

      curl -O https://raw.githubusercontent.com/aws-samples/amazon-eks-fluent-logging-examples/mainline/examples/fargate/kinesis-firehose/permissions.json
  3. Créez une politique IAM depuis le fichier de politique que vous avez téléchargé à l'étape précédente.

    aws iam create-policy --policy-name eks-fargate-logging-policy --policy-document file://permissions.json
  4. Attachez la politique IAM au rôle d'exécution de pod spécifié pour votre profil Fargate avec la commande suivante. Remplacez 111122223333 par votre ID de compte. Remplacez AmazonEKSFargatePodExecutionRole par le rôle d'exécution de votre Pod (pour plus d'informations, veuillez consulter la rubrique Création d'un rôle d'exécution de Pod Fargate).

    aws iam attach-role-policy \ --policy-arn arn:aws:iam::111122223333:policy/eks-fargate-logging-policy \ --role-name AmazonEKSFargatePodExecutionRole

Support de filtre Kubernetes

Cette fonction requiert la version Kubernetes minimale et le niveau de plateforme suivants, ou plus.

Version de Kubernetes Niveau de la plateforme
1.23 et versions ultérieures eks.1

Le filtre Kubernetes Fluent Bit vous permet d'ajouter des métadonnées Kubernetes à vos fichiers journaux. Pour plus d'informations sur le filtre, consultez Kubernetes dans la documentation Fluent Bit. Vous pouvez appliquer un filtre en utilisant le point de terminaison du serveur d'API.

filters.conf: | [FILTER] Name kubernetes Match kube.* Merge_Log On Buffer_Size 0 Kube_Meta_Cache_TTL 300s
Important
  • Kube_URL, Kube_CA_File, Kube_Token_Command et Kube_Token_File sont 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_TTL est le temps pendant lequel Fluent Bit attend jusqu'à ce qu'il communique avec le serveur d'API pour obtenir les dernières métadonnées. Si la valeur Kube_Meta_Cache_TTL n'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 Fluent Bit à votre compte

Vous pouvez éventuellement envoyer des journaux de Fluent Bit processus à Amazon CloudWatch en utilisant les méthodes suivantesConfigMap. L'expédition des journaux de traitement Fluent Bit CloudWatch nécessite des frais d'ingestion et de stockage supplémentaires. region-codeRemplacez-le par Région AWS celui dans lequel se trouve votre cluster.

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.* region region-code log_group_name fluent-bit-cloudwatch log_stream_prefix from-fluent-bit- auto_create_group true

Les journaux se trouvent dans Région AWS le répertoire sous lequel réside le cluster CloudWatch. Le nom du groupe de journaux est my-cluster-fluent-bit-logs et le nom du flux de journaux Fluent Bit est fluent-bit-podname-pod-namespace.

Note
  • Les journaux de processus sont uniquement envoyés lorsque le processus Fluent Bit démarre avec succès. En cas d'échec lors du démarrage de Fluent Bit, les journaux de processus sont manqués. Vous ne pouvez expédier les journaux de processus qu'à CloudWatch.

  • Pour déboguer l'envoi des journaux de processus à votre compte, vous pouvez appliquer la ConfigMap précédente pour obtenir les journaux de processus. L'échec de démarrage de Fluent Bit est généralement dû au fait que votre ConfigMap n'est pas analysée ou acceptée par Fluent Bit lors du démarrage.

Pour arrêter l'envoi des journaux de processus Fluent Bit

Fluent BitLe processus d'expédition entraîne des CloudWatch coûts supplémentaires d'ingestion et de stockage des journaux. Pour exclure les journaux de processus d'une configuration de ConfigMap existante, procédez comme suit.

  1. Localisez le groupe de CloudWatch journaux créé automatiquement pour les journaux de Fluent Bit processus de votre cluster Amazon EKS après avoir activé la journalisation Fargate. Il utilise le format {cluster_name}-fluent-bit-logs.

  2. Supprimez les flux de CloudWatch journaux existants créés pour chaque CloudWatch journal de Pod's processus du groupe de journaux.

  3. Modifiez la ConfigMap et définissez flb_log_cw: "false".

  4. Redémarrez tous les Pods existants du cluster.

Tester l'application

  1. Déployez un exemple de Pod.

    1. Enregistrez le contenu suivant dans un fichier nommé sample-app.yaml sur votre ordinateur.

      apiVersion: apps/v1 kind: Deployment metadata: name: sample-app namespace: same-namespace-as-your-fargate-profile spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:latest ports: - name: http containerPort: 80
    2. Appliquez le fichier manifeste à votre cluster.

      kubectl apply -f sample-app.yaml
  2. 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.

Résolution des problèmes

Pour confirmer que la fonctionnalité de journalisation est activée ou désactivée pour une quelconque raison, telle qu'un ConfigMap non valide, et déterminer la raison pour laquelle il n'est pas valide, vérifiez les événements de votre Pod avec kubectl describe pod pod_name. La sortie peut inclure des événements de Pod qui précisent si la journalisation est activée ou non, comme l'exemple de sortie suivant.

[...] Annotations: CapacityProvisioned: 0.25vCPU 0.5GB Logging: LoggingDisabled: LOGGING_CONFIGMAP_NOT_FOUND kubernetes.io/psp: eks.privileged [...] 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's à l'aide de kubectl describe pod pod-name. Dans l'annotation du Pod, il existe des informations sur l'activation ou la désactivation de la fonctionnalité de journalisation et la cause.