Comment résoudre les problèmes liés aux journaux de conteneur pour Amazon ECS ou Amazon EKS ?

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

Je ne trouve pas les journaux de conteneur de la tâche Amazon Elastic Container Service (Amazon ECS) ou le pod Amazon Elastic Kubernetes Service (Amazon EKS).

Brève description

Votre application conteneurisée n'écrit pas certains ou tous les journaux lorsque vous :

  • Exécutez la commande « docker logs Nomdevotreconteneur » sur une instance de conteneur dans Amazon ECS.
  • Utilisez le pilote de journal awslogs pour une tâche dans Amazon ECS.
  • Exécutez la commande « kubectl logs Nomdevoteconteneur » pour un cluster Amazon EKS.

Vous pouvez rencontrer ces problèmes lorsque :

  • Des problèmes se produisent avec l'instance d'hôte.
  • Vos journaux ne sont pas visibles pour le démon Docker, car votre application conteneurisée n'écrit pas au bon emplacement.

Résolution

Rechercher les journaux pour les tâches Amazon ECS

Pour vous assurer que la tâche est bien configurée de manière à ce que vous trouviez vos journaux, vérifiez les points suivants :

  • Le pilote de journal est défini par le paramètre logConfiguration dans la section de définition de conteneur de la définition de votre tâche ECS. Des pilotes de journal sont définis pour chaque conteneur. Si votre tâche ECS possède plusieurs définitions de conteneur, vérifiez que la configuration du journal est correcte pour les conteneurs avec vos journaux.
  • L'agent de conteneur Amazon ECS supprime automatiquement les fichiers journaux pour récupérer de l'espace. Pour conserver les fichiers journaux plus longtemps sur l’instance de conteneur, réduisez la fréquence des tâches de nettoyage.

Si celles-ci utilisent le pilote de journal awslogs, les conditions suivantes sont réunies :

  • Les journaux sont transférés vers Amazon CloudWatch Logs. Ces journaux ne sont jamais écrits sur l'instance de conteneur.
  • La commande « docker logs Nomdevotrecontenur » renvoie le message d'erreur « Error response from daemon: configured logging driver does not support reading » (Erreur de réponse du démon : le pilote de journal ne prend pas en charge la lecture).

Pour autoriser le transfert des types de lancements EC2 vers CloudWatch Logs, accordez des autorisations au rôle IAM utilisé par votre instance de conteneur.

Pour permettre aux types de lancements AWS Fargate d’être diffusés en continu vers CloudWatch Logs, accordez des autorisations au rôle IAM utilisé par votre tâche.

Si vous ne trouvez toujours pas vos journaux, suivez les étapes de la section Résolution des problèmes liés au conteneur.

Trouver les journaux des pods Kubernetes sur Amazon EKS

Pour renvoyer les fichiers journaux générés par un conteneur de pod, exécutez la commande kubectl suivante :

kubectl logs yourPodName

Remarque : le kubelet supprime automatiquement les fichiers journaux après la sortie d'un pod. Pour plus d'informations, consultez Collection de conteneurs sur le site Web de Kubernetes. Pour conserver ces fichiers journaux plus longtemps sur un nœud de travail, configurez le kubelet afin d’exécuter la récupération de mémoire moins souvent.

Si vous ne trouvez toujours pas vos journaux, suivez les étapes de la section Résolution des problèmes liés au conteneur.

Résolution des problèmes liés au conteneur

Envisagez les options suivantes pour votre application :

  • Définissez votre application sur le niveau de journalisation correct pendant la création du conteneur.
    Remarque : votre application peut nécessiter de définir la journalisation via une variable d'environnement ou dans un fichier de configuration.
  • Définissez votre application comme POINT D’ENTRÉE du conteneur. Pour plus d'informations, consultez ENTRYPOINT sur le site Web Docker Docs.
    Remarque : le POINT D’ENTRÉE dans votre dockerfile est le processus dans lequel les flux d’E/S STDOUT et STDERR I/O sont journalisés. Pour plus d'informations, consultez Afficher les journaux d'un conteneur ou d'un service sur le site Web Docker Docs.
  • Créez votre conteneur avec des fichiers journaux d'application liés à STDOUT et STDERR, ou configurez votre application pour la connecter directement à /proc/1/fd/1 (stdout) et /proc/1/fd/2 (stderr). Pour voir des exemples, consultez les images de conteneur officielles nginx et httpd sur le site Web Docker Hub.
    Remarque : si possible, définissez le processus d'application comme parent dans le conteneur. Si le conteneur utilise un script shell comme POINT D’ENTRÉE, configurez le script pour initialiser les données du conteneur lors de son exécution. Pour plus d'informations, consultez ENTRYPOINT sur le site Web Docker Docs.

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


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