如何绘制遵循相同正则表达式模式的多个普罗米修斯指标的复杂组合

How to plot a complex combination of several Prometheus metrics obeying the same regex pattern

在问题 中解决了,如果我们想绘制多个,如何在 Grafana 中的同一图上构建多个 Prometheus 指标(甚至是指标的 rate() 派生)同一图上具有共同前缀的指标。

现在我想绘制一个指标的值除以另一个指标的值,所以我希望下面的 PromQL 查询有效:

label_replace({__name__=~"camel_proxy.*sum"},"name_label","","__name__", "(.+)")/label_replace({__name__=~"camel_proxy.*count"},"name_label","","__name__", "(.+)")

给我一堆图表,其中相应的 *.sum 将除以相应的 *.count 指标并显示所有行。

但是,我只是从普罗米修斯那里得到了空数组。我该如何解决这个问题?

Prometheus 对二元运算符左右两侧具有相同标签集的时间序列对执行二元运算。有关详细信息,请参阅 vector matching rules。在您的情况下,left-side 时间序列包含 label_namecount 结尾的标签,而 right-side 系列包含 label_namesum 结尾的标签。 Prometheus 无法找到具有相同标签集的序列对,因此它 returns 是一个空结果。解决方案是从 label_name 值中去除 countsum 后缀,因此 left-side 和 right-side 时间序列得到相同的 label_name 值对:

label_replace(
  {__name__=~"camel_proxy.*sum"},"name_label","","__name__", "(.+)sum"
) /
label_replace(
  {__name__=~"camel_proxy.*count"},"name_label","","__name__", "(.+)count"
)