View a markdown version of this page

Configuration des journaux Amazon ECS pour un débit élevé - Amazon Elastic Container Service

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.

Configuration des journaux Amazon ECS pour un débit élevé

Pour les scénarios à haut débit de log, nous recommandons d'utiliser le pilote de awsfirelens log avec FireLens etFluent Bit. Fluent Bitest un processeur de journaux léger qui utilise efficacement les ressources et peut gérer des millions d'enregistrements de journaux. Cependant, pour obtenir des performances optimales à grande échelle, il faut ajuster sa configuration.

Cette section décrit les techniques Fluent Bit d'optimisation avancées permettant de gérer un débit de log élevé tout en préservant la stabilité du système et en évitant toute perte de données.

Pour plus d'informations sur l'utilisation de fichiers de configuration personnalisés avec FireLens, consultezUtilisation d’un fichier de configuration. Pour des exemples supplémentaires, consultez les FireLens exemples d'Amazon ECS sur GitHub.

Note

Certaines options de configuration de cette section, telles que workers etthreaded, nécessitent AWS la Fluent Bit version 3 ou ultérieure. Pour plus d'informations sur les versions disponibles, voir AWS les versions de Fluent Bit.

Comprendre les morceaux

Fluent Bittraite les données en unités appelées fragments. Lorsqu'un plugin INPUT reçoit des données, le moteur crée un fragment qui est stocké en mémoire ou sur le système de fichiers avant d'être envoyé aux destinations OUTPUT.

Le comportement de mise en mémoire tampon dépend du storage.type paramètre défini dans vos sections INPUT. Par défaut, Fluent Bit utilise la mise en mémoire tampon. Pour les scénarios à haut débit ou de production, la mise en mémoire tampon du système de fichiers offre une meilleure résilience.

Pour plus d'informations, consultez les sections Chunks dans la Fluent Bit documentation et Qu'est-ce qu'un chunk ? dans le référentiel AWS for Fluent Bit examples.

Mise en mémoire tampon (par défaut)

Par défaut, Fluent Bit utilise la mise en mémoire tampon (storage.type memory). Vous pouvez limiter l'utilisation de la mémoire par plug-in INPUT à l'aide du Mem_Buf_Limit paramètre.

L'exemple suivant montre une configuration d'entrée mise en mémoire tampon :

[INPUT] Name tcp Tag ApplicationLogs Port 5170 storage.type memory Mem_Buf_Limit 5MB
Important

Lorsqu'il Mem_Buf_Limit est dépassé pour un plugin, la Fluent Bit saisie est interrompue et les nouveaux enregistrements sont perdus. Cela peut provoquer une contre-pression et ralentir votre application. L'avertissement suivant apparaît dans les Fluent Bit journaux :

[input] tcp.1 paused (mem buf overlimit)

La mise en mémoire tampon convient aux cas d'utilisation simples avec un débit de log faible à modéré. Pour les scénarios à haut débit ou de production où la perte de données est un problème, utilisez plutôt la mise en mémoire tampon du système de fichiers.

Pour plus d'informations, consultez Buffering and Memory dans la Fluent Bit documentation et Memory Buffering Only dans le référentiel AWS for Fluent Bit examples.

Mise en mémoire tampon du système de fichiers

Pour les scénarios à haut débit, nous recommandons d'utiliser la mise en mémoire tampon du système de fichiers. Pour plus d'informations sur la Fluent Bit gestion de la mise en mémoire tampon et du stockage, consultez la section Mise en mémoire tampon et stockage dans la Fluent Bit documentation.

La mise en mémoire tampon du système de fichiers présente les avantages suivants :

  • Capacité de mémoire tampon plus importante : l'espace disque est généralement plus abondant que la mémoire.

  • Persistance : les données mises en mémoire tampon survivent Fluent Bit aux redémarrages.

  • Dégradation progressive : lors de défaillances de sortie, les données s'accumulent sur le disque au lieu d'épuiser la mémoire.

Pour activer la mise en mémoire tampon du système de fichiers, fournissez un fichier de Fluent Bit configuration personnalisé. L'exemple suivant montre la configuration recommandée :

[SERVICE] # Flush logs every 1 second Flush 1 # Wait 120 seconds during shutdown to flush remaining logs Grace 120 # Directory for filesystem buffering storage.path /var/log/flb-storage/ # Limit chunks stored 'up' in memory (reduce for memory-constrained environments) storage.max_chunks_up 32 # Flush backlog chunks to destinations during shutdown (prevents log loss) storage.backlog.flush_on_shutdown On [INPUT] Name forward unix_path /var/run/fluent.sock # Run input in separate thread to prevent blocking threaded true # Enable filesystem buffering for persistence storage.type filesystem [OUTPUT] Name cloudwatch_logs Match * region us-west-2 log_group_name /aws/ecs/my-app log_stream_name $(ecs_task_id) # Use multiple workers for parallel processing workers 2 # Retry failed flushes up to 15 times retry_limit 15 # Maximum disk space for buffered data for this output storage.total_limit_size 10G

Principaux paramètres de configuration :

storage.path

Le répertoire dans lequel sont Fluent Bit stockés les fragments mis en mémoire tampon sur le disque.

storage.backlog.flush_on_shutdown

Lorsque cette option est activée, Fluent Bit tente de vider tous les fragments du système de fichiers en attente vers leur destination lors de l'arrêt. Cela permet de garantir la livraison des données avant les Fluent Bit arrêts, mais peut augmenter le temps d'arrêt.

storage.max_chunks_up

Le nombre de segments qui restent en mémoire. La valeur par défaut est de 128 blocs, qui peuvent consommer plus de 500 Mo de mémoire, car chaque bloc peut utiliser jusqu'à 4 à 5 Mo. Dans les environnements où la mémoire est limitée, réduisez cette valeur. Par exemple, si vous disposez de 50 Mo pour la mise en mémoire tampon, définissez ce paramètre sur 8 à 10 segments.

storage.type filesystem

Active le stockage du système de fichiers pour le plugin d'entrée. Malgré son nom, il permet Fluent Bit de mmap mapper des fragments à la fois à la mémoire et au disque, garantissant ainsi la persistance sans sacrifier les performances.

storage.total_limit_size

Espace disque maximal pour les données mises en mémoire tampon pour un plugin OUTPUT spécifique. Lorsque cette limite est atteinte, les enregistrements les plus anciens de cette sortie sont supprimés. Pour plus d'informations sur le dimensionnement, consultezPrésentation du code storage.total_limit_size.

threaded true

Exécute l'entrée dans son propre thread, séparé Fluent Bit de la boucle d'événements principale. Cela empêche les entrées lentes de bloquer l'ensemble du pipeline.

Pour plus d'informations, consultez la section Mise en mémoire tampon du système de fichiers dans la Fluent Bit documentation et Mise en mémoire tampon du système de fichiers et de la mémoire dans le AWS référentiel d'exemples. Fluent Bit

Présentation du code storage.total_limit_size

Le storage.total_limit_size paramètre de chaque plug-in OUTPUT contrôle l'espace disque maximal pour les données mises en mémoire tampon pour cette sortie. Lorsque cette limite est atteinte, les enregistrements les plus anciens de cette sortie sont supprimés pour faire de la place aux nouvelles données. Lorsque l'espace disque est complètement épuisé, les enregistrements Fluent Bit ne sont pas mis en file d'attente et ils sont perdus.

Utilisez la formule suivante pour calculer le montant approprié en storage.total_limit_size fonction de votre taux de journalisation et de la fenêtre de restauration souhaitée :

If log rate is in KB/s, convert to MB/s first: log_rate (MB/s) = log_rate (KB/s) / 1000 storage.total_limit_size (GB) = log_rate (MB/s) × duration (hours) × 3600 (seconds/hour) / 1000 (MB to GB)

Le tableau suivant présente des exemples de calculs pour les taux de journalisation et les fenêtres de restauration courants :

Taux de journalisation 1 heure 6 heures 12 heures 24 heures
0,25 Mo/s 0,9 GO 5,4 GO 10,8 GO 21,6 GO
0,5 Mo/s 1,8 GO 10,8 GO 21,6 GO 43,2 GO
1 Mo/s 3,6 GO 21,6 GO 43,2 GO 86,4 GO
5 Mo/s 18 GO 108 GO 216 GO 432 GO
10 Mo/s 36 GO 216 GO 432 GO 864 GO

Pour observer le débit maximal et choisir les tailles de tampon appropriées, utilisez l'échantillon de débit de mesure. FireLens

Utilisez la formule, des exemples de calculs et des analyses comparatives pour choisir la piste la mieux adaptée storage.total_limit_size à une reprise optimale en cas de panne.

Exigences relatives au stockage des tâches Amazon ECS

Additionnez toutes les storage.total_limit_size valeurs des sections OUTPUT et ajoutez de la mémoire tampon pour les frais généraux. Ce total détermine l'espace de stockage nécessaire dans votre définition de tâche Amazon ECS. Par exemple, 3 sorties × 10 Go chacune = 30 Go + mémoire tampon (5 à 10 Go) = 35 à 40 Go au total requis. Si le total dépasse le stockage disponible, les enregistrements Fluent Bit risquent de ne pas être mis en file d'attente et ils seront perdus.

Les options de stockage suivantes sont disponibles :

Supports Bind (stockage éphémère)
  • Pour AWS Fargate, la valeur par défaut est de 20 Go de stockage éphémère (200 Go maximum). Configurez ephemeralStorage en utilisant dans la définition de la tâche. Pour plus d’informations, consultez EphemeralStorage dans le Guide de l’utilisateur AWS CloudFormation .

  • Pour EC2, la valeur par défaut est de 30 Go lorsque vous utilisez l'AMI optimisée pour Amazon ECS (partagée entre le système d'exploitation et Docker). Augmentez en modifiant la taille du volume racine.

Volumes Amazon EBS
Volumes Amazon EFS

Pour plus d'informations sur les volumes de données, consultezOptions de stockage pour les tâches Amazon ECS.

Optimisation de la configuration de sortie

Les problèmes de réseau, les interruptions de service et la limitation des destinations peuvent empêcher la livraison des journaux. Une configuration de sortie appropriée garantit la résilience sans perte de données.

En cas d'échec d'un vidage de sortie, Fluent Bit vous pouvez réessayer l'opération. Les paramètres suivants contrôlent le comportement des nouvelles tentatives :

retry_limit

Nombre maximal de tentatives après la première tentative avant de supprimer des enregistrements. La valeur par défaut est 1. Par exemple, retry_limit 3 cela signifie 4 tentatives au total (1 tentative initiale + 3 tentatives). Pour les environnements de production, nous recommandons une durée de 15 minutes ou plus, ce qui couvre plusieurs minutes d'interruption avec un ralentissement exponentiel.

Défini pour no_limits ou False pour un nombre infini de tentatives :

  • Avec la mise en mémoire tampon, des tentatives infinies entraînent une pause du plug-in d'entrée lorsque les limites de mémoire sont atteintes.

  • Avec la mise en mémoire tampon du système de fichiers, les enregistrements les plus anciens sont supprimés lorsqu'ils storage.total_limit_size sont atteints.

Important

Après avoir épuisé toutes les tentatives (1 tentative initiale et nouvelles retry_limit tentatives), les enregistrements sont supprimés. AWS les plugins avec auto_retry_requests true (par défaut) fournissent une couche de nouvelle tentative supplémentaire avant Fluent Bit le mécanisme de nouvelle tentative. Pour plus d'informations, consultez la section Configurer les nouvelles tentatives dans la Fluent Bit documentation.

Par exemple, retry_limit 3 avec les paramètres par défaut (scheduler.base 5,,net.connect_timeout 10s)scheduler.cap 2000, le temps d'attente du planificateur est d'environ 70 secondes (10 s + 20 + 40 s), les délais de connexion au réseau de 40 secondes (4 tentatives × 10 s), plus de nouvelles tentatives de AWS plug-in, soit un total d'environ 2 à 10 minutes en fonction des conditions du réseau et des délais TCP du système d'exploitation.

scheduler.base

Les secondes de base entre les tentatives (par défaut : 5). Nous recommandons 10 secondes.

scheduler.cap

Nombre maximal de secondes entre deux tentatives (par défaut : 2000). Nous recommandons 60 secondes.

Le temps d'attente entre les nouvelles tentatives utilise un recul exponentiel associé à de l'instabilité :

wait_time = random(base, min(base × 2^retry_number, cap))

Par exemple, avec scheduler.base 10 et scheduler.cap 60 :

  • Première tentative : attente aléatoire comprise entre 10 et 20 secondes

  • Deuxième tentative : attente aléatoire comprise entre 10 et 40 secondes

  • Troisième tentative et versions ultérieures : attente aléatoire comprise entre 10 et 60 secondes (plafonnée)

Pour plus d'informations, consultez Configurer le temps d'attente pour une nouvelle tentative et Mise en réseau dans la Fluent Bit documentation.

workers

Nombre de threads pour le traitement en sortie parallèle. Plusieurs opérateurs autorisent des purges simultanées, ce qui améliore le débit lors du traitement de nombreux fragments.

auto_retry_requests

Un paramètre AWS spécifique au plugin qui fournit une couche de nouvelle tentative supplémentaire avant le mécanisme Fluent Bit de nouvelle tentative intégré. La valeur par défaut est true. Lorsqu'il est activé, le plugin AWS de sortie réessaie les demandes ayant échoué en interne avant que la demande ne soit considérée comme un échec du rinçage et soumise à la retry_limit configuration.

Le Grace paramètre de la [SERVICE] section définit le temps d'Fluent Bitattente pendant l'arrêt pour vider les données mises en mémoire tampon. La Grace période doit être coordonnée avec celle du contenantstopTimeout. Assurez-vous que ce délai stopTimeout dépasse le Grace délai imparti pour Fluent Bit permettre le rinçage complet avant de le recevoir. SIGKILL Par exemple, si elle Grace est de 120 secondes, définie stopTimeout sur 150 secondes.

L'exemple suivant montre une Fluent Bit configuration complète avec tous les paramètres recommandés pour les scénarios à haut débit :

[SERVICE] # Flush logs every 1 second Flush 1 # Wait 120 seconds during shutdown to flush remaining logs Grace 120 # Directory for filesystem buffering storage.path /var/log/flb-storage/ # Limit chunks stored 'up' in memory (reduce for memory-constrained environments) storage.max_chunks_up 32 # Flush backlog chunks to destinations during shutdown (prevents log loss) storage.backlog.flush_on_shutdown On # Minimum seconds between retries scheduler.base 10 # Maximum seconds between retries (exponential backoff cap) scheduler.cap 60 [INPUT] Name forward unix_path /var/run/fluent.sock # Run input in separate thread to prevent blocking threaded true # Enable filesystem buffering for persistence storage.type filesystem [OUTPUT] Name cloudwatch_logs Match * region us-west-2 log_group_name /aws/ecs/my-app log_stream_name $(ecs_task_id) # Use multiple workers for parallel processing workers 2 # Retry failed flushes up to 15 times retry_limit 15 # Maximum disk space for buffered data for this output storage.total_limit_size 10G

Comprendre les scénarios de perte de données

Les enregistrements peuvent être perdus lors de pannes prolongées ou de problèmes liés aux destinations de sortie. Les recommandations de configuration contenues dans ce guide constituent des approches optimales pour minimiser les pertes de données, mais ne peuvent garantir aucune perte en cas de panne prolongée. La compréhension de ces scénarios vous aide Fluent Bit à configurer pour optimiser la résilience.

Les enregistrements peuvent être perdus de deux manières : les enregistrements les plus anciens sont supprimés lorsque le stockage est plein, ou les enregistrements les plus récents sont rejetés lorsque le système ne peut pas accepter davantage de données.

Les plus anciens records abandonnés

Les enregistrements mis en mémoire tampon les plus anciens sont supprimés lorsque les nouvelles tentatives sont épuisées ou lorsqu'ils sont storage.total_limit_size pleins et doivent faire de la place pour de nouvelles données.

Limite de tentatives dépassée

Se produit après de nouvelles tentatives du AWS plugin (ifauto_retry_requests true) plus 1 Fluent Bit tentative initiale plus de nouvelles retry_limit tentatives. Pour atténuer les effets, définissez retry_limit no_limits chaque plugin OUTPUT pour un nombre infini de tentatives :

[OUTPUT] Name cloudwatch_logs Match ApplicationLogs retry_limit no_limits auto_retry_requests true
Important

Un nombre indéfini de tentatives permet d'éviter de perdre des enregistrements en cas d'épuisement des tentatives, mais cela peut storage.total_limit_size entraîner un remplissage.

Limite de stockage atteinte (mise en mémoire tampon du système de fichiers)

Se produit lorsque la destination de sortie n'est pas disponible plus longtemps que la mémoire tampon que storage.total_limit_size vous avez configurée. Par exemple, une mémoire tampon de 10 Go à un débit MB/s journalier fournit environ 2,7 heures de mise en mémoire tampon. Pour atténuer les risques, augmentez storage.total_limit_size le nombre de plug-ins OUTPUT et fournissez un stockage de tâches Amazon ECS adéquat :

[OUTPUT] Name cloudwatch_logs Match ApplicationLogs storage.total_limit_size 10G

Nouveaux enregistrements rejetés

Les enregistrements les plus récents sont supprimés lorsque l'espace disque est épuisé ou lorsque l'entrée est interrompue en raison deMem_Buf_Limit.

Espace disque épuisé (mise en mémoire tampon du système de fichiers)

Se produit lorsque l'espace disque est complètement épuisé. Fluent Bitne parvient pas à mettre en file d'attente les nouveaux enregistrements et ils sont perdus. Pour atténuer les risques, additionnez toutes les storage.total_limit_size valeurs et fournissez un stockage de tâches Amazon ECS adéquat. Pour de plus amples informations, veuillez consulter Exigences relatives au stockage des tâches Amazon ECS.

Limite de mémoire atteinte (mise en mémoire tampon)

Se produit lorsque la destination de sortie n'est pas disponible et que la mémoire tampon est pleine. Les plugins d'entrée en pause cessent d'accepter de nouveaux enregistrements. Pour atténuer, utiliser storage.type filesystem pour améliorer la résilience ou augmenterMem_Buf_Limit.

Bonnes pratiques pour minimiser les pertes de données

Tenez compte des meilleures pratiques suivantes pour minimiser les pertes de données :

  • Utiliser la mise en mémoire tampon du système de fichiers : configurée storage.type filesystem pour une meilleure résilience en cas de panne.

  • Dimensionnez le stockage de manière appropriée : calculez en storage.total_limit_size fonction du taux de journalisation et de la fenêtre de restauration souhaitée.

  • Provisionner un disque adéquat : assurez-vous que la tâche Amazon ECS dispose d'un espace de stockage éphémère suffisant, Amazon EBS ou Amazon EFS.

  • Configurer le comportement des nouvelles tentatives : équilibre entre retry_limit (supprime les enregistrements après avoir épuisé les tentatives) et no_limits (nouvelles tentatives indéfiniment mais risque de remplir l'espace de stockage).

Utilisez la journalisation à destinations multiples pour plus de fiabilité

L'envoi de journaux vers plusieurs destinations élimine les points de défaillance uniques. Par exemple, en cas de panne de CloudWatch Logs, les journaux continuent d'atteindre Amazon S3.

La journalisation à destinations multiples offre les avantages suivants. Le plug-in de sortie Amazon S3 prend également en charge les options de compression telles que le format gzip et le format Parquet, qui peuvent réduire les coûts de stockage. Pour plus d'informations, consultez la section Compression S3 dans la Fluent Bit documentation.

La journalisation à destinations multiples peut offrir les avantages suivants :

  • Redondance : si une destination échoue, les journaux continuent d'atteindre l'autre.

  • Rétablissement — Reconstituer les lacunes d'un système par rapport à l'autre.

  • Durabilité — Archivez les journaux dans Amazon S3 pour les conserver à long terme.

  • Optimisation des coûts : conservez les journaux récents dans un service de requête rapide tel que les CloudWatch journaux à durée de conservation plus courte, tout en archivant tous les journaux dans un espace de stockage Amazon S3 à moindre coût pour une conservation à long terme.

La Fluent Bit configuration suivante envoie des journaux à la fois à CloudWatch Logs et à Amazon S3 :

[OUTPUT] Name cloudwatch_logs Match * region us-west-2 log_group_name /aws/ecs/my-app log_stream_name $(ecs_task_id) workers 2 retry_limit 15 [OUTPUT] Name s3 Match * bucket my-logs-bucket region us-west-2 total_file_size 100M s3_key_format /fluent-bit-logs/$(ecs_task_id)/%Y%m%d/%H/%M/$UUID upload_timeout 10m # Maximum disk space for buffered data for this output storage.total_limit_size 5G

Les deux sorties utilisent le même Match * schéma, de sorte que tous les enregistrements sont envoyés aux deux destinations indépendamment. En cas de panne d'une destination, les journaux continuent de circuler vers l'autre tandis que les purges échouées s'accumulent dans la mémoire tampon du système de fichiers pour une nouvelle tentative ultérieure.

Utiliser la journalisation basée sur des fichiers avec le plugin d'entrée tail

Pour les scénarios à haut débit dans lesquels la perte de journaux est un problème critique, vous pouvez utiliser une autre approche : demandez à votre application d'écrire des journaux dans des fichiers sur disque et de les configurer Fluent Bit pour les lire à l'aide du plug-in tail d'entrée. Cette approche contourne complètement la couche du pilote de journalisation Docker.

La journalisation basée sur des fichiers avec le plugin tail offre les avantages suivants :

  • Suivi des décalages — Le plugin tail peut stocker les décalages de fichiers dans un fichier de base de données (en utilisant l'DBoption), garantissant ainsi une durabilité lors des Fluent Bit redémarrages. Cela permet d'éviter la perte de journal lors du redémarrage du conteneur.

  • Mise en mémoire tampon au niveau de l'entrée : vous pouvez configurer les limites de mémoire tampon directement sur le plug-in d'entréeMem_Buf_Limit, ce qui permet de contrôler plus précisément l'utilisation de la mémoire.

  • Évite la surcharge de Docker : les journaux passent directement du fichier au fichier Fluent Bit sans passer par les mémoires tampon de Docker.

Pour utiliser cette approche, votre application doit écrire des journaux dans des fichiers plutôt que dansstdout. Le conteneur d'applications et le Fluent Bit conteneur montent tous deux un volume partagé dans lequel les fichiers journaux sont stockés.

L'exemple suivant montre une configuration d'entrée secondaire conforme aux meilleures pratiques :

[INPUT] Name tail # File path or glob pattern to tail Path /var/log/app.log # Database file for storing file offsets (enables resuming after restart) DB /var/log/flb_tail.db # when true, controls that only fluent-bit will access the database (improves performance) DB.locking true # Skip long lines instead of skipping the entire file Skip_Long_Lines On # How often (in seconds) to check for new files matching the glob pattern Refresh_Interval 10 # Extra seconds to monitor a file after rotation to account for pending flush Rotate_Wait 30 # Maximum size of the buffer for a single line Buffer_Max_Size 10MB # Initial allocation size for reading file data Buffer_Chunk_Size 1MB # Maximum memory buffer size (tail pauses when full) Mem_Buf_Limit 75MB

Lorsque vous utilisez le plugin d'entrée tail, tenez compte des points suivants :

  • Implémentez la rotation des journaux de vos applications afin d'éviter l'épuisement du disque. Surveillez les indicateurs de volume sous-jacents pour évaluer les performances.

  • Tenez compte de paramètres tels que Ignore_OlderRead_from_Head, et des analyseurs multilignes basés sur le format de votre journal.

Pour plus d'informations, consultez Tail dans la Fluent Bit documentation. Pour connaître les meilleures pratiques, consultez la section Configuration de Tail avec les meilleures pratiques dans AWS le guide de Fluent Bit dépannage.

Connectez-vous directement à FireLens

Lorsque le pilote de journal awsfirelens est spécifié dans une définition de tâche, l'agent de conteneur Amazon ECS injecte les variables d'environnement suivantes dans le conteneur :

FLUENT_HOST

Adresse IP attribuée au FireLens conteneur.

Note

Si vous utilisez EC2 en mode bridge réseau, la variable d'FLUENT_HOSTenvironnement de votre conteneur d'applications peut devenir inexacte après le redémarrage du conteneur FireLens log router (le conteneur contenant l'firelensConfigurationobjet dans sa définition de conteneur). Cela est dû au fait que FLUENT_HOST est une adresse IP dynamique qui peut changer après un redémarrage. La journalisation directe depuis le conteneur de l’application vers l’adresse IP FLUENT_HOST peut commencer à échouer après le changement d’adresse. Pour obtenir plus d’informations sur le redémarrage de conteneurs individuels, consultez la section Redémarrage de conteneurs individuels dans les tâches Amazon ECS à l’aide de politiques de redémarrage de conteneurs.

FLUENT_PORT

Port sur lequel le protocole Fluent Forward écoute.

Vous pouvez utiliser ces variables d'environnement pour vous connecter directement au routeur de Fluent Bit journaux à partir du code de votre application à l'aide du protocole Fluent Forward, au lieu d'écrire surstdout. Cette approche contourne la couche de pilote de journalisation Docker, ce qui offre les avantages suivants :

  • Latence réduite : les journaux sont directement accessibles Fluent Bit sans passer par l'infrastructure de journalisation de Docker.

  • Journalisation structurée : envoyez des données de journal structurées de manière native sans surcharge de codage JSON.

  • Meilleur contrôle : votre application peut implémenter sa propre logique de mise en mémoire tampon et de gestion des erreurs.

Les bibliothèques d'enregistreurs Fluent suivantes prennent en charge le protocole Fluent Forward et peuvent être utilisées pour envoyer des journaux directement à Fluent Bit :

Configurer la limite de mémoire tampon Docker

Lorsque vous créez une définition de tâche, vous pouvez spécifier le nombre de lignes de journal mises en mémoire tampon en spécifiant la valeur danslog-driver-buffer-limit. Cela contrôle la mémoire tampon entre Docker et. Fluent Bit Pour plus d’informations, consultez la section Pilote de journalisation dans la documentation Docker.

Utilisez cette option lorsque le débit est élevé, car Docker risque de manquer de mémoire tampon et de rejeter les messages tampons afin d'en ajouter de nouveaux.

Tenez compte des points suivants lorsque vous utilisez cette option :

  • Cette option est prise en charge sur le type de lancement Amazon EC2 et le type de lancement Fargate avec la version de plateforme 1.4.0 ou une version ultérieure.

  • L'option n'est valide que lorsque logDriver est défini sur awsfirelens.

  • La limite par défaut du tampon est de 1048576 lignes de journal.

  • La limite de mémoire tampon doit être supérieure ou égale à 0 et inférieure à 536870912 lignes de journal.

  • La quantité maximale de mémoire utilisée pour cette mémoire tampon est le produit de la taille de chaque ligne de journal par la taille de la mémoire tampon. Par exemple, si les lignes de journal de l'application sont en moyenne en 2 KiB, une limite de mémoire tampon de 4 096 utiliserait au maximum 1 8 MiB. La quantité totale de mémoire allouée au niveau de la tâche doit être supérieure à la quantité de mémoire allouée à tous les conteneurs, en plus du tampon mémoire du pilote de journalisation.

La définition de tâche suivante indique comment configurer log-driver-buffer-limit :

{ "containerDefinitions": [ { "name": "my_service_log_router", "image": "public.ecr.aws/aws-observability/aws-for-fluent-bit:3", "cpu": 0, "memoryReservation": 51, "essential": true, "firelensConfiguration": { "type": "fluentbit" } }, { "essential": true, "image": "public.ecr.aws/docker/library/httpd:latest", "name": "app", "logConfiguration": { "logDriver": "awsfirelens", "options": { "Name": "firehose", "region": "us-west-2", "delivery_stream": "my-stream", "log-driver-buffer-limit": "52428800" } }, "dependsOn": [ { "containerName": "my_service_log_router", "condition": "START" } ], "memoryReservation": 100 } ] }