

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

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

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

**Topics**
+ [了解指標數學](#custom-metrics-metric-math)
+ [使用指標數學結合指標的 Amazon EC2 Auto Scaling 預測擴展政策範例 (AWS CLI)](#custom-metrics-ex2)
+ [藍/綠部署情境中使用的預測擴展政策範例 (AWS CLI)](#custom-metrics-ex3)

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

如果您只想彙總現有指標資料，則 CloudWatch 指標數學可以節省將另一個指標發佈至 CloudWatch 的工作量和成本。您可以使用 AWS 提供的任何指標，也可以使用您在應用程式中定義的指標。

如需詳細資訊，請參閱《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 驗證指標數學表達式是否有效。

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

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

以下是此案例的預測擴展政策範例。它指定了基於 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": []
}
```