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

为环境发布 Amazon CloudWatch 自定义指标

您可以将由 AWS Elastic Beanstalk 增强型运行状况报告收集的数据作为自定义指标发布到 Amazon CloudWatch。通过将指标发布到 CloudWatch,您可以跟踪资源使用率和请求延迟随负载变化的变动情况,从而监控应用程序性能随时间推移的变化和发现潜在问题。

通过将指标发布到 CloudWatch,您还可以使它们可用于监控图表警报。免费指标 EnvironmentHealth 在您使用增强型运行状况报告时自动启用。除 EnvironmentHealth 之外的自定义指标将产生标准 CloudWatch 费用

要为某个环境发布 CloudWatch 自定义指标,则必须先对该环境启用增强型运行状况报告。有关说明,请参阅启用 AWS Elastic Beanstalk 增强型运行状况报告

增强型运行状况报告指标

在您的环境中启用增强型运行状况报告后,增强型运行状况报告系统将自动发布一个 CloudWatch 自定义指标,即 EnvironmentHealth。要将其他指标发布到 CloudWatch,请使用 Elastic Beanstalk 控制台EB CLI.ebextensions 对您的环境配置这些指标。

您可以将以下增强型运行状况指标从环境发布到 CloudWatch。

可用指标 — 所有平台

EnvironmentHealth

仅环境。 除非您配置其他指标,否则这是由增强型运行状况报告系统发布的唯一的 CloudWatch 指标。环境运行状况由七种状态之一表示。在 CloudWatch 控制台中,这些状态将映射到下列值:

  • 0 – 正常

  • 1 – 信息

  • 5 – 未知

  • 10 – 无数据

  • 15 – 警告

  • 20 – 已降级

  • 25 – 严重

InstancesSevere
InstancesDegraded
InstancesWarning
InstancesInfo
InstancesOk
InstancesPending
InstancesUnknown
InstancesNoData

仅环境。 些指标表示环境中处于每种运行状况的实例的数量。InstancesNoData 表示未在为其接收数据的实例的数量。

ApplicationRequestsTotal
ApplicationRequests5xx
ApplicationRequests4xx
ApplicationRequests3xx
ApplicationRequests2xx

实例和环境。 表示实例或环境完成的请求的总数量以及每种状态代码类别的请求的数量。

ApplicationLatencyP10
ApplicationLatencyP50
ApplicationLatencyP75
ApplicationLatencyP85
ApplicationLatencyP90
ApplicationLatencyP95
ApplicationLatencyP99
ApplicationLatencyP99.9

实例和环境。 表示完成最快的 x% 的请求所耗费的平均时间量(以秒为单位)。

LoadAverage1min

仅实例。 前一分钟实例的平均 CPU 负载。

InstanceHealth

仅实例。 表示实例的当前运行状况状态。实例运行状况由七种状态之一表示。在 CloudWatch 控制台中,这些状态将映射到下列值:

  • 0 – 正常

  • 1 – 信息

  • 5 – 未知

  • 10 – 无数据

  • 15 – 警告

  • 20 – 已降级

  • 25 – 严重

RootFilesystemUtil

仅实例。 表示正在使用的磁盘空间的百分比。

可用指标 — Linux

CPUIrq
CPUIdle
CPUUser
CPUSystem
CPUSoftirq
CPUIowait
CPUNice

仅实例。 表示前一分钟 CPU 在每种状态下耗费时间的百分比。

可用指标 — Windows

CPUIdle
CPUUser
CPUPriveleged

仅实例。表示前一分钟 CPU 在每种状态下耗费时间的百分比。

使用 Elastic Beanstalk 控制台配置 CloudWatch 指标

您可以使用 Elastic Beanstalk 控制台配置您的环境,以便将增强型运行状况报告指标发布到 CloudWatch 并使其可用于监控图表和警报。

在 Elastic Beanstalk 控制台中配置 CloudWatch 自定义指标

  1. 打开 Elastic Beanstalk 控制台

  2. 导航到您的环境的管理页

  3. 选择 Configuration

  4. 监控配置卡上,选择修改

  5. 运行状况报告下,选择要发布到 CloudWatch 的实例和环境指标。要选择多个指标,请在选择时按住 Ctrl 键。

  6. 选择 Apply

启用 CloudWatch 自定义指标可将它们添加到监控页面上的可用指标列表。

使用 EB CLI 配置 CloudWatch 自定义指标

您可以通过以下方法使用 EB CLI 配置自定义指标:在本地保存您的环境的配置,添加用于定义要发布的指标的条目,然后将该配置上传到 Elastic Beanstalk。您可以在环境创建期间或创建后将保存的配置应用于环境。

使用 EB CLI 和保存的配置来配置 CloudWatch 自定义指标

  1. 使用 eb init 初始化您的项目文件夹。

  2. 通过运行 eb create 命令创建环境。

  3. 通过运行 eb config save 命令在本地保存配置模板。以下示例使用 --cfg 选项指定配置的名称。

    $ eb config save --cfg 01-base-state Configuration saved at: ~/project/.elasticbeanstalk/saved_configs/01-base-state.cfg.yml
  4. 在文本编辑器中打开保存的配置文件。

  5. OptionSettings > aws:elasticbeanstalk:healthreporting:system: 下,添加一个 ConfigDocument 键以启用所需的每个 CloudWatch 指标。例如,以下 ConfigDocument 将在环境级别发布 ApplicationRequests5xxApplicationRequests4xx 指标,并在实例级别发布 ApplicationRequestsTotal 指标。

    OptionSettings: ... aws:elasticbeanstalk:healthreporting:system: ConfigDocument: CloudWatchMetrics: Environment: ApplicationRequests5xx: 60 ApplicationRequests4xx: 60 Instance: ApplicationRequestsTotal: 60 Version: 1 SystemType: enhanced ...

    在示例中,60 表示指标度量之间的秒数。目前,这是唯一支持的值。

    注意

    您可在同一个 ConfigDocument 选项设置中结合 CloudWatchMetricsRules为环境配置增强型运行状况规则中介绍了 Rules

    如果您以前使用 Rules 配置增强型运行状况规则,则您使用 eb config save 命令检索的配置文件在 ConfigDocument 部分中已经具有 Rules 键。请勿删除它 — 将 CloudWatchMetrics 部分添加到相同的 ConfigDocument 选项值中。

  6. 保存配置文件,关闭文本编辑器。在此示例中,更新的配置文件使用与下载的配置文件不同的名称 (02-cloudwatch-enabled.cfg.yml) 保存。这将在上传文件时创建一个单独保存的配置。您可以使用与下载的文件相同的名称覆盖现有配置而无需创建新名称。

  7. 使用 eb config put 命令将更新的配置文件上传到 Elastic Beanstalk。

    $ eb config put 02-cloudwatch-enabled

    当将 eb config getput 命令用于保存的配置时,请勿包含文件扩展名。

  8. 将保存的配置应用于正在运行的环境。

    $ eb config --cfg 02-cloudwatch-enabled

    --cfg 选项指定一个应用于环境的命名配置文件。您可在本地或在 Elastic Beanstalk 中保存配置文件。如果两个位置中都存在带有指定名称的配置文件,则 EB CLI 将使用本地文件。

提供自定义指标配置文件

Amazon CloudWatch 自定义指标的配置 (config) 文档是一个 JSON 文档,其中列出了要在环境和实例级别发布的指标。以下示例显示了一个启用所有可用自定义指标的配置文件。

{ "CloudWatchMetrics": { "Environment": { "ApplicationLatencyP99.9": 60, "InstancesSevere": 60, "ApplicationLatencyP90": 60, "ApplicationLatencyP99": 60, "ApplicationLatencyP95": 60, "InstancesUnknown": 60, "ApplicationLatencyP85": 60, "InstancesInfo": 60, "ApplicationRequests2xx": 60, "InstancesDegraded": 60, "InstancesWarning": 60, "ApplicationLatencyP50": 60, "ApplicationRequestsTotal": 60, "InstancesNoData": 60, "InstancesPending": 60, "ApplicationLatencyP10": 60, "ApplicationRequests5xx": 60, "ApplicationLatencyP75": 60, "InstancesOk": 60, "ApplicationRequests3xx": 60, "ApplicationRequests4xx": 60 }, "Instance": { "ApplicationLatencyP99.9": 60, "ApplicationLatencyP90": 60, "ApplicationLatencyP99": 60, "ApplicationLatencyP95": 60, "ApplicationLatencyP85": 60, "CPUUser": 60, "ApplicationRequests2xx": 60, "CPUIdle": 60, "ApplicationLatencyP50": 60, "ApplicationRequestsTotal": 60, "RootFilesystemUtil": 60, "LoadAverage1min": 60, "CPUIrq": 60, "CPUNice": 60, "CPUIowait": 60, "ApplicationLatencyP10": 60, "LoadAverage5min": 60, "ApplicationRequests5xx": 60, "ApplicationLatencyP75": 60, "CPUSystem": 60, "ApplicationRequests3xx": 60, "ApplicationRequests4xx": 60, "InstanceHealth": 60, "CPUSoftirq": 60 } }, "Version": 1 }

对于 AWS CLI,您将文档作为 Value 键的值传入选项设置参数,该参数本身是一个 JSON 对象。在这种情况下,您必须对所嵌入文档中的引号进行转义。

$ aws elasticbeanstalk validate-configuration-settings --application-name my-app --environment-name my-env --option-settings '[ { "Namespace": "aws:elasticbeanstalk:healthreporting:system", "OptionName": "ConfigDocument", "Value": "{\"CloudWatchMetrics\": {\"Environment\": {\"ApplicationLatencyP99.9\": 60,\"InstancesSevere\": 60,\"ApplicationLatencyP90\": 60,\"ApplicationLatencyP99\": 60,\"ApplicationLatencyP95\": 60,\"InstancesUnknown\": 60,\"ApplicationLatencyP85\": 60,\"InstancesInfo\": 60,\"ApplicationRequests2xx\": 60,\"InstancesDegraded\": 60,\"InstancesWarning\": 60,\"ApplicationLatencyP50\": 60,\"ApplicationRequestsTotal\": 60,\"InstancesNoData\": 60,\"InstancesPending\": 60,\"ApplicationLatencyP10\": 60,\"ApplicationRequests5xx\": 60,\"ApplicationLatencyP75\": 60,\"InstancesOk\": 60,\"ApplicationRequests3xx\": 60,\"ApplicationRequests4xx\": 60},\"Instance\": {\"ApplicationLatencyP99.9\": 60,\"ApplicationLatencyP90\": 60,\"ApplicationLatencyP99\": 60,\"ApplicationLatencyP95\": 60,\"ApplicationLatencyP85\": 60,\"CPUUser\": 60,\"ApplicationRequests2xx\": 60,\"CPUIdle\": 60,\"ApplicationLatencyP50\": 60,\"ApplicationRequestsTotal\": 60,\"RootFilesystemUtil\": 60,\"LoadAverage1min\": 60,\"CPUIrq\": 60,\"CPUNice\": 60,\"CPUIowait\": 60,\"ApplicationLatencyP10\": 60,\"LoadAverage5min\": 60,\"ApplicationRequests5xx\": 60,\"ApplicationLatencyP75\": 60,\"CPUSystem\": 60,\"ApplicationRequests3xx\": 60,\"ApplicationRequests4xx\": 60,\"InstanceHealth\": 60,\"CPUSoftirq\": 60}},\"Version\": 1}" } ]'

对于采用 YAML 的 .ebextensions 配置文件,您可以按原样提供 JSON 文档。

option_settings: - namespace: aws:elasticbeanstalk:healthreporting:system option_name: ConfigDocument value: { "CloudWatchMetrics": { "Environment": { "ApplicationLatencyP99.9": 60, "InstancesSevere": 60, "ApplicationLatencyP90": 60, "ApplicationLatencyP99": 60, "ApplicationLatencyP95": 60, "InstancesUnknown": 60, "ApplicationLatencyP85": 60, "InstancesInfo": 60, "ApplicationRequests2xx": 60, "InstancesDegraded": 60, "InstancesWarning": 60, "ApplicationLatencyP50": 60, "ApplicationRequestsTotal": 60, "InstancesNoData": 60, "InstancesPending": 60, "ApplicationLatencyP10": 60, "ApplicationRequests5xx": 60, "ApplicationLatencyP75": 60, "InstancesOk": 60, "ApplicationRequests3xx": 60, "ApplicationRequests4xx": 60 }, "Instance": { "ApplicationLatencyP99.9": 60, "ApplicationLatencyP90": 60, "ApplicationLatencyP99": 60, "ApplicationLatencyP95": 60, "ApplicationLatencyP85": 60, "CPUUser": 60, "ApplicationRequests2xx": 60, "CPUIdle": 60, "ApplicationLatencyP50": 60, "ApplicationRequestsTotal": 60, "RootFilesystemUtil": 60, "LoadAverage1min": 60, "CPUIrq": 60, "CPUNice": 60, "CPUIowait": 60, "ApplicationLatencyP10": 60, "LoadAverage5min": 60, "ApplicationRequests5xx": 60, "ApplicationLatencyP75": 60, "CPUSystem": 60, "ApplicationRequests3xx": 60, "ApplicationRequests4xx": 60, "InstanceHealth": 60, "CPUSoftirq": 60 } }, "Version": 1 }