1

我们希望从 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,仍然返回所有结果。你能检查一下查询吗

4

1 回答 1

0

虽然这乍一看似乎很简单,但事实证明这是一件非常棘手的事情。

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

  2. 编码match[]参数必须出现在 URL 中而不是application/x-www-form-urlencoded标头中(curl默认情况下放置编码值的位置)。因此,-G(大写的!)键也是必需的。

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

    解析错误:向量选择器必须包含至少一个非空匹配器

    可以使用这种低效的正则表达式选择器来克服:{__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

于 2021-12-10T10:56:38.473 回答