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 de débit de journalisation élevé, nous vous recommandons d'utiliser le pilote de awsfirelens journalisation 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 couvre les techniques Fluent Bit d'optimisation avancées permettant de gérer un débit de journalisation é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 Amazon ECS sur GitHub.

Note

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

Comprendre les morceaux

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

Le comportement de la mise en mémoire tampon dépend du storage.type réglage de vos sections INPUT. Par défaut, Fluent Bit utilise la mise en mémoire tampon. Pour les scénarios de 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 pour Fluent Bit exemples.

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 avec 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 de 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 journalisation faible à modéré. Pour les scénarios de 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 la section Mise en mémoire tampon et mémoire dans la Fluent Bit documentation et la section Mise en mémoire tampon uniquement dans le référentiel AWS d'Fluent Bitexemples.

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

Pour les scénarios à haut débit, nous vous recommandons d'utiliser la mise en mémoire tampon du système de fichiers. Pour plus d'informations sur la gestion de la Fluent Bit 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 supérieure  : 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  : en cas de panne 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

Paramètres de configuration clés :

storage.path

Le répertoire dans lequel sont Fluent Bit stockées les parties mises 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 segments 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 morceaux 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 50 Mo sont disponibles pour la mise en mémoire tampon, réglez-le sur 8 à 10 segments.

storage.type filesystem

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

storage.total_limit_size

L'espace disque maximal pour les données mises en mémoire tampon pour un plug-in OUTPUT spécifique. Lorsque cette limite est atteinte, les enregistrements les plus anciens pour cette sortie sont supprimés. Pour plus d'informations sur les tailles, consultezComprendre storage.total_limit_size.

threaded true

Exécute l'entrée dans son propre thread, distinct 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 Filesystem Buffering dans la Fluent Bit documentation et Filesystem and Memory Buffering dans le AWS référentiel d'exemples. Fluent Bit

Comprendre 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 pour cette sortie sont supprimés pour faire de la place pour de 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 la valeur appropriée 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 MB/s 0,9 GO 5,4 GO 10,8 GO 21,6 GO
0,5 MB/s 1,8 GO 10,8 GO 21,6 GO 43,2 GO
1 MB/s 3,6 GO 21,6 GO 43,2 GO 86,4 GO
5  MB/s 18 GO 108 GO 216 GO 432 GO
10  MB/s 36 GO 216 GO 432 GO 864 GO

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

Utilisez la formule, des exemples de calculs et des analyses comparatives pour choisir une solution appropriée storage.total_limit_size qui offre une piste permettant une reprise optimale en cas de panne.

Exigences en matière de stockage des tâches Amazon ECS

Additionnez toutes les storage.total_limit_size valeurs des sections OUTPUT et ajoutez une 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 l'espace de stockage disponible, il est Fluent Bit possible que les enregistrements ne soient pas mis en file d'attente et qu'ils soient perdus.

Les options de stockage suivantes sont disponibles :

Supports de liaison (stockage éphémère)
  • Pour AWS Fargate, la valeur par défaut est de 20 Go de stockage éphémère (maximum 200 Go). Configurez ephemeralStorage à l'aide de 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 lors de l'utilisation de l'Amazon ECS-optimized AMI (partagée entre le système d'exploitation et Docker). Augmentez en modifiant la taille du volume de la 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 des sorties

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

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

retry_limit

Le nombre maximum 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 nouvelles tentatives). Pour les environnements de production, nous recommandons 15 ou plus, ce qui permet de couvrir plusieurs minutes de panne avec un retard exponentiel.

Réglez sur no_limits ou False pour une infinité de tentatives :

  • Avec la mise en mémoire tampon, des tentatives infinies provoquent 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 + 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, fournit environ 70 secondes de temps d'attente dans le planificateur (10 s + 20 s + 40 s), 40 secondes de délais de connexion réseau (4 tentatives × 10 s), plus de nouvelles tentatives de AWS plug-in, soit un total d'environ 2 à 10 minutes selon les conditions du réseau et les délais TCP du système d'exploitation.

scheduler.base

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

scheduler.cap

Le nombre maximum de secondes entre les nouvelles tentatives (par défaut : 2000). Nous recommandons 60 secondes.

Le temps d'attente entre les nouvelles tentatives utilise un retard exponentiel avec gigue :

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 entre 10 et 20 secondes

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

  • Troisième tentative et plus tard : attente aléatoire entre 10 et 60 secondes (plafonnée)

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

workers

Le nombre de threads pour le traitement des sorties parallèles. Plusieurs serveurs autorisent des vidanges simultanées, améliorant ainsi le débit lors du traitement de nombreux blocs.

auto_retry_requests

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

Le Grace paramètre de [SERVICE] cette 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 cela stopTimeout dépasse la Grace période nécessaire Fluent Bit pour terminer le rinçage avant de recevoirSIGKILL. Par exemple, s'il Grace est de 120 secondes, stopTimeout réglez 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 présentées dans ce guide constituent des approches efficaces pour minimiser les pertes de données, mais ne peuvent garantir l'absence de perte lors de pannes prolongées. La compréhension de ces scénarios vous aide à effectuer les configurations Fluent Bit nécessaires 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 plus de données.

Les plus vieux records ont été déposés

Les enregistrements mis en mémoire tampon les plus anciens sont supprimés lorsque les tentatives de nouvelle tentative sont épuisées ou lorsqu'storage.total_limit_sizeil est temps de faire de la place pour de nouvelles données.

Limite de nouvelles tentatives dépassée

Survient après les nouvelles tentatives du AWS plugin (siauto_retry_requests true) plus une Fluent Bit tentative initiale plus de nouvelles retry_limit tentatives. Pour atténuer les effets, définissez retry_limit no_limits chaque plug-in OUTPUT pour une infinité de tentatives :

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

Les tentatives infinies évitent de perdre des enregistrements en raison de l'épuisement des nouvelles tentatives, mais peuvent 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 storage.total_limit_size CAN que vous avez configurée. Par exemple, une mémoire tampon de 10 Go à 1 MB/s log fournit environ 2,7 heures de mise en mémoire tampon. Pour y remédier, augmentez le nombre storage.total_limit_size par plug-in OUTPUT et provisionnez un stockage des 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 la saisie est suspendue pour cause 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 met pas les nouveaux enregistrements en file d'attente et ils sont perdus. Pour atténuer les effets, additionnez toutes les storage.total_limit_size valeurs et provisionnez un stockage des tâches Amazon ECS adéquat. Pour de plus amples informations, veuillez consulter Exigences en matière de 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 de saisie 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.

Meilleures pratiques pour minimiser les pertes de données

Prenez en compte les bonnes pratiques suivantes pour minimiser les pertes de données :

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

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

  • Provisionnez un disque adéquat  : assurez-vous que la tâche Amazon ECS dispose d'un 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 nouvelles tentatives) et no_limits (essaie indéfiniment mais peut remplir l'espace de stockage).

Utilisez la journalisation multidestination pour plus de fiabilité

L'envoi de journaux vers plusieurs destinations élimine les points de défaillance uniques. Par exemple, si CloudWatch Logs rencontre une panne, les journaux parviennent toujours à Amazon S3.

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

Multi-destination la journalisation peut apporter les avantages suivants :

  • Redondance  : si une destination échoue, les journaux parviennent toujours à 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êtes rapide tel que CloudWatch Logs avec une conservation plus courte, tout en archivant tous les journaux sur un 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. Lors d'une panne d'une destination, les journaux continuent de circuler vers l'autre tandis que les vidages échoués s'accumulent dans la mémoire tampon du système de fichiers pour une nouvelle tentative ultérieure.

Utilisez la journalisation basée sur des fichiers avec le plugin Tail Input

Pour les scénarios à haut débit où la perte de journaux constitue une préoccupation majeure, vous pouvez utiliser une autre approche : demander à votre application d'écrire des journaux dans des fichiers sur disque et de la 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.

File-based la journalisation 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 DB cette option), garantissant ainsi une durabilité lors des Fluent Bit redémarrages. Cela permet d'éviter la perte de journaux lors du redémarrage du conteneur.

  • Input-level mise en mémoire tampon — Vous pouvez configurer les limites de mémoire tampon directement sur le plug-in d'entréeMem_Buf_Limit, ce qui permet un contrôle plus précis de l'utilisation de la mémoire.

  • Évite la surcharge de Docker  : les journaux passent directement d'un fichier à un Fluent Bit autre sans passer par les buffers de journaux de Docker.

Pour utiliser cette approche, votre application doit écrire des journaux dans des fichiers au lieu destdout. 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 de queue avec les 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 plug-in Tail Input, tenez compte des points suivants :

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

  • Envisagez des paramètres tels que Ignore_OlderRead_from_Head, et des analyseurs multilignes en fonction du 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 dansstdout. Cette approche contourne la couche du pilote de journalisation Docker, ce qui présente les avantages suivants :

  • Latence réduite  : les journaux sont envoyés directement à l'infrastructure de journalisation de Docker Fluent Bit sans passer par celle-ci.

  • Journalisation structurée  : envoyez des données de journal structurées de manière native sans surcharge d'encodage 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 de 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 etFluent 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.

Lorsque vous utilisez cette option, tenez compte des points suivants :

  • 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 de 2 KiB, une limite de mémoire tampon de 4 096 utiliserait au maximum 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 montre 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 } ] }