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
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
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
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
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 * regionus-west-2log_group_name/aws/ecs/my-applog_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
mmapmapper 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
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
-
-
Fournit un stockage par blocs hautement disponible, durable et performant.
-
Nécessite une configuration du volume et
mountPointune définition de tâche pointant versstorage.path(par défaut :/var/log/flb-storage/). -
Pour de plus amples informations, veuillez consulter Report de la configuration du volume au moment du lancement dans une définition de tâche Amazon ECS.
-
- Volumes Amazon EFS
-
-
Fournit un stockage de fichiers simple et évolutif.
-
Nécessite une configuration du volume et
mountPointune définition de tâche pointant versstorage.path(par défaut :/var/log/flb-storage/). -
Pour de plus amples informations, veuillez consulter Spécification d’un système de fichiers Amazon EFS dans une définition de tâche Amazon ECS.
-
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 3cela 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_limitsouFalsepour 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_sizesont atteints.
Important
Après avoir épuisé toutes les tentatives (1 tentative initiale + nouvelles
retry_limittentatives), les enregistrements sont supprimés. AWS les plugins avecauto_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 tentativesdans la Fluent Bit documentation. Par exemple,
retry_limit 3avec 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
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 à laretry_limitconfiguration.
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 * regionus-west-2log_group_name/aws/ecs/my-applog_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 (si
auto_retry_requests true) plus une Fluent Bit tentative initiale plus de nouvellesretry_limittentatives. Pour atténuer les effets, définissezretry_limit no_limitschaque plug-in OUTPUT pour une infinité de tentatives :[OUTPUT] Name cloudwatch_logs Match ApplicationLogs retry_limit no_limits auto_retry_requests trueImportant
Les tentatives infinies évitent de perdre des enregistrements en raison de l'épuisement des nouvelles tentatives, mais peuvent
storage.total_limit_sizeentraî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_sizeCAN 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 nombrestorage.total_limit_sizepar 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_sizevaleurs 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 filesystempour 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 filesystempour une meilleure résilience en cas de panne. -
Dimensionnez le stockage de manière appropriée : calculez
storage.total_limit_sizeen 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) etno_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
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 * regionus-west-2log_group_name/aws/ecs/my-applog_stream_name $(ecs_task_id) workers 2 retry_limit 15 [OUTPUT] Name s3 Match * bucketmy-logs-bucketregionus-west-2total_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
DBcette 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ée
Mem_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
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
bridgeré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 queFLUENT_HOSTest une adresse IP dynamique qui peut changer après un redémarrage. La journalisation directe depuis le conteneur de l’application vers l’adresse IPFLUENT_HOSTpeut 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 :
-
Go — fluent-logger-golang
-
Python — enregistreur de fluidité Python
-
Java — enregistreur de fluent-java
-
Node.js— nœud enregistreur de flux
-
Ruby — Fluent-Logger-Ruby
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
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.0ou une version ultérieure. -
L'option n'est valide que lorsque
logDriverest défini surawsfirelens. -
La limite par défaut du tampon est de
1048576lignes de journal. -
La limite de mémoire tampon doit être supérieure ou égale à
0et inférieure à536870912lignes 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
2KiB, une limite de mémoire tampon de 4 096 utiliserait au maximum8MiB. 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 } ] }