Je souhaite que mon conteneur d’applications qui s’exécute sur AWS Fargate transfère les journaux vers plusieurs destinations, telles qu’Amazon CloudWatch, Amazon Data Firehose ou Splunk.
Brève description
Une définition de tâche Amazon Elastic Container Service (Amazon ECS) vous permet de ne spécifier qu’un seul objet de configuration de journal pour un conteneur donné. Cette limite signifie que vous ne pouvez transférer les journaux que vers une seule destination. Pour transférer des journaux vers plusieurs destinations dans Amazon ECS sur Fargate, vous pouvez utiliser FireLens.
Remarque : FireLens fonctionne à la fois avec les redirecteurs de journaux Fluent Bit et Fluentd. La résolution suivante utilise Fluent Bit car Fluent Bit est plus économe en ressources que Fluentd.
Résolution
Prérequis :
Passez en revue les informations suivantes :
- FireLens utilise les paires clé-valeur spécifiées en tant qu’options dans l’objet LogConfiguration de la définition de tâche ECS pour générer la définition de sortie Fluent Bit. La destination vers laquelle les journaux sont acheminés est spécifiée dans la section de définition [OUTPUT] d’un fichier de configuration Fluent Bit. Pour plus d’informations, consultez la section Sortie sur le site Web de Fluent Bit.
- FireLens crée un fichier de configuration en votre nom, mais vous pouvez également spécifier un fichier de configuration personnalisé. Vous pouvez héberger ce fichier de configuration dans Amazon Simple Storage Service (Amazon S3). Vous pouvez également créer une image Docker Fluent Bit personnalisée en y ajoutant le fichier de configuration de sortie personnalisé.
- Si vous utilisez Amazon ECS sur Fargate, vous ne pouvez pas extraire de fichier de configuration depuis Amazon S3. Vous devez plutôt créer une image Docker personnalisée avec le fichier de configuration.
Création d’autorisations IAM
Remarque : si des erreurs surviennent lorsque vous exécutez des commandes de l’interface de la ligne de commande AWS (AWS CLI), consultez Résoudre les erreurs liées à AWS CLI. Vérifiez également que vous utilisez bien la version la plus récente de l’AWS CLI.
Créez des autorisations Gestion des identités des accès (IAM) pour permettre à votre rôle de tâche d’acheminer vos journaux vers différentes destinations. Par exemple, si votre destination est Data Firehose, vous devez autoriser la tâche à appeler l’API Firehose:PutRecordBatch.
Remarque : Fluent Bit prend en charge plusieurs plugins en tant que destinations de journalisation. Les destinations telles que CloudWatch et Kinesis nécessitent des autorisations qui incluent Logs:CreateLogGroup, Logs:CreateLogStream, Logs:DescribeLogStreams, Logs:PutLogEvents et Kinesis:PutRecords. Pour plus d’informations, consultez la section Autorisations pour CloudWatch et Kinesis sur le site web GitHub.
Créez une image Docker Fluent Bit avec un fichier de configuration de sortie personnalisé
-
Créez un fichier de configuration Fluent Bit personnalisé appelé LogDestinations.conf avec les définitions [OUTPUT] de votre choix. Par exemple, le fichier de configuration suivant inclut les configurations définies pour CloudWatch, Data Firehose et Splunk :
[OUTPUT] Name firehose
Match YourContainerName*
region us-west-2
delivery_stream nginx-stream
[OUTPUT]
Name cloudwatch
Match YourContainerName*
region us-east-1
log_group_name firelens-nginx-container
log_stream_prefix from-fluent-bit
auto_create_group true
[OUTPUT]
Name splunk
Match <ContainerName>*
Host 127.0.0.1
Splunk_Token xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx
Splunk_Send_Raw On
**Remarque :**Les différentes destinations nécessitent la spécification de différents champs dans la définition [OUTPUT]. Pour des exemples, consultez amazon-ecs-firelens-examples sur le site web GitHub.
-
Utilisez l’exemple Dockerfile suivant pour créer une image Docker avec un fichier de configuration de sortie Fluent Bit personnalisé :
FROM amazon/aws-for-fluent-bit:latestADD logDestinations.conf /logDestinations.conf
Remarque : pour plus d’informations, consultez la référence Dockerfile sur le site Web de Docker.
-
Pour utiliser le Dockerfile que vous avez créé pour créer l’image Docker fluent-bit personnalisée, exécutez la commande suivante :
docker build -t custom-fluent-bit:latest .
Important : exécutez la commande docker build au même endroit que le Dockerfile.
-
Pour vérifier que l’image Docker est disponible pour Amazon ECS, envoyez votre image Docker vers Amazon Elastic Container Registry (Amazon ECR). Ou envoyez votre image Docker vers votre propre registre Docker. Par exemple, pour envoyer une image Docker locale vers Amazon ECR, exécutez la commande suivante :
docker push aws_account_id.dkr.ecr.region.amazonaws.com/custom-fluent-bit:latest
-
Dans votre définition de tâche, mettez à jour les options de configuration de FireLens :
{
"containerDefinitions": [
{
"essential": true,
"image": "aws_account_id.dkr.ecr.region.amazonaws.com/custom-fluent-bit:latest",
"name": "log_router",
"firelensConfiguration": {
"type": "fluentbit",
"options": {
"config-file-type": "file",
"config-file-value": "/logDestinations.conf"
}
}
}
]
}
Remarque : pour spécifier un fichier de configuration personnalisé, vous devez inclure les options config-file-type et config-file-value dans votre fichier de configuration FireLens. Pour inclure ces options, utilisez l'interface de ligne de commande AWS ou la console Amazon ECS pour créer une définition de tâche.
-
Modifiez la propriété image dans la section ContainerDefinition de votre configuration pour refléter un emplacement d’image Amazon ECR valide. Pour spécifier des images dans les référentiels Amazon ECR, utilisez la convention de dénomination complète registry/repository:tag. Exemple :
aws_account_id.dkr.ecr.region.amazonaws.com/custom-fluent-bit:latest
Pour utiliser d’autres référentiels, consultez la propriété image de la définition de tâche.