

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

# 使用指標查詢選項來查詢 CloudWatch Metrics Insights 資料
<a name="CloudWatch-using-the-metric-query"></a>

**注意**  
Amazon CloudWatch Metrics Insights 處於預覽狀態。CloudWatch Metrics Insights 功能開放給所有 AWS 帳戶。功能可能會有所變更。

 您可以在指標查詢**編輯器**中選擇 `metric query` 模式來查詢 CloudWatch Metrics Insights 資料。

 CloudWatch Metrics Insights 是功能強大的高效能 SQL 查詢引擎，可用來大規模查詢您的指標。這是一個快速、靈活、以 SQL 為基礎的查詢引擎，您可以用來即時識別所有 CloudWatch 指標中的趨勢和模式。它使用 SQL 的方言。如需 Metrics Insights 查詢語法的詳細資訊，請參閱 [查詢語法和關鍵字](#metrics-insights-syntax-keywords)。

## 查詢語法和關鍵字
<a name="metrics-insights-syntax-keywords"></a>

CloudWatch Metrics Insights 使用 SQL 方言。下列範例顯示查詢語法。

```
SELECT FUNCTION(metricName)
FROM namespace | [ SCHEMA(namespace[, labelKey [, ...] ]) ]
     [ WHERE labelKey OPERATOR labelValue [AND|OR|([...])*] [, ...] ]
[ GROUP BY labelKey [, ...]]
[ ORDER BY FUNCTION() [DESC | ASC] ]
[ LIMIT number]
```

 關鍵字不區分大小寫，但識別符區分大小寫。識別符包括指標的名稱、命名空間和維度。

 下表提供查詢關鍵字及其描述。


|  關鍵字  |  Description  | 
| --- | --- | 
|  FUNCTION  |  必要. 指定要使用的彙總函數，並指定要查詢的指標名稱。有效值為AVG、COUNT、MAX、MIN、SUM。 | 
|  MetricName   |  必要. 例如 CPUUtilization。 | 
|  FROM  |  必要. 指定指標的來源。您可以指定包含要查詢之指標的指標命名空間，或 SCHEMA 資料表函數。有些命名空間範例是 AWS/EC2和 AWS/Lambda。 | 
|  SCHEMA  |  （選用） 篩選查詢結果，以僅顯示完全相符的指標，或不相符的指標。 | 
|  WHERE  |  （選用） 篩選結果，以僅顯示符合您指定表達式的指標。例如 WHERE InstanceType \$1= 'c3.4xlarge'。 | 
|  GROUP BY  |  （選用） 將查詢結果分組為多個時間序列。例如 GROUP BY ServiceName。 | 
|  ORDER BY  |  （選用） 指定要傳回的時間序列順序。選項為 ASC和 DESC。 | 
|  LIMIT  |  （選用） 限制要傳回的時間序列數目。 | 

下列是一些範例：
+ 

  ```
  SELECT AVG(CPUUtilization) FROM "AWS/EC2" 
  ```

   符合`AWS/EC2`命名空間中的所有`CPUUtilization`指標、忽略其維度，並傳回單一彙總時間序列。
+ 

  ```
  SELECT AVG(CPUUtilization) FROM SCHEMA("AWS/EC2")
  ```

   僅比對`AWS/EC2`命名空間中未定義任何維度的`CPUUtilization`指標。
+ 

  ```
  SELECT AVG(CPUUtilization) FROM SCHEMA("AWS/EC2", InstanceId)
  ```

   只比對回報給 CloudWatch 的`CPUUtilization`指標，且只有一個維度 `InstanceId`。
+ 

  ```
  SELECT SUM(RequestCount) FROM SCHEMA("AWS/ApplicationELB", LoadBalancer,
  AvailabilityZone)
  ```

   僅處理從 向 CloudWatch 報告的`RequestCount`指標，`AWS/ApplicationELB`只有兩個維度 `LoadBalancer`和 `AvailabilityZone`。

 標籤值必須以單引號括住。

### 逸出字元
<a name="escape-characters"></a>

在查詢中，標籤值一律必須以單引號括住。  例如 `SELECT MAX(CPUUtilization) FROM "AWS/EC2" WHERE AutoScalingGroupName = 'my-production-fleet'`。

 包含字母、數字和底線 (`_`) 以外字元的指標命名空間、指標名稱和標籤索引鍵，必須以雙引號括住。例如 `SELECT MAX("My.Metric")`。如果其中一個包含雙引號本身 （例如 `Bytes"Input"`)，您必須逸出具有反斜線的雙引號，如 所示`SELECT AVG("Bytes\"Input\"")`。如果指標命名空間、指標名稱或標籤索引鍵包含在 Metrics Insights 中保留關鍵字的文字，則這些文字也必須以雙引號括住。例如，如果您的指標名為 `LIMIT`，則您可以使用 `SELECT AVG("LIMIT")`。也可以用雙引號括住任何命名空間、指標名稱或標籤，即使其不包含保留的關鍵字也一樣。

## 建置器模式和程式碼模式
<a name="metrics-insights-query-modes"></a>

您可以在 `Builder` 模式或 `Code` 模式中建立查詢。

**在 `Builder` 模式下建立查詢**

1. 使用上表中的資訊瀏覽並選取指標命名空間、指標名稱、篩選條件、群組和順序選項。

1. 對於每個選項，請從可能的選項清單中選擇。

**在 `Code` 模式下建立查詢**

1. 在程式碼編輯器中寫入您的查詢。

1. 若要執行查詢，請在程式碼編輯器中選擇**執行查詢**。

若要在 `builder` 模式中建立查詢：
+ 使用上表中的資訊瀏覽並選取指標命名空間、指標名稱、篩選條件、群組和順序選項。
+ 對於每個選項，請從可能的選項清單中選擇。

Grafana 會根據您的選擇自動建構 SQL 查詢。

 若要在 `code` 模式中建立查詢：
+ 在程式碼編輯器中寫入您的查詢。
+ 若要執行查詢，請選擇程式碼編輯器上的**執行查詢**。

程式碼編輯器具有內建的自動完成功能，可提供關鍵字、彙總、命名空間、指標、標籤和標籤值的建議。當您輸入空格、逗號或貨幣符號時，會顯示建議。您也可以使用鍵盤組合 `CTRL+Space`。

程式碼編輯器可以自動完成查詢。不過，在程式碼編輯器中使用範本變數可能會干擾自動完成。

## CloudWatch Metrics Insights 範例
<a name="goldeneye-examples"></a>

**注意**  
CloudWatch Metrics Insights 為開放預覽。預覽版開放給所有 AWS 帳戶，您不需要請求存取權。在宣布一般可用性之前，可能會新增或變更功能。

本節包含實用的 CloudWatch Metrics Insights 查詢範例，您可以直接複製和使用，或在查詢編輯器中複製和修改。部分範例已在主控台中提供，您可以藉由在 **Metrics** (指標) 檢視中選擇 **Add query** (新增查詢)，來存取這些範例。

### EC2 範例
<a name="goldeneye-EC2-examples"></a>

 檢視每個執行個體指標的 CPU 使用率

```
SELECT AVG(CPUUtilization)
FROM "AWS/EC2"
GROUP BY InstanceId
```

檢視整個機群的平均 CPU 使用率

```
SELECT AVG(CPUUtilization)
FROM SCHEMA("AWS/EC2", InstanceId)
```

 檢視平均 CPU 使用率最高的 10 個執行個體 

```
SELECT MAX(CPUUtilization)
FROM "AWS/EC2"
GROUP BY InstanceId
LIMIT 10
```

檢視 CPU 使用率最高的 10 個執行個體，依上限排序，以遞減順序排列

```
SELECT AVG(CPUUtilization)
FROM "AWS/EC2"
GROUP BY InstanceId
ORDER BY MAX() DESC
LIMIT 10
```

在此情況下，CloudWatch 代理程式會收集每個應用程式的 CPUUtilization 指標。此查詢會針對特定應用程式名稱篩選此指標的平均值。

```
SELECT AVG(CPUUtilization)
FROM "AWS/CWAgent"
WHERE ApplicationName = 'eCommerce'
SELECT AVG(ConcurrentExecutions)
FROM "AWS/Lambda"
```

檢視前 10 個 Lambda 函數的平均執行時間，依最大值排序，以遞減順序排列

```
SELECT AVG(Duration)
FROM "AWS/Lambda"
GROUP BY FunctionName
ORDER BY MAX() DESC
LIMIT 10
```

檢視 Lambda 執行時間的最大值、平均值和最小值

```
SELECT MAX(Duration)
FROM "AWS/Lambda"
```

### Application Load Balancer 範例
<a name="application-loadbalancer-examples"></a>

 檢視具有 **LoadBalancer** 和 **AvailabilityZone** 維度的指標

```
SELECT SUM(RequestCount)
FROM SCHEMA("AWS/ApplicationELB", LoadBalancer, AvailabilityZone)
```

檢視具有作用中並行 TCP 連線數目的指標

```
SELECT AVG(ActiveConnectionCount)
FROM "AWS/ApplicationELB"
```

### Amazon EBS 範例
<a name="Amazon-elastic-block-store-examples"></a>

 依遞減順序檢視每個磁碟區前 10 個平均寫入位元組

```
SELECT AVG(VolumeWriteBytes)
FROM "AWS/EBS"
GROUP BY VolumeId
ORDER BY MAX() DESC
LIMIT 10
```

檢視平均 Amazon EBS 磁碟區寫入時間

```
SELECT AVG(VolumeTotalWriteTime)
FROM "AWS/EBS"
```

檢視平均 Amazon EBS 磁碟區閒置時間

```
SELECT AVG(VolumeIdleTime)
FROM "AWS/EBS"
View average burst balance per volume
SELECT AVG(BurstBalance)
FROM "AWS/EBS"
GROUP BY VolumeId
View average read bytes across Amazon EBS volumes
SELECT AVG(VolumeReadBytes)
FROM "AWS/EBS"
```

檢視跨 Amazon EBS 磁碟區的平均寫入位元組

```
SELECT AVG(VolumeWriteBytes)
FROM "AWS/EBS"
```

### Amazon Simple Storage Service 範例
<a name="simple-storage-service-examples"></a>

 依儲存貯體名稱檢視平均延遲群組

```
SELECT AVG(TotalRequestLatency)
FROM "AWS/S3"
GROUP BY BucketName
```

檢視所有 Amazon S3 儲存貯體中每個儲存貯體的平均物件數量

```
SELECT AVG(NumberOfObjects)
FROM "AWS/S3"
GROUP BY BucketName
```

### Amazon Simple Notification Service 範例
<a name="Amazon-simple-notificaation-service-examples"></a>

Amazon-simple-notificaation-service-examples 

```
SELECT AVG(NumberOfMessagesPublished)
FROM "AWS/SNS"
```

檢視每個主題名稱的平均失敗訊息數量

```
SELECT AVG(NumberOfNotificationsFailed)
FROM "AWS/SNS"
GROUP BY TopicName
```

### AWS API 用量範例
<a name="AWS-API-usage-examples"></a>

依您帳戶中的呼叫數量檢視前 20 AWS APIs 

```
SELECT COUNT(CallCount)
FROM "AWS/Usage"
WHERE "Type" = 'API'
GROUP BY "Service", "Resource"
ORDER BY SUM() DESC
LIMIT 20
```

## CloudWatch Metrics Insights 限制
<a name="metrics-insights-limits"></a>

CloudWatch Metrics Insights 目前具有下列限制：
+ 您只能查詢最近三個小時的資料。
+ 單一查詢可處理不超過 10,000 個指標。這表示如果 `SELECT`、 `FROM`和 `WHERE`子句符合超過 10，000 個指標，則查詢只會處理前 10，000 個找到的這些指標。
+ 單個查詢可以傳回不超過 500 個時間序列。這表示如果查詢正在處理超過 500 個指標，則並非所有指標都會在查詢結果中傳回。如果您使用 `ORDER BY`子句，則會排序處理的所有指標，並傳回根據您的`ORDER BY`子句具有最高或最低值的 500。如果您不包含 `ORDER BY`子句，則無法控制傳回的 500 個相符指標。
+ 每個`GetMetricData`操作只能有一個查詢，但您可以在儀表板中擁有多個小工具，每個小工具都包含查詢。