乐趣区

关于prometheus:prometheus-PromQLsum不同metric的值

问题

假如有两个不同的 metric,有雷同的 tag,须要将它们的值进行 sum。

metricA:

metricA{__type__="gauge",instance="127.0.0.1:9999",job="my-test",node="node1"}    0
metricA{__type__="gauge",instance="127.0.0.1:9999",job="my-test",node="node2"}    0
metricA{__type__="gauge",instance="127.0.0.1:9999",job="my-test",node="node3"}    0

metricB:

metricB{__type__="gauge",instance="127.0.0.1:9999",job="my-test",node="node2"}    33
metricB{__type__="gauge",instance="127.0.0.1:9999",job="my-test",node="node3"}    44

答案

PromQL 求和:

sum by (node) ({__name__=~"metricA|metricB"})

后果:

{node="node1"}    0
{node="node2"}    33
{node="node3"}    44

原理

PromQL 中应用了__name__标签,实际上它也是 tag 的一部分,比方 metricB:

metricB{__type__="gauge",instance="127.0.0.1:9999",job="my-test",node="node2"}    33

// 该序列值等价于
{__name__="metricB",__type__="gauge",instance="127.0.0.1:9999",job="my-test",node="node2"} 33    

这样 metricA 和 metricB 对立变成领有雷同 tag 的 metric,能够对它们进行 sum 等操作。

退出移动版