Search code examples
regexmatchconfigprometheusfederation

Prometheus Federation match params do not work


I have been trying to achive federation in my Prometheus setup. While doing this, I want to exclude some metrics to be scraped by my scraper Prometheus.

Here is my federation config:

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'

As it can be seen from the config, I want to exclude any metric that has kubernetes-nodes job label, and retrieve the rest of the metrics. However, when I deploy my config, no metric is scraped.

Is it a bug in Prometheus or I simply misunderstood how the match params work?


Solution

  • If you really need to do this you need a primary vector selector which includes results.

    Otherwise you'll get the error vector selector must contain at least one non-empty matcher.

    So for example with these matchers you'll get what you are trying to achieve:

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