Google Cloud Managed Service for Prometheus 中的 PromQL 查询在 Monarch 后端使用监控查询语言 (MQL) 进行部分评估,并且查询结果存在一些已知差异。本文档介绍了这些差异。
除了本文档中列出的差异之外,Managed Service for Prometheus 中的 PromQL 与 Prometheus 2.44 版中提供的 PromQL 相当。
新的 PromQL 函数
可能不支持在 Prometheus 2.44 版之后添加的 PromQL 函数。
匹配指标名称
仅支持与指标名称完全匹配。
过时
Monarch 后端不支持过时。
irate
的计算
当 irate
函数的回溯期小于步长时,我们会将回溯期增加到步长。MQL 需要此更改,以确保输出中不会完全忽略任何输入数据。这种差异也适用于 rate
计算。
rate
和 increase
的计算
当 rate
函数的回溯期小于步长时,我们会将回溯期增加到步长。MQL 需要此更改,以确保输出中不会完全忽略任何输入数据。这种差异也适用于 irate
计算。
内插和外推计算有所不同。Monarch 使用的插值算法与 Prometheus 不同,并且这种差异可能会导致结果有所差异。例如,存储 Monarch 计数器样本的时间范围与 Prometheus 使用的单个时间戳无关。因此,可以将 Monarch 中的计数器样本包括在费率计算中,即使 Prometheus 时间戳会排除这些计数器样本。 这通常可以生成更准确的费率结果,尤其是在底层时序的开始或结束进行查询时。
histogram_quantile
的计算
针对无样本的直方图进行 PromQL histogram_quantile
计算会生成 NaN 值。MQL 的计算不会产生任何值;也就是说,MQL 会改为丢弃时间戳处的点。
费率计算差异可能还会影响 histogram_quantile
查询的输入。
针对不同类型指标的类型专用函数
虽然上游 Prometheus 是弱类型,但 Monarch 是强类型。这意味着,在不同类型的指标上运行特定于单个类型的函数(例如,对 GAUGE 指标运行 rate()
或对 COUNTER 或无类型指标运行 histogram_quantile()
)在 Managed Service for Prometheus 中不起作用,即使这些函数在上游 Prometheus 中有效。