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

nai*_*jon 14 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
Run Code Online (Sandbox Code Playgroud)

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

nai*_*jon 11

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

sum by(__name__)({app="bar"})
Run Code Online (Sandbox Code Playgroud)

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


bri*_*zil 9

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


Hea*_*ren 8

直接使用

{__name__=~".+"}
Run Code Online (Sandbox Code Playgroud)

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

要么

{__name__=~".*"}
Run Code Online (Sandbox Code Playgroud)

而将会给我们带来error预期的效果:

parse error at char 17: vector selector must contain at least one non-empty matcher
Run Code Online (Sandbox Code Playgroud)

所以我的技巧是使用以下方法将brian-brazil和naimdjon的解决方案结合起来

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

  2. 为了避免返回无用的字段(使Prometheus感到压力),我将仅以__name__这种方式要求by(__name__)按需返回我需要返回的所有度量标准名称。

实际上,可以通过以下API方式获取所有可用的度量标准名称:

/api/v1/label/__name__/values
Run Code Online (Sandbox Code Playgroud)

  • 我会将最后一部分放在“粗体”中,放在您的答案顶部。 (2认同)