AWS: ни один из экземпляров не отправляет данные

Я пытаюсь создать приложение Elastic Beanstalk с веб-службами Amazon, но я получаю сообщение об ошибках с сообщением None of the instances are sending data. Я попытался удалить приложение Elastic Beanstalk и экземпляр EC2 несколько раз с примером приложения и повторить попытку, но я получаю ту же ошибку.

Я также попытался загрузить приложение с флагом с помощью инструментов командной строки AWS Elastic Beanstalk, но затем я получил ошибку ниже:

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

Почему я получаю эту ошибку и как ее исправить? Спасибо.

Ответ 1

Вы используете Улучшенный мониторинг работоспособности. Благодаря расширенному мониторингу работоспособности agent, установленный на вашем экземпляре EC2, отслеживает жизненно важные показатели работоспособности системы и уровня приложения и отправляет их непосредственно на эластичный beanstalk.

Когда вы видите сообщение об ошибке типа "Ни один из экземпляров не отправляет данные", это означает, что либо агент в экземпляре разбился, либо не смог отправить данные на Эластичный Beanstalk из-за сетевой ошибки или какой-либо другой ошибки.

Для отладки этого, я бы рекомендовал загрузить "Полный журнал" с консоли AWS. Вы можете следовать инструкциям для получения журналов в разделе "Загрузка журналов пакетов из консоли эластичного beanstalk" здесь. Если вы не можете загружать журналы с помощью консоли по какой-либо причине, вы также можете использовать ssh для экземпляра и посмотреть журналы в /var/log.

Вы найдете журналы для агента работоспособности в /var/log/healthd/daemon.log. Дополнительными журналами, полезными для этой ситуации, являются /var/log/cfn-init.log, /var/log/eb-cfn-init.log и /var/log/eb-activity.log. Можете ли вы посмотреть журналы и дать более подробную информацию об ошибках, которые вы видите? Это, надеюсь, даст вам более подробную информацию об ошибке "Ни один из экземпляров не отправляет данные".

Относительно других "причин" здоровья, которые вы видите:

  • Состояние окружающей среды перешло от ожидающего к серьезному. Это связано с тем, что изначально состояние состояния вашей среды находится в ожидании. Если экземпляры не улучшатся в течение льготного периода, состояние состояния переходит к "Сильному". В вашем случае, поскольку ни один из этих экземпляров не является здоровым/отправляет данные, состояние здоровья перешло в "Серьезное".

  • 100.0% запросов к ELB не работают с HTTP 5xx. Недостаточная частота запросов (0,5 запроса/мин) для определения работоспособности приложения (7 минут назад). Elastic Beanstalk контролирует другие ресурсы в дополнение к вашим экземплярам EC2 при использовании расширенного мониторинга работоспособности. Например, он контролирует показатели облачности для вашего ELB. Эта ошибка означает, что все запросы, отправленные в вашу среду CNAME/load balancer, терпят неудачу с ошибками HTTP 5xx. В то же время скорость запроса очень низкая, всего 0,5 запроса в минуту, поэтому это означает, что, несмотря на то, что все запросы не работают, частота запросов довольно низкая. "7 минут назад" означает, что информация о показателях ELB немного устарела. Потому что Elastic Beanstalk контролирует показатели облачности в секунду, поэтому данные могут быть немного устаревшими. Это в отличие от данных о здоровье, которые мы получаем непосредственно из экземпляров EC2, которые находятся "в режиме реального времени". В вашем случае, поскольку экземпляры не отправляют данные, единственным доступным источником для здоровья является ELB-метрика, которая задерживается примерно на 7 минут.

  • Состояние ELB не работает или недоступно для всех экземпляров Elastic Beanstalk рассматривает состояние вашего ELB, то есть проверяет, сколько экземпляров находится в эксплуатации за ELB. В вашем случае все случаи, за пределами ELB, выходят из строя или здоровье недоступно по какой-то другой причине. Вы должны проверить, правильно ли настроена ваша служебная роль. Вы можете прочитать, как правильно настроить роль службы здесь или в документации . Возможно, ваше приложение не удалось запустить.

В вашем случае я бы предпочел сосредоточиться на первой ошибке "Ни один из экземпляров не отправляет данные". Для этого вам нужно посмотреть журналы, как описано выше. Дайте мне знать, что вы видите в журналах. Агент запускается довольно рано в процессе начальной загрузки экземпляра. Поэтому, если вы видите ошибку типа "Ни один из экземпляров не отправляет данные", очень вероятно, что bootstrap не удался или агент почему-то не запускался по какой-либо причине. Журналы должны сообщать вам больше.

Также убедитесь, что вы используете профиль экземпляра в своей среде. Профиль экземпляра позволяет агенту работоспособности, запущенному на вашем экземпляре EC2, аутентифицироваться с помощью эластичного бобового стежка. Если профиль экземпляра не связан с вашей средой, тогда агент не сможет отправлять данные на Эластичный Beanstalk. Подробнее о профилях экземпляров с эластичным бобовым стеком здесь.

ОбновлениеОдной из распространенных причин причины для здоровья "Ни один из экземпляров не является отправка данных" может быть то, что ваш экземпляр находится в VPC, и ваш VPC не разрешает доступ к NTP. Типичным показателем этой проблемы является следующее сообщение в /var/log/messages: ntpdate: Synchronizing with time server: [FAILED]. Когда это произойдет, часы на вашем экземпляре EC2 могут выйти из синхронизации, и данные считаются недействительными. Вы также должны увидеть причину, связанную со здоровьем, на экземплярах на странице работоспособности веб-консоли AWS, которая сообщает вам, что часы экземпляра не синхронизированы. Исправление состоит в том, чтобы убедиться, что ваш VPC разрешает доступ к NTP.


Ответ 2

Могут быть много причин, по которым агент здоровья не может отправлять какие-либо данные, поэтому это может быть не ответ на вашу проблему, но он был моим и, надеюсь, может помочь кому-то еще:

Я получил ту же ошибку и посмотрел на /var/log/healthd/daemon.log, о чем неоднократно сообщалось:

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

Это было вызвано тем, что я делал и использовал изображение AMI из экземпляра EC2 в среде Elastic Beanstalk. То есть, я создал временную среду с одним экземпляром той же конфигурации, что и моя производственная среда, зашел в консоль EC2 и создал образ экземпляра, завершил временную среду, а затем создал еще одну среду, использующую новый пользовательский AMI.

Конечно (задним числом) это означало, что некоторые настройки временной среды все еще используются. В этом случае специально /etc/healthd/config.yaml, в результате чего агент работоспособности пытается отправить сообщения в уже не существующую группу работоспособности.

Чтобы исправить это и убедиться, что в нем нет другой устаревшей конфигурации, вместо этого я начал новый экземпляр EC2 вручную из AMI по умолчанию, используемого в производственной среде (найдите его на странице конфигурации "Экземпляры" вашей среды) чтобы затем создать новое изображение и использовать это изображение в моей новой среде EB.

Ответ 3

Я решил это, добавив еще одну группу безопасности (по умолчанию для моего Elastic Beanstalk).

Ответ 4

У меня похожая проблема, и у моего VPC нет возможности подключиться к Интернету (нет экземпляров NatGateways/Nat). Поэтому проблема, которую я вижу здесь, заключается в том, что агент не может загрузить журналы на S3. будет ли в этом случае конечная точка VPC для S3?

Ответ 5

Проверьте, достаточно ли оперативной памяти вашего экземпляра для инструментов app + os + amazon. Мы долго страдали от этого, когда обнаружили, что t2.micro едва хватает для наших случаев использования. Проблема исчезла сразу после использования t2.small(2 ГБ).