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.
Déploiement de Fluent Bit sur des conteneurs Amazon ECS Windows
Fluent Bit est un processeur et un routeur de journaux rapides et flexibles pris en charge par différents systèmes d'exploitation. Il peut être utilisé pour acheminer les journaux vers différentes AWS destinations telles qu'Amazon CloudWatch Logs, Firehose, Amazon S3 et Amazon OpenSearch Service. Fluent Bit prend en charge des solutions partenaires courantes, comme Datadog
L'image AWS pour Fluent Bit est disponible sur Amazon à la fois ECR sur la galerie ECR publique Amazon et dans un ECR référentiel Amazon dans la plupart des régions pour une haute disponibilité. Pour plus d’informations, consultez .
aws-for-fluent-bit
Ce didacticiel explique comment déployer des conteneurs Fluent Bit sur leurs instances Windows exécutées dans Amazon ECS pour diffuser les journaux générés par les tâches Windows vers Amazon CloudWatch pour une journalisation centralisée.
Ce didacticiel utilise l'approche suivante :
-
Fluent Bit fonctionne comme un service avec la stratégie de planification du démon. Cette stratégie garantit qu'une seule instance de Fluent Bit s'exécute toujours sur les instances de conteneur du cluster.
-
Écoute sur le port 24224 à l'aide du plug-in d'entrée directe.
-
Expose le port 24224 à l'hôte afin que le moteur d'exécution du docker puisse envoyer des journaux à Fluent Bit en utilisant ce port exposé.
-
Dispose d'une configuration qui permet à Fluent Bit d'envoyer les enregistrements des journaux vers des destinations spécifiées.
-
-
Lancement de tous les autres conteneurs de ECS tâches Amazon à l'aide du pilote de journalisation Fluentd. Pour plus d'informations, consultez Fluentd logging drive
(Pilote de journalisation Fluentd) sur le site Web de la documentation de Docker. -
Docker se connecte au TCP socket 24224 sur localhost dans l'espace de noms de l'hôte.
-
L'ECSagent Amazon ajoute des étiquettes aux conteneurs, notamment le nom du cluster, le nom de famille de la définition de la tâche, le numéro de révision de la définition de la tâcheARN, la tâche et le nom du conteneur. Les mêmes informations sont ajoutées à l'enregistrement du journal à l'aide de l'option labels du pilote de journalisation fluentd de Docker. Pour de plus amples informations, veuillez consulter labels, labels-regex, env, and env-regex
sur le site web de la documentation de Docker. -
Comme l'option
async
du pilote de journalisation Fluentd est définie surtrue
, lorsque le conteneur Fluent Bit est redémarré, Docker met les journaux en mémoire tampon jusqu'à ce que le conteneur Fluent Bit soit redémarré. Vous pouvez augmenter la limite de mémoire tampon en définissant l' fluentd-buffer-limitoption. Pour de plus amples informations, veuillez consulter fluentd-buffer-limitle site web de documentation de Docker.
-
Le flux de travail est le suivant :
-
Le conteneur Fluent Bit démarre et écoute sur le port 24224 qui est exposé à l'hôte.
-
Fluent Bit utilise les informations d'identification du IAM rôle de tâche spécifiées dans sa définition de tâche.
-
Les autres tâches lancées sur la même instance utilisent le pilote de journalisation fluentd de Docker pour se connecter au conteneur Fluent Bit sur le port 24224.
-
Lorsque les conteneurs d'applications génèrent des journaux, le moteur d'exécution de Docker étiquette ces enregistrements, ajoute des métadonnées supplémentaires spécifiées dans les étiquettes, puis les transmet sur le port 24224 de l'espace de noms de l'hôte.
-
Fluent Bit reçoit l'enregistrement du journal sur le port 24224 car il est exposé à l'espace de noms de l'hôte.
-
Fluent Bit effectue son traitement interne et achemine les journaux comme spécifié.
Ce didacticiel utilise la configuration CloudWatch Fluent Bit par défaut qui effectue les opérations suivantes :
-
Crée un nouveau groupe de journaux pour chaque cluster et chaque famille de définitions de tâches.
-
Crée un nouveau flux de journaux pour chaque conteneur de tâches du groupe de journaux généré ci-dessus chaque fois qu'une nouvelle tâche est lancée. Chaque flux sera marqué avec l'identifiant de tâche à laquelle le conteneur appartient.
-
Ajoute des métadonnées supplémentaires, notamment le nom du cluster, la tâcheARN, le nom du conteneur de la tâche, la famille de définitions de la tâche et le numéro de révision de la définition de la tâche dans chaque entrée du journal.
Par exemple, si vous avez
task_1
withcontainer_1
container_2
et task_2
withcontainer_3
, les flux de CloudWatch log sont les suivants :-
/aws/ecs/windows.ecs_task_1
task-out.
TASK_ID
.container_1task-out.
TASK_ID
.container_2 -
/aws/ecs/windows.ecs_task_2
task-out.
TASK_ID
.container_3
-
Étapes
- Prérequis
- Étape 1 : Création des rôles IAM d'accès
- Étape 2 : Créer une instance de conteneur Amazon ECS Windows
- Étape 3 : Configurer Fluent Bit
- Étape 4 : Enregistrer une définition de tâche Windows Fluent Bit qui achemine les journaux vers CloudWatch
- Étape 5 : Exécuter la définition de ecs-windows-fluent-bit tâche en tant que ECS service Amazon en utilisant la stratégie de planification du démon
- Étape 6 : Enregistrer une définition de tâche Windows qui génère les journaux
- Étape 7 : Créer la définition de tâche windows-app-task
- Étape 8 : vérifier les connexions CloudWatch
- Étape 9 : Nettoyer
Prérequis
Le didacticiel suppose de remplir les prérequis suivants :
-
La dernière version de l' AWS CLI est installée et configurée. Pour plus d'informations, veuillez consulter Installation ou mise à jour vers la version la plus récente de l' AWS CLI.
-
L'image du conteneur
aws-for-fluent-bit
est disponible pour les systèmes d'exploitation Windows suivants :-
Windows Server 2019 Core
-
Windows Server 2019 Full
-
Windows Server 2022 Core
-
Windows Server 2022 Full
-
-
Vous devez avoir suivi les étapes de Configurer l'utilisation d'Amazon ECS.
-
Vous avez un cluster. Dans ce didacticiel, le nom du cluster est FluentBit-cluster.
-
Vous disposez VPC d'un sous-réseau public sur lequel l'EC2instance sera lancée. Vous pouvez utiliser votre valeur par défautVPC. Vous pouvez également utiliser un sous-réseau privé qui permet aux CloudWatch points de terminaison Amazon d'accéder au sous-réseau. Pour plus d'informations sur les CloudWatch points de terminaison Amazon, consultez la section CloudWatch Points de terminaison et quotas Amazon dans le. Références générales AWS Pour plus d'informations sur l'utilisation de l'VPCassistant Amazon pour créer unVPC, consultezCréer un Virtual Private Cloud.
Étape 1 : Création des rôles IAM d'accès
Créez les ECS IAM rôles Amazon.
-
Créez le rôle d'instance de ECS conteneur Amazon nommé « ecsInstanceRole ». Pour plus d'informations, consultez le IAMrôle de l'instance de ECS conteneur Amazon.
-
Créez un IAM rôle pour la tâche Fluent Bit intitulée
fluentTaskRole
. Pour de plus amples informations, veuillez consulter IAMRôle de ECS tâche Amazon.Les IAM autorisations accordées dans ce IAM rôle sont prises en charge par les conteneurs de tâches. Pour permettre à Fluent Bit d'envoyer des journaux CloudWatch, vous devez associer les autorisations suivantes au IAM rôle de tâche.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "logs:CreateLogStream", "logs:CreateLogGroup", "logs:DescribeLogStreams", "logs:PutLogEvents" ], "Resource": "*" } ] }
-
Attachez la stratégie au rôle.
-
Enregistrez le contenu ci-dessus dans un fichier nommé
fluent-bit-policy.json
. -
Exécutez la commande suivante pour associer la politique en ligne au
fluentTaskRole
IAM rôle.aws iam put-role-policy --role-name fluentTaskRole --policy-name fluentTaskPolicy --policy-document file://fluent-bit-policy.json
-
Étape 2 : Créer une instance de conteneur Amazon ECS Windows
Créez une instance de conteneur Amazon ECS Windows.
Pour créer une ECS instance Amazon
-
Utilisez la
aws ssm get-parameters
commande pour récupérer l'AMIidentifiant de la région qui héberge votreVPC. Pour plus d'informations, consultez la section Extraction de métadonnées ECS optimisées pour AMI Amazon. -
Utilisez la EC2 console Amazon pour lancer l'instance.
Ouvrez la EC2 console Amazon à l'adresse https://console.aws.amazon.com/ec2/
. -
Dans la barre de navigation, sélectionnez la région à utiliser.
-
Dans le EC2tableau de bord, choisissez Launch instance.
-
Pour Name (Nom), saisissez un nom unique.
-
Pour Application and OS Images (Amazon Machine Image), choisissez celles AMI que vous avez récupérées lors de la première étape.
-
Concernant l'option Instance type (Type d'instance), choisissez
t3.xlarge
. -
Pour Key pair (login) (Paire de clés (connexion)), choisissez une paire de clés.
-
Sous Network Settings (Paramètres réseau), pour Security group (Groupe de sécurité), choisissez un groupe de sécurité existant ou créez-en un nouveau.
-
Sous Network settings (Paramètres réseau), pour Auto-assign Public IP (Attribuer automatiquement l'adresse IP publique), sélectionnez Enable (Activer).
-
Sous Détails avancés, IAMpar exemple profil, sélectionnez ecsInstanceRole.
-
Configurez votre instance de ECS conteneur Amazon avec les données utilisateur suivantes. Sous Détails avancés, collez le script suivant dans le champ Données utilisateur, en remplaçant
cluster_name
par le nom de votre cluster.<powershell> Import-Module ECSTools Initialize-ECSAgent -Cluster
cluster-name
-EnableTaskENI -EnableTaskIAMRole -LoggingDrivers '["awslogs","fluentd"]' </powershell> -
Lorsque vous êtes prêt, cochez la case de confirmation, puis sélectionnez Launch Instances (Lancer des instances).
-
Une page de confirmation indique que l'instance est en cours de lancement. Sélectionnez View Instances (Afficher les instances) pour fermer la page de confirmation et revenir à la console.
Étape 3 : Configurer Fluent Bit
Vous pouvez utiliser la configuration par défaut suivante fournie par AWS pour démarrer rapidement :
-
Amazon CloudWatch
, qui est basé sur le plug-in Fluent Bit pour Amazon figurant dans CloudWatch le manuel officiel de Fluent Bit.
Vous pouvez également utiliser d'autres configurations par défaut fournies par AWS. Pour plus d'informations, consultez la section Overriding the entrypoint for the Windows imageaws-for-fluent-bit
de Github.
La configuration Amazon CloudWatch Fluent Bit par défaut d'Amazon Fluent Bit est présentée ci-dessous.
Remplacez les variables suivantes :
-
region
avec la région dans laquelle vous souhaitez envoyer les CloudWatch journaux Amazon Logs.
[SERVICE] Flush 5 Log_Level info Daemon off [INPUT] Name forward Listen 0.0.0.0 Port 24224 Buffer_Chunk_Size 1M Buffer_Max_Size 6M Tag_Prefix ecs. # Amazon ECS agent adds the following log keys as labels to the docker container. # We would use fluentd logging driver to add these to log record while sending it to Fluent Bit. [FILTER] Name modify Match ecs.* Rename com.amazonaws.ecs.cluster ecs_cluster Rename com.amazonaws.ecs.container-name ecs_container_name Rename com.amazonaws.ecs.task-arn ecs_task_arn Rename com.amazonaws.ecs.task-definition-family ecs_task_definition_family Rename com.amazonaws.ecs.task-definition-version ecs_task_definition_version [FILTER] Name rewrite_tag Match ecs.* Rule $ecs_task_arn ^([a-z-:0-9]+)/([a-zA-Z0-9-_]+)/([a-z0-9]+)$ out.$3.$ecs_container_name false Emitter_Name re_emitted [OUTPUT] Name cloudwatch_logs Match out.* region
region
log_group_name fallback-group log_group_template /aws/ecs/$ecs_cluster.$ecs_task_definition_family log_stream_prefix task- auto_create_group On
Chaque journal qui entre dans Fluent Bit possède une étiquette que vous spécifiez. Si vous n'en fournissez pas, elle est générée automatiquement. Les étiquettes peuvent être utilisées pour acheminer différents journaux vers différentes destinations. Pour plus d'informations, voir Tag
La configuration Fluent Bit décrite ci-dessus possède les propriétés suivantes :
-
Le plug-in d'entrée directe écoute le trafic entrant sur le TCP port 24224.
-
Chaque entrée de journal reçue sur ce port possède une étiquette que le plug-in d'entrée directe modifie pour préfixer l'enregistrement avec une chaîne
ecs.
. -
Le pipeline interne de Fluent Bit achemine l'entrée du journal pour modifier le filtre à l'aide d'une correspondance d'expression régulière (regex). Ce filtre remplace les clés dans l'enregistrement de journal par JSON le format que Fluent Bit peut utiliser.
-
L'entrée de journal modifiée est ensuite utilisée par le filtre rewrite_tag. Ce filtre remplace l'étiquette de l'enregistrement du journal par le format de sortie.
TASK_ID
.CONTAINER_NAME
. -
La nouvelle étiquette sera acheminée vers le plug-in de sortie cloudwatch_logs qui crée les groupes de journaux et les flux comme décrit précédemment à l'aide des
log_stream_prefix
optionslog_group_template
et du plug-in de sortie. CloudWatch Pour plus d'informations, voir Configuration parameters(Paramètres de configuration) dans le manuel officiel de Fluent Bit.
Étape 4 : Enregistrer une définition de tâche Windows Fluent Bit qui achemine les journaux vers CloudWatch
Enregistrez une définition de tâche Windows Fluent Bit qui achemine les journaux vers CloudWatch.
Note
Cette définition de tâche expose le port 24224 du conteneur Fluent Bit au port hôte 24224. Vérifiez que ce port n'est pas ouvert dans le groupe de sécurité de votre EC2 instance pour empêcher tout accès depuis l'extérieur.
Pour enregistrer une définition de tâche
-
Créez un fichier nommé
fluent-bit.json
avec les contenus suivants.Remplacez les variables suivantes :
-
task-iam-role
avec le nom de ressource Amazon (ARN) de votre IAM rôle de tâche -
region
par la région dans laquelle votre tâche s'exécute
{ "family": "ecs-windows-fluent-bit", "taskRoleArn": "
task-iam-role
", "containerDefinitions": [ { "name": "fluent-bit", "image": "public.ecr.aws/aws-observability/aws-for-fluent-bit:windowsservercore-latest", "cpu": 512, "portMappings": [ { "hostPort": 24224, "containerPort": 24224, "protocol": "tcp" } ], "entryPoint": [ "Powershell", "-Command" ], "command": [ "C:\\entrypoint.ps1 -ConfigFile C:\\ecs_windows_forward_daemon\\cloudwatch.conf" ], "environment": [ { "name": "AWS_REGION", "value": "region
" } ], "memory": 512, "essential": true, "logConfiguration": { "logDriver": "awslogs", "options": { "awslogs-group": "/ecs/fluent-bit-logs", "awslogs-region": "region
", "awslogs-stream-prefix": "flb", "awslogs-create-group": "true" } } } ], "memory": "512", "cpu": "512" } -
-
Utilisez la commande suivante pour enregistrer la définition de tâche.
aws ecs register-task-definition --cli-input-json
file://fluent-bit.json
--regionregion
Vous pouvez répertorier les définitions de tâche de votre compte en exécutant la commande
list-task-definitions
. La sortie affiche les valeurs de famille et de révision que vous pouvez utiliser conjointement avecrun-task
oustart-task
.
Étape 5 : Exécuter la définition de ecs-windows-fluent-bit
tâche en tant que ECS service Amazon en utilisant la stratégie de planification du démon
Après avoir enregistré une définition de tâche pour votre compte, vous pouvez exécuter une tâche dans le cluster. Pour ce didacticiel, vous exécutez une instance de la définition de tâche ecs-windows-fluent-bit:1
de votre cluster FluentBit-cluster
. Exécutez la tâche dans un service qui utilise la stratégie de planification du démon, qui garantit qu'une seule instance de Fluent Bit s'exécute toujours sur chacune de vos instances de conteneur.
Pour exécuter une tâche
-
Exécutez la commande suivante pour démarrer la définition de la tâche
ecs-windows-fluent-bit:1
(enregistrée à l'étape précédente) en tant que service.Note
Cette définition de tâche utilise le pilote de journalisation
awslogs
. Votre instance de conteneur doit disposer des autorisations nécessaires.Remplacez les variables suivantes :
-
region
par la région dans laquelle votre service fonctionne
aws ecs create-service \ --cluster FluentBit-cluster \ --service-name FluentBitForwardDaemonService \ --task-definition ecs-windows-fluent-bit:1 \ --launch-type EC2 \ --scheduling-strategy DAEMON \ --region
region
-
-
Exécutez la commande suivante pour répertorier vos tâches.
Remplacez les variables suivantes :
-
region
par la région dans laquelle les tâches de votre service fonctionnent
aws ecs list-tasks --cluster
--regionFluentBit-cluster
region
-
Étape 6 : Enregistrer une définition de tâche Windows qui génère les journaux
Enregistrez une définition de tâche qui génère les journaux. Cette définition de tâche déploie une image de conteneur Windows qui écrira un nombre incrémentiel à stdout
toutes les secondes.
La définition de la tâche utilise le pilote de journalisation Fluentd qui se connecte au port 24224 que le plug-in Fluent Bit écoute. L'ECSagent Amazon met des étiquettes à chaque ECS conteneur Amazon qui incluent le nom du cluster, la tâche, le nom de famille de la définition de la tâcheARN, le numéro de révision de la définition de la tâche et le nom du conteneur de la tâche. Ces étiquettes clé-valeur sont transmises à Fluent Bit.
Note
Cette tâche utilise également le mode réseau default
. Toutefois, vous pouvez aussi utiliser le mode réseau awsvpc
avec la tâche.
Pour enregistrer une définition de tâche
-
Créez un fichier nommé
windows-app-task.json
avec les contenus suivants.{ "family": "windows-app-task", "containerDefinitions": [ { "name": "sample-container", "image": "mcr.microsoft.com/windows/servercore:ltsc2019", "cpu": 512, "memory": 512, "essential": true, "entryPoint": [ "Powershell", "-Command" ], "command": [ "$count=1;while(1) { Write-Host $count; sleep 1; $count=$count+1;}" ], "logConfiguration": { "logDriver": "fluentd", "options": { "fluentd-address": "localhost:24224", "tag": "{{ index .ContainerLabels \"com.amazonaws.ecs.task-definition-family\" }}", "fluentd-async": "true", "labels": "com.amazonaws.ecs.cluster,com.amazonaws.ecs.container-name,com.amazonaws.ecs.task-arn,com.amazonaws.ecs.task-definition-family,com.amazonaws.ecs.task-definition-version" } } } ], "memory": "512", "cpu": "512" }
-
Utilisez la commande suivante pour enregistrer la définition de tâche.
Remplacez les variables suivantes :
-
region
par la région dans laquelle votre tâche s'exécute
aws ecs register-task-definition --cli-input-json
file://windows-app-task.json
--regionregion
Vous pouvez répertorier les définitions de tâche de votre compte en exécutant la commande
list-task-definitions
. La sortie affiche les valeurs de famille et de révision que vous pouvez utiliser conjointement avecrun-task
oustart-task
. -
Étape 7 : Créer la définition de tâche windows-app-task
Après avoir enregistré la définition de tâche windows-app-task
, exécutez-la dans votre cluster FluentBit-cluster
.
Pour exécuter une tâche
-
Exécutez la définition de tâche
windows-app-task:1
que vous avez enregistrée à l'étape précédente.Remplacez les variables suivantes :
-
region
par la région dans laquelle votre tâche s'exécute
aws ecs run-task --cluster FluentBit-cluster --task-definition windows-app-task:1 --count 2 --region
region
-
-
Exécutez la commande suivante pour répertorier vos tâches.
aws ecs list-tasks --cluster
FluentBit-cluster
Étape 8 : vérifier les connexions CloudWatch
Afin de vérifier votre configuration Fluent Bit, recherchez les groupes de journaux suivants dans la CloudWatch console :
-
/ecs/fluent-bit-logs
: il s'agit du groupe de journaux qui correspond au conteneur de démon Fluent Bit qui s'exécute sur l'instance de conteneur. -
/aws/ecs/FluentBit-cluster.windows-app-task
: il s'agit du groupe de journaux qui correspond à toutes les tâches lancées pour la famille de définition de tâchewindows-app-task
au sein du clusterFluentBit-cluster
.task-out.
: ce flux de journaux contient tous les journaux générés par la première instance de la tâche dans le conteneur de tâches sample-container.FIRST_TASK_ID
.sample-containertask-out.
: ce flux de journaux contient tous les journaux générés par la seconde instance de la tâche dans le conteneur de tâches sample-container.SECOND_TASK_ID
.sample-container
Le flux de journaux task-out.
contient des champs similaires aux suivants :TASK_ID
.sample-container
{
"source": "stdout",
"ecs_task_arn": "arn:aws:ecs:region
:0123456789012:task/FluentBit-cluster/13EXAMPLE",
"container_name": "/ecs-windows-app-task-1-sample-container-cEXAMPLE",
"ecs_cluster": "FluentBit-cluster",
"ecs_container_name": "sample-container",
"ecs_task_definition_version": "1",
"container_id": "61f5e6EXAMPLE",
"log": "10",
"ecs_task_definition_family": "windows-app-task"
}
Pour vérifier la configuration Fluent Bit
Ouvrez la CloudWatch console à l'adresse https://console.aws.amazon.com/cloudwatch/
. -
Dans le panneau de navigation, choisissez Groupes de journaux. Assurez-vous que vous êtes dans la région où vous avez déployé Fluent Bit sur vos conteneurs.
Dans la liste des groupes de journaux de l' Région AWS, vous devez voir ce qui suit :
-
/ecs/fluent-bit-logs
-
/aws/ecs/FluentBit-cluster.windows-app-task
Si vous voyez ces groupes de journaux, la vérification de la configuration Fluent Bit est terminée.
-
Étape 9 : Nettoyer
Lorsque vous avez terminé ce didacticiel, nettoyez les ressources qui lui sont associées afin d'éviter la facturation de frais pour des ressources que vous n'utilisez pas.
Pour nettoyer les ressources du didacticiel
-
Arrêtez la tâche
windows-simple-task
et la tâcheecs-fluent-bit
. Pour de plus amples informations, veuillez consulter Arrêter une ECS tâche Amazon. -
Utilisez la commande suivante pour supprimer le groupe de journaux
/ecs/fluent-bit-logs
. Pour plus d'informations, sur la suppression de groupes de journaux delete-log-group, voir la AWS Command Line Interface référence.aws logs delete-log-group --log-group-name /ecs/fluent-bit-logs aws logs delete-log-group --log-group-name /aws/ecs/FluentBit-cluster.windows-app-task
-
Exécutez la commande suivante pour mettre fin à l'instance.
aws ec2 terminate-instances --instance-ids
instance-id
-
Exécutez les commandes suivantes pour supprimer les IAM rôles.
aws iam delete-role --role-name ecsInstanceRole aws iam delete-role --role-name fluentTaskRole
-
Exécutez la commande suivante pour supprimer le ECS cluster Amazon.
aws ecs delete-cluster --cluster
FluentBit-cluster