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
计算。
rate
和 increase
的计算
当 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 中有效。