

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

# 使用自訂指標的進階預測擴展政策
<a name="predictive-scaling-customized-metric-specification"></a>

在預測擴展政策中，您可以使用預先定義或自訂的指標。當預先定義指標 (CPU、網路輸入/輸出和 Application Load Balancer 請求計數) 未充分描述您的應用程式負載時，自訂指標會非常實用。

使用自訂指標建立預測擴展政策時，您可以指定 提供的其他 CloudWatch 指標 AWS，也可以指定您自己定義和發佈的指標。您也可以使用指標數學來彙總現有指標，並將其轉換為 AWS 不會自動追蹤的新時間序列。當您合併資料中的值時 (例如，透過計算新的總和或平均值)，它稱為*執行彙總*。產生的資料稱為*彙總*。

下一節包含如何建構政策的 JSON 結構的最佳實務和範例。

**Topics**
+ [

## 最佳實務
](#custom-metrics-best-practices)
+ [

## 先決條件
](#custom-metrics-prerequisites)
+ [

# 建構自訂指標的 JSON
](construct-json-custom-metrics.md)
+ [

# 預測擴展政策中自訂指標的考量事項
](custom-metrics-troubleshooting.md)
+ [

## 限制
](#custom-metrics-limitations)

## 最佳實務
<a name="custom-metrics-best-practices"></a>

以下最佳實務可協助您更有效地使用自訂指標：
+ 對於負載規範，最實用的指標是以 Auto Scaling 群組作為整體 (而不考慮該群組的容量) 來表示負載的指標。
+ 對於擴展指標規範，要擴展的最實用指標是每個執行個體指標的平均輸送量或使用率。
+ 擴展指標必須與容量成反比。也就是說，如果 Auto Scaling 群組中的執行個體數量增加，則擴展指標應減少大致相同的比例。為確保預測擴展按預期進行，負載指標和擴展指標還必須彼此密切關聯。
+ 目標使用率必須與擴展指標的類型相符。對於使用 CPU 使用率的政策組態，這是一個目標百分比。對於使用輸送量 (如請求或訊息數量) 的政策組態，這是在任何一分鐘間隔內每個執行個體的請求或訊息的目標數量。
+ 如果不遵循這些建議，則時間序列的預測未來值可能不正確。要驗證資料是否正確，您可以在 Amazon EC2 Auto Scaling 主控台中檢視預測值。或者，在建立預測擴展政策後，檢查 [GetPredictiveScalingForecast](https://docs.aws.amazon.com/autoscaling/ec2/APIReference/API_GetPredictiveScalingForecast.html) API 呼叫傳回的 `LoadForecast` 和 `CapacityForecast` 物件。
+ 強烈建議您在 forecast only (僅預測) 模式中設定預測擴展，以便在預測擴展主動擴展容量之前評估預測。

## 先決條件
<a name="custom-metrics-prerequisites"></a>

若要在預測擴展政策中新增自訂指標，您必須擁有 `cloudwatch:GetMetricData` 許可。

若要指定自己的指標，而不是 AWS 提供的指標，您必須先將指標發佈至 CloudWatch。如需詳細資訊，請參閱《Amazon CloudWatch 使用者指南》**中的[發佈自訂指標](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/publishingMetrics.html)。

如果您發佈自己的指標，應確保以至少五分鐘的頻率發佈資料點。Amazon EC2 Auto Scaling 根據需要的時段長度從 CloudWatch 擷取資料點。例如，負載指標規範使用每小時指標來衡量應用程式的負載。CloudWatch 使用您發佈的指標資料，透過將時間戳記落於同一小時週期內的所有資料點彙總，為任何一小時週期提供單一資料值。

# 建構自訂指標的 JSON
<a name="construct-json-custom-metrics"></a>

下一節包含如何設定預測擴展以查詢來自 CloudWatch 的資料的範例。設定此選項有兩種不同的方法，而您選擇的方法會影響您用來建構預測擴展政策的 JSON 的格式。使用指標數學時，JSON 的格式會根據所執行的指標數學而進一步變化。

1. 若要建立直接從 AWS 您發佈至 CloudWatch 的其他 CloudWatch 指標取得資料的政策，請參閱 [具有自訂負載和擴展指標的預測擴展政策範例 (AWS CLI)](#custom-metrics-ex1)。

1. 若要建立能查詢多個 CloudWatch 指標並使用數學表達式根據這些指標來建立新的時間序列的政策，請參閱 [使用指標數學表達式](using-math-expression-examples.md)。

## 具有自訂負載和擴展指標的預測擴展政策範例 (AWS CLI)
<a name="custom-metrics-ex1"></a>

若要使用 建立具有自訂載入和擴展指標的預測擴展政策 AWS CLI，請將 的引數存放在名為 `--predictive-scaling-configuration`的 JSON 檔案中`config.json`。

您可以藉由將以下範例中的可替換值換成您的指標和目標使用率的值，開始新增自訂指標。

```
{
  "MetricSpecifications": [
    {
      "TargetValue": 50,
      "CustomizedScalingMetricSpecification": {
        "MetricDataQueries": [
          {
            "Id": "scaling_metric",
            "MetricStat": {
              "Metric": {
                "MetricName": "MyUtilizationMetric",
                "Namespace": "MyNameSpace",
                "Dimensions": [
                  {
                    "Name": "MyOptionalMetricDimensionName",
                    "Value": "MyOptionalMetricDimensionValue"
                  }
                ]
              },
              "Stat": "Average"
            }
          }
        ]
      },
      "CustomizedLoadMetricSpecification": {
        "MetricDataQueries": [
          {
            "Id": "load_metric",
            "MetricStat": {
              "Metric": {
                "MetricName": "MyLoadMetric",
                "Namespace": "MyNameSpace",
                "Dimensions": [
                  {
                    "Name": "MyOptionalMetricDimensionName",
                    "Value": "MyOptionalMetricDimensionValue"
                  }
                ]
              },
              "Stat": "Sum"
            }
          }
        ]
      }
    }
  ]
}
```

如需詳細資訊，請參閱*《Amazon EC2 Auto Scaling API 參考》*中的 [MetricDataQuery](https://docs.aws.amazon.com/autoscaling/ec2/APIReference/API_MetricDataQuery.html)。

**注意**  
以下是一些其他資源，可協助您尋找 CloudWatch 指標的指標名稱、命名空間、維度和統計資料：  
如需 AWS 服務可用指標的相關資訊，請參閱《Amazon [AWS CloudWatch 使用者指南》中的發佈 CloudWatch 指標](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/aws-services-cloudwatch-metrics.html)的 服務。 *Amazon CloudWatch *
若要使用 取得 CloudWatch 指標的確切指標名稱、命名空間和維度 （如適用） AWS CLI，請參閱 [清單指標](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/cloudwatch/list-metrics.html)。

若要建立此政策，執行使用 JSON 檔案作為輸入 [put-scaling-policy](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/put-scaling-policy.html) 命令，如以下範例所示。

```
aws autoscaling put-scaling-policy --policy-name my-predictive-scaling-policy \
  --auto-scaling-group-name my-asg --policy-type PredictiveScaling \
  --predictive-scaling-configuration file://config.json
```

如果成功，此命令會傳回政策的 Amazon Resource Name (ARN)。

```
{
  "PolicyARN": "arn:aws:autoscaling:region:account-id:scalingPolicy:2f4f5048-d8a8-4d14-b13a-d1905620f345:autoScalingGroupName/my-asg:policyName/my-predictive-scaling-policy",
  "Alarms": []
}
```

# 使用指標數學表達式
<a name="using-math-expression-examples"></a>

下一節提供預測擴展政策的資訊和範例，說明如何在政策中使用指標數學。

**Topics**
+ [

## 了解指標數學
](#custom-metrics-metric-math)
+ [

## 使用指標數學組合指標的預測擴展政策範例 (AWS CLI)
](#custom-metrics-ex2)
+ [

## 藍/綠部署情境中使用的預測擴展政策範例 (AWS CLI)
](#custom-metrics-ex3)

## 了解指標數學
<a name="custom-metrics-metric-math"></a>

如果您只想彙總現有指標資料，則 CloudWatch 指標數學可以節省將另一個指標發佈至 CloudWatch 的工作量和成本。您可以使用 AWS 提供的任何指標，也可以使用您在應用程式中定義的指標。例如，您可能會想要計算每個執行個體的 Amazon SQS 佇列待處理項目。您可以透過從佇列中取得可檢索的大致訊息數量，然後將該數字除以 Auto Scaling 群組的執行中容量來得出此結果。

如需詳細資訊，請參閱《Amazon CloudWatch 使用者指南》**中的[使用指標數學](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/using-metric-math.html)。

如果選擇在預測擴展政策中使用指標數學表達式，則請考慮以下幾點：
+ 指標數學運算會使用指標名稱、命名空間和指標維度鍵/值對之唯一組合的資料點。
+ 您可以使用任何算術運算子 (\$1-\$1/^)、統計函數 (如 AVG 或 SUM) 或 CloudWatch 支援的其他函數。
+ 您可以在數學表達式的公式中同時使用其他數學表達式的指標和結果。
+ 您的指標數學表達式可以由不同的彙總組成。但是，最終彙總結果的最佳實務是將 `Average` 用於擴展指標，`Sum` 用於負載指標。
+ 在指標規範中使用的任何表達式都必須最終傳回單一的時間序列。

若要使用指標數學，請執行以下操作：
+ 選擇一或多個 CloudWatch 指標。然後，建立表達式。如需詳細資訊，請參閱《Amazon CloudWatch 使用者指南》**中的[使用指標數學](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/using-metric-math.html)。
+ 透過使用 CloudWatch 主控台或 CloudWatch [GetMetricData](https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_GetMetricData.html) API 驗證指標數學表達式是否有效。

## 使用指標數學組合指標的預測擴展政策範例 (AWS CLI)
<a name="custom-metrics-ex2"></a>

有時，您可能需要首先以某種方式處理其資料，而不是直接指定指標。例如，您可能有一個從 Amazon SQS 佇列中提取工作的應用程式，並且您可能想要使用佇列中的項目數量作為預測擴展的條件。佇列中的訊息數量並不僅僅定義所需的執行個體數量。因此，需要更多的工作來建立可用於計算每個執行個體待處理項目的指標。如需詳細資訊，請參閱[以 Amazon SQS 為基礎的擴展政策](as-using-sqs-queue.md)。

以下是此案例的預測擴展政策範例。它指定了基於 Amazon SQS `ApproximateNumberOfMessagesVisible` 指標的擴展和負載指標，即可從佇列中擷取的訊息數量。它還使用 Amazon EC2 Auto Scaling `GroupInServiceInstances` 指標和數學表達式來計算每個執行個體的待處理項目，以擴展指標。

```
aws autoscaling put-scaling-policy --policy-name my-sqs-custom-metrics-policy \
  --auto-scaling-group-name my-asg --policy-type PredictiveScaling \
  --predictive-scaling-configuration file://config.json
{
  "MetricSpecifications": [
    {
      "TargetValue": 100,
      "CustomizedScalingMetricSpecification": {
        "MetricDataQueries": [
          {
            "Label": "Get the queue size (the number of messages waiting to be processed)",
            "Id": "queue_size",
            "MetricStat": {
              "Metric": {
                "MetricName": "ApproximateNumberOfMessagesVisible",
                "Namespace": "AWS/SQS",
                "Dimensions": [
                  {
                    "Name": "QueueName",
                    "Value": "my-queue"
                  }
                ]
              },
              "Stat": "Sum"
            },
            "ReturnData": false
          },
          {
            "Label": "Get the group size (the number of running instances)",
            "Id": "running_capacity",
            "MetricStat": {
              "Metric": {
                "MetricName": "GroupInServiceInstances",
                "Namespace": "AWS/AutoScaling",
                "Dimensions": [
                  {
                    "Name": "AutoScalingGroupName",
                    "Value": "my-asg"
                  }
                ]
              },
              "Stat": "Sum"
            },
            "ReturnData": false
          },
          {
            "Label": "Calculate the backlog per instance",
            "Id": "scaling_metric",
            "Expression": "queue_size / running_capacity",
            "ReturnData": true
          }
        ]
      },
      "CustomizedLoadMetricSpecification": {
        "MetricDataQueries": [
          {
            "Id": "load_metric",
            "MetricStat": {
              "Metric": {
                "MetricName": "ApproximateNumberOfMessagesVisible",
                "Namespace": "AWS/SQS",
                "Dimensions": [
                  {
                    "Name": "QueueName",
                    "Value": "my-queue"
                  }
                ],
              },
              "Stat": "Sum"
            },
            "ReturnData": true
          }
        ]
      }
    }
  ]
}
```

該範例會傳回政策的 ARN。

```
{
  "PolicyARN": "arn:aws:autoscaling:region:account-id:scalingPolicy:2f4f5048-d8a8-4d14-b13a-d1905620f345:autoScalingGroupName/my-asg:policyName/my-sqs-custom-metrics-policy",
  "Alarms": []
}
```

## 藍/綠部署情境中使用的預測擴展政策範例 (AWS CLI)
<a name="custom-metrics-ex3"></a>

搜尋表達式提供了進階選項，您可以在該選項中查詢多個 Auto Scaling 群組中的指標，並對其執行數學表達式。這對藍/綠部署尤其實用。

**注意**  
*藍/綠部署*是一種部署方法，您可以在其中建立兩個獨立但相同的 Auto Scaling 群組。只有一個群組會接收生產流量。使用者流量最初定向至較早的 Auto Scaling 群組 (「藍色」)，而新群組 (「綠色」) 用於測試和評估應用程式或服務的新版本。測試並接受新部署後，使用者流量將轉移至綠色 Auto Scaling 群組。然後，您可以在部署成功後刪除藍色群組。

當新 Auto Scaling 群組作為藍/綠色部署的一部分建立時，可以自動將每個群組的指標歷史記錄包含在預測擴展政策中，而無需變更其指標規範。如需詳細資訊，請參閱 AWS 運算部落格上的[將 EC2 Auto Scaling 預測擴展政策與藍/綠部署](https://aws.amazon.com/blogs/compute/retaining-metrics-across-blue-green-deployment-for-predictive-scaling/)搭配使用。

以下範例政策示範如何執行此操作。在此範例中，政策使用 Amazon EC2 發出的 `CPUUtilization` 指標。它使用 Amazon EC2 Auto Scaling `GroupInServiceInstances` 指標和數學表達式來計算每個執行個體的擴展指標值。它還指定了容量指標規範以取得 `GroupInServiceInstances` 指標。

搜尋表達式會根據指定的搜尋條件尋找多個 Auto Scaling 群組中執行個體的 `CPUUtilization`。如果您稍後建立了與相同搜尋條件相符的新 Auto Scaling 群組，則會自動包含新 Auto Scaling 群組中執行個體的 `CPUUtilization`。

```
aws autoscaling put-scaling-policy --policy-name my-blue-green-predictive-scaling-policy \
  --auto-scaling-group-name my-asg --policy-type PredictiveScaling \
  --predictive-scaling-configuration file://config.json
{
  "MetricSpecifications": [
    {
      "TargetValue": 25,
      "CustomizedScalingMetricSpecification": {
        "MetricDataQueries": [
          {
            "Id": "load_sum",
            "Expression": "SUM(SEARCH('{AWS/EC2,AutoScalingGroupName} MetricName=\"CPUUtilization\" ASG-myapp', 'Sum', 300))",
            "ReturnData": false
          },
          {
            "Id": "capacity_sum",
            "Expression": "SUM(SEARCH('{AWS/AutoScaling,AutoScalingGroupName} MetricName=\"GroupInServiceInstances\" ASG-myapp', 'Average', 300))",
            "ReturnData": false
          },
          {
            "Id": "weighted_average",
            "Expression": "load_sum / capacity_sum",
            "ReturnData": true
          }
        ]
      },
      "CustomizedLoadMetricSpecification": {
        "MetricDataQueries": [
          {
            "Id": "load_sum",
            "Expression": "SUM(SEARCH('{AWS/EC2,AutoScalingGroupName} MetricName=\"CPUUtilization\" ASG-myapp', 'Sum', 3600))"
          }
        ]
      },
      "CustomizedCapacityMetricSpecification": {
        "MetricDataQueries": [
          {
            "Id": "capacity_sum",
            "Expression": "SUM(SEARCH('{AWS/AutoScaling,AutoScalingGroupName} MetricName=\"GroupInServiceInstances\" ASG-myapp', 'Average', 300))"
          }
        ]
      }
    }
  ]
}
```

該範例會傳回政策的 ARN。

```
{
  "PolicyARN": "arn:aws:autoscaling:region:account-id:scalingPolicy:2f4f5048-d8a8-4d14-b13a-d1905620f345:autoScalingGroupName/my-asg:policyName/my-blue-green-predictive-scaling-policy",
  "Alarms": []
}
```

# 預測擴展政策中自訂指標的考量事項
<a name="custom-metrics-troubleshooting"></a>

如果使用自訂指標時出現問題，建議您執行以下操作：
+ 如果提供了錯誤訊息，則請閱讀該訊息，並在可行的狀況下解決其報告的問題。
+ 如果嘗試在藍色/綠色部署案例中使用搜尋表達式時出現問題，則請首先確保您了解如何建立查找部分相符而不是完全相符的搜尋表達式。此外，請檢查查詢是否僅尋找執行特定應用程式的 Auto Scaling 群組。如需搜尋表達式語法的詳細資訊，請參閱《Amazon CloudWatch 使用者指南》**中的 [CloudWatch 搜尋表達式語法](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/search-expression-syntax.html)。
+ 如果未事先驗證表達式，則 [put-scaling-policy](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/put-scaling-policy.html) 命令會在建立擴展政策時對其進行驗證。但是，此命令可能無法識別偵測到之錯誤的確切原因。若要修正這些問題，請對您收到之 [get-metric-data](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/cloudwatch/get-metric-data.html) 命令請求回應中的錯誤進行疑難排解。您也可以從 CloudWatch 主控台對表達式進行疑難排解。
+ 當您在主控台中檢視 **Load** (負載) 和 **Capacity** (容量) 圖表時，**Capacity** (容量) 圖表可能不會顯示任何資料。要確保圖表具有完整的資料，請確保始終如一地為 Auto Scaling 群組啟用群組指標。如需詳細資訊，請參閱[啟用 Auto Scaling 群組指標 (主控台)](ec2-auto-scaling-metrics.md#as-enable-group-metrics)。
+ 當應用程式在其生命週期內於不同的 Auto Scaling 群組中執行時，容量指標規範僅對藍/綠色部署有用。此自訂指標允許您提供多個 Auto Scaling 群組的總容量。預測擴展使用此選項來顯示主控台 **Capacity** (容量) 圖表中的歷史資料。
+ 如果 `MetricDataQueries` 自己指定了 SEARCH() 函數 (在無需 SUM() 等數學函數的狀況下)，則您必須為 `ReturnData` 指定 `false`。這是因為搜尋表達式可能會傳回多個時間序列，並且基於表達式的指標規範只能傳回一個時間序列。
+ 搜尋表達式中涉及的所有指標均應具有相同的解析度。

## 限制
<a name="custom-metrics-limitations"></a>
+ 您可以在一個指標規範中查詢最多 10 個指標的資料點。
+ 在此限制之下，一個表達式計為一個指標。