AWS Elastic Beanstalk
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

增强型运行状况报告和监控

增强型运行状况报告是一种功能,您可以在您的环境中启用该功能以允许 AWS Elastic Beanstalk 收集有关环境中的资源的其他信息。Elastic Beanstalk 分析收集的信息,以更好地了解总体环境运行状况并帮助识别可能导致您的应用程序变得不可用的问题。

除运行状况颜色工作方式方面的更改之外,增强型运行状况还添加了状态 描述符,当环境为黄色或红色时,状态描述符提供观察到的问题的严重性指标。如果系统提供了有关当前状态的更多信息,您可以选择原因按钮,在运行状况页面上查看详细的运行状况信息。

为了提供有关在您的环境中运行的 EC2 实例的运行状况详细信息,Elastic Beanstalk 将在 Amazon 系统映像 (AMI) 中为支持增强型运行状况的每个平台配置包括一个运行状况代理。运行状况代理监控 Web 服务器日志和系统指标并将它们中继到 Elastic Beanstalk 服务。Elastic Beanstalk 将这些指标与来自 Elastic Load Balancing 和 Amazon EC2 Auto Scaling 的数据一起分析,以提供对环境运行状况的整体概况。

除收集和展示有关环境资源的信息之外,Elastic Beanstalk 还监控环境中的资源是否存在一些错误条件并向您发送通知以帮助避免失败和解决配置问题。影响环境运行状况的因素包括应用程序处理的每个请求的结果、实例操作系统的指标和最新部署的状态。

您可以通过使用 AWS 管理控制台中的环境控制面板Elastic Beanstalk 命令行界面 (EB CLI) 中的 eb health 命令实时查看运行状况状态。要随着时间的推移记录和跟踪环境和实例运行状况,您可以将环境配置为将 Elastic Beanstalk 收集的有关增强型运行状况报告的信息作为自定义指标发布到 Amazon CloudWatch。针对自定义指标的 CloudWatch 费用适用于除 EnvironmentHealth(免费)之外的所有指标。

增强型运行状况报告需要版本 2 或更新版本的平台配置,并受到除使用 IIS 的 Windows Server 之外的所有平台的支持。为了监控资源和发布指标,您的环境必须同时具有实例配置文件和服务角色。如果您将 Web 服务器配置为以恰当格式提供日志,默认情况下多容器 Docker 配置将不包括 Web 服务器,但可与增强型运行状况报告结合使用。

首次在 AWS 管理控制台中使用版本 2 平台配置创建环境时,Elastic Beanstalk 将提示您创建所需角色并默认启用增强型运行状况报告。继续阅读有关增强型运行状况报告的工作方式的详细信息,或转至启用 AWS Elastic Beanstalk 增强型运行状况报告立即开始使用增强型运行状况报告。

Elastic Beanstalk 运行状况代理

Elastic Beanstalk 运行状况代理是一个在您的环境中的每个 EC2 实例上运行的守护程序进程,它可监控操作系统和应用程序级别的运行状况指标并将问题报告给 Elastic Beanstalk。从每个配置的 2.0 版本开始,所有 Linux 平台解决方案堆栈中都包含运行状况代理。

运行状况代理将报告与由 Amazon EC2 Auto Scaling 和 Elastic Load Balancing 作为基本运行状况报告的一部分发布到 CloudWatch 的那些指标相似的指标,包括 CPU 负载、HTTP 代码和延迟。不过,运行状况代理会以与基本运行状况报告相比更小的粒度和更高的频率直接向 Elastic Beanstalk 报告。

对于基本运行状况,这些指标每五分钟发布一次,并且可通过环境管理控制台中的图表监控。通过增强型运行状况,Elastic Beanstalk 运行状况代理每十秒向 Elastic Beanstalk 报告一次指标。Elastic Beanstalk 使用运行状况代理提供的指标来确定环境中每个实例的运行状况状态,并将这些指标与其他因素结合使用来确定环境的总体运行状况。

环境的总体运行状况可在环境控制面板中实时查看,并由 Elastic Beanstalk 每六十秒向 CloudWatch 发布一次。可使用 EB CLI 中的 eb health 命令实时查看运行状况代理报告的详细指标。

通过支付额外费用,您可以选择每六十秒将单个实例和环境级别的指标发布到 CloudWatch。然后,可使用已发布到 CloudWatch 的指标在环境管理控制台中创建监控图表

增强型运行状况报告仅在您选择将增强型运行状况指标发布到 CloudWatch 时产生费用。在使用增强型运行状况时,您仍可免费发布基本运行状况指标,即使您不选择发布增强型运行状况指标。

请参阅实例指标以了解有关运行状况代理报告的指标的详细信息。有关将增强型运行状况指标发布到 CloudWatch 的详细信息,请参阅为环境发布 Amazon CloudWatch 自定义指标

实例和环境运行状况的确定因素

除基本运行状况报告系统检查(包括 Elastic Load Balancing 运行状况检查资源监控)之外,Elastic Beanstalk 增强型运行状况报告还收集有关您的环境中的实例状态的其他数据,包括操作系统指标、服务器日志以及正在进行的环境操作(如部署和更新)的状态。Elastic Beanstalk 运行状况报告服务将来自所有可用源的信息合并在一起,并分析这些信息以确定环境的总体运行状况。

操作和命令

当您对环境执行某项操作 (如部署新版本的应用程序) 时,Elastic Beanstalk 将进行若干导致环境的运行状况状态发生变化的更改。

例如,如果您将某个应用程序的新版本部署到正在运行多个实例的环境中,则您可能会在使用 EB CLI 监控环境的运行状况时看到如下类似的消息:

id status cause Overall Info Command is executing on 3 out of 5 instances i-bb65c145 Pending 91 % of CPU is in use. 24 % in I/O wait Performing application deployment (running for 31 seconds) i-ba65c144 Pending Performing initialization (running for 12 seconds) i-f6a2d525 Ok Application deployment completed 23 seconds ago and took 26 seconds i-e8a2d53b Pending 94 % of CPU is in use. 52 % in I/O wait Performing application deployment (running for 33 seconds) i-e81cca40 Ok

在此示例中,环境的总体状态为 Ok,此状态的原因是 Command is executing on 3 out of 5 instances。环境中的三个实例的状态为等待,表示一项操作正在进行。

当一项操作完成时,Elastic Beanstalk 将报告有关该操作的额外信息。对于本示例,Elastic Beanstalk 显示了有关一个已使用应用程序的新版本进行更新的实例的以下信息:

i-f6a2d525 Ok Application deployment completed 23 seconds ago and took 26 seconds

实例运行状况信息还包括有关环境中每个实例的最新部署的详细信息。每个实例都会报告一个部署 ID 和状态。部署 ID 是一个整数,每次在您部署新版本的应用程序或针对环境变量等有关实例的配置选项更改设置时,其数量就会增加一个。滚动部署失败后,您可以使用部署信息来识别那些运行错误应用程序版本的实例。

在原因列中,Elastic Beanstalk 包括有关成功的操作以及在多个运行状况检查中的其他运行状况状态的信息性消息,但它们不会无限期保持。运行状况不佳的环境状态的原因将持续,直到环境恢复运行状况良好状态。

命令超时

Elastic Beanstalk 从操作开始的时间起应用一个命令超时,以允许实例转换为运行状况良好状态。此命令超时在您的环境的更新和部署配置中设置(在 aws:elasticbeanstalk:command 命名空间中),默认为 10 分钟。

在滚动更新期间,Elastic Beanstalk 将为操作中每个批次应用不同的超时。此超时将作为环境的滚动更新配置的一部分设置(在 aws:autoscaling:updatepolicy:rollingupdate 命名空间中)。如果在命令超时期间,该批次中所有实例都运行状况良好,则操作将继续到下一个批次。否则,操作将失败。

注意

如果应用程序未通过运行状况检查(即未处于 Ok 状态),但在另一级别很稳定,您可以在 aws:elasticbeanstalk:command namespace 中设置 HealthCheckSuccessThreshold 选项,从而更改 Elastic Beanstalk 视作实例运行状况良好的级别。

一个 Web 服务器环境若要被视为运行状况良好,该环境或批次中每个实例必须在两分钟内连续通过 12 次运行状况检查。对于工作线程层,每个实例必须通过 18 次运行状况检查。在命令超时之前,Elastic Beanstalk 不会在运行状况检查失败时降低环境的运行状况状态。只要实例在环境中且在命令超时范围内转变为运行状况良好,则操作成功。

HTTP 请求

当没有对环境正在进行的操作时,有关实例和环境运行状况的主要信息源为每个实例的 Web 服务器日志。为了确定实例的运行状况和环境的总体运行状况,Elastic Beanstalk 将考虑请求的数量、每个请求的结果以及解决每个请求的速度。

如果您使用不含 Web 服务器的多容器 Docker,或禁用含在其他 Elastic Beanstalk 平台中的 Web 服务器(nginx 或 Apache),则需要进行额外的配置才能以它需要的格式获取 Elastic Beanstalk 运行状况代理日志,以将运行状况信息中继到 Elastic Beanstalk 服务。有关详细信息,请参阅增强型运行状况日志格式

操作系统指标

Elastic Beanstalk 监控运行状况代理报告的操作系统指标以识别系统资源始终较少的实例。

请参阅实例指标以了解有关运行状况代理报告的指标的详细信息。

运行状况检查规则自定义

Elastic Beanstalk 增强型运行状况报告依靠一组规则来确定环境的运行状况。其中一些规则可能不适合您的特定应用程序。一种常见情况是应用程序设计为频繁返回 HTTP 4xx 错误。Elastic Beanstalk 使用其默认规则之一判断出现问题,并根据错误比率将您环境的运行状况从“正常”更改为“警告”、“已降级”或“严重”。为正确处理这种情况,Elastic Beanstalk 允许您配置此规则并忽略应用程序 HTTP 4xx 错误。有关详细信息,请参阅 为环境配置增强型运行状况规则

增强型运行状况角色

增强型运行状况报告需要两个角色:一个适用于 Elastic Beanstalk 的服务角色和一个适用于环境的实例配置文件。服务角色允许 Elastic Beanstalk 代表您与其他 AWS 服务进行交互,以便收集有关环境中的资源的信息。实例配置文件允许环境中的实例将日志写入 Amazon S3。

当您在 AWS 管理控制台中创建 Elastic Beanstalk 环境时,控制台将提示您创建实例配置文件和具有适当权限的服务角色。当您调用 eb create 来创建环境时,EB CLI 也会帮助您创建这些角色。

如果您使用 API、软件开发工具包或 AWS CLI 创建环境,则必须事先创建这些角色,并在创建环境时指定它们,然后才能使用增强型运行状况。有关为您的环境创建适当角色的说明,请参阅服务角色、实例配置文件和用户策略

增强型运行状况事件

当环境在不同状态间转换时,增强型运行状况系统将生成事件。以下示例显示了环境在“信息”、“正常”和“严重”状态间转换时生成的事件输出:

转换到较差的状态时,Elastic Beanstalk 将包括一条消息,指示事件的原因。

并非所有实例级别的状态更改都会导致 Elastic Beanstalk 发送事件。为了防止错误警报,如果一个问题在多次检查中连续出现,Elastic Beanstalk 将只生成与运行状况相关的事件。

实时的环境级别运行状况信息(包括状态、颜色和原因)可在环境控制面板EB CLI 中找到。通过将 EB CLI 连接到您的环境并运行 eb health 命令,您还可以查看来自环境中的每个实例 的实时状态。

更新、部署和扩展期间的增强型运行状况报告行为

启用增强型运行状况报告可影响您的环境在配置更新和部署期间的行为。在所有实例始终通过运行状况检查之前,Elastic Beanstalk 不会完成一批更新,由于增强型运行状况报告将应用运行状况的更高标准并监控更多因素,因此通过基本运行状况报告的 ELB 运行状况检查的实例不一定会通过增强型运行状况报告。请参阅有关滚动配置更新滚动部署的主题,以了解有关运行状况检查如何影响更新过程的详细信息。

增强型运行状况报告还可以凸显为 Elastic Load Balancing 设置恰当的运行状况检查 URL 的必要性。当您的环境纵向扩展以满足需求时,新的实例在通过足够的 ELB 运行状况检查之后便会立即开始接收请求。如果没有配置运行状况检查 URL,则这可能是在新实例能够接受 TCP 连接之后的短短 20 秒。

如果您的应用程序在负载均衡器声明其运行状况足够良好并可以接受流量之前还没有完成启动,您将会看到一大批失败的请求,而且您的环境将开始让运行状况检查失败。命中您的应用程序所服务的路径的运行状况检查 URL 可防止此问题;在对运行状况检查 URL 的 GET 请求返回 200 状态代码之前,ELB 运行状况检查不会通过。