

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 使用指标查询选项查询 Met CloudWatch rics Insights 数据
<a name="CloudWatch-using-the-metric-query"></a>

**注意**  
Amazon CloudWatch 指标见解现为预览版。 CloudWatch 指标见解功能向所有人开放 AWS 账户。功能可能会发生变化。

 您可以通过在 CloudWatch 指标查询**编辑器中选择`metric query`模式来查询 Metrics Insight** s 数据。

 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]
```

 关键字不区分大小写，但标识符区分大小写。标识符包括指标、命名空间和维度的名称。

 下表提供了查询关键字及其说明。


|  Keyword  |  说明  | 
| --- | --- | 
|  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)
  ```

   仅将报告的`RequestCount`指标`AWS/ApplicationELB`与正好两个维度相匹配，`LoadBalancer`和。 CloudWatch `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 指标见解示例
<a name="goldeneye-examples"></a>

**注意**  
CloudWatch 指标见解处于开放预览状态。预览版对所有 AWS 账户开放，您无需申请访问权限。在宣布正式发布之前，可能会添加或更改功能。

本节包含有用的 M CloudWatch etrics 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>

一个例mazon-simple-notificaation-service子 

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

查看每个主题名称的平均失败消息数量

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

### AWS API 用法示例
<a name="AWS-API-usage-examples"></a>

 AWS APIs 按账户中的通话次数查看前 20 名 

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

## CloudWatch 指标见解限制
<a name="metrics-insights-limits"></a>

CloudWatch Metrics Insights 目前有以下限制：
+ 您只能查询最近三个小时的数据。
+ 单个查询可处理的指标不超过 10,000 个。这意味着，如果 `SELECT`、`FROM` 和 `WHERE` 子句匹配的指标超过 10000 个，查询只会处理找到的前 10000 个指标。
+ 单个查询可返回的时间序列不超过 500 个。这意味着，如果查询要处理的指标超过 500 个，查询结果中将不会返回所有指标。如果您使用 `ORDER BY` 子句，将对正在处理的所有指标进行排序，并根据您的 `ORDER BY` 子句，返回 500 个具有最高或最低值的指标。如果您不包括 `ORDER BY` 子句，则无法控制返回哪 500 个匹配的指标。
+ 每个 `GetMetricData` 操作只能有一个查询，但是您可以在控制面板中有多个小组件，每个小组件都包含一个查询。