代码之家  ›  专栏  ›  技术社区  ›  naimdjon

普罗米修斯:按度量名称对度量进行分组

  •  25
  • naimdjon  · 技术社区  · 6 年前

    是否有办法按度量名称对应用程序的所有度量进行分组?查询中列出应用程序(即。 {app="bar"} ):

    ch_qos_logback_core_Appender_all_total{affiliation="foo",app="bar", instance="baz-3-dasp",job="kubernetes-service-endpoints",kubernetes_name="bar",kubernetes_namespace="foobarz",kubernetes_node="mypaas-dev-node3.fud.com",updatedBy="janedoe"}   44
    ch_qos_logback_core_Appender_debug_total{affiliation="foo",app="bar", instance="baz-3-dasp",job="kubernetes-service-endpoints",kubernetes_name="bar",kubernetes_namespace="foobarz",kubernetes_node="mypaas-dev-node23.fud.com",updatedBy="deppba"} 32
    

    我也尝试在度量名称中使用通配符,普罗米修斯对此表示不满。查看指标,我可以看到其中一些指标具有动态名称,很可能是由dropwizard指标提供的。我最终想要的是所有可用指标的列表。

    3 回复  |  直到 6 年前
        1
  •  41
  •   naimdjon    2 年前

    以下查询列出了所有可用指标:

    sum by(__name__)({app="bar"})
    

    哪里 bar 是应用程序名称,您可以在问题中发布的日志条目中看到。

        2
  •  21
  •   brian-brazil    6 年前

    {__name__=~".+"} 将返回所有非陈旧的时间序列,但这是一个昂贵的查询,通常应避免。

        3
  •  18
  •   Hearen    6 年前

    直接使用

    {__name__=~".+"}
    

    将返回 success 但没有别的(太大)。

    {__name__=~".*"}
    

    while会给我们 error 相反,正如预期的那样:

    parse error at char 17: vector selector must contain at least one non-empty matcher
    

    所以我的技巧是结合brian brazil和naimdjon的解决方案

    sum({__name__=~"c.*|e.*|n.*|p.*|r.*|k.*|z.*|r.*"}) by (__name__)
    
    1. 因为我知道可能 prefixes ,所以我将它们添加到查询中,以确保它至少会返回一些内容;此外,

    2. 为了避免无用的田地被归还(普罗米修斯的压力),我只需要 __name__ 以这种方式 by(__name__) ,按预期返回我需要的所有度量值的名称。

    实际上有一个 API 要获取所有可用的度量名称,请执行以下操作:

    /api/v1/label/__name__/values