2015-09-02 13 views
9

Sto provando a configurare un'applicazione Elean Beanstalk con Amazon Web Services, tuttavia sto ricevendo un carico di errori con il messaggio None of the instances are sending data. Ho provato a eliminare l'applicazione Elastic Beanstalk e l'istanza EC2 più volte con l'applicazione di esempio e riprovare, ma ottengo lo stesso errore.AWS: Nessuna delle istanze sta inviando dati

Ho anche provato il caricamento di un'applicazione pallone con gli strumenti della riga di comando AWS Elastic Beanstalk ma poi ho ricevuto l'errore sotto:

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 

Perché ricevo questo errore e come posso risolvere il problema? Grazie.

risposta

29

Si sta utilizzando Enhanced Health Monitoring. Con il monitoraggio avanzato dello stato di salute, l'istanza EC2 agent installata monitora le metriche di integrità del sistema vitale e del livello dell'applicazione e le invia direttamente a Elastic Beanstalk.

Quando viene visualizzato un messaggio di errore del tipo "Nessuna delle istanze invia dati", significa che l'agente sull'istanza si è arrestato in modo anomalo o non è in grado di pubblicare dati su Elastic Beanstalk a causa di un errore di rete o di altri errori.

Per eseguire il debug di questo, è consigliabile scaricare "Registri completi" dalla console AWS. È possibile seguire le istruzioni per ottenere i registri nella sezione "Download dei registri di bundle dalla console Elastic Beanstalk" here. Se non è possibile scaricare i registri utilizzando la console per qualsiasi motivo, è anche possibile eseguire ssh sull'istanza e osservare i registri in /var/log.

Troverete i registri per l'agente sanitario in /var/log/healthd/daemon.log. I registri aggiuntivi utili per questa situazione sono /var/log/cfn-init.log, /var/log/eb-cfn-init.log e /var/log/eb-activity.log. Puoi guardare i log e fornire maggiori dettagli sugli errori che vedi? Si spera che questo vi fornisca ulteriori dettagli sull'errore "Nessuna delle istanze sta inviando dati".

Per quanto riguarda tutti gli altri "cause" che state vedendo:

  • Ambiente salute è passata da attesa Grave - Questo perché inizialmente il vostro stato di salute dell'ambiente è attesa. Se le istanze non salgono entro il periodo di prova, le transizioni dello stato di integrità su Severe. Nel tuo caso dal momento che nessuna delle istanze è in buona salute/invio di dati, la salute è passata a Severe.

  • Il 100,0% delle richieste all'ELB non riesce con HTTP 5xx. Frequenza richiesta insufficiente (0,5 richieste/min) per determinare l'integrità dell'applicazione (7 minuti fa). Elastic Beanstalk controlla altre risorse oltre alle istanze EC2 quando si utilizza il monitoraggio avanzato della salute. Ad esempio, monitora le metriche del cloudwatch per il tuo ELB. Questo errore indica che tutte le richieste inviate al tuo ambiente CNAME/bilanciamento del carico hanno esito negativo con errori HTTP 5xx. Allo stesso tempo il tasso di richiesta è molto basso, solo 0,5 richieste al minuto, quindi questo indica che anche se tutte le richieste stanno fallendo, il tasso di richiesta è piuttosto basso. "7 minuti fa" significa che le informazioni sulle metriche ELB sono leggermente vecchie. Poiché Elastic Beanstalk monitora le metriche del cloudwatch ogni pochi minuti, quindi i dati possono essere leggermente obsoleti. Questo è in contrasto con i dati sulla salute che otteniamo direttamente dalle istanze EC2 che è "quasi in tempo reale". Nel tuo caso, dal momento che le istanze non inviano dati, l'unica fonte disponibile per la salute è la metrica ELB, che viene ritardata di circa 7 minuti.

  • ELB salute sta fallendo o non è disponibile per tutte le istanze Elastic Beanstalk sta esaminando la salute della vostra ELB, vale a dire si sta verificando quante istanze sono in servizio dietro ELB. Nel tuo caso, tutte le istanze dietro ELB sono fuori servizio o la salute non è disponibile per qualche altro motivo. Dovresti ricontrollare che il tuo ruolo di servizio sia configurato correttamente. È possibile leggere come configurare correttamente il ruolo di servizio here o documentation. È possibile che l'applicazione non sia stata avviata.

Nel tuo caso suggerirei di concentrarsi sul primo errore "Nessuna delle istanze sta inviando dati". Per questo è necessario consultare i registri come descritto sopra. Fammi sapere cosa vedi nei log. L'agente viene avviato abbastanza presto nel processo di avvio sull'istanza. Pertanto, se viene visualizzato un errore come "Nessuna delle istanze invia dati", è molto probabile che il bootstrap non sia riuscito o che l'agente non sia stato avviato per qualche motivo. I log dovrebbero dirti di più.

Assicurarsi inoltre di utilizzare un profilo di istanza con il proprio ambiente. Il profilo dell'istanza consente all'agente sanitario in esecuzione sull'istanza EC2 di autenticarsi con Elastic Beanstalk. Se il profilo dell'istanza non è associato all'ambiente, l'agente non sarà in grado di inviare dati a Elastic Beanstalk. Per saperne di più sui profili di istanza con Elean Beanstalk here.

Aggiornamento "dati Nessuno dei casi stanno inviando" Un motivo comune per la causa della salute può essere che l'istanza è in una VPC e la tua VPC non consente l'accesso NTP. L'indicatore tipico di questo problema è il seguente messaggio in /var/log/messages: ntpdate: Synchronizing with time server: [FAILED]. Quando ciò accade, l'orologio dell'istanza EC2 può andare fuori sincrono e i dati sono considerati non validi. Dovresti anche vedere una causa di salute nelle istanze nella pagina della salute della console web di AWS che ti informa che l'orologio di istanza non è sincronizzato. La soluzione è assicurarsi che il tuo VPC consenta l'accesso a NTP.


+0

Grazie per la tua risposta, provo ad accedere ai log per la mia applicazione Elastic Beanstalk come hai detto tu e riavvia l'app EB e poi non succede nulla. Non riesco a ottenere i log. –

+0

Puoi eseguire l'ssh sull'istanza e ottenere i log? –

+0

Un'altra possibilità è che la configurazione VPC sia errata, quindi il bootstrap non è riuscito. Ancora una volta, se si può ssh all'istanza e ottenere i registri, si avranno i dettagli. –

4

Ci possono essere molte ragioni per cui l'agente di salute non è in grado di inviare tutti i dati, quindi questo non può essere la risposta al vostro problema, ma era al mio e si spera possa aiutare qualcun altro:

ho ottenuto lo stesso errore e guardando in /var/log/healthd/daemon.log il seguente è stato più volte segnalato:

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

questo è stato causato da me fare e usare un'immagine AMI da un'istanza EC2 all'interno di un ambiente Elastic Beanstalk. Cioè, ho creato un ambiente temporaneo con un'istanza con la stessa configurazione del mio ambiente di produzione, inserito la console EC2 e creato un'immagine dell'istanza, terminato l'ambiente temporaneo e quindi creato un altro ambiente utilizzando la nuova AMI personalizzata.

Naturalmente (a posteriori) ciò significava che alcune impostazioni dell'ambiente temporaneo erano ancora in uso. In questo caso, in particolare /etc/healthd/config.yaml, l'agente sanitario sta tentando di inviare messaggi a un gruppo di integrità non più esistente.

Per risolvere questo problema e verificare che non ci fosse altra configurazione stantia in giro, ho invece avviato una nuova istanza EC2 a mano dall'AMI predefinita utilizzata nell'ambiente di produzione (trovarla nella pagina di configurazione "Istanze" del proprio ambiente) , provvedendo che, quindi creare una nuova immagine da quella e utilizzare quell'immagine nel mio nuovo ambiente EB.

+0

Ciao @sgvd, anch'io sto affrontando lo stesso problema. C'è un modo per cambiare il group_id in /etc/healthd/config.yaml. Possiamo trovare il group_id del nuovo ambiente e aggiornarlo lì? – yogeshagr

0

Ho risolto questo problema aggiungendo un altro gruppo di sicurezza (quello predefinito per il mio Beanstalk elastico).

Problemi correlati