Prometheus:按指标名称对指标进行分组

时间:2018-03-06 16:33:28

标签: prometheus

有没有办法按指标名称对应用的所有指标进行分组?查询中列出应用所有指标的部分(即{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

我还尝试在度量标准名称中使用通配符,prometheus正在抱怨这一点。查看指标,我可以看到其中一些具有动态名称,最有可能通过dropwizard指标提供。我最终想要的是所有可用指标的列表。

3 个答案:

答案 0 :(得分:8)

我从@ brian-brazil的回答中得到了一个暗示,并找到了解决方案。以下查询列出了所有可用的指标:

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

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

答案 1 :(得分:5)

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

答案 2 :(得分:1)

直接使用

{__name__=~".+"}

将返回success,但没有其他值(太大)。

{__name__=~".*"}

同时按预期将给我们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. 为避免返回无用的字段(强调Prometheus),我将只需要__name__来使用by(__name__),我需要按预期返回的所有指标名称。

实际上,有一个API可以将所有可用的度量标准名称获取为:

/api/v1/label/__name__/values