本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用指标查询选项查询 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
) FROMnamespace
| [ SCHEMA(namespace
[, labelKey [, ...] ]) ] [ WHERElabelKey
OPERATOR labelValue [AND|OR|([...])*] [, ...] ] [ GROUP BYlabelKey
[, ...]] [ ORDER BYFUNCTION
() [DESC | ASC] ] [ LIMITnumber
]
关键字不区分大小写,但标识符区分大小写。标识符包括指标、命名空间和维度的名称。
下表提供了查询关键字及其说明。
Keyword | 描述 |
---|---|
FUNCTION
|
必需。指定要使用的聚合函数,还可以指定要查询的指标的名称。有效值为 AVG 、COUNT 、MAX 、MIN 和 SUM 。 |
MetricName
|
必需。例如,CPUUtilization 。 |
FROM
|
必需。指定指标源。您可以指定包含要查询的指标的指标命名空间,也可以指定 SCHEMA 表函数。一些命名空间示例包括 AWS/EC2 和 AWS/Lambda 。 |
SCHEMA
|
(可选)筛选查询结果,仅显示完全匹配的指标或不匹配的指标。 |
WHERE
|
(可选)筛选结果,仅显示与指定表达式匹配的指标。例如,WHERE InstanceType !=
'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)
仅匹配从
AWS/ApplicationELB
报告给 CloudWatch 的RequestCount
指标,这些指标只有两个维度,即LoadBalancer
和AvailabilityZone
。
标签值必须用单引号括起来。
转义字符
在查询中,标签值必须始终放在单引号中。 例如,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
模式下创建查询
-
使用上表中的信息,浏览并选择指标命名空间、指标名称、筛选条件、分组和顺序选项。
-
对于每个选项,请从可选的选项列表中进行选择。
要在 Code
模式下创建查询
-
在代码编辑器中编写查询。
-
要运行查询,请在代码编辑器中选择运行查询。
要在 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 示例
查看具有 LoadBalancer 和 AvailabilityZone 维度的指标。
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 个。这意味着,如果
SELECT
、FROM
和WHERE
子句匹配的指标超过 10000 个,查询只会处理找到的前 10000 个指标。单个查询可返回的时间序列不超过 500 个。这意味着,如果查询要处理的指标超过 500 个,查询结果中将不会返回所有指标。如果您使用
ORDER BY
子句,将对正在处理的所有指标进行排序,并根据您的ORDER BY
子句,返回 500 个具有最高或最低值的指标。如果您不包括ORDER BY
子句,则无法控制返回哪 500 个匹配的指标。每个
GetMetricData
操作只能有一个查询,但是您可以在控制面板中有多个小组件,每个小组件都包含一个查询。