View a markdown version of this page

PromQL 查询 - Amazon CloudWatch

PromQL 查询

您通过 指标端点 将 OpenTelemetry 指标摄取到 CloudWatch 时,分层 OTLP 数据模型会扁平化为与 PromQL 兼容的标签。本节介绍标签结构、用于查询这些标签的 PromQL 语法以及 PromQL 中对 UTF-8 的支持。

注意

Prometheus 3 中的 PromQL 支持在指标名称和标签名称中使用完整的 UTF-8 字符。这对于 OTLP 指标尤其重要,因为 OpenTelemetry 语义惯例在属性名称中使用点号,例如 service.name。以前,这些点号在翻译过程中被下划线所取代,这会导致 OTel 惯例中定义的内容与 Prometheus 中可查询的内容之间存在差异。

在 CloudWatch 中使用 PromQL 时,@ 前缀惯例会将 OTLP 范围的标签与标准 Prometheus 标签区分开来。每个作用域内的字段使用双 @ 前缀(例如 @resource.@schema_url),而属性使用单 @ 作用域前缀,例如 @resource.service.name。数据点属性还支持裸露(无前缀)访问,以向后兼容标准 PromQL 查询,例如 {"http.server.active_requests"}{"@datapoint.@name"="http.server.active_requests"} 等效。

PromQL 表达式用花括号括起来,用于指定指标名称和一组可选的标签匹配器。以下示例选择了 http.server.active_requests 指标的所有时间序列:

{"http.server.active_requests"}

以下示例选择了 http.server.active_requests 指标的所有时间序列,其中 OpenTelemetry 资源属性 service.name 等于 myservice

{"http.server.active_requests", "@resource.service.name"="myservice"}

您可以在单个查询中组合多个标签匹配器。以下示例选择了 http.server.active_requests 指标的所有时间序列,其中在所有美国区域,OpenTelemetry 资源属性 service.name 等于 myservice

{"http.server.active_requests", "@resource.service.name"="myservice", "@aws.region"=~"us-.*"}

以下示例显示了范围查询。该示例计算每个时间序列在指定时间范围内所有数据点的平均值:

avg_over_time( {"http.server.active_requests", "@resource.service.name"="myservice"}[5m] )

下表总结了每个 OTLP 范围的前缀惯例:

OTLP 范围 字段前缀 属性前缀 示例

资源

@resource.@

@resource.

@resource.service.name="myservice"

埋点作用域

@instrumentation.@

@instrumentation.

@instrumentation.@name="otel-go/metrics"

数据点

@datapoint.@

@datapoint. 或裸露

cpu="cpu0"@datapoint.cpu="cpu0"

AWS 保留

不适用

@aws.

@aws.account_id="123456789"

使用 PromQL 查询 AWS 已出售指标

为了能够在 PromQL 中查询 AWS 已出售指标,您首先需要启用已出售指标的 OTel 补充功能。请参阅:采用 OpenTelemetry 格式的 AWS 已出售指标

启用 OTel 补充功能后,可通过 PromQL 使用其他标签查询 AWS 已出售指标。指标名称与原始 CloudWatch 指标名称相同,原始 CloudWatch 维度可作为数据点属性提供。以下标签可用(以下示例适用于 EC2 实例):

PromQL 标签 说明 示例

InstanceId

原始 CloudWatch 维度,作为数据点属性

i-0123456789abcdef0

"@resource.cloud.resource_id"

资源的完整 ARN

arn:aws:ec2:us-east-1:123456789012:instance/i-0123456789abcdef0

"@resource.cloud.provider"

云提供商

aws

"@resource.cloud.region"

此指标起源的 AWS 区域

us-east-1

"@resource.cloud.account.id"

此指标起源的 AWS 账户 ID

123456789012

"@instrumentation.@name"

标识源服务的埋点作用域名称

cloudwatch.aws/ec2

"@instrumentation.cloudwatch.source"

源服务标识符

aws.ec2

"@instrumentation.cloudwatch.solution"

补充解决方案标识符

CloudWatchOTelEnrichment

"@aws.tag.Environment"

AWS 资源标签

production

"@aws.account"

摄取此指标的 AWS 账户(系统标签)

123456789012

"@aws.region"

摄取此指标的 AWS 区域(系统标签)

us-east-1

以下示例为特定的 Lambda 函数选择了 Invocations

{Invocations, FunctionName="my-api-handler"}

以下示例为具有特定团队标签的所有函数选择了 Errors Lambda:

{Errors, "@instrumentation.@name"="cloudwatch.aws/lambda", "@aws.tag.Team"="backend"}

以下示例计算按团队分组的 Invocations Lambda 总数:

sum by ("@aws.tag.Team")( {Invocations, "@instrumentation.@name"="cloudwatch.aws/lambda"} )

以下示例选择了 EC2 CPUUtilization 指标的所有时间序列。"@instrumentation.@name"="cloudwatch.aws/ec2" 的用法是为了专门匹配来自 EC2 的 CPUUtilization,而不是来自其他 AWS 服务(例如 Amazon Relational Database Service)的 CPUUtilization:

histogram_avg({CPUUtilization, "@instrumentation.@name"="cloudwatch.aws/ec2"})

从 Grafana 查询

您可以通过添加 Amazon Managed Service for Prometheus 数据来源插件并将其指向 CloudWatch 监控端点,从 Grafana 查询 CloudWatch PromQL 数据。该插件内置了 SigV4 签名,且始终处于启用状态,因此无需打开开关。该插件发布在 grafana.com/grafana/plugins/grafana-amazonprometheus-datasource/;在添加数据来源之前,请先从 Grafana 插件目录中安装它。AMP 插件 v3.0.0 需要 Grafana >=11.6.11 <12 || >=12.0.10 <12.1 || >=12.1.7 <12.2 || >=12.2.5

IAM 先决条件:Grafana 所使用的凭证对应的 IAM 主体必须同时拥有 cloudwatch:GetMetricData(即时查询和范围查询所需)和 cloudwatch:ListMetrics(序列和标签发现所需)。有关更多信息,请参阅 PromQL的 IAM 权限

要配置 Grafana,请完成以下步骤:

  1. 从 Grafana 插件目录安装 Amazon Managed Service for Prometheus 数据来源插件。

  2. 在 Grafana 中,转到连接 > 数据来源,选择添加数据来源,然后选择 Amazon Managed Service for Prometheus

  3. 将数据来源 URL 设置为 https://monitoring.AWS Region.amazonaws.com

  4. 区域设置为 AWS 区域。选择适合您环境的身份验证提供商(默认凭证链、访问密钥或工作区 IAM 角色)。

  5. 选择保存并测试

从 Amazon Managed Grafana 查询

您可以通过添加指向 CloudWatch 监控端点的 Amazon Managed Service for Prometheus 数据来源,从 Amazon Managed Grafana 工作区查询 CloudWatch PromQL 数据。该数据来源插件使用工作区 IAM 角色自动对请求进行 SigV4 签名;SigV4 始终处于启用状态,无需配置开关。该插件在 Amazon Managed Grafana 版本 12 及更高版本中可用。有关更多信息,请参阅《Amazon Managed Grafana 用户指南》中的连接到 Amazon Managed Service for Prometheus 数据来源

IAM 先决条件:Amazon Managed Grafana 工作区 IAM 角色必须同时拥有 cloudwatch:GetMetricData(即时查询和范围查询所需)和 cloudwatch:ListMetrics(序列和标签发现所需)。有关更多信息,请参阅 PromQL的 IAM 权限

要配置数据来源,请完成以下步骤:

  1. 在 Amazon Managed Grafana 工作区中,添加 Amazon Managed Service for Prometheus 数据来源。

  2. 将数据来源 URL 设置为 https://monitoring.AWS Region.amazonaws.com

  3. 区域设置为 AWS 区域。Amazon Managed Grafana 会从工作区 IAM 角色自动注入凭证;您无需配置静态密钥。

  4. 选择保存并测试

使用 MCP 工具查询

CloudWatch MCP 服务器提供模型上下文协议(MCP)工具,允许人工智能助手和开发工具代您查询 CloudWatch PromQL 数据。MCP 工具会自动处理身份验证和请求格式化,因此您可以专注于编写 PromQL 查询,而无需管理 HTTP 请求和 SigV4 签名。

CloudWatch MCP 服务器中提供以下 PromQL 工具:

工具 说明

execute_promql_query

运行即时 PromQL 查询,返回单个时间点的指标值。

execute_promql_range_query

在时间窗口内运行 PromQL 范围查询,返回用于分析趋势和绘制图表的时间序列数据。

get_promql_label_values

检索特定 PromQL 标签的值,例如用于指标名称的 __name__ 或用于服务的 @resource.service.name

get_promql_series

查找匹配 PromQL 标签选择器的时间序列,并返回每个匹配序列的完整标签集。

get_promql_labels

列出所有可用的 PromQL 标签名称,以便您发现指标的标签结构。

有关参数、配置和设置说明的完整详细信息,请参阅 CloudWatch MCP 服务器文档中的 Tools for CloudWatch PromQL

使用 HTTP API 查询

您还可以通过直接调用与 Prometheus 兼容的 HTTP 端点,以编程方式查询 CloudWatch PromQL 数据。请求必须使用 monitoring 作为服务名称,通过 AWS 签名版本 4 进行签名。

PromQL 端点遵循模式 https://monitoring.AWS Region.amazonaws.com/api/v1/operation。例如,对于美国东部(弗吉尼亚州北部)(us-east-1)区域,即时查询的端点为 https://monitoring.us-east-1.amazonaws.com/api/v1/query

有关完整的 API 参考,包括支持的操作、请求参数和响应格式,请参阅与 Prometheus 兼容的 API。有关支持 PromQL 查询的 AWS 区域列表,请参阅支持的 AWS 区域。有关每个操作所需的 IAM 操作,请参阅 PromQL的 IAM 权限