【问题标题】:How can I group labels in a Prometheus query?如何在 Prometheus 查询中对标签进行分组?
【发布时间】:2017-12-22 15:01:12
【问题描述】:

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

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

是否可以进行查询甚至是 label_replace 将“杂项”组组合在一起?

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

【问题讨论】:

    标签: prometheus promql


    【解决方案1】:

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

    sum by (new_group) (
      label_replace(
        label_replace(my_metric, "new_group", "$1", "group", ".+"),
        "new_group", "misc", "group", "misc group.+"
      )
    )
    

    内部 label_replace 将 group 中的所有值复制到 new_group 中,外部将匹配“misc group.+”的值覆盖为“misc”,然后我们通过“new_group”标签求和。使用新标签的原因是,如果我们只是覆盖“组”标签,则该系列将不再是唯一的,并且总和将不起作用。

    【讨论】:

    • 难道只能通过以下方式获得相同的结果:sum by (misc) ( label_replace(my_metrics, "misc", "group", "misc group.+") )
    • 要根据正则表达式对标签进行分组,请参阅这篇文章中接受的答案:stackoverflow.com/questions/66669688/…
    【解决方案2】:

    更简单

    sum by (group) (my_metric)
    

    【讨论】:

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

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

    my_metric{group=~"misc group.+"}
    

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

    【讨论】:

      猜你喜欢
      • 2021-07-24
      • 2022-08-19
      • 1970-01-01
      • 2021-12-30
      • 2018-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多