

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

# 使用指标查询编辑器
<a name="CloudWatch-using-the-metric-query-editor"></a>

指标查询编辑器可让您构建两种类型的查询：**指标搜索**和**指标查询**。**指标查询**选项使用 CloudWatch 指标见解查询数据。

## 通用查询编辑器字段
<a name="metrics-insights-common-fields"></a>

 有三个字段是**指标搜索**和**指标查询**模式所共有的。

 **通用字段**

**Id**  
`GetMetricData` API 要求所有查询都具有唯一 ID。此字段可用于指定所选的 ID。ID 可以包括数字、字母和下划线，并且必须以小写字母开头。如果未指定 ID，Amazon Managed Grafana 会使用以下模式生成一个 ID：`query[refId of the current query row]`。例如，`queryA` 代表面板编辑器中的第一个查询行。

**周期**  
周期是与特定 CloudWatch 统计数据关联的时间长度。周期以秒为单位定义。有效值包括 1、5、10、30，或 60 的任意倍数。如果您将时间段字段留空或设置为`auto`，则它将根据时间范围和 CloudWatch 保留策略自动计算。使用的公式是 `time range in seconds / 2000`，然后在根据保留时间移除周期后，移动到预定义周期数组 [60, 300, 900, 3600, 21600, 86400] 中的下一个较高值。要查看 Amazon Managed Grafana 使用的周期，请在查询编辑器中选择**显示查询预览**。

**Alias**  
以下别名模式适用。      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/grafana/latest/userguide/CloudWatch-using-the-metric-query-editor.html)

# 使用指标搜索选项
<a name="CloudWatch-using-the-metric-search"></a>

 要在**指标搜索**中创建有效查询，必须指定命名空间、指标名称和至少一份统计数据。如果开启了**精确匹配**，则还必须为要查询的指标指定所有维度。指标模式必须完全匹配。有关更多信息，请参阅[CloudWatch 搜索表达式语法](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/search-expression-syntax.html)。

如果禁用**精确匹配**，您可以指定任意数量的维度进行筛选。最多会返回 100 个符合筛选条件的指标。

## 使用维度通配符进行动态查询
<a name="dynamic-queries-using-dimension-wildcards"></a>

 您可以使用星号（`*`）通配符表示一个或多个维度值，以监控指标的动态列表。

 这可以帮助您监控 AWS 资源（例如 EC2 实例或容器）的指标。例如，当作为 auto Scaling 事件的一部分创建新实例时，它们将自动出现在图表中，而无需您跟踪新实例 IDs。这项功能目前仅限于检索不超过 100 个指标。您可以选择**显示查询预览**，查看自动构建可支持通配符的搜索表达式。

 默认情况下，搜索表达式的定义方式是，查询的指标必须与定义的维度名称完全匹配。这就意味着，在示例中，仅会返回只具有一个维度（其名称为 `InstanceId`）的指标。

 要包含定义了其他维度的指标，可以关闭**精确匹配**。即使不使用通配符，关闭**精确匹配**也会创建一个搜索表达式。Grafana 会搜索至少与命名空间、指标名称和所有已定义维度相匹配的任何指标。

## 多值模板变量
<a name="cloudwatch-multi-value-template-variables"></a>

 根据多值模板变量定义维度值时，会使用搜索表达式来查询匹配指标。这样就能在一次查询中使用多个模板变量。对于关闭了**精确匹配**选项的查询，也可以使用模板变量。

 搜索表达式目前的限制为 1024 个字符，因此如果值列表较长，查询可能会失败。如果要查询某个维度名称中有任何值的所有指标，建议使用星号（`*`）通配符，而不是 `All` 选项。

 只有维度值才支持使用多值模板变量。不支持对 `Region`、`Namespace` 或 `Metric Name` 使用多值模板变量。

## 指标数学表达式
<a name="cloudwatch-metric-math-expressions"></a>

 您可以使用数学函数对指标进行操作，从而创建新的时间序列 CloudWatch 指标。支持算术运算符、一元减法和其他函数，并且可以应用于指标。 CloudWatch 有关 CloudWatch 公制数学函数的更多信息，请参阅[使用公制数学](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/using-metric-math.html)。

 例如，要对指标应用算术运算，请为原始指标提供一个 ID（唯一字符串）。然后，您可以在新指标的 `Expression` 字段中使用此 ID 并对其应用算术运算。

 如果使用 `Expression` 字段引用另一个查询，例如 `queryA * 2`，则无法根据该查询创建警报规则。

## 周期
<a name="cloudwatch-period"></a>

 周期是指与特定 Amazon CloudWatch 统计数据关联的时间长度。周期以秒为单位定义。有效值包括 1、5、10、30，或 60 的任意倍数。

如果将周期字段留空或设置为**自动**，则会根据时间范围自动计算。使用的公式是 `time range in seconds / 2000`，然后它会移到预定义周期数组 `[60, 300, 900, 3600, 21600, 86400]` 中的下一个较高值。要查看 Amazon Managed Grafana 使用的周期，请在查询编辑器中选择**显示查询预览**。

## 从 Grafana 面板到控制台的深度链接 CloudWatch
<a name="deep-linking-from-grafana-panels-to-the-cloudwatch-console"></a>

 在面板中选择时间序列会显示一个上下文菜单，其中包含指向**在 CloudWatch 控制台中查看的**链接。选择该链接会打开一个新选项卡，该选项卡将带您进入 CloudWatch 控制台，并显示该查询的所有指标。如果您当前未登录 CloudWatch 控制台，则该链接会将您转到登录页面。提供的链接对任何指标都有效， AWS 账户 但只有在您登录到与 Grafana 中所选数据源对 AWS 账户 应的指标时，才会显示正确的指标。

 此功能不适用于基于指标数学表达式的指标。

# 使用指标查询选项查询 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` 操作只能有一个查询，但是您可以在控制面板中有多个小组件，每个小组件都包含一个查询。