PromQL 兼容性

Google Cloud Managed Service for Prometheus 中的 PromQL 查询在 Monarch 后端使用监控查询语言 (MQL) 进行部分评估,并且查询结果存在一些已知差异。本文档介绍了这些差异。

除了本文档中列出的差异之外,Managed Service for Prometheus 中的 PromQL 与 Prometheus 2.44 版中提供的 PromQL 相当。

可能不支持在 Prometheus 2.44 版之后添加的 PromQL 函数。

匹配指标名称

仅支持与指标名称完全匹配。 您必须在查询中包含与指标名称完全匹配的内容。

对于在 __name__ 标签上使用正则表达式匹配器的常见场景,我们建议采用以下解决方法:

  • Prometheus 适配器配置通常使用 =~ 运算符来匹配多个指标名称。如需解决此用法问题,请展开配置,以便为每个指标使用单独的政策,并明确命名每个指标。这还可以防止您意外地针对意外指标进行自动扩缩。
  • 正则表达式通常用于在同一图表中绘制多个非维度指标。例如,如果您有一个 cpu_servicename_usage 这样的指标,则可以使用通配符将所有服务一起绘制到图表中。在 Cloud Monitoring 中,使用此类非维度指标是一种明确的错误做法,这种做法会导致查询性能极差。如需解决此使用问题,请将所有维度移至指标标签中,而不是将维度嵌入指标名称中。
  • 查询多个指标通常用于查看可查询的指标。我们建议您改用 /labels/__name__/values 调用来发现指标。您还可以使用 Cloud Monitoring 界面发现指标。
  • 匹配多个指标有助于了解系统对每个指标爬取、注入和收取费用的样本数量。Cloud Monitoring 会在指标管理页面上向您提供此信息。您还可以使用“注入的样本数”指标或“由归因 ID 写入的样本数”指标,以指标数据的形式访问此信息。

过时

Monarch 后端不支持过时

irate 的计算

irate 函数的回溯期小于步长时,我们会将回溯期增加到步长。Monarch 需要此更改,以确保输出中不会完全忽略任何输入数据。这种差异也适用于 rate 计算。

rateincrease 的计算

rate 函数的回溯期小于步长时,我们会将回溯期增加到步长。Monarch 需要此更改,以确保输出中不会完全忽略任何输入数据。这种差异也适用于 irate 计算。

内插和外推计算有所不同。Monarch 使用的插值算法与 Prometheus 不同,并且这种差异可能会导致结果有所差异。例如,存储 Monarch 计数器样本的时间范围与 Prometheus 使用的单个时间戳无关。因此,可以将 Monarch 中的计数器样本包括在费率计算中,即使 Prometheus 时间戳会排除这些计数器样本。 这通常可以生成更准确的费率结果,尤其是在底层时序的开始或结束进行查询时。

histogram_quantile 的计算

针对无样本的直方图进行 PromQL histogram_quantile 计算会生成 NaN 值。内部查询语言的计算不会生成任何值;而是会丢弃时间戳处的点。

费率计算差异可能还会影响 histogram_quantile 查询的输入。

不同类型的指标上的特定于类型的函数

虽然上游 Prometheus 是弱类型,但 Monarch 是强类型。这意味着,在不同类型的指标上运行特定于单个类型的函数(例如,对 GAUGE 指标运行 rate() 或对 COUNTER 或无类型指标运行 histogram_quantile())在 Managed Service for Prometheus 中不起作用,即使这些函数在上游 Prometheus 中有效。