

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 为环境发布 Amazon CloudWatch 自定义指标
<a name="health-enhanced-cloudwatch"></a>

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

通过将指标发布到 CloudWatch，您还可以将其与[监控图表](environment-health-console.md#environment-health-console-graphs)和[警报](using-features.alarms.md)一起使用。当您使用增强型运行状况报告时 *EnvironmentHealth*，会自动启用一个免费指标。除标准[CloudWatch 费用以外的自定义指标*EnvironmentHealth*均会产生费用](https://aws.amazon.com/cloudwatch/pricing/)。

要发布环境的 CloudWatch 自定义指标，必须先启用该环境的增强型运行状况报告。有关说明，请参阅[启用 Elastic Beanstalk 增强型运行状况报告](health-enhanced-enable.md)：

**Topics**
+ [增强型运行状况报告指标](#health-enhanced-cloudwatch-metrics)
+ [使用 Elastic Beanstalk 控制台配置 CloudWatch 指标](#health-enhanced-cloudwatch-console)
+ [使用 EB CLI 配置 CloudWatch 自定义指标](#health-enhanced-cloudwatch-ebcli)
+ [提供自定义指标配置文件](#health-enhanced-cloudwatch-configdocument)

## 增强型运行状况报告指标
<a name="health-enhanced-cloudwatch-metrics"></a>

当您在环境中启用增强型运行状况报告时，增强型运行状况报告系统会自动发布一个[CloudWatch 自定义指标*EnvironmentHealth*](https://docs.aws.amazon.com/AmazonCloudWatch/latest/DeveloperGuide/publishingMetrics.html)。[要向发布其他指标 CloudWatch，请使用 Elastic Bean [stalk [控制台](#health-enhanced-cloudwatch-ebcli)、EB CLI 或.ebexten](#health-enhanced-cloudwatch-console) sions 使用这些指标配置您的环境。](command-options.md)

您可以将以下增强型运行状况指标从您的环境发布到 CloudWatch。可用指标 – 所有平台

`EnvironmentHealth`  
*仅环境。*除非您配置其他 CloudWatch 指标，否则这是增强型运行状况报告系统发布的唯一指标。环境运行状况由七种[状态](health-enhanced-status.md)之一表示。在 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*% 的请求所耗费的平均时间量（以秒为单位）。

`InstanceHealth`  
*仅实例。*表示实例的当前运行状况状态。实例运行状况由七种[状态](health-enhanced-status.md)之一表示。在 CloudWatch 控制台中，这些状态映射到以下值：  
+ 0 - 正常
+ 1 - 信息
+ 5 - 未知
+ 10 - 无数据
+ 15 - 警告
+ 20 - 已降级
+ 25 - 严重可用指标 - Linux

`CPUIrq``CPUIdle``CPUUser``CPUSystem``CPUSoftirq``CPUIowait``CPUNice`  
*仅实例。*表示前一分钟 CPU 在每种状态下耗费时间的百分比。

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

`RootFilesystemUtil`  
*仅实例。*表示正在使用的磁盘空间的百分比。可用指标 - Windows

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

## 使用 Elastic Beanstalk 控制台配置 CloudWatch 指标
<a name="health-enhanced-cloudwatch-console"></a>

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

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

1. 打开 [Elastic Beanstalk](https://console.aws.amazon.com/elasticbeanstalk) 控制台，然后**在 “区域” 列表中，选择您**的。 AWS 区域

1. 在导航窗格中，选择 **Environments**（环境），然后从列表中选择环境的名称。

1. 在导航窗格中，选择 **Configuration**（配置）。

1. 在 **Monitoring (监控)** 配置类别中，选择 **Edit (编辑)**。

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

1. 要保存更改，请选择页面底部的 **Apply**（应用）。

启用 CloudWatch 自定义指标会将其添加到 “[**监控**” 页面](environment-health-console.md)上的可用指标列表中。

## 使用 EB CLI 配置 CloudWatch 自定义指标
<a name="health-enhanced-cloudwatch-ebcli"></a>

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

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

1. 使用 [**eb init**](eb-cli3-configuration.md) 初始化您的项目文件夹。

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

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

   ```
   $ eb config save --cfg 01-base-state
   Configuration saved at: ~/project/.elasticbeanstalk/saved_configs/01-base-state.cfg.yml
   ```

1. 在文本编辑器中打开保存的配置文件。

1. 在 `OptionSettings` > 下`aws:elasticbeanstalk:healthreporting:system:`，添加一个`ConfigDocument`密钥以启用您想要的每个 CloudWatch 指标。例如，以下 `ConfigDocument` 将在环境级别发布 `ApplicationRequests5xx` 和 `ApplicationRequests4xx` 指标，并在实例级别发布 `ApplicationRequestsTotal` 指标。

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

   在示例中，60 表示指标度量之间的秒数。目前，这是唯一支持的值。
**注意**  
您可在同一个 `ConfigDocument` 选项设置中结合 `CloudWatchMetrics` 和 `Rules`。[为环境配置增强型运行状况规则](health-enhanced-rules.md)中介绍了 `Rules`。  
如果您以前使用 `Rules` 配置增强型运行状况规则，则您使用 **eb config save** 命令检索的配置文件在 `ConfigDocument` 部分中已经具有 `Rules` 键。*请勿删除它* - 将 `CloudWatchMetrics` 部分添加到相同的 `ConfigDocument` 选项值中。

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

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

   ```
   $ eb config put 02-cloudwatch-enabled
   ```

   当将 **eb config** `get` 和 `put` 命令用于保存的配置时，请勿包含文件扩展名。

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

   ```
   $ eb config --cfg 02-cloudwatch-enabled
   ```

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

## 提供自定义指标配置文件
<a name="health-enhanced-cloudwatch-configdocument"></a>

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

```
{
  "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
}
```