普罗米修斯:如何用2个不同的指标求和

时间:2020-01-07 15:06:00

标签: prometheus

我有2个不同的指标: 带有字段类型的metric_a metric_b具有字段类型(相同)

我正在尝试总结相同类型的a和b。 如果类型仅存在于metric_a而不存在于metric_b上,则应返回metric_b的结果。 我在普罗米修斯上尝试了很多选择:

sum by (type)(metric_a{job=~"provision-dev"}) or vector(0) + sum by(type)(metric_b{job=~"provision-dev"}) or vector(0):仅返回metric_a中的值,而不计算metric_b的结果。

sum by (type)(metric_a{job=~"provision-dev"}) + sum by(type)(metric_b{job=~"provision-dev"}):仅返回metric_b的值,而不计算metric_a的结果。

sum by (cluster_id)(provision_scale_out_failures{job=~"provision-dev"} + provision_scale_out_success{job=~"provision-dev"}):嗯,这甚至​​不是正确的查询

基本上,这是一个成功的例子:

metric_a:

  • 类型=类型_1,总和= 5
  • type = type_2,sum = 2

metric_b:

  • 类型=类型_1,总和= 4
  • type = type_3,sum = 3

查询结果:

  • 类型=类型_1,总和= 9
  • type = type_2,sum = 2
  • type = type_3,sum = 3

1 个答案:

答案 0 :(得分:0)

这是使用binary operator时的预期行为:双方都必须设置匹配的标签才能考虑在内。

如果您希望能够汇总双方并获得单方,则首先必须使用__name__标签获得union的不同指标:

 sum by(__name__,type)(metric_a{job=~"provision-dev"}) or on(__name__) sum by(__name__,type)(metric_b{job=~"provision-dev"})

您可以级联aggregation operator

sum by (type) (sum by (__name__,type)(metric_a{job=~"provision-dev"}) or on(__name__) sum by(__name__,type)(metric_b{job=~"provision-dev"}))

最后,您还可以将所有内容压缩为:

sum by (type) ({__name__=~"metric_a|metric_b",job=~"provision-dev"})