Prometheus:如何将一个向量乘以另一个向量的平均值

Prometheus: How can I multiply a vector by the average of another vector

情况

我有一个计数器,其中包含功率计的值(安装后的千瓦时)。在我的 Grafana 仪表板上,我想显示在给定时间范围内在电力上花费了多少钱。

以每千瓦时的固定价格执行此操作很容易:increase(loxone_values{control="Stromverbrauch Zähler"}[$__range]) * 0.22

我可以在 Grafana 中使用“Stat”显示最后一个值并获得花费的金额。

问题

显然,如果每千瓦时的价格发生变化,这将失败,在我的情况下,每小时都会发生变化。我有第二个衡量当前价格的指标。我喜欢用千瓦时乘以平均价格。

我想我可以用 group_left 做到这一点,但未能构建有效的查询。

我的第一种方法 increase(loxone_values{control="Stromverbrauch Zähler"}[$__range]) * group_left avg(loxone_values{control="Strompreis aktuell"}) 给出了一个解析错误。

看起来 group_left 需要一些东西来匹配向量。但是没有通用标签(在 instance 旁边,但将来可能会改变)。

无论如何我试了一下,但是 increase(loxone_values{control="Stromverbrauch Zähler"}[$__range]) * on (instance) group_left avg(loxone_values{control="Strompreis aktuell"}) 给了我一个空的结果。

应该这样做:

increase(loxone_values{control="Stromverbrauch Zähler"}[$__range]) * scalar(avg(loxone_values{control="Strompreis aktuell"}))

解释:

您可以将即时向量乘以具有完全相同标签和标签值的即时向量或乘以标量。 increase(loxone_values{control="Stromverbrauch Zähler"}[$__range]) 的结果必须有标签,而 avg(loxone_values{control="Strompreis aktuell"}) 将 return 一个没有标签的即时向量。使用 scalar 将即时向量转换为标量,increase(loxone_values{control="Stromverbrauch Zähler"}[$__range]) 的所有结果都将乘以它,与其标签无关。