AWS:没有任何实例正在发送数据

时间:2015-09-02 22:34:26

标签: amazon-web-services amazon-ec2 elastic-beanstalk

我正在尝试使用Amazon Web Services设置Elastic Beanstalk应用程序但是我收到了大量错误消息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

为什么我会收到此错误,如何解决?感谢。

8 个答案:

答案 0 :(得分:37)

您正在使用Enhanced Health Monitoring。 通过增强的运行状况监控,EC2实例上安装的agent可监控重要的系统和应用程序级运行状况指标,并将其直接发送到Elastic Beanstalk。

当您看到“没有实例正在发送数据”这样的错误消息时,这意味着实例上的代理已崩溃,或者由于网络错误或其他错误而无法将数据发布到Elastic Beanstalk。 / p>

为了进行调试,我建议从AWS控制台下载“完整日志”。您可以按照“从Elastic Beanstalk控制台下载软件包日志”here部分中的说明获取日志。 如果由于任何原因无法使用控制台下载日志,您还可以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的cloudwatch指标。此错误表示发送到您的环境CNAME /负载均衡器的所有请求都因HTTP 5xx错误而失败。同时请求率非常低,每分钟只有0.5个请求,因此这表明即使所有请求都失败,请求率也相当低。 “7分钟前”意味着有关ELB指标的信息略显陈旧。由于Elastic Beanstalk每隔几分钟监控一次云观察指标,因此数据可能会略微陈旧。这与我们直接从“近实时”的EC2实例获得的健康数据相反。在您的情况下,由于实例不发送数据,唯一可用的健康来源是ELB指标,延迟大约7分钟。

  • ELB运行状况失败或无法用于所有实例 Elastic Beanstalk正在查看ELB的运行状况,即它正在检查ELB背后有多少实例在运行。在您的情况下,ELB背后的所有实例都将停止服务,或者由于其他原因而无法提供运行状况。您应该仔细检查您的服务角色是否已正确配置。您可以阅读如何正确配置服务角色heredocumentation。您的应用程序可能无法启动。

在您的情况下,我建议关注第一个错误“没有实例发送数据”。为此,您需要查看上面列出的日志。让我知道你在日志中看到的内容。代理在实例的引导过程中很早就启动了。因此,如果您看到“没有实例正在发送数据”之类的错误,则很可能是引导失败或代理由于某种原因无法启动。日志应该告诉你更多。

还要确保在环境中使用实例配置文件。实例配置文件允许在EC2实例上运行的运行状况代理通过Elastic Beanstalk进行身份验证。如果实例配置文件未与您的环境关联,则代理将无法将数据发送到Elastic Beanstalk。通过Elastic Beanstalk here了解有关实例配置文件的更多信息。

<强>更新 健康原因“没有实例发送数据”的一个常见原因可能是您的实例位于VPC中,而您的VPC不允许NTP访问。此问题的典型指示是/var/log/messages: ntpdate: Synchronizing with time server: [FAILED]中的以下消息。发生这种情况时,EC2实例上的时钟可能会失去同步,并且数据被视为无效。您还应该在AWS Web控制台上的运行状况页面上的实例上看到健康原因,该实例告诉您实例时钟不同步。解决方法是确保您的VPC允许访问NTP。

答案 1 :(得分:5)

健康代理无法发送任何数据可能有很多原因,因此这可能不是您问题的答案,但这是我的,希望可以帮助其他人:

我收到同样的错误并且正在查看/var/log/healthd/daemon.log以下内容被反复报道:

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

这是由我在Elastic Beanstalk环境中制作和使用来自EC2实例的AMI图像引起的。也就是说,我创建了一个临时环境,其中一个实例与我的生产环境配置相同,进入EC2控制台并创建实例映像,终止临时环境,然后使用新的自定义AMI创建另一个环境。 / p>

当然(事后看来)这意味着临时环境的某些设置仍在使用中。在这种情况下,特别是/etc/healthd/config.yaml,导致运行状况代理尝试将消息发送到不再存在的运行状况组。

为了解决这个问题并确保没有其他陈旧的配置,我改为从生产环境中使用的默认AMI手动启动一个新的EC2实例(在&#39; Instances&#39;配置页面下找到它你的环境),然后提供,然后从那里创建一个新的图像,并在我的新EB环境中使用该图像。

答案 2 :(得分:4)

我通过添加另一个安全组(我的Elastic Beanstalk的默认组)解决了这个问题。

答案 3 :(得分:0)

检查实例类型的RAM是否足以用于app + os + Amazon工具。当我们发现t2.micro不足以满足我们的用例时,我们遭受了很长一段时间。使用t2.small(2GB)后,问题就消失了。

答案 4 :(得分:0)

在我的情况下,当我增加ram或实例类型(从t2.micro到c5.xlarge)时,它已经解决。

答案 5 :(得分:0)

看来我的问题是我没有将公共IP地址关联到我的实例...在设置它后,它就可以正常工作了。

答案 6 :(得分:0)

我只是将负载均衡路径设置为一个响应状态码为200的URL,仅用于学习环境。

对于我的真实应用,我使用执行器

答案 7 :(得分:0)

如果您看到类似这样的内容而您没有获得任何增强的指标,请检查您是否不小心从 nginx 配置中删除了 conf.d/elasticbeanstalk/healthd.conf 包含。此 conf 添加了一种机器读取日志格式,负责在 EB 中报告该数据(请参阅 Enhanced health log format - AWS)。

no metrics