

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

# 搭配 CloudWatch 指標使用數學表達式
<a name="using-metric-math"></a>

指標數學可讓您能夠查詢多個 CloudWatch 指標，並使用數學表達式根據這些指標來建立新的時間序列。您可以在 CloudWatch 主控台視覺化產生的時間序列，並將其新增至儀表板。使用 AWS Lambda 指標做為範例，您可以將`Errors`指標除以`Invocations`指標以取得錯誤率。然後將產生的時間序列新增至 CloudWatch 儀表板上的圖形。

您也可以使用 `GetMetricData` API 操作，以程式設計方式執行指標數學。如需詳細資訊，請參閱 [GetMetricData](https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_GetMetricData.html)。

## 將數學運算式新增至 CloudWatch 圖形
<a name="adding-metrics-expression-console"></a>

您可以將數學表達式新增到 CloudWatch 儀表板上的圖形。每個圖形最多可使用 500 個指標和表達式，因此您只能在圖形有 499 個以下的指標時新增數學表達式。即使圖形上未顯示所有指標， 也適用此情況。

**新增數學表達式到圖形**

1. 透過 [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/) 開啟 CloudWatch 主控台。

1. 建立或編輯圖形。圖形中至少需要有一個指標。

1. 選擇 **Graphed metrics (圖形化指標)**。

1. 選擇 **Math expression (數學運算式)**、**Start with empty expression (以空表達式開始)**。表達式出現新行。

1. 在新行的 **Details (詳細資訊)** 欄下，輸入數學運算式。**指標數學語法和函數**區段中的表格會列出您可以在運算式中使用的函數。

   若要使用指標或另一個表達式的結果做為此表達式公式的一部分，請使用 **Id** 欄中顯示的值：例如 **m1\$1m2** 或 **e1-MIN(e1)**。

   您可以變更 **Id** 的值。它可以包含數字、字母和底線，而且必須以小寫字母開始。將 **Id** 的值變更為較有意義的名稱，也可以讓圖形更好了解：例如，將 **m1** 和 **m2** 變更為 **errors (錯誤)** 和 **requests (請求)**。
**提示**  
選擇 **Math Expression (數學運算式)** 旁的向下箭頭，以查看建立運算式時可以使用的支援函數清單。

1. 針對表達式的 **Label (標記)** 欄，輸入描述表達式計算內容的名稱。

   如果表達式的結果是一系列時間序列，這些時間序列的每一個都會以不同的顏色顯示在使用不同行的圖形上。圖形底下是一個圖例代表在圖形中每一行。對於會產生多個時間序列的單一表達式，那些時間序列的圖例標題格式為 ***Expression-Label Metric-Label***。例如，若圖形包含具**錯誤**標籤和運算式 **FILL(METRICS(), 0)** 的指標，其具有標籤 **Filled With 0: (填充 0)**，圖例中的一行是 **Filled With 0: Errors (填充 0：錯誤)**。您可以將*表達式標籤*設為空白，讓圖例只顯示原始的指標標籤。

   當一個表達式在圖形上產生時間序列的陣列時，您就無法變更這些時間序列各自使用的顏色。

1. 新增所需的運算式之後，您可以隱藏一些原始指標以簡化圖形。若要隱藏指標或運算式，請清除 **Id** 欄位左側的核取方塊。

## 指標數學語法和函數
<a name="metric-math-syntax"></a>

以下章節說明可用於指標數學的函數。所有函數都必須為大寫 (如 **AVG**)，而所有指標和數學表達式的 **Id** 欄位則必須以小寫字母開頭。

任何數學運算式的最終結果必須是單一時間序列，或一系列的時間序列。有些函數會產生純量數。您可以使用這些功能較大的函數，其最終會產生時間序列。例如，採用單一時間序列的 **AVG** 會產生純量數，所以它無法成為最終的表達式結果。但您可以在函數 **m1-AVG(m1)** 中使用它來顯示每一個別資料點，和該時間序列平均值之間差異的時間序列。

### 資料類型縮寫
<a name="metric-math-syntax-datatypes"></a>

有些數僅對於特定類型的資料有效。函數表會使用以下清單中的縮寫表示每個函數中支援的資料類型：
+ **S ** 代表純量數，例如 2、-5 或 50.25。
+ **TS** 是時間序列 (一段時間後的一系列單個 CloudWatch 指標值)：例如，過去三天中執行個體 `i-1234567890abcdef0` 的 `CPUUtilization` 指標。
+ **TS [] ** 是一系列的時間序列，例如多個指標的時間序列。
+ **字串[]** 是字串陣列。

### METRICS() 函數
<a name="metric-math-syntax-metrics-function"></a>

** METRICS () ** 函數會傳回請求中所有的指標。數學表達式不包含在內。

您可以使用較大運算式內的 **METRICS()**，其會產生單一時間序列，或一系列的時間序列。例如，運算式 **SUM(METRICS())** 會傳回一個時間序列 (TS)，其為所有圖表化指標值的總和。**METRICS()/100** 會傳回一系列的時間序列，其每一個都是時間序列顯示每個除以 100 之其中一個指標資料點。

您可以使用 **METRICS()** 函數和字串，僅傳回圖表化指標，其中在 **Id** 欄位中包含該字串。例如，運算式 **SUM(METRICS("errors"))** 會傳回一個時間序列，其為 **Id** 欄位中所有含「errors」的圖表化指標值的總和。您也可以使用 **SUM([METRICS(“4xx”), METRICS(“5xx”)])** 來符合多個字串。

### 基本算術函數
<a name="metric-math-syntax-arithmetic"></a>

下表列出受支援的基本算術函數。時間序列的遺失值視為 0。如果資料點的值會導致函數除以零，資料點會被捨棄。


| 作業 | 引數 | 範例 | 
| --- | --- | --- | 
|  算術運算子: \$1 - \$1 / ^ |  S, S S, TS TS, TS S, TS[] TS, TS[]  |  PERIOD(m1)/60 **5 \$1 m1** **m1 - m2** **SUM(100/[m1, m2])** **AVG(METRICS())** **METRICS()\$1100**  | 
|  一元減法 -  |  S TS TS[]  |  **-5\$1m1** **-m1** **SUM(-[m1, m2])**  | 

### 比較與邏輯運算子
<a name="metric-math-syntax-operators"></a>

您可以使用比較和邏輯運算子搭配任一對時間序列或一對單一純量值。在您使用一對時間序列的比較運算子時，運算子會傳回一個時間序列，其中每個資料點都是 0 (false) 或 1 (true)。如果您在一對純量值使用比較運算子，則傳回單一純量值 (0 或 1)。

當兩個時間序列之間使用比較運算子，且只有一個時間序列具有特定時間戳記的值時，函數會將另一個時間序列中的遺失值視為 **0**。

您可以將邏輯運算子與比較運算子搭配使用，以建立更複雜的函數。

下表列出支援的運算子。


| 運算子類型 | 支援的運算子 | 
| --- | --- | 
|  比較運算子 |  == \$1= <= >= < >  | 
|  邏輯運算子 |  AND 或 && OR 或 \$1\$1  | 

如要查看這些運算子是如何使用的，假設我們有兩個時間序列：**metric1** 值為 `[30, 20, 0, 0]`，而 **metric2** 值為 `[20, -, 20, -]`，其中 `-` 表示該時間戳記沒有值。


| 表達式 | Output | 
| --- | --- | 
|  **(metric1 < metric2)** |  **0, 0, 1, 0**  | 
|  **(metric1 >= 30)** |  **1, 0, 0, 0**  | 
|  **(metric1 > 15 AND metric2 > 15)** |  **1, 0, 0, 0**  | 

### 支援指標數學的函數
<a name="metric-math-syntax-functions-list"></a>

下表說明您可以用於數學運算式的函數。請使用大寫字母輸入所有函數。

任何數學運算式的最終結果必須是單一時間序列，或一系列的時間序列。以下各節中有些函數會產生純量數。您可以使用這些功能較大的函數，其最終會產生時間序列。例如，採用單一時間序列的 **AVG** 會產生純量數，所以它無法成為最終的表達式結果。但您可以在函數 **m1-AVG(m1)** 中使用它來顯示每一個別資料點，和該資料點平均值之間差異的時間序列。

在下表中，**Examples (範例)** 欄的每個範例是產生單一時間序列或一系列時間序列的運算式。這些範例顯示，傳回純量數的函數，如何當做會產生單一時間序列之有效運算式的一部分來使用。


| 函式 | 引數 | 傳回類型**\$1** | Description | 範例 | 支援跨帳戶？ | 
| --- | --- | --- | --- | --- | --- | 
|  **ABS** |  TS TS[]  |  TS TS[]  | 傳回每個資料點的絕對值。 |  **ABS(m1-m2)** **MIN(ABS([m1, m2]))** **ABS(METRICS())**  | ✓ | 
|  **ANOMALY\$1DETECTION\$1BAND** |  TS TS、S  |  TS[]  | 傳回指定指標適用的異常偵測範圍。此範圍包含兩個時間序列，一個代表指標「正常」預期值的上限，另一個代表下限。此函數可能會使用兩個引數。第一個是要建立範圍的指標 ID。第二個引數是用於範圍的標準偏差數字。如果您沒有指定此引數，則會使用預設值 2。如需詳細資訊，請參閱[使用 CloudWatch 異常偵測](CloudWatch_Anomaly_Detection.md)。 |  **ANOMALY\$1DETECTION\$1BAND(m1)** **ANOMALY\$1DETECTION\$1BAND(m1,4)**  |  | 
|  **AVG** |  TS TS[]  |  S TS  | 單一時間序列的 **AVG** 會傳回一個純量，代表指標中所有資料點的平均值。一系列的時間序列的 **AVG** 會傳回單一時間序列。遺失值視為 0。  如果您希望函數傳回純量，建議您不要在 CloudWatch 警示中使用此函數。例如 `AVG(m2)`。當警示評估是否變更狀態時，CloudWatch 嘗試擷取更高於指定數量的資料點 Evaluation Periods (評估期間)。當請求額外的資料時，此函數會有所不同。 若要將此功能與警示搭配使用，尤其是有「自動擴展」動作的警示，建議您將警示設定為使用 N 個資料點中的 M 個，其中 M < N。   |  **SUM([m1,m2])/AVG(m2)** **AVG(METRICS())**  | ✓ | 
|  **CEIL** |  TSTS[]  |  TS TS[]  | 傳回每個指標的上限。上限是大於或等於每個值的最小整數。 |  **CEIL(m1)** **CEIL(METRICS())** **SUM(CEIL(METRICS()))**  | ✓ | 
|  **DATAPOINT\$1COUNT** |  TS TS[]  |  S TS  | 傳回所報告值的資料點計數。這對於計算稀疏指標的平均值非常有用。  建議您不要在 CloudWatch 警示中使用此函數。當警示評估是否變更狀態時，CloudWatch 嘗試擷取更高於指定數量的資料點 Evaluation Periods (評估期間)。當請求額外的資料時，此函數會有所不同。  |  **SUM(m1) / DATAPOINT\$1COUNT(m1)** **DATAPOINT\$1COUNT(METRICS())**  | ✓ | 
|  **DB\$1PERF\$1INSIGHTS** |  字串, 字串, 字串 字串、字串、字串[]  |  TS (如果指定單一字串) TS[] (如果指定字串陣列)  | 傳回 Amazon Relational Database Service 和 Amazon DocumentDB (with MongoDB compatibility) 這類資料庫的 Performance Insights 計數器指標。此函數會傳回您透過直接查詢 Performance Insights API 的方式可以取得的相同資料量。您可以在 CloudWatch 中使用這些指標來繪製和建立警示。  使用此函數時，必須指定資料庫的唯一資料庫資源 ID。這與資料庫識別碼不同。若要在 Amazon RDS 主控台中查找資料庫資源 ID，請選擇資料庫執行個體來查看其詳細資訊。然後選擇 **Configuration (組態)** 標籤。**資源 ID** 顯示在**組態**區段中。  **DB\$1PERF\$1INSIGHTS** 也引進了次分鐘間隔的 `DBLoad` 指標。 使用此函數擷取的 Performance Insights 指標不會儲存在 CloudWatch 中。因此，某些 CloudWatch 功能 (例如跨帳戶可觀測性、異常偵測、指標串流、指標瀏覽器和 Metric Insights) 便無法搭配您透過 **DB\$1PERF\$1INSIGHTS** 擷取的 Performance Insights 指標使用。 使用 **DB\$1PERF\$1INSIGHTS** 函式的單一請求可以擷取下列數量的資料點。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AmazonCloudWatch/latest/monitoring/using-metric-math.html) **DB\$1PERF\$1INSIGHTS** 函數僅支援下列週期長度： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AmazonCloudWatch/latest/monitoring/using-metric-math.html) 如需 Amazon RDS Performance Insights 計數器指標的更多資訊，請參閱 [Performance Insights 計數器指標](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_PerfInsights_Counters.html)。 如需 Amazon DocumentDB Performance Insights 計數器指標的更多資訊，請參閱[適用於計數器指標的 Performance Insights](https://docs.aws.amazon.com/documentdb/latest/developerguide/performance-insights-counter-metrics.html)。  由 **DB\$1PERF\$1INSIGHTS** 擷取的次分鐘精細度高解析度指標，僅適用於 **DBLoad** 指標，或者如果您已以較高解析度啟用「增強型監控」，則適用於作業系統指標。如需 Amazon RDS 增強型監控的更多資訊，請參閱[使用增強型監控來監控 OS 指標](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_Monitoring.OS.html)。 您可以使用 **DB\$1PERF\$1INSIGHTS** 函數建立高解析度警示，最長時間範圍為三小時。您可以使用 CloudWatch 主控台，使用 **DB\$1PERF\$1INSIGHTS** 函數為任何時間範圍繪製擷取到的指標。  |  **DB\$1PERF\$1INSIGHTS(‘RDS’, ‘db-ABCDEFGHIJKLMNOPQRSTUVWXY1’, ‘os.cpuUtilization.user.avg’)** **DB\$1PERF\$1INSIGHTS(‘DOCDB, ‘db-ABCDEFGHIJKLMNOPQRSTUVWXY1’, [‘os.cpuUtilization.idle.avg’, ‘os.cpuUtilization.user.max’])**  |  | 
|  **DIFF** |  TSTS[]  |  TS TS[]  | 傳回時間序列中每個值與該時間序列的上述值之間的差異。 |  **DIFF(m1)**  | ✓ | 
|  **DIFF\$1TIME** |  TSTS[]  |  TS TS[]  | 傳回時間序列中每個值的時間戳記與該時間序列的上述值之間的時間戳記之間的差異，以秒為單位。 |  **DIFF\$1TIME(METRICS())**  | ✓ | 
|  **FILL** |  TS, [S \$1 REPEAT \$1 LINEAR] TS[], [TS \$1 S \$1 REPEAT \$1 LINEAR]  |  TS TS[]  | 填入時間序列的遺失值。有幾個選項可用來做為遺失值的填充物： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AmazonCloudWatch/latest/monitoring/using-metric-math.html)  當您在警示中使用此函數時，如果您的指標發布略有延遲，且最近的一分鐘從來沒有資料，則可能會遇到問題。在此例中，**FILL** 將遺失的資料點替換為請求值。這會導致指標的最新資料點一律是 FILL 值，這可能會導致警示卡在 OK 狀態或 ALARM 狀態。您可以使用「N 中取 M」警示來解決此問題。如需詳細資訊，請參閱[警示評估](alarm-evaluation.md)。  |  **FILL(m1,10)** **FILL(METRICS(), 0)** **FILL(METRICS(), m1)** **FILL(m1, MIN(m1))** **FILL (m1, REPEAR)** **FILL(METRICS(), LINEAR)**  | ✓ | 
|  **FIRST** **LAST** |  TS[]  |  TS  | 傳回從時間序列陣列的第一個或最後一個時間序列。與 **SORT** 函數一起使用時，這非常實用。它也可以用來從 **ANOMALY\$1DETECTION\$1BAND** 函數取得高和低閾值。 |  **IF(FIRST(SORT(METRICS(), AVG, DESC))>100, 1, 0)** 查看陣列的頂部指標，該陣列由 AVG 排序。然後，它會針對每個資料點傳回 1 或 0 (取決於該資料點值是否大於 100)。 **LAST(ANOMALY\$1DETECTION\$1BAND(m1))** 會傳回異常預測帶的上限。  | ✓ | 
|  **FLOOR** |  TSTS[]  |  TS TS[]  | 傳回每個指標的下限。下限是小於或等於每個值的最大整數。 |  **FLOOR(m1)** **FLOOR(METRICS())**  | ✓ | 
|  **IF** |  **IF** 運算式  |  TS  | 使用 **IF** 與比較運算子一起篩選出時間序列的資料點，或建立由多個定序時間序列組成的混合時間序列。如需詳細資訊，請參閱[使用 IF 表達式](#using-IF-expressions)。 | 如需範例，請參閱 [使用 IF 表達式](#using-IF-expressions)。  | ✓ | 
|  **INSIGHT\$1RULE\$1METRIC** |  **INSIGHT\$1RULE\$1METRIC(ruleName, metricName)**  |  TS  | 使用 **INSIGHT\$1RULE\$1METRIC** 來從 Contributor Insights 內的規則擷取統計資料。如需詳細資訊，請參閱[在 CloudWatch 中繪製規則產生的指標在 Contributor Insights 指標資料上設定警示](ContributorInsights-GraphReportData.md)。 |   |  | 
|  **LAMBDA** |  **LAMBDA(LambdaFunctionName [, optional-arg]\$1)**  |  TS TS[]  | 呼叫 Lambda 函數，從非 CloudWatch 的資料來源中查詢指標。如需詳細資訊，請參閱[如何將引數傳遞給 Lambda 函數](CloudWatch_MultiDataSources-Custom-Use.md#MultiDataSources-Connect-Custom-Lambda-arguments)。 |   |  | 
|  **LOG** |  TS TS[]  |  TS TS[]  | 時間序列的 **LOG** 會傳回時間序列中每個值的自然對數值。 |  **LOG(METRICS())**  | ✓ | 
|  **LOG10** |  TS TS[]  |  TS TS[]  | 時間序列的 **LOG10** 會傳回時間序列中每個值的以 10 為底的對數值。 |  **LOG10(m1)**  | ✓ | 
|  **MAX** |  TS TS[]  |  S TS  | 單一時間序列的 **MAX** 會傳回一個純量，代表指標中所有資料點的最大值。 如果您輸入時間序列陣列，**MAX** 函式會建立並傳回時間序列，其中包含每個資料點的最大值，包括用作輸入的時間序列。  如果您希望函數傳回純量，建議您不要在 CloudWatch 警示中使用此函數。例如，`MAX(m2)` 當警示評估是否變更狀態時，CloudWatch 嘗試擷取更高於指定數量的資料點 Evaluation Periods (評估期間)。當請求額外的資料時，此函數會有所不同。  |  **MAX(m1)/m1** **MAX(METRICS())**  | ✓ | 
|  **METRIC\$1COUNT** |  TS[]  |  S  | 傳回時間序列陣列的指標數。 |  **m1/METRIC\$1COUNT(METRICS())**  | ✓ | 
|  **METRICS** |  null string  |  TS[]  | **METRICS()** 函數會傳回請求中所有的 CloudWatch 指標。數學表達式不包含在內。 您可以使用較大運算式內的 **METRICS()**，其會產生單一時間序列，或一系列的時間序列。 您可以使用 **METRICS()** 函數和字串，僅傳回圖表化指標，其中在 **Id** 欄位中包含該字串。例如，運算式 **SUM(METRICS("errors"))** 會傳回一個時間序列，其為 **Id** 欄位中所有含「errors」的圖表化指標值的總和。您也可以使用 **SUM([METRICS(“4xx”), METRICS(“5xx”)])** 來符合多個字串。 |  **AVG(METRICS())** **SUM(METRICS("errors"))**  | ✓ | 
|  **MIN** |  TS TS[]  |  S TS  | 單一時間序列的 **MIN** 會傳回一個純量，代表指標中所有資料點的最小值。 如果您輸入時間序列陣列，**MIN** 函式會建立並傳回時間序列，其中包含每個資料點的最小值，包括用於輸入的時間序列。 如果您輸入時間序列陣列，**MIN** 函式會建立並傳回時間序列，其中包含每個資料點的最小值，包括用於輸入的時間序列。  如果您希望函數傳回純量，建議您不要在 CloudWatch 警示中使用此函數。例如，`MIN(m2)` 當警示評估是否變更狀態時，CloudWatch 嘗試擷取更高於指定數量的資料點 Evaluation Periods (評估期間)。當請求額外的資料時，此函數會有所不同。  |  **m1-MIN(m1)** **MIN(METRICS())**  | ✓ | 
|  **MINUTE** **HOUR** **DAY** **DATE** **MONTH** **YEAR** **EPOCH** |  TS  |  TS  | 這些函數採用時間序列的期間和範圍，並傳回一個新的非稀疏時間序列，其中每個值均根據其時間戳記。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AmazonCloudWatch/latest/monitoring/using-metric-math.html) |  **MINUTE(m1)** **IF(DAY(m1)<6,m1)** 只會傳回平日 (星期一至星期五) 的指標。 **IF(MONTH(m1) == 4,m1)** 只會傳回 4 月份發布的指標。  | ✓ | 
|  **PERIOD** |  TS  |  S  | 傳回指標的期間，以秒為單位。有效輸入為指標，而不是其他運算式的結果。 |  **m1/PERIOD(m1)**  | ✓ | 
|  **RATE** |  TS TS[]  |  TS TS[] | 傳回每秒的指標變更速率。此計算為最新資料點值和之前的資料點值之間的差異值，再除以兩個值之間的時間差異 (以秒為單位)。  在含稀疏資料的指標上，對使用 RATE 函式的表達式設定警示可能產生不可預測的行為，因為評估警示時擷取的資料點範圍，可能因資料點上次發布的時間而有所不同。  |  **RATE(m1)** **RATE(METRICS())**  | ✓ | 
|  **REMOVE\$1EMPTY** |  TS[]  |  TS[] | 從時間序列陣列中刪除沒有資料點的任何時間序列。結果是時間序列的陣列，其中每個時間序列至少包含一個資料點。  建議您不要在 CloudWatch 警示中使用此函數。當警示評估是否變更狀態時，CloudWatch 嘗試擷取更高於指定數量的資料點 Evaluation Periods (評估期間)。當請求額外的資料時，此函數會有所不同。  |  **REMOVE\$1EMPTY(METRICS())**   | ✓ | 
|  **RUNNING\$1SUM** |  TS TS[]  |  TS TS[]  | 傳回與原始時間序列中的值的執行總和的時間序列。  建議您不要在 CloudWatch 警示中使用此函數。當警示評估是否變更狀態時，CloudWatch 嘗試擷取更高於指定數量的資料點 Evaluation Periods (評估期間)。當請求額外的資料時，此函數會有所不同。  |  **RUNNING\$1SUM([m1,m2])**  | ✓ | 
|  **SEARCH** |  搜尋表達式  |  一或多個 TS  | 傳回一或多個符合您指定之搜尋條件的時間序列。**SEARCH** 函數能讓您將多個相關的時間序列新增到有一個表達式的圖形。圖形會動態更新，以包含後續新增的新指標，及符合搜尋條件。如需詳細資訊，請參閱[在圖形中使用搜尋運算式](using-search-expressions.md)。 您無法根據 **SEARCH** 表達式建立警示。這是因為搜尋表達式會傳回多個時間序列，並且基於數學表達式的警示只能監看一個時間序列。 如果您登入 CloudWatch 跨帳戶可觀測性中的監控帳戶，**SEARCH** 函式會尋找來源帳戶和監控帳戶中的指標。 |   | ✓ | 
|  **SERVICE\$1QUOTA** |  為用量指標的 TS  |  TS  | 傳回指定用量指標的服務配額。您可以使用此項目來視覺化您目前用量與配額相較的情況，以及設定警示，在您接近配額時發出警告。如需詳細資訊，請參閱[AWS 用量指標](CloudWatch-Service-Quota-Integration.md)。 |   | ✓ | 
|  **SLICE** |  (TS[], S, S) 或 (TS[], S)  |  TS[] TS  | 擷取時間序列陣列的一部分。這與 **SORT** 結合時特別實用。例如，您可以從時間序列陣列中排除最上層的結果。 您可以使用兩個純量引數來定義一組要傳回的時間序列。這兩個純量定義要傳回的數列開始 (包括) 和結束 (不包括)。該陣列是零索引的，因此陣列中的第一個時間序列是時間序列 0。或者，您可以只指定一個值，且 CloudWatch 傳回以該值開始的所有時間序列。  | **SLICE(SORT(METRICS(), SUM, DESC), 0, 10)** 從要求中具有最高 SUM 值的指標陣列傳回 10 個指標。 **SLICE(SORT(METRICS(), AVG, ASC), 5)** 按 AVG 統計資料排序指標的陣列，然後傳回除了具有最低 AVG 的 5 之外的所有時間序列。  | ✓ | 
|  **SORT** |  (TS[], FUNCTION, SORT\$1ORDER) (TS[], FUNCTION, SORT\$1ORDER, S)  |  TS[]  | 根據您指定的函數排序時間序列的陣列。您使用的函數可以是 **AVG**、**MIN**、**MAX** 或 **SUM**。排序順序可以是 **ASC** 升冪 (最低值為先排序) 或 **DESC** 以先排序較高的值。您可以選擇性在排序順序後指定數字，以做為限制。例如，指定限制為 5 只會傳回排序的前 5 個時間序列。 當此數學函數顯示在圖形上時，也會對圖形中每個指標的標籤進行排序和編號。  | **SORT(METRICS(), AVG, DESC, 10)** 計算每個時間序列的平均值，在排序開始時使用最高值的時間序列進行排序，並僅傳回具有最高平均值的 10 個時間序列。 **SORT(METRICS(), MAX, ASC)** 由最大統計指標的陣列排序，然後按升冪排列傳回所有值。  | ✓ | 
|  **STDDEV** |  TS TS[]  |  S TS  | 單一時間序列的 **STDDEV** 會傳回一個純量，代表指標中所有資料點的標準偏差。一系列的時間序列的 **STDDEV** 會傳回單一時間序列。  如果您希望函數傳回純量，建議您不要在 CloudWatch 警示中使用此函數。例如，`STDDEV(m2)` 當警示評估是否變更狀態時，CloudWatch 嘗試擷取更高於指定數量的資料點 Evaluation Periods (評估期間)。當請求額外的資料時，此函數會有所不同。  |  **m1/STDDEV(m1)** **STDDEV(METRICS())**  | ✓ | 
|  **SUM** |  TS TS[]  |  S TS  | 單一時間序列的 **SUM** 會傳回一個純量，代表指標中所有資料點的值總和。一系列的時間序列的 **SUM** 會傳回單一時間序列。  如果您希望函數傳回純量，建議您不要在 CloudWatch 警示中使用此函數。例如 `SUM(m1)`。當警示評估是否變更狀態時，CloudWatch 嘗試擷取更高於指定數量的資料點 Evaluation Periods (評估期間)。當請求額外的資料時，此函數會有所不同。  |  **SUM(METRICS())/SUM(m1)** **SUM([m1,m2])** **SUM(METRICS("errors"))/SUM(METRICS("requests"))\$1100**  | ✓ | 
|  **TIME\$1SERIES** |  S  |  TS  | 傳回非稀疏時間序列，其中會將每個值設定為純量引數。 |  **TIME\$1SERIES(MAX(m1))** **TIME\$1SERIES(5\$1AVG(m1))** **TIME\$1SERIES(10)**  | ✓ | 

**\$1**使用僅傳回純量數的函數是無效的，因為所有運算式的最終結果必須是單一時間序列或一系列的時間序列。反之，使用這些函數為傳回時間序列的較大運算式的一部分時。

## 使用 IF 表達式
<a name="using-IF-expressions"></a>

使用 **IF** 與比較運算子一起篩選出時間序列的資料點，或建立由多個定序時間序列組成的混合時間序列。

**IF** 會使用以下引數：

```
IF(condition, trueValue, falseValue)
```

如果條件資料點的值為 0，條件判斷值為 FALSE；如果條件的值為任何其他值 (無論該值為正或負)，則判斷值為 TRUE。如果條件是一個時間序列，它會分別評估每個時間戳記。

以下所列為有效的語法。對於其中的每個語法，輸出是一個單一的時間序列。
+ **IF(TS *比較運算子* S, S \$1 TS, *S \$1 TS*)**
**注意**  
如果 `TS comparison operator S` 是 TRUE，但 `metric2` 沒有對應的資料點，則輸出將為 0。
+ **IF(TS, TS, *TS*)**
+ **IF(TS, S, *TS*)**
+ **IF(TS, TS, S)**
+ **IF(TS, S, S)**
+ **IF(S, TS, *TS*)**

下列各節提供這些語法的詳細資訊和範例。

**IF(TS *比較運算子* S, scalar2 \$1 metric2, scalar3 \$1 metric3)**

對應的輸出時間序列值：
+ 具有 **scalar2** 或 **metric2** 的值，若 **TS *Comparison Operator* S** 為 TRUE
+ 具有 **scalar3** 或 **metric3** 的值，若 **TS *Comparison Operator* S** 為 FALSE
+ 如果 **TS* 比較運算子***為 TRUE，且 **metric2** 中不存在對應的資料點，值為 **0**。
+ 如果 **TS* 比較運算子***為 FALSE，且 **metric3** 中不存在對應的資料點，值為 **0**。
+ 是一個空的時間序列，如果對應的資料點不存在於 **metric3** 中，或者如果運算式中省略了 **scalar3**/**metric3**

**IF(metric1, metric2, *metric3*)**

對於 **metric1** 的每個資料點，對應的輸出時間序列值為：
+ 具有 **metric2** 的值，若 **metric1** 的對應資料點為 TRUE。
+ 具有 **metric3** 的值，若 **metric1** 的對應資料點為 FALSE。
+ 具有 **0** 的值，如果 **metric1** 的對應資料點為 TRUE，且 **metric2**中不存在對應的資料點。
+ 如果 **metric1** 的對應資料點為 FALSE 且 **metric3** 中不存在對應的資料點，則 的值為 **0** 
+ 如果 **metric1** 的對應資料點為 FALSE，且 **metric3** 從表達式中省略，則會捨棄。
+ 如果 **metric1** 的對應資料點缺失，則會捨棄。

下表顯示此語法的範例。


| 指標或函數 | 值 | 
| --- | --- | 
|  **(metric1)** |  **[1, 1, 0, 0, -]**  | 
|  **(metric2)** |  **[30, -, 0, 0, 30]**  | 
|  **(metric3)** |  **[0, 0, 20, -, 20]**  | 
|  **IF(metric1, metric2, metric3)** |  **[30, 0, 20, 0, -]**  | 

**IF(metric1, scalar2, metric3)**

對於 **metric1** 的每個資料點，對應的輸出時間序列值為：
+ 具有 **scalar2** 的值，如果度 **metric1** 的對應資料點為 TRUE。
+ 具有 **metric3** 的值，若 **metric1** 的對應資料點為 FALSE。
+ 已捨棄，如果 **metric1** 的對應資料點為 FALSE，並且對應的資料點不存在於 **metric3**，或如果 **metric3** 已從運算式中省略。


| 指標或函數 | 值 | 
| --- | --- | 
|  **(metric1)** |  **[1, 1, 0, 0, -]**  | 
|  **scalar2** |  **5**  | 
|  **(metric3)** |  **[0, 0, 20, -, 20]**  | 
|  **IF(metric1, scalar2, metric3)** |  **[5, 5, 20, -, -]**  | 

**IF(metric1, metric2, scalar3)**

對於 **metric1** 的每個資料點，對應的輸出時間序列值為：
+ 具有 **metric2** 的值，若 **metric1** 的對應資料點為 TRUE。
+ 具有 **scalar3** 的值，若 **metric1** 的對應資料點為 FALSE。
+ 具有 **0** 的值，如果 **metric1** 的對應資料點為 TRUE，且 **metric2**中不存在對應的資料點。
+ 如果 **metric1** 中不存在對應資料點，則會捨棄。


| 指標或函數 | 值 | 
| --- | --- | 
|  **(metric1)** |  **[1, 1, 0, 0, -]**  | 
|  **(metric2)** |  **[30, -, 0, 0, 30]**  | 
|  **scalar3** |  **5**  | 
|  **IF(metric1, metric2, scalar3)** |  **[30, 0, 5, 5, -]**  | 

**IF(scalar1, metric2, *metric3*)**

對應的輸出時間序列值：
+ 具有 **metric2** 的值，如果 **scalar1** 為 TRUE。
+ 具有 **metric3** 的值，如果 **scalar1** 為 FALSE。
+ 是一個空的時間序列，如果從運算式省略 **metric3**。

### IF 表達式的使用案例範例
<a name="using-IF-expressions-use-cases"></a>

下列範例說明 **IF** 函數的可能用途。
+ 若只要顯示指標的低值：

  **IF(metric1<400, metric1)**
+ 若要將指標中的每個資料點變更為兩個值之一，以顯示原始指標的相對高低：

  **IF(metric1<400, 10, 2)**
+ 若要針對延遲超過閾值的每個時間戳記顯示 1，並針對所有其他資料點顯示 0：

  **IF(latency>threshold, 1, 0)**

### 使用指標數學搭配 GetMetricData API 作業
<a name="using-metrics-expression-api"></a>

您可以使用 `GetMetricData` 執行數學運算式的計算，也可以在一次的 API 呼叫中也擷取大批量的指標資料。如需詳細資訊，請參閱 [GetMetricData](https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_GetMetricData.html)。

## 指標數學上的異常偵測
<a name="using-anomaly-detection-on-metric-math"></a>

指標數學上的異常偵測是一項功能，您可以使用它根據指標數學表達式的單一指標和指標輸出來建立異常偵測警示。您可以使用這些表達式來建立可視化異常偵測頻段的圖形。此功能支援基本算術函數、比較和邏輯運算子，以及大多數其他函數。

**指標數學上的異常偵測不支援下列函數：**
+ 在同一行中包含多個 **ANOMALY\$1DETECTION\$1BAND** 的表達式。
+ 包含 10 個以上指標或數學表達式的表達式。
+ 包含 **METRICS** (指標) 表達式的表達式。
+ 包含 **SEARCH** (搜尋) 函數的表達式。
+ 使用 **DP\$1PERF\$1INSIGHTS** 函數的運算式。
+ 將指標與不同期間搭配使用的表達式。
+ 使用超過一小時的期間作為輸入的表達式。
+ 使用高解析度指標作為輸入的表達式。

如需此功能的詳細資訊，請參閱*《Amazon CloudWatch 使用者指南》*中的[使用 CloudWatch 異常偵測](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Anomaly_Detection.html#anomaly_detection_on_metric_math)。