Prometheus Federation 匹配参数不起作用

Prometheus Federation match params do not work

我一直在尝试在我的 Prometheus 设置中实现联合。在执行此操作时,我想排除一些指标以供我的抓取工具 Prometheus 抓取。

这是我的联合配置:

global:
  scrape_interval: 15s

scrape_configs:
  - job_name: 'xxxxxxxx'
    scrape_interval: 15s
    honor_labels: true
    metrics_path: '/federate'
    params:
      'match[]':
        - '{job!="kubernetes-nodes"}'
    static_configs:
      - targets:
        - 'my-metrics-source'

从配置中可以看出,我想排除任何具有 kubernetes-nodes job 标签的指标,并检索其余指标。但是,当我部署我的配置时,没有指标被抓取。

这是 Prometheus 中的错误还是我只是误解了匹配参数的工作原理?

作为一项安全措施,以避免您不小心编写了 returns Prometheus 中所有时间序列的即时向量,选择器必须至少包含一个与空字符串不匹配的匹配器。你的选择器没有这样的匹配器(job!="kubernetes-nodes" 匹配一个空的 job 标签),所以这会给你一个错误。

您可以添加一个选择器,例如 __name__=~".+",但在更高级别,这是对联合的滥用,因为它并不意味着拉取整个 Prometheus 服务器。参见 https://www.robustperception.io/federation-what-is-it-good-for/

如果您真的需要这样做,您需要一个包含结果的主向量选择器。

否则你会得到错误vector selector must contain at least one non-empty matcher

因此,例如使用这些匹配器,您将获得您想要实现的目标:

curl -G --data-urlencode 'match[]={job=~".+", job!="kubernetes-nodes"}' http://your-url.example.com/federate