普罗米修斯/ PromQL减去两个指标

alk*_*ows 9 prometheus

我有两个不同实例的衡量标准"metric_awesome".我想要做的是从实例2中减去实例一,就像这样

metric_awesome{instance="one"} - metric_awesome{instance="two"}
Run Code Online (Sandbox Code Playgroud)

不幸的是,结果集是空的.有没有人经历过这个?

bri*_*zil 19

这里的问题是标签不匹配.你想要的是:

metric_awesome{instance="one"} - ignoring(instance) metric_awesome{instance="two"}
Run Code Online (Sandbox Code Playgroud)


val*_*ala 7

默认情况下,Prometheusa - b按以下方式执行:

  1. 它选择所有时间序列进行a查询。
  2. 它选择所有时间序列进行b查询。
  3. 它搜索时间序列对a并b获得具有相同标签集的结果。
  4. 它计算找到的具有相同标签集的时间序列对之间的差异。

请参阅这些文档以了解更多详细信息。

返回空结果,因为所有匹配的时间序列都包含标签metric_awesome{instance="one"} - metric_awesome{instance="two"}左侧,而所有匹配的时间序列都包含标签右侧。这里不存在具有相同标签集的时间序列对。-instance="one"-instance="two"

on()可以使用、ignoring()和group_left()修饰符更改此行为group_right()。

例如,指示在搜索具有相同标签的时间序列对时metric_awesome{instance="one"} - ignoring(instance) metric_awesom{instance="two"}忽略标签。instance当一侧的多个时间序列与另一侧的-单个时间序列匹配时,这可能会导致多对一匹配。默认情况下,Prometheus 在这种情况下返回错误。group_left()这可以通过向运算符添加或group_right()修饰符来修复-:

metric_awesome{instance="one"}
  - ignoring(instance) group_left()
metric_awesome{instance="two"}
Run Code Online (Sandbox Code Playgroud)

或者

metric_awesome{instance="one"}
  - ignoring(instance) group_right()
metric_awesome{instance="two"}
Run Code Online (Sandbox Code Playgroud)

有关这些修饰符的更多详细信息,请参阅这些文档。