

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 為環境發佈 Amazon CloudWatch 自訂指標
<a name="health-enhanced-cloudwatch"></a>

您可以將 AWS Elastic Beanstalk 增強型運作狀態報告收集的資料發佈至 Amazon CloudWatch，做為自訂指標。發佈指標到 CloudWatch 以讓您隨時監控應用程式效能變化，並透過追蹤資源使用情況並要求延遲擴展負載來找出潛在的問題。

透過發佈指標至 CloudWatch，您也可藉由[監控圖表](environment-health-console.md#environment-health-console-graphs)和[警示](using-features.alarms.md)讓它們可供使用。一個免費指標，當您使用增強型運作狀態狀況報告，會自動啟用 *EnvironmentHealth*。*EnvironmentHealth* 以外的自訂指標會產生標準 [CloudWatch 費用](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 自訂指標](https://docs.aws.amazon.com/AmazonCloudWatch/latest/DeveloperGuide/publishingMetrics.html) (*EnvironmentHealth*)。若要發佈其他指標至 CloudWatch，可透過使用 [Elastic Beanstalk 主控台](#health-enhanced-cloudwatch-console)、[EB CLI](#health-enhanced-cloudwatch-ebcli) 或 [.ebextensions](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. 在導覽窗格中，選擇**環境**，然後在清單中選擇您環境的名稱。

1. 在導覽窗格中，選擇 **Configuration** (組態)。

1. 在 **Monitoring (監控)** 組態類別中，選擇 **Edit (編輯)**。

1. 在**運作狀態報告**下，選取要發佈到 CloudWatch 的執行個體和環境指標。若要選擇多個指標，請在選擇時同時按下 **Ctrl (Ctrl)** 鍵。

1. 若要儲存變更，請選擇頁面底部的**儲存變更**。

啟用 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 表示測量之間的秒數。目前，這是唯一支援的值。
**注意**  
您可將 `CloudWatchMetrics` 和 `Rules` 合併在相同的 `ConfigDocument` 選項設定中。`Rules` 會在 [設定環境的增強型健康狀況規則](health-enhanced-rules.md) 中詳加說明。  
如果您之前已使用 `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 自訂指標組態 (config) 文件是一種 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
}
```