Comment puis-je envoyer mes journaux de conteneurs vers plusieurs destinations dans Amazon ECS sur AWS Fargate ?

Date de la dernière mise à jour : 27/08/2020

Je veux transférer les journaux de mon conteneur d'application qui s'exécute sur AWS Fargate vers plusieurs destinations. Ces destinations peuvent être Amazon CloudWatch, Amazon Kinesis Data Firehose ou Splunk.

Brève description

Une définition de tâche Amazon Elastic Container Service (Amazon ECS) vous permet de spécifier un seul objet de configuration de journal pour un conteneur donné, ce qui signifie que vous pouvez transférer les journaux vers une seule destination. Pour transférer des journaux vers plusieurs destinations dans Amazon ECS sur Fargate, vous pouvez utiliser FireLens.

Remarque : FireLens fonctionne avec les transitaires Fluent Bit et Fluentd. La résolution suivante considère Fluent Bit, car Fluent Bit est plus efficace sur le plan des ressources que Fluentd.

Tenez compte des éléments suivants :

  • FireLens utilise les paires clé-valeur spécifiées comme options dans l'objet logConfiguration à partir de la définition de tâche ECS pour générer la définition de sortie Fluent Bit. La destination où les journaux sont routés est spécifiée dans la section de définition [OUTPUT] d'un fichier de configuration Fluent Bit. Pour plus d'informations, consultez Sortie sur le site Web 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) ou créer une image Fluent Bit Docker personnalisée avec le fichier de configuration de sortie personnalisé ajouté.
  • Si vous utilisez Amazon ECS sur Fargate, vous ne pouvez pas extraire un fichier de configuration à partir d'Amazon S3. Au lieu de cela, vous devez créer une image Docker personnalisée avec le fichier de configuration.

Résolution

Créer des autorisations AWS Identity and Access Management (IAM)

Créez des autorisations IAM pour permettre à votre rôle de tâche d'acheminer vos journaux vers différentes destinations. Par exemple, si votre destination est Kinesis Data Firehose, vous devez donner à la tâche l'autorisation d'appeler l'API Firehose:PutRecordBatch.

Remarque : Fluent Bit prend en charge plusieurs plugins comme destinations de journaux. Les autorisations requises par les destinations telles que les flux CloudWatch et Kinesis incluent logs:CreateLogGroup, logs:CreateLogStream, logs:DescribeLogStreams, logs:PutLogEvents, et kinesis:PutRecords.

Créez une image Docker Bit Fluent avec un fichier de configuration de sortie personnalisé.

1.    Créez un fichier de configuration Fluent Bit personnalisé appelé logDestinations.conf avec votre choix de définitions [OUTPUT] définies dans celui-ci. Par exemple, le fichier de configuration suivant inclut les configurations définies pour CloudWatch, Kinesis 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 : différentes destinations nécessitent des champs différents pour être spécifiés dans la définition [OUTPUT]. Pour obtenir des exemples, consultez les Exemples de FireLens d'Amazon ECS.

2.    Créez une image Docker avec un fichier de configuration de sortie Fluent Bit personnalisé à l'aide de l'exemple Dockerfile suivant :

FROM amazon/aws-for-fluent-bit:latest
ADD logDestinations.conf /logDestinations.conf

Remarque : pour plus d'informations, consultez Référence Dockerfile sur le site Web de Docker.

3.    Pour créer l'image Docker en bit fluide personnalisée à l'aide du fichier Dockerfile que vous avez créé à l'étape 2, exécutez la commande suivante :

docker build -t custom-fluent-bit:latest .

Important : assurez-vous d'exécuter la commande docker build dans le même emplacement que le fichier Dockerfile.

4.    Pour confirmer que l'image Docker est disponible pour Amazon ECS, envoyez votre image Docker vers Amazon Elastic Container Registry (Amazon ECR) ou vers votre propre registre Docker. Par exemple, pour pousser 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

5.    Dans votre définition de tâche (TaskDefinition), mettez à jour les options de votre configuration FireLens (firelensConfiguration). Par exemple :

{
   "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"
            }
         }
      }
   ]
}

Lorsque vous mettez à jour les options de votre configuration FireLens, tenez compte des éléments suivants :

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. Vous ne pouvez définir ces options que lorsque vous créez une définition de tâche avec l'interface de ligne de commande AWS (AWS CLI).

Vous devez modifier la propriété image dans la section containerDefinition de votre configuration pour refléter un emplacement d'image Amazon ECR valide. Vous pouvez spécifier des images dans les référentiels Amazon ECR à l'aide de la convention complète d'attribution de noms registre/référentiel:balise. Par exemple :

aws_account_id.dkr.ecr.region.amazonaws.com/custom-fluent-bit:latest

Pour utiliser d'autres référentiels, reportez-vous à la propriété image de la définition de tâche.


Cet article vous a-t-il été utile ?


Besoin d'aide pour une question technique ou de facturation ?