如何从按特定标签过滤的 Prometheus 服务器获取所有指标名称

How to get all metric names from Prometheus server filtered by a particular label

我们想从 Prometheus 服务器获取所有按特定标签过滤的指标名称。

第 1 步:使用以下查询获取所有指标名称,所有指标名称查询成功。

curl -g 'http://localhost:9090/api/v1/label/__name__/values

第 2 步:使用以下查询获取按标签过滤的所有指标名称,但查询仍返回所有指标名称。

curl -g 'http://localhost:9090/api/v1/label/__name__/values?match[]={job!="prometheus"}'

有人可以帮我通过 http 按标签过滤所有指标名称吗?谢谢

curl -G -XGET http://localhost:9090/api/v1/label/__name__/values --data-urlencode 'match[]={__name__=~".+", job!="prometheus"}'

@anemyte,仍然 returns 所有结果。你能检查查询吗

虽然乍一看这很简单,但实际上是一件非常棘手的事情。

  1. match[] 参数及其值必须进行编码。 curl 可以用 --data-urlencode 参数做到这一点。

  2. 编码的 match[] 参数必须出现在 URL 而不是 application/x-www-form-urlencoded header 中(其中 curl 将默认编码值)。因此,-G(大写!)密钥也是必需的。

  3. {job!="prometheus"} 不是有效查询。它给出以下错误:

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

    可以用这个低效的正则表达式选择器来克服:{__name__=~".+", job!="prometheus"}。如果可能,最好将其替换为另一个选择器(例如 {job="foo"})。

放在一起:

curl -XGET -G 'http://localhost:9090/api/v1/label/__name__/values' \
  --data-urlencode 'match[]={__name__=~".+", job!="prometheus"}' 

自从 Prometheus 发布 v2.24.0.

后,就可以使用上例中的选择器了