使用指标查询选项查询 CloudWatch Metrics Insights 数据 - Amazon Managed Grafana

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

使用指标查询选项查询 CloudWatch Metrics Insights 数据

注意

Amazon CloudWatch Metrics Insights 为预览版。CloudWatch Metrics Insights 功能对所有 AWS 账户 开放。功能可能会发生变化。

您可以在指标查询编辑器中选择 metric query 模式来查询 CloudWatch Metrics Insights 数据。

CloudWatch Metrics Insights 是一个功能强大的高性能 SQL 查询引擎,您可以使用它来大规模查询指标。这是一个快速、灵活、基于 SQL 的查询引擎,可用于实时识别 CloudWatch 所有指标的趋势和模式。它使用一种 SQL 方言。有关 Metrics Insights 查询语法的更多信息,请参阅 查询语法和关键字

查询语法和关键字

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 必需。指定要使用的聚合函数,还可以指定要查询的指标的名称。有效值为 AVGCOUNTMAXMINSUM
MetricName 必需。例如,CPUUtilization
FROM 必需。指定指标源。您可以指定包含要查询的指标的指标命名空间,也可以指定 SCHEMA 表函数。一些命名空间示例包括 AWS/EC2AWS/Lambda
SCHEMA (可选)筛选查询结果,仅显示完全匹配的指标或不匹配的指标。
WHERE (可选)筛选结果,仅显示与指定表达式匹配的指标。例如,WHERE InstanceType != 'c3.4xlarge'
GROUP BY (可选)将查询结果分组为多个时间序列。例如,GROUP BY ServiceName
ORDER BY (可选)指定要返回的时间序列顺序。选项有 ASCDESC
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)

    仅匹配从 AWS/ApplicationELB 报告给 CloudWatch 的 RequestCount 指标,这些指标只有两个维度,即 LoadBalancerAvailabilityZone

标签值必须用单引号括起来。

转义字符

在查询中,标签值必须始终放在单引号中。  例如,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")。将任何命名空间、指标名称或标签(即使不包含保留关键字)放在双引号中也有效。

生成器模式和代码模式

您可以在 Builder 模式或 Code 模式下创建查询。

要在 Builder 模式下创建查询
  1. 使用上表中的信息,浏览并选择指标命名空间、指标名称、筛选条件、分组和顺序选项。

  2. 对于每个选项,请从可选的选项列表中进行选择。

要在 Code 模式下创建查询
  1. 在代码编辑器中编写查询。

  2. 要运行查询,请在代码编辑器中选择运行查询

要在 builder 模式下创建查询:

  • 使用上表中的信息,浏览并选择指标命名空间、指标名称、筛选条件、分组和顺序选项。

  • 对于每个选项,请从可选的选项列表中进行选择。

Grafana 会根据您的选择自动构建 SQL 查询。

要在 code 模式下创建查询:

  • 在代码编辑器中编写查询。

  • 要运行查询,请选择代码编辑器上的运行查询

代码编辑器具有内置的自动完成功能,可为关键字、聚合、命名空间、指标、标签和标签值提供建议。输入空格、逗号或美元符号时,会显示建议。您也可以使用键盘组合键 CTRL+Space

代码编辑器可以自动完成查询。但是,在代码编辑器中使用模板变量可能会干扰自动完成。

CloudWatch Metrics Insights 示例

注意

CloudWatch Metrics Insights 为开放式预览版。预览版面向所有 AWS 账户开放,您无需请求访问权限。在宣布正式发布之前,可能会添加或更改功能。

本节包含有用的 CloudWatch Metrics Insights 查询的示例,您可以直接复制和使用,或在查询编辑器中复制并修改。控制台中已经提供一些示例,您可以通过选择 Metrics(指标)视图中的 Add query(添加查询)来访问它们。

EC2 示例

查看每个实例的 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 示例

查看具有 LoadBalancerAvailabilityZone 维度的指标。

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

查看具有活跃并发 TCP 连接数的指标。

SELECT AVG(ActiveConnectionCount) FROM "AWS/ApplicationELB"

Amazon EBS 示例

查看卷平均写入字节数最多的 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 示例

按存储桶名称查看平均延迟组

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

查看所有 Amazon S3 存储桶中每个存储桶的平均对象数量

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

Amazon Simple Notification Service 示例

Amazon Simple Notification Service 示例

SELECT AVG(NumberOfMessagesPublished) FROM "AWS/SNS"

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

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

AWS API 使用示例

查看账户中按调用次数排列前 20 的 AWS API

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

CloudWatch Metrics Insights 限制

CloudWatch Metrics Insights 目前有以下限制:

  • 您只能查询最近三个小时的数据。

  • 单个查询可处理的指标不超过 10,000 个。这意味着,如果 SELECTFROMWHERE 子句匹配的指标超过 10000 个,查询只会处理找到的前 10000 个指标。

  • 单个查询可返回的时间序列不超过 500 个。这意味着,如果查询要处理的指标超过 500 个,查询结果中将不会返回所有指标。如果您使用 ORDER BY 子句,将对正在处理的所有指标进行排序,并根据您的 ORDER BY 子句,返回 500 个具有最高或最低值的指标。如果您不包括 ORDER BY 子句,则无法控制返回哪 500 个匹配的指标。

  • 每个 GetMetricData 操作只能有一个查询,但是您可以在控制面板中有多个小组件,每个小组件都包含一个查询。