Je ne trouve pas les journaux de conteneurs pour ma tâche Amazon Elastic Container Service (Amazon ECS) ou mon pod Amazon Elastic Kubernetes Service (Amazon EKS).
Brève description
Si des journaux de conteneurs sont manquants pour Amazon ECS ou Amazon EKS, cela signifie peut-être que l'instance hôte présente des problèmes. Ou, si votre application conteneurisée n'écrit pas à l’emplacement approprié, il est possible que vos journaux ne soient pas visibles pour le démon Docker.
Voici les scénarios courants dans lesquels votre application conteneurisée n'écrit pas une partie ou la totalité de vos journaux :
- Vous exécutez la commande docker logs yourContainerName sur une instance de conteneur dans Amazon ECS.
- Vous utilisez le pilote de journal awslogs pour une tâche dans Amazon ECS.
- Vous exécutez la commande kubectl logs yourPodName pour un cluster Amazon EKS.
Résolution
Résoudre les problèmes liés aux journaux de vos tâches Amazon ECS
Vérifier que votre tâche est correctement configurée
- Vérifiez la configuration des journaux pour le conteneur détenant vos journaux. Le pilote de journal est défini par le paramètre logConfiguration dans la section définition du conteneur de votre définition de tâche ECS. Les pilotes de journaux sont définis par conteneur. Si votre tâche ECS utilise plusieurs définitions de conteneur, vérifiez que la configuration des journaux est correcte pour les conteneurs détenant vos journaux.
- Vérifiez votre configuration de nettoyage des tâches pour votre instance de conteneur. L'agent de conteneur Amazon ECS supprime automatiquement les fichiers journaux pour récupérer de l'espace libre. Pour conserver vos fichiers journaux plus longtemps sur votre instance de conteneur, réduisez la fréquence de nettoyage de vos tâches.
Consulter vos journaux CloudWatch
Si vos tâches utilisent le pilote de journal awslogs, les journaux sont diffusés dans Amazon CloudWatch Logs. Ces journaux ne sont jamais écrits dans l'instance de conteneur. La commande docker logs yourContainerName renvoie le message d'erreur suivant : « Error response from daemon: configured logging driver does not support reading. »
Accorder les autorisations appropriées
Pour autoriser la diffusion des types de lancements d'Amazon Elastic Compute Cloud (Amazon EC2) dans CloudWatch Logs, accordez des autorisations au rôle IAM de votre instance de conteneur.
Pour autoriser la diffusion des types de lancements d'AWS Fargate dans CloudWatch Logs, accordez des autorisations au rôle IAM de tâche utilisé par votre tâche.
Si vos journaux sont toujours manquants, suivez les étapes décrites dans la section Résoudre les problèmes liés au conteneur d'applications.
Résoudre les problèmes liés aux journaux de vos pods Kubernetes sur Amazon EKS
Pour renvoyer les fichiers journaux générés à partir du conteneur d'un pod, exécutez la commande kubectl suivante :
kubectl logs yourPodName
Remarque : La commande kubelet supprime automatiquement les fichiers journaux après la fermeture d'un pod. Pour plus d’informations, consultez la page Récupérateur de mémoire de conteneurs et d’images inutilisés sur le site Web de Kubernetes. Pour conserver ces fichiers journaux plus longtemps sur un nœud de travail, configurez la commande kubelet afin qu’elle exécute le récupérateur de mémoire moins fréquemment.
Si vos journaux sont toujours manquants, suivez les étapes décrites dans la section Résoudre les problèmes liés au conteneur d'applications.
Résoudre les problèmes liés au conteneur d'applications
Pour résoudre les problèmes liés au conteneur d'applications, effectuez les tâches suivantes :
- Définissez le niveau de journalisation approprié pour votre application lors de la création de votre conteneur.
Remarque : Votre application peut vous demander de définir la journalisation via une variable d'environnement ou dans un fichier de configuration.
- Faites de votre demande l’ENTRYPOINT du conteneur. Pour plus d'informations, consultez la page ENTRYPOINT sur le site Web de Docker Docs.
Remarque : L'ENTRYPOINT dans votre dockerfile est le processus par lequel les flux STDOUT et STDERR I/O sont journalisés. Pour plus d'informations, consultez la page Consulter les journaux de conteneurs sur le site Web de Docker Docs.
- Créez votre conteneur à l'aide de fichiers journaux d'applications liés à STDOUT et STDERR. Vous pouvez également configurer votre application afin qu'elle se connecte directement à /proc/1/fd/1 (stdout) et /proc/1/fd/2 (stderr). Pour des exemples, consultez les images de conteneurs officielles nginx et httpd sur le site Web de Docker Hub.
Remarque : Si votre cas d'utilisation le permet, faites de votre processus de candidature le processus parent de votre conteneur. Si votre conteneur utilise un script shell comme ENTRYPOINT, configurez le script pour initialiser les données de votre conteneur lors de l'exécution.