如何在Prometheus查询中对标签进行分组?

che*_*tts 14 prometheus promql

如果我有一个包含以下标签的指标:

my_metric{group="group a"}  100
my_metric{group="group b"}  100
my_metric{group="group c"}  100
my_metric{group="misc group a"}  1
my_metric{group="misc group b"}  2
my_metric{group="misc group c"}  1
my_metric{group="misc group d"}  1
Run Code Online (Sandbox Code Playgroud)

有可能进行查询,甚至label_replace将"misc"组合在一起吗?

(我意识到公制基数需要改进,我已经更新了应用程序来修复它.但是如果我想通过稍后的查询来修复指标,我就会留下这个问题)

tom*_*kie 21

是的,您可以使用标签替换将所有misc组合在一起:

sum by (new_group) (
  label_replace(
    label_replace(my_metric, "new_group", "$1", "group", ".+"),
    "new_group", "misc", "group", "misc group.+"
  )
)
Run Code Online (Sandbox Code Playgroud)

内部label_replace将所有值从group复制到new_group,外部覆盖那些匹配"misc group.+"和"misc"的值,然后我们用"new_group"标签求和.使用新标签的原因是,如果我们只是覆盖"组"标签,系列将不再是唯一的,并且总和将不起作用.

  • 难道只通过执行以下操作就可以获得相同的结果:`sum by (misc) ( label_replace(my_metrics, "misc", "group", "misc group.+") )` (2认同)

uam*_*ger 15

更容易

sum by (group) (my_metric)
Run Code Online (Sandbox Code Playgroud)

  • 这是否解决了对“misc”标签进行分组的原始问题的第二部分? (3认同)
  • 对于此查询,如果我编写一个类似于“sum by (group) (my_metric) > 0”的警报,如何访问“group”名称?像“{{group}}”之类的东西? (3认同)
  • 如果您需要“sum(my_metric{group=~"group.*"}) by (group)”,您也可以将它们组合起来 (2认同)

Oli*_*ver 5

您可以使用正则表达式查询:

my_metric{group=~"misc group.+"}
Run Code Online (Sandbox Code Playgroud)

这将为您group提供以“ misc group”开头的所有内容。

  • 这将匹配所有misc group.* 但不匹配group by。(例如,与上述正则表达式匹配的所有独立指标将显示为单独的指标,而不是全部显示为一个指标) (4认同)