web-dev-qa-db-fra.com

AWS: aucune des instances n'envoie de données

J'essaie de configurer une application Elastic Beanstalk avec Amazon Web Services mais je reçois une charge d'erreurs avec le message None of the instances are sending data. J'ai essayé de supprimer l'application Elastic Beanstalk et l'instance EC2 plusieurs fois avec l'exemple d'application et réessayer, mais j'obtiens la même erreur.

J'ai également essayé de télécharger une application flask avec les outils de ligne de commande AWS Elastic Beanstalk, mais j'ai reçu l'erreur ci-dessous:

Environment health has transitioned from Pending to Severe. 100.0 % of the requests to the ELB are failing with HTTP 5xx. Insufficient request rate (0.5 requests/min) to determine application health (7 minutes ago). ELB health is failing or not available for all instances. None of the instances are sending data

Pourquoi ai-je cette erreur et comment la corriger? Merci.

17
Pav Sidhu

Vous utilisez Enhanced Health Monitoring . Avec une surveillance de l'intégrité améliorée, un agent installé sur votre instance EC2 surveille les métriques de santé vitales du système et des applications et les envoie directement à Elastic Beanstalk.

Lorsque vous voyez un message d'erreur comme "Aucune des instances n'envoie de données", cela signifie que l'agent sur l'instance est tombé en panne ou qu'il est incapable de publier des données sur Elastic Beanstalk en raison d'une erreur de réseau ou d'une autre erreur.

Pour déboguer cela, je recommanderais de télécharger des "journaux complets" à partir de la console AWS. Vous pouvez suivre les instructions pour obtenir des journaux dans la section "Téléchargement des journaux de bundle depuis la console Elastic Beanstalk" ici . Si vous ne parvenez pas à télécharger les journaux à l'aide de la console pour une raison quelconque, vous pouvez également accéder à l'instance ssh et consulter les journaux dans /var/log.

Vous trouverez les journaux de l'agent de santé dans /var/log/healthd/daemon.log. Les journaux supplémentaires utiles pour cette situation sont /var/log/cfn-init.log, /var/log/eb-cfn-init.log et /var/log/eb-activity.log. Pouvez-vous consulter les journaux et donner plus de détails sur les erreurs que vous voyez? J'espère que cela devrait vous donner plus de détails concernant l'erreur "Aucune des instances n'envoie de données".

En ce qui concerne les autres "causes" de santé que vous voyez:

  • La santé de l'environnement est passée de En attente à Grave - En effet, au départ, l'état de santé de votre environnement est En attente. Si les instances ne deviennent pas saines pendant la période de grâce, l'état de santé passe à Grave. Dans votre cas, car aucune des instances n'est saine/envoie des données, la santé est passée à Grave.

  • 100,0% des demandes à l'ELB échouent avec HTTP 5xx. Taux de requêtes insuffisant (0,5 requêtes/min) pour déterminer la santé des applications (il y a 7 minutes). Elastic Beanstalk surveille d'autres ressources en plus de vos instances EC2 lors de l'utilisation de la surveillance d'intégrité améliorée. Par exemple, il surveille les métriques cloudwatch pour votre ELB. Cette erreur signifie que toutes les demandes envoyées à votre environnement CNAME/équilibreur de charge échouent avec des erreurs HTTP 5xx. Dans le même temps, le taux de demande est très faible, seulement 0,5 demande par minute, ce qui indique que même si toutes les demandes échouent, le taux de demande est assez faible. "Il y a 7 minutes" signifie que les informations sur les métriques ELB sont légèrement anciennes. Comme Elastic Beanstalk surveille les métriques cloudwatch toutes les quelques minutes, les données peuvent donc être légèrement périmées. C'est par opposition aux données de santé que nous obtenons directement des instances EC2 qui sont "presque en temps réel". Dans votre cas, étant donné que les instances n'envoient pas de données, la seule source disponible pour la santé est les métriques ELB qui sont retardées d'environ 7 minutes.

  • La santé ELB échoue ou n'est pas disponible pour toutes les instances Elastic Beanstalk examine la santé de votre ELB, c'est-à-dire qu'il vérifie le nombre d'instances en service derrière ELB. Dans votre cas, toutes les instances derrière ELB sont hors service ou la santé n'est pas disponible pour une autre raison. Vous devez vérifier que votre rôle de service est correctement configuré. Vous pouvez lire comment configurer correctement le rôle de service ici ou dans la documentation . Il est possible que votre application n'ait pas pu démarrer.

Dans votre cas, je vous suggère de vous concentrer sur la première erreur "Aucune des instances n'envoie de données". Pour cela, vous devez consulter les journaux comme indiqué ci-dessus. Faites-moi savoir ce que vous voyez dans les journaux. L'agent est démarré assez tôt dans le processus bootstrap sur l'instance. Donc, si vous voyez une erreur comme "Aucune des instances n'envoie de données", il est très probable que bootstrap a échoué ou l'agent n'a pas pu démarrer pour une raison quelconque. Les journaux devraient vous en dire plus.

Assurez-vous également que vous utilisez un profil d'instance avec votre environnement. Le profil d'instance permet à l'agent d'intégrité exécuté sur votre instance EC2 de s'authentifier auprès d'Elastic Beanstalk. Si le profil d'instance n'est pas associé à votre environnement, l'agent ne pourra pas envoyer de données à Elastic Beanstalk. En savoir plus sur les profils d'instance avec Elastic Beanstalk ici .

Mise à jour Une raison courante de la cause de la santé "Aucune des instances n'envoie de données" peut être que votre instance se trouve dans un VPC et que votre VPC ne le permet pas NTP. L'indicateur typique de ce problème est le message suivant dans /var/log/messages: ntpdate: Synchronizing with time server: [FAILED]. Lorsque cela se produit, l'horloge de votre instance EC2 peut se désynchroniser et les données sont considérées comme non valides. Vous devriez également voir une cause d'intégrité sur les instances sur la page d'intégrité de la console Web AWS qui vous indique que l'horloge d'instance n'est pas synchronisée. Le correctif consiste à s'assurer que votre VPC autorise l'accès à NTP.


40
Rohit Banga

Il peut y avoir de nombreuses raisons pour lesquelles l'agent de santé n'est pas en mesure d'envoyer des données, donc ce n'est peut-être pas la réponse à votre problème, mais c'était à moi et j'espère peut aider quelqu'un d'autre:

J'ai la même erreur et je regarde /var/log/healthd/daemon.log ce qui suit a été signalé à plusieurs reprises:

sending message(s) failed: (Aws::Healthd::Errors::GroupNotFoundException) Group 97c30ca2-5eb5-40af-8f9a-eb3074622172 does not exist

Cela a été causé par la création et l'utilisation d'une image AMI à partir d'une instance EC2 dans un environnement Elastic Beanstalk. En d'autres termes, j'ai créé un environnement temporaire avec une instance de la même configuration que mon environnement de production, je suis entré dans la console EC2 et j'ai créé une image de l'instance, j'ai mis fin à l'environnement temporaire, puis j'ai créé un autre environnement à l'aide de la nouvelle AMI personnalisée.

Bien sûr (avec le recul), cela signifiait que certains paramètres de l'environnement temporaire étaient toujours utilisés. Dans ce cas, spécifiquement /etc/healthd/config.yaml, l'agent de santé tentant d'envoyer des messages à un groupe de santé qui n'existe plus.

Pour résoudre ce problème et m'assurer qu'il n'y avait pas d'autre configuration périmée, j'ai plutôt démarré une nouvelle instance EC2 à la main à partir de l'AMI par défaut utilisée dans l'environnement de production (recherchez-la dans la page de configuration `` Instances '' de votre environnement), à condition que, puis créez une nouvelle image à partir de cela et utilisez cette image dans mon nouvel environnement EB.

6
sgvd

J'ai résolu ce problème en ajoutant un autre groupe de sécurité (celui par défaut pour mon Elastic Beanstalk).

4
Jackal Cooper

Vérifiez si le type de votre instance RAM est suffisant pour les outils app + os + Amazon. Nous en avons souffert pendant longtemps, lorsque nous avons découvert que t2.micro était à peine suffisant pour nos cas d'utilisation. le problème a disparu juste après avoir utilisé t2.small (2 Go).

1
gyorgyabraham