Pourquoi les journaux de mon conteneur Amazon ECS ne sont pas transmis à Amazon CloudWatch Logs ?

Dernière mise à jour : 09/03/2022

Je ne trouve pas les journaux de conteneur de ma tâche Amazon Elastic Container Service (Amazon ECS) dans Amazon CloudWatch Logs.

Brève description

Les journaux de votre conteneur Amazon ECS ne sont pas transmis à CloudWatch Logs pour l'une ou plusieurs des raisons suivantes :

  • Le pilote de journal awslogs n'est pas configuré correctement dans vos définitions de tâches Amazon ECS.
  • Le rôle AWS Identity and Access Management (IAM) ne dispose pas des autorisations requises.
  • La configuration de votre réseau présente des problèmes.
  • Le niveau de journalisation du conteneur n'est pas configuré correctement.

Solution

Le pilote de journal awslogs n'est pas configuré correctement

  • Pour envoyer les informations du journal du conteneur à CloudWatch Logs, vous devez configurer correctement les conteneurs dans vos tâches. Assurez-vous que vous avez configuré correctement le paramètre logConfiguration lorsque vous définissez les paramètres de notre conteneur. Si votre définition de tâche Amazon ECS implique plusieurs conteneurs, vous devez alors configurer ce paramètre pour chaque conteneur.
  • Assurez-vous que vous avez ajouté le pilote de journal awslogs au paramètre logConfiguration dans votre définition de tâche.
  • Pour le type de lancement d'Amazon Elastic Compute Cloud (Amazon EC2), effectuez ces vérifications supplémentaires :
    • Assurez-vous que votre instance de conteneur Amazon ECS inclut au moins la version 1.9.0 de l'agent de conteneur. Pour plus d'informations sur la vérification de la version de votre agent et la mise à jour vers la dernière version, consultez Mise à jour de l'agent de conteneur Amazon ECS.
    • Si vous n'utilisez pas l'AMI optimisée pour Amazon ECS pour vos instances de conteneur, assurez-vous que le pilote de journal awslogs est spécifié sur l'instance de conteneur lorsque vous démarrez l'agent à l'aide de la variable d'environnement suivante. Pour plus d'informations, consultez Installation de l'agent de conteneur Amazon ECS.
ECS_AVAILABLE_LOGGING_DRIVERS='["json-file","awslogs"]'

Le rôle IAM ne dispose pas des autorisations requises

  • Assurez-vous que le rôle IAM de votre instance de conteneur Amazon ECS dispose des autorisations logs:CreateLogStream et logs:PutLogEvents.
  • Pour le type de lancement Fargate, utilisez le rôle IAM d'exécution des tâches Amazon ECS avec les autorisations logs:CreateLogStream et logs:PutLogEvents. Pour plus d'informations, consultez Rôle IAM d'exécution des tâches Amazon ECS.
  • Pour le type de lancement d'Amazon EC2, vérifiez ce qui suit :
    • Si vous n'utilisez pas le rôle IAM d'exécution des tâches Amazon ECS dans votre définition de tâche, assurez-vous que les autorisations logs:CreateLogStream et logs:PutLogEvents sont accordées sur le rôle IAM utilisé par votre instance de conteneur.
    • Si vous utilisez le rôle IAM d'exécution des tâches Amazon ECS, assurez-vous que la valeur du paramètre de l'agent de conteneur ECS_ENABLE_AWSLOGS_EXECUTIONROLE_OVERRIDE est définie sur true.
      Remarque : lorsque vous utilisez l'AMI optimisé pour Amazon ECS avec la version 1.16.0 -1 ou ultérieure du package ecs-init, la valeur par défaut de ce paramètre est true. Sous Windows, la valeur par défaut de ce paramètre est false. Pour plus d'informations, consultez Configuration de l'agent de conteneur Amazon ECS.

La configuration de votre réseau présente des problèmes

Si votre Amazon Virtual Private Cloud (Amazon VPC) n'a pas de passerelle Internet et que vos tâches utilisent le pilote de journal awslogs pour envoyer des informations de journal à CloudWatch Logs, assurez-vous que vous avez créé un point de terminaison d'un Amazon VPC d'interface pour CloudWatch Logs. Pour plus d'informations, consultez Utilisation de CloudWatch Logs avec des points de terminaison d'un VPC d'interface.

Le niveau de journalisation du conteneur n'est pas configuré correctement

Le pilote de journal awslogs transmet simplement les journaux de conteneur qui sont les flux d'I/O STDOUT et STDERR de Docker à CloudWatch Logs. Par conséquent, vérifiez que votre application envoie les journaux aux flux d'I/O STDOUT et STDERR. Assurez-vous de définir le niveau de journalisation approprié pour votre application lors de la création du conteneur. Selon votre application, vous pouvez définir le niveau de journalisation via une variable d'environnement ou un fichier de configuration.